summaryrefslogtreecommitdiff
path: root/gnu/usr.bin/perl
diff options
context:
space:
mode:
authorTodd C. Miller <millert@cvs.openbsd.org>2006-03-28 18:50:00 +0000
committerTodd C. Miller <millert@cvs.openbsd.org>2006-03-28 18:50:00 +0000
commit21632774c37bb8874de17fa6ad931c73d19518cd (patch)
treecd08ee24e9b82c03c8e191fa74034609795df40f /gnu/usr.bin/perl
parentf5f84f19259933187f80faf71c3c9c482a4867e6 (diff)
perl 5.8.8 import
Diffstat (limited to 'gnu/usr.bin/perl')
-rw-r--r--gnu/usr.bin/perl/Changes5.8.62018
-rw-r--r--gnu/usr.bin/perl/Changes5.8.73842
-rw-r--r--gnu/usr.bin/perl/Cross/Makefile.SH.patch104
-rw-r--r--gnu/usr.bin/perl/Cross/config.sh-arm-linux55
-rw-r--r--gnu/usr.bin/perl/META.yml33
-rw-r--r--gnu/usr.bin/perl/NetWare/Makefile4
-rw-r--r--gnu/usr.bin/perl/NetWare/config.wc68
-rw-r--r--gnu/usr.bin/perl/NetWare/config_H.wc17
-rw-r--r--gnu/usr.bin/perl/NetWare/nw5.c10
-rw-r--r--gnu/usr.bin/perl/Porting/Maintainers.pm13
-rw-r--r--gnu/usr.bin/perl/Porting/check83.pl41
-rwxr-xr-xgnu/usr.bin/perl/Porting/checkAUTHORS.pl162
-rwxr-xr-xgnu/usr.bin/perl/Porting/checkcfgvar.pl101
-rw-r--r--gnu/usr.bin/perl/Porting/config.sh59
-rwxr-xr-xgnu/usr.bin/perl/Porting/config_h.pl60
-rw-r--r--gnu/usr.bin/perl/Porting/corecpan.pl2
-rw-r--r--gnu/usr.bin/perl/Porting/genlog1
-rw-r--r--gnu/usr.bin/perl/README.aix6
-rw-r--r--gnu/usr.bin/perl/README.beos124
-rw-r--r--gnu/usr.bin/perl/README.cygwin56
-rw-r--r--gnu/usr.bin/perl/README.hpux75
-rw-r--r--gnu/usr.bin/perl/README.hurd12
-rw-r--r--gnu/usr.bin/perl/README.linux39
-rw-r--r--gnu/usr.bin/perl/README.macosx111
-rw-r--r--gnu/usr.bin/perl/README.mpeix55
-rw-r--r--gnu/usr.bin/perl/README.openbsd30
-rw-r--r--gnu/usr.bin/perl/README.os3906
-rw-r--r--gnu/usr.bin/perl/README.vmesa6
-rw-r--r--gnu/usr.bin/perl/beos/beos.c47
-rw-r--r--gnu/usr.bin/perl/beos/beosish.h23
-rw-r--r--gnu/usr.bin/perl/configure.com589
-rw-r--r--gnu/usr.bin/perl/cygwin/cygwin.c46
-rw-r--r--gnu/usr.bin/perl/djgpp/djgpp.c2
-rw-r--r--gnu/usr.bin/perl/embed.fnc2291
-rw-r--r--gnu/usr.bin/perl/embedvar.h17
-rw-r--r--gnu/usr.bin/perl/epoc/config.sh30
-rw-r--r--gnu/usr.bin/perl/epoc/createpkg.pl2
-rw-r--r--gnu/usr.bin/perl/ext/B/B.pm68
-rw-r--r--gnu/usr.bin/perl/ext/B/B.xs100
-rw-r--r--gnu/usr.bin/perl/ext/B/B/Terse.pm8
-rw-r--r--gnu/usr.bin/perl/ext/B/Makefile.PL2
-rw-r--r--gnu/usr.bin/perl/ext/B/t/OptreeCheck.pm945
-rw-r--r--gnu/usr.bin/perl/ext/B/t/b.t14
-rwxr-xr-xgnu/usr.bin/perl/ext/B/t/concise-xs.t284
-rw-r--r--gnu/usr.bin/perl/ext/B/t/concise.t117
-rwxr-xr-xgnu/usr.bin/perl/ext/B/t/f_map.t27
-rwxr-xr-xgnu/usr.bin/perl/ext/B/t/f_sort.t36
-rw-r--r--gnu/usr.bin/perl/ext/B/t/o.t9
-rwxr-xr-xgnu/usr.bin/perl/ext/B/t/optree_check.t76
-rwxr-xr-xgnu/usr.bin/perl/ext/B/t/optree_concise.t58
-rwxr-xr-xgnu/usr.bin/perl/ext/B/t/optree_samples.t17
-rwxr-xr-xgnu/usr.bin/perl/ext/B/t/optree_sort.t27
-rwxr-xr-xgnu/usr.bin/perl/ext/B/t/optree_specials.t254
-rwxr-xr-xgnu/usr.bin/perl/ext/B/t/optree_varinit.t46
-rw-r--r--gnu/usr.bin/perl/ext/B/t/showlex.t16
-rw-r--r--gnu/usr.bin/perl/ext/B/t/terse.t12
-rw-r--r--gnu/usr.bin/perl/ext/B/t/xref.t8
-rw-r--r--gnu/usr.bin/perl/ext/Cwd/ppport.h4896
-rwxr-xr-xgnu/usr.bin/perl/ext/Data/Dumper/t/bugs.t35
-rwxr-xr-xgnu/usr.bin/perl/ext/Data/Dumper/t/freezer.t97
-rw-r--r--gnu/usr.bin/perl/ext/Devel/PPPort/parts/base/50080061
-rw-r--r--gnu/usr.bin/perl/ext/Devel/PPPort/parts/inc/exception74
-rw-r--r--gnu/usr.bin/perl/ext/Devel/PPPort/parts/todo/50080061
-rwxr-xr-xgnu/usr.bin/perl/ext/Devel/PPPort/t/exception.t54
-rw-r--r--gnu/usr.bin/perl/ext/DynaLoader/dl_dyld.xs12
-rw-r--r--gnu/usr.bin/perl/ext/DynaLoader/hints/gnukfreebsd.pl1
-rw-r--r--gnu/usr.bin/perl/ext/DynaLoader/hints/gnuknetbsd.pl1
-rw-r--r--gnu/usr.bin/perl/ext/Encode/lib/Encode/MIME/Header/ISO_2022_JP.pm127
-rwxr-xr-xgnu/usr.bin/perl/ext/Encode/t/mime_header_iso2022jp.t40
-rwxr-xr-xgnu/usr.bin/perl/ext/Encode/t/utf8strict.t78
-rw-r--r--gnu/usr.bin/perl/ext/Errno/Errno_pm.PL42
-rw-r--r--gnu/usr.bin/perl/ext/GDBM_File/GDBM_File.xs6
-rwxr-xr-xgnu/usr.bin/perl/ext/IO/t/io_file.t55
-rw-r--r--gnu/usr.bin/perl/ext/List/Util/multicall.h165
-rwxr-xr-xgnu/usr.bin/perl/ext/List/Util/t/00version.t22
-rwxr-xr-xgnu/usr.bin/perl/ext/List/Util/t/p_blessed.t7
-rwxr-xr-xgnu/usr.bin/perl/ext/List/Util/t/p_first.t8
-rwxr-xr-xgnu/usr.bin/perl/ext/List/Util/t/p_lln.t7
-rwxr-xr-xgnu/usr.bin/perl/ext/List/Util/t/p_max.t7
-rwxr-xr-xgnu/usr.bin/perl/ext/List/Util/t/p_maxstr.t7
-rwxr-xr-xgnu/usr.bin/perl/ext/List/Util/t/p_min.t7
-rwxr-xr-xgnu/usr.bin/perl/ext/List/Util/t/p_minstr.t7
-rwxr-xr-xgnu/usr.bin/perl/ext/List/Util/t/p_openhan.t7
-rwxr-xr-xgnu/usr.bin/perl/ext/List/Util/t/p_readonly.t7
-rwxr-xr-xgnu/usr.bin/perl/ext/List/Util/t/p_reduce.t8
-rwxr-xr-xgnu/usr.bin/perl/ext/List/Util/t/p_refaddr.t7
-rwxr-xr-xgnu/usr.bin/perl/ext/List/Util/t/p_reftype.t7
-rwxr-xr-xgnu/usr.bin/perl/ext/List/Util/t/p_shuffle.t7
-rwxr-xr-xgnu/usr.bin/perl/ext/List/Util/t/p_sum.t7
-rwxr-xr-xgnu/usr.bin/perl/ext/List/Util/t/p_tainted.t7
-rw-r--r--gnu/usr.bin/perl/ext/MIME/Base64/README27
-rw-r--r--gnu/usr.bin/perl/ext/NDBM_File/hints/gnukfreebsd.pl1
-rw-r--r--gnu/usr.bin/perl/ext/NDBM_File/hints/gnuknetbsd.pl1
-rw-r--r--gnu/usr.bin/perl/ext/ODBM_File/hints/gnukfreebsd.pl1
-rw-r--r--gnu/usr.bin/perl/ext/ODBM_File/hints/gnuknetbsd.pl1
-rw-r--r--gnu/usr.bin/perl/ext/POSIX/Makefile.PL4
-rw-r--r--gnu/usr.bin/perl/ext/POSIX/hints/gnukfreebsd.pl1
-rw-r--r--gnu/usr.bin/perl/ext/POSIX/hints/gnuknetbsd.pl1
-rw-r--r--gnu/usr.bin/perl/ext/SDBM_File/SDBM_File.xs2
-rw-r--r--gnu/usr.bin/perl/ext/Storable/hints/gnukfreebsd.pl1
-rw-r--r--gnu/usr.bin/perl/ext/Storable/hints/gnuknetbsd.pl1
-rw-r--r--gnu/usr.bin/perl/ext/Storable/t/HAS_ATTACH.pm10
-rwxr-xr-xgnu/usr.bin/perl/ext/Storable/t/attach_errors.t269
-rwxr-xr-xgnu/usr.bin/perl/ext/Storable/t/attach_singleton.t89
-rwxr-xr-xgnu/usr.bin/perl/ext/Storable/t/circular_hook.t91
-rwxr-xr-xgnu/usr.bin/perl/ext/Storable/t/sig_die.t44
-rw-r--r--gnu/usr.bin/perl/ext/Storable/t/testlib.pl38
-rwxr-xr-xgnu/usr.bin/perl/ext/Storable/t/weak.t147
-rw-r--r--gnu/usr.bin/perl/ext/Sys/Syslog/Changes50
-rw-r--r--gnu/usr.bin/perl/ext/Sys/Syslog/README70
-rw-r--r--gnu/usr.bin/perl/ext/Sys/Syslog/fallback/const-c.inc559
-rw-r--r--gnu/usr.bin/perl/ext/Sys/Syslog/fallback/const-xs.inc87
-rwxr-xr-xgnu/usr.bin/perl/ext/Sys/Syslog/t/00-load.t9
-rwxr-xr-xgnu/usr.bin/perl/ext/Sys/Syslog/t/constants.t41
-rw-r--r--gnu/usr.bin/perl/ext/re/re.pm4
-rw-r--r--gnu/usr.bin/perl/ext/threads/hints/linux.pl3
-rw-r--r--gnu/usr.bin/perl/ext/threads/shared/hints/linux.pl3
-rwxr-xr-xgnu/usr.bin/perl/ext/threads/shared/t/blessed.t134
-rw-r--r--gnu/usr.bin/perl/genpacksizetables.pl136
-rw-r--r--gnu/usr.bin/perl/globals.c10
-rw-r--r--gnu/usr.bin/perl/hints/darwin.sh73
-rw-r--r--gnu/usr.bin/perl/hints/gnu.sh3
-rw-r--r--gnu/usr.bin/perl/hints/gnukfreebsd.sh10
-rw-r--r--gnu/usr.bin/perl/hints/gnuknetbsd.sh10
-rw-r--r--gnu/usr.bin/perl/hints/interix.sh27
-rw-r--r--gnu/usr.bin/perl/hints/vmesa.sh8
-rw-r--r--gnu/usr.bin/perl/intrpvar.h16
-rw-r--r--gnu/usr.bin/perl/iperlsys.h14
-rw-r--r--gnu/usr.bin/perl/lib/Benchmark.t7
-rw-r--r--gnu/usr.bin/perl/lib/CGI/Changes1216
-rwxr-xr-xgnu/usr.bin/perl/lib/CGI/t/can.t12
-rwxr-xr-xgnu/usr.bin/perl/lib/CGI/t/no_tabindex.t126
-rw-r--r--gnu/usr.bin/perl/lib/Carp.t20
-rw-r--r--gnu/usr.bin/perl/lib/Carp/Heavy.pm12
-rw-r--r--gnu/usr.bin/perl/lib/Class/ISA/ChangeLog24
-rwxr-xr-xgnu/usr.bin/perl/lib/Class/ISA/t/00_about_verbose.t89
-rwxr-xr-xgnu/usr.bin/perl/lib/Class/ISA/t/01_old_junk.t28
-rw-r--r--gnu/usr.bin/perl/lib/Config.t102
-rw-r--r--gnu/usr.bin/perl/lib/DB.pm5
-rw-r--r--gnu/usr.bin/perl/lib/Digest/Changes142
-rw-r--r--gnu/usr.bin/perl/lib/Digest/file.pm85
-rwxr-xr-xgnu/usr.bin/perl/lib/Digest/t/file.t46
-rw-r--r--gnu/usr.bin/perl/lib/Dumpvalue.pm4
-rw-r--r--gnu/usr.bin/perl/lib/ExtUtils/Constant/Base.pm973
-rw-r--r--gnu/usr.bin/perl/lib/ExtUtils/Constant/Utils.pm123
-rw-r--r--gnu/usr.bin/perl/lib/ExtUtils/Constant/XS.pm252
-rw-r--r--gnu/usr.bin/perl/lib/ExtUtils/MM_AIX.pm80
-rw-r--r--gnu/usr.bin/perl/lib/ExtUtils/MM_QNX.pm58
-rw-r--r--gnu/usr.bin/perl/lib/ExtUtils/MM_VOS.pm51
-rw-r--r--gnu/usr.bin/perl/lib/ExtUtils/MakeMaker/Config.pm39
-rw-r--r--gnu/usr.bin/perl/lib/ExtUtils/t/Embed.t20
-rwxr-xr-xgnu/usr.bin/perl/lib/ExtUtils/t/FIRST_MAKEFILE.t40
-rwxr-xr-xgnu/usr.bin/perl/lib/ExtUtils/t/PL_FILES.t42
-rwxr-xr-xgnu/usr.bin/perl/lib/ExtUtils/t/config.t23
-rwxr-xr-xgnu/usr.bin/perl/lib/ExtUtils/t/dir_target.t18
-rwxr-xr-xgnu/usr.bin/perl/lib/ExtUtils/t/installbase.t81
-rwxr-xr-xgnu/usr.bin/perl/lib/ExtUtils/t/parse_version.t34
-rwxr-xr-xgnu/usr.bin/perl/lib/ExtUtils/t/xs.t24
-rw-r--r--gnu/usr.bin/perl/lib/File/Basename.t268
-rw-r--r--gnu/usr.bin/perl/lib/File/Copy.t235
-rw-r--r--gnu/usr.bin/perl/lib/File/Find/t/find.t15
-rwxr-xr-xgnu/usr.bin/perl/lib/FileCache/t/06export.t62
-rwxr-xr-xgnu/usr.bin/perl/lib/FileCache/t/07noimport.t26
-rwxr-xr-xgnu/usr.bin/perl/lib/Math/BigInt/t/lib_load.t45
-rw-r--r--gnu/usr.bin/perl/lib/PerlIO.pm9
-rw-r--r--gnu/usr.bin/perl/lib/Pod/t/InputObjects.t2
-rwxr-xr-xgnu/usr.bin/perl/lib/Pod/t/contains_pod.t25
-rw-r--r--gnu/usr.bin/perl/lib/Pod/t/htmlescp.t2
-rw-r--r--gnu/usr.bin/perl/lib/Pod/t/htmllink.pod107
-rwxr-xr-xgnu/usr.bin/perl/lib/Pod/t/htmllink.t129
-rw-r--r--gnu/usr.bin/perl/lib/Pod/t/htmlview.t81
-rw-r--r--gnu/usr.bin/perl/lib/Test/Builder/Module.pm182
-rw-r--r--gnu/usr.bin/perl/lib/Test/Builder/Tester.pm640
-rw-r--r--gnu/usr.bin/perl/lib/Test/Builder/Tester/Color.pm50
-rw-r--r--gnu/usr.bin/perl/lib/Test/Harness/Point.pm152
-rw-r--r--gnu/usr.bin/perl/lib/Test/Harness/TAP.pod366
-rwxr-xr-xgnu/usr.bin/perl/lib/Test/Harness/t/from_line.t64
-rwxr-xr-xgnu/usr.bin/perl/lib/Test/Harness/t/harness.t22
-rwxr-xr-xgnu/usr.bin/perl/lib/Test/Harness/t/point-parse.t106
-rwxr-xr-xgnu/usr.bin/perl/lib/Test/Harness/t/point.t58
-rwxr-xr-xgnu/usr.bin/perl/lib/Test/Harness/t/prove-globbing.t31
-rwxr-xr-xgnu/usr.bin/perl/lib/Test/Harness/t/version.t23
-rw-r--r--gnu/usr.bin/perl/lib/Test/Simple/TODO20
-rwxr-xr-xgnu/usr.bin/perl/lib/Test/Simple/t/00test_harness_check.t26
-rwxr-xr-xgnu/usr.bin/perl/lib/Test/Simple/t/bail_out.t49
-rwxr-xr-xgnu/usr.bin/perl/lib/Test/Simple/t/circular_data.t71
-rwxr-xr-xgnu/usr.bin/perl/lib/Test/Simple/t/create.t45
-rwxr-xr-xgnu/usr.bin/perl/lib/Test/Simple/t/eq_set.t34
-rwxr-xr-xgnu/usr.bin/perl/lib/Test/Simple/t/extra_one.t52
-rwxr-xr-xgnu/usr.bin/perl/lib/Test/Simple/t/fail_one.t62
-rwxr-xr-xgnu/usr.bin/perl/lib/Test/Simple/t/harness_active.t88
-rwxr-xr-xgnu/usr.bin/perl/lib/Test/Simple/t/is_deeply_fail.t373
-rwxr-xr-xgnu/usr.bin/perl/lib/Test/Simple/t/is_fh.t29
-rwxr-xr-xgnu/usr.bin/perl/lib/Test/Simple/t/no_diag.t8
-rwxr-xr-xgnu/usr.bin/perl/lib/Test/Simple/t/overload.t68
-rwxr-xr-xgnu/usr.bin/perl/lib/Test/Simple/t/overload_threads.t69
-rwxr-xr-xgnu/usr.bin/perl/lib/Test/Simple/t/plan_bad.t64
-rwxr-xr-xgnu/usr.bin/perl/lib/Test/Simple/t/plan_shouldnt_import.t16
-rwxr-xr-xgnu/usr.bin/perl/lib/Test/Simple/t/require_ok.t29
-rwxr-xr-xgnu/usr.bin/perl/lib/Test/Simple/t/reset.t84
-rwxr-xr-xgnu/usr.bin/perl/lib/Test/Simple/t/sort_bug.t64
-rwxr-xr-xgnu/usr.bin/perl/lib/Test/Simple/t/tbt_01basic.t62
-rwxr-xr-xgnu/usr.bin/perl/lib/Test/Simple/t/tbt_02fhrestore.t65
-rwxr-xr-xgnu/usr.bin/perl/lib/Test/Simple/t/tbt_03die.t19
-rwxr-xr-xgnu/usr.bin/perl/lib/Test/Simple/t/tbt_04line_num.t15
-rwxr-xr-xgnu/usr.bin/perl/lib/Test/Simple/t/tbt_05faildiag.t51
-rwxr-xr-xgnu/usr.bin/perl/lib/Test/Simple/t/tbt_06errormess.t127
-rwxr-xr-xgnu/usr.bin/perl/lib/Test/Simple/t/tbt_07args.t222
-rwxr-xr-xgnu/usr.bin/perl/lib/Test/Simple/t/thread_taint.t5
-rwxr-xr-xgnu/usr.bin/perl/lib/Text/ParseWords/taint.t23
-rwxr-xr-xgnu/usr.bin/perl/lib/Unicode/Collate/t/cjkrange.t94
-rwxr-xr-xgnu/usr.bin/perl/lib/Unicode/Collate/t/ignor.t158
-rwxr-xr-xgnu/usr.bin/perl/lib/Unicode/Collate/t/override.t187
-rw-r--r--gnu/usr.bin/perl/lib/Unicode/UCD.pm74
-rw-r--r--gnu/usr.bin/perl/lib/Unicode/UCD.t22
-rwxr-xr-xgnu/usr.bin/perl/lib/bignum/t/ratopt_a.t34
-rw-r--r--gnu/usr.bin/perl/lib/bytes.pm6
-rw-r--r--gnu/usr.bin/perl/lib/bytes.t8
-rw-r--r--gnu/usr.bin/perl/lib/charnames.pm37
-rw-r--r--gnu/usr.bin/perl/lib/h2xs.t3
-rw-r--r--gnu/usr.bin/perl/lib/locale.t9
-rw-r--r--gnu/usr.bin/perl/lib/open.pm15
-rw-r--r--gnu/usr.bin/perl/lib/overload.t25
-rw-r--r--gnu/usr.bin/perl/lib/shellwords.pl45
-rw-r--r--gnu/usr.bin/perl/lib/unicore/ArabicShaping.txt105
-rw-r--r--gnu/usr.bin/perl/lib/unicore/BidiMirroring.txt39
-rw-r--r--gnu/usr.bin/perl/lib/unicore/Blocks.txt41
-rw-r--r--gnu/usr.bin/perl/lib/unicore/CaseFolding.txt148
-rw-r--r--gnu/usr.bin/perl/lib/unicore/CompositionExclusions.txt11
-rw-r--r--gnu/usr.bin/perl/lib/unicore/EastAsianWidth.txt1274
-rw-r--r--gnu/usr.bin/perl/lib/unicore/HangulSyllableType.txt6
-rw-r--r--gnu/usr.bin/perl/lib/unicore/Jamo.txt4
-rw-r--r--gnu/usr.bin/perl/lib/unicore/LineBreak.txt2664
-rw-r--r--gnu/usr.bin/perl/lib/unicore/NamedSequences.txt95
-rw-r--r--gnu/usr.bin/perl/lib/unicore/NamesList.txt2122
-rw-r--r--gnu/usr.bin/perl/lib/unicore/NormalizationCorrections.txt7
-rw-r--r--gnu/usr.bin/perl/lib/unicore/PropList.txt338
-rw-r--r--gnu/usr.bin/perl/lib/unicore/PropValueAliases.txt85
-rw-r--r--gnu/usr.bin/perl/lib/unicore/PropertyAliases.txt16
-rw-r--r--gnu/usr.bin/perl/lib/unicore/README.perl23
-rw-r--r--gnu/usr.bin/perl/lib/unicore/ReadMe.txt29
-rw-r--r--gnu/usr.bin/perl/lib/unicore/Scripts.txt278
-rw-r--r--gnu/usr.bin/perl/lib/unicore/SpecialCasing.txt30
-rw-r--r--gnu/usr.bin/perl/lib/unicore/StandardizedVariants.txt16
-rw-r--r--gnu/usr.bin/perl/lib/unicore/UnicodeData.txt1383
-rw-r--r--gnu/usr.bin/perl/lib/unicore/mktables219
-rw-r--r--gnu/usr.bin/perl/lib/unicore/mktables.lst505
-rw-r--r--gnu/usr.bin/perl/lib/unicore/version2
-rw-r--r--gnu/usr.bin/perl/lib/utf8.pm7
-rw-r--r--gnu/usr.bin/perl/lib/vmsish.pm6
-rw-r--r--gnu/usr.bin/perl/lib/warnings.pm6
-rw-r--r--gnu/usr.bin/perl/lib/warnings.t46
-rw-r--r--gnu/usr.bin/perl/lib/warnings/register.pm38
-rw-r--r--gnu/usr.bin/perl/locale.c69
-rw-r--r--gnu/usr.bin/perl/mpeix/mpeix.c502
-rw-r--r--gnu/usr.bin/perl/mpeix/mpeix_setjmp.c355
-rw-r--r--gnu/usr.bin/perl/mpeix/mpeixish.h40
-rw-r--r--gnu/usr.bin/perl/numeric.c62
-rw-r--r--gnu/usr.bin/perl/opnames.h7
-rw-r--r--gnu/usr.bin/perl/pad.c224
-rw-r--r--gnu/usr.bin/perl/pad.h23
-rw-r--r--gnu/usr.bin/perl/perl_keyword.pl79
-rw-r--r--gnu/usr.bin/perl/perlapi.c8
-rw-r--r--gnu/usr.bin/perl/perlapi.h30
-rw-r--r--gnu/usr.bin/perl/perliol.h217
-rw-r--r--gnu/usr.bin/perl/perlvars.h4
-rw-r--r--gnu/usr.bin/perl/plan9/config_sh.sample23
-rw-r--r--gnu/usr.bin/perl/pod.lst8
-rw-r--r--gnu/usr.bin/perl/pod/Makefile.SH5
-rw-r--r--gnu/usr.bin/perl/pod/perl561delta.pod10
-rw-r--r--gnu/usr.bin/perl/pod/perl56delta.pod10
-rw-r--r--gnu/usr.bin/perl/pod/perl573delta.pod2
-rw-r--r--gnu/usr.bin/perl/pod/perl585delta.pod2
-rw-r--r--gnu/usr.bin/perl/pod/perl586delta.pod4
-rw-r--r--gnu/usr.bin/perl/pod/perl587delta.pod379
-rw-r--r--gnu/usr.bin/perl/pod/perl588delta.pod1632
-rw-r--r--gnu/usr.bin/perl/pod/perlclib.pod6
-rw-r--r--gnu/usr.bin/perl/pod/perldbmfilter.pod68
-rw-r--r--gnu/usr.bin/perl/pod/perldebguts.pod151
-rw-r--r--gnu/usr.bin/perl/pod/perldoc.pod2
-rw-r--r--gnu/usr.bin/perl/pod/perlfilter.pod128
-rw-r--r--gnu/usr.bin/perl/pod/perlglossary.pod3383
-rw-r--r--gnu/usr.bin/perl/pod/perlgpl.pod10
-rw-r--r--gnu/usr.bin/perl/pod/perlhack.pod284
-rw-r--r--gnu/usr.bin/perl/pod/perllexwarn.pod123
-rw-r--r--gnu/usr.bin/perl/pod/perlmodlib.PL4
-rw-r--r--gnu/usr.bin/perl/pod/perlopentut.pod10
-rw-r--r--gnu/usr.bin/perl/pod/perlpodspec.pod2
-rw-r--r--gnu/usr.bin/perl/pod/perlport.pod298
-rw-r--r--gnu/usr.bin/perl/pod/perlreftut.pod28
-rw-r--r--gnu/usr.bin/perl/pod/perlreref.pod2
-rw-r--r--gnu/usr.bin/perl/pod/perltodo.pod710
-rw-r--r--gnu/usr.bin/perl/pod/perltooc.pod5
-rw-r--r--gnu/usr.bin/perl/pod/perlunicode.pod2
-rw-r--r--gnu/usr.bin/perl/pp.sym3
-rw-r--r--gnu/usr.bin/perl/pp_pack.c1907
-rw-r--r--gnu/usr.bin/perl/pp_proto.h5
-rw-r--r--gnu/usr.bin/perl/pp_sort.c296
-rw-r--r--gnu/usr.bin/perl/reentr.c48
-rw-r--r--gnu/usr.bin/perl/reentr.h7
-rw-r--r--gnu/usr.bin/perl/reentr.pl74
-rw-r--r--gnu/usr.bin/perl/regcomp.pl5
-rw-r--r--gnu/usr.bin/perl/regen.pl5
-rw-r--r--gnu/usr.bin/perl/regnodes.h4
-rw-r--r--gnu/usr.bin/perl/t/comp/parser.t24
-rw-r--r--gnu/usr.bin/perl/t/io/binmode.t2
-rw-r--r--gnu/usr.bin/perl/t/io/crlf.t116
-rwxr-xr-xgnu/usr.bin/perl/t/io/crlf_through.t10
-rw-r--r--gnu/usr.bin/perl/t/io/layers.t38
-rw-r--r--gnu/usr.bin/perl/t/io/openpid.t1
-rwxr-xr-xgnu/usr.bin/perl/t/io/through.t148
-rw-r--r--gnu/usr.bin/perl/t/io/utf8.t75
-rw-r--r--gnu/usr.bin/perl/t/japh/abigail.t7
-rw-r--r--gnu/usr.bin/perl/t/lib/1_compile.t4
-rw-r--r--gnu/usr.bin/perl/t/lib/MakeMaker/Test/Setup/BFD.pm127
-rw-r--r--gnu/usr.bin/perl/t/lib/MakeMaker/Test/Setup/PL_FILES.pm116
-rw-r--r--gnu/usr.bin/perl/t/lib/MakeMaker/Test/Setup/Problem.pm56
-rw-r--r--gnu/usr.bin/perl/t/lib/NoExporter.pm10
-rw-r--r--gnu/usr.bin/perl/t/lib/Test/Simple/sample_tests/exit.plx3
-rw-r--r--gnu/usr.bin/perl/t/lib/Test/Simple/sample_tests/too_few_fail.plx12
-rw-r--r--gnu/usr.bin/perl/t/lib/contains_pod.xr5
-rwxr-xr-xgnu/usr.bin/perl/t/lib/cygwin.t31
-rw-r--r--gnu/usr.bin/perl/t/lib/h2ph.h5
-rw-r--r--gnu/usr.bin/perl/t/lib/h2ph.pht8
-rw-r--r--gnu/usr.bin/perl/t/lib/sample-tests/bignum_many14
-rw-r--r--gnu/usr.bin/perl/t/lib/warnings/2use6
-rw-r--r--gnu/usr.bin/perl/t/lib/warnings/perlio2
-rw-r--r--gnu/usr.bin/perl/t/lib/warnings/pp_sys11
-rw-r--r--gnu/usr.bin/perl/t/op/alarm.t10
-rw-r--r--gnu/usr.bin/perl/t/op/attrs.t43
-rw-r--r--gnu/usr.bin/perl/t/op/bless.t83
-rw-r--r--gnu/usr.bin/perl/t/op/caller.t55
-rw-r--r--gnu/usr.bin/perl/t/op/chdir.t26
-rwxr-xr-xgnu/usr.bin/perl/t/op/chr.t50
-rw-r--r--gnu/usr.bin/perl/t/op/concat.t8
-rw-r--r--gnu/usr.bin/perl/t/op/cproto.t2
-rw-r--r--gnu/usr.bin/perl/t/op/die.t13
-rwxr-xr-xgnu/usr.bin/perl/t/op/getppid.t54
-rw-r--r--gnu/usr.bin/perl/t/op/lc.t7
-rw-r--r--gnu/usr.bin/perl/t/op/lex_assign.t2
-rw-r--r--gnu/usr.bin/perl/t/op/lfs.t2
-rw-r--r--gnu/usr.bin/perl/t/op/loopctl.t15
-rwxr-xr-xgnu/usr.bin/perl/t/op/negate.t31
-rwxr-xr-xgnu/usr.bin/perl/t/op/not.t49
-rwxr-xr-xgnu/usr.bin/perl/t/op/sselect.t32
-rw-r--r--gnu/usr.bin/perl/t/op/sub_lval.t47
-rwxr-xr-xgnu/usr.bin/perl/t/op/threads.t62
-rw-r--r--gnu/usr.bin/perl/t/op/tr.t13
-rwxr-xr-xgnu/usr.bin/perl/t/pod/pod2usage2.t182
-rw-r--r--gnu/usr.bin/perl/t/run/fresh_perl.t17
-rw-r--r--gnu/usr.bin/perl/t/run/runenv.t2
-rwxr-xr-xgnu/usr.bin/perl/t/run/switchF1.t31
-rw-r--r--gnu/usr.bin/perl/t/test.pl93
-rw-r--r--gnu/usr.bin/perl/t/uni/case.pl148
-rw-r--r--gnu/usr.bin/perl/t/uni/class.t64
-rw-r--r--gnu/usr.bin/perl/t/uni/lower.t5
-rw-r--r--gnu/usr.bin/perl/t/uni/sprintf.t18
-rw-r--r--gnu/usr.bin/perl/t/uni/title.t4
-rw-r--r--gnu/usr.bin/perl/t/uni/upper.t4
-rw-r--r--gnu/usr.bin/perl/t/win32/system.t4
-rw-r--r--gnu/usr.bin/perl/thread.h6
-rw-r--r--gnu/usr.bin/perl/uconfig.h4012
-rw-r--r--gnu/usr.bin/perl/uconfig.sh22
-rw-r--r--gnu/usr.bin/perl/utf8.c450
-rw-r--r--gnu/usr.bin/perl/utf8.h115
-rw-r--r--gnu/usr.bin/perl/utfebcdic.h6
-rw-r--r--gnu/usr.bin/perl/utils/perlivp.PL19
-rw-r--r--gnu/usr.bin/perl/vmesa/vmesa.c4
-rw-r--r--gnu/usr.bin/perl/vms/descrip_mms.template1048
-rw-r--r--gnu/usr.bin/perl/vos/mv-if-diff15
-rw-r--r--gnu/usr.bin/perl/warnings.h85
-rw-r--r--gnu/usr.bin/perl/warnings.pl95
-rw-r--r--gnu/usr.bin/perl/win32/FindExt.pm105
-rw-r--r--gnu/usr.bin/perl/win32/config.gc94
-rw-r--r--gnu/usr.bin/perl/win32/config.vc6494
-rw-r--r--gnu/usr.bin/perl/win32/config_H.vc644050
-rw-r--r--gnu/usr.bin/perl/win32/fcrypt.c73
-rw-r--r--gnu/usr.bin/perl/win32/perlhost.h4
378 files changed, 51555 insertions, 10681 deletions
diff --git a/gnu/usr.bin/perl/Changes5.8.6 b/gnu/usr.bin/perl/Changes5.8.6
new file mode 100644
index 00000000000..ba81d3f657f
--- /dev/null
+++ b/gnu/usr.bin/perl/Changes5.8.6
@@ -0,0 +1,2018 @@
+Please note: This file provides a complete, temporally ordered log of
+changes that went into every version of Perl. If you'd like more
+detailed information, please consult the comments in the individual
+patches posted to the perl5-porters mailing list. Patches for each
+individual change may also be obtained through ftp and rsync--see
+pod/perlhack.pod for the details.
+
+For information on what's new in this release, see pod/perldelta.pod.
+
+[The "CAST AND CREW" list has been moved to AUTHORS.]
+
+NOTE: Each change entry shows the change number; who checked it into the
+repository; when; description of the change; which branch the change
+happened in; and the affected files. The file lists have a short symbolic
+indicator:
+
+ ! modified
+ + added
+ - deleted
+ +> branched (from elsewhere)
+ !> merged changes (from elsewhere)
+
+The Message-Ids in the change entries refer to the email messages sent
+to the perl5-porters mailing list. You can retrieve the messages for
+example from http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/
+
+--------------
+Version v5.8.6 Maintenance release working toward v5.8.6
+--------------
+____________________________________________________________________________
+[ 23552] By: nicholas on 2004/11/27 15:14:36
+ Log: Entry for PERL_USE_SAFE_PUTENV, reworded slightly from an original
+ by Stas Bekman
+ Branch: maint-5.8/perl
+ ! pod/perl586delta.pod
+____________________________________________________________________________
+[ 23551] By: nicholas on 2004/11/27 15:07:10
+ Log: Integrate:
+ [ 23546]
+ Doc nit for B::Lint
+ Subject: [PATCH] B::Lint
+ From: Andy Lester <andy@petdance.com>
+ Date: Fri, 26 Nov 2004 00:30:48 -0600
+ Message-ID: <20041126063048.GA10161@petdance.com>
+
+ [ 23549]
+ Document the interaction of PERL_USE_SAVE_PUTENV and
+ PL_use_safe_putenv, based on text by Stas Bekman
+
+ [ 23550]
+ Clarify the return values of pos, particularly 0 and undef, as
+ suggested by Stas Bekman
+ Branch: maint-5.8/perl
+ !> INSTALL ext/B/B/Lint.pm pod/perlfunc.pod
+____________________________________________________________________________
+[ 23540] By: nicholas on 2004/11/25 22:34:55
+ Log: Update Changes
+ Branch: maint-5.8/perl
+ ! Changes patchlevel.h
+____________________________________________________________________________
+[ 23539] By: nicholas on 2004/11/25 22:21:23
+ Log: Integrate:
+ [ 23532]
+ Subject: [perl #3242] [PATCH]No error on assignment to $>
+ From: "Steve Peters via RT" <perlbug-followup@perl.org>
+ Date: 21 Nov 2004 04:38:09 -0000
+ Message-ID: <rt-3.0.11-3242-100676.6.32723019025057@perl.org>
+
+ [ 23533]
+ Subject: [patch pod/perlipc] use POSIX; w/o () is a bad idea
+ From: Stas Bekman <stas@stason.org>
+ Date: Wed, 24 Nov 2004 11:25:14 -0500
+ Message-ID: <41A4B5EA.3020804@stason.org>
+
+ [ 23534]
+ Subject: RC1 pod fix #anchor
+ From: Stas Bekman <stas@stason.org>
+ Date: Wed, 24 Nov 2004 10:57:21 -0500
+ Message-ID: <41A4AF61.9080408@stason.org>
+ Branch: maint-5.8/perl
+ !> pod/perlipc.pod pod/perlrun.pod pod/perlvar.pod
+____________________________________________________________________________
+[ 23530] By: nicholas on 2004/11/23 22:49:13
+ Log: Integrate:
+ [ 23518]
+ Subject: [perl #32486] error in documentation for POSIX::pipe
+ From: chris@ex-parrot.com (via RT) <perlbug-followup@perl.org>
+ Date: 18 Nov 2004 18:09:54 -0000
+ Message-ID: <rt-3.0.11-32486-100537.1.04456486825399@perl.org>
+
+ [ 23527]
+ Subject: Re: [perl #32486] error in documentation for POSIX::pipe
+ From: Michael G Schwern <schwern@pobox.com>
+ Date: Fri, 19 Nov 2004 14:28:56 -0500
+ Message-ID: <20041119192856.GA4769@windhund.schwern.org>
+ Branch: maint-5.8/perl
+ !> ext/POSIX/POSIX.pod
+____________________________________________________________________________
+[ 23529] By: nicholas on 2004/11/23 15:17:07
+ Log: Integrate:
+ [ 23507]
+ Subject: SuSE's perl safe_putenf diff
+ From: Michael Schroeder <Michael.Schroeder@informatik.uni-erlangen.de>
+ Date: Thu, 11 Nov 2004 15:54:43 +0100
+ Message-ID: <20041111145443.GA1854@immd4.informatik.uni-erlangen.de>
+
+ slightly reworked to make the PL_use_safe_putenv variable fit in
+ the current framework. This patch turns on the use of safe putenv
+ for any application that embeds a perl interpreter.
+ Branch: maint-5.8/perl
+ !> embedvar.h mg.c miniperlmain.c perl.c perlapi.h perlvars.h
+ !> util.c
+____________________________________________________________________________
+[ 23524] By: nicholas on 2004/11/22 15:20:18
+ Log: Back out 23348 from maint, epnding a better way to upgrade DynaLoader's
+ version number without causing subtle breakages.
+ Branch: maint-5.8/perl
+ ! ext/DynaLoader/DynaLoader_pm.PL
+____________________________________________________________________________
+[ 23522] By: nicholas on 2004/11/20 16:14:02
+ Log: Integrate:
+ [ 23495]
+ Subject: [PATCH] Small documentation fix to ExtUtils::Constant
+ Date: Fri, 12 Nov 2004 11:15:47 -0600
+ From: steve@fisharerojo.org
+ Message-ID: <20041112171547.GA8011@kirk.dsl-verizon.net>
+
+ [ 23517]
+ Bump version number
+ Branch: maint-5.8/perl
+ !> lib/ExtUtils/Constant.pm
+____________________________________________________________________________
+[ 23521] By: nicholas on 2004/11/20 15:20:12
+ Log: Integrate:
+ [ 23513]
+ Fix deparsing of reversed sort and descending sorts,
+ due to the recent optimisations on this part of the optree.
+
+ [ 23514]
+ Fix deparsing of reversed foreach loops,
+ plus a bug in the previous commit
+
+ [ 23516]
+ Remaining nit in the deparsing of reversed foreach loops
+ Branch: maint-5.8/perl
+ !> ext/B/B/Deparse.pm ext/B/t/deparse.t
+____________________________________________________________________________
+[ 23515] By: nicholas on 2004/11/18 21:15:15
+ Log: Subject: Re: Proposed patch for perldelta.pod for 5.8.6-RC1
+ From: Mike Guy <mjtg@cam.ac.uk>
+ Message-Id: <E1CUUFq-00006L-H7@virgo.cus.cam.ac.uk>
+ Date: Wed, 17 Nov 2004 18:10:06 +0000
+ Branch: maint-5.8/perl
+ ! pod/perl586delta.pod
+____________________________________________________________________________
+[ 23512] By: nicholas on 2004/11/17 14:50:18
+ Log: Integrate:
+ [ 23465]
+ Reformulate an error
+ (so the error message given by "perl -M" is a bit more
+ meaningful, as Jarkko pointed out)
+ Branch: maint-5.8/perl
+ !> perl.c pod/perldiag.pod
+____________________________________________________________________________
+[ 23511] By: nicholas on 2004/11/17 13:45:34
+ Log: Integrate:
+ [ 23506]
+ Subject: [PATCH] perl5db.pl POD cleanup
+ From: Autrijus Tang <autrijus@autrijus.org>
+ Date: Fri, 12 Nov 2004 12:41:33 +0800
+ Message-ID: <20041112044133.GA92924@aut.dyndns.org>
+
+ [ 23508]
+ Fix a couple of typos.
+
+ [ 23509]
+ PerlFAQ sync.
+ Branch: maint-5.8/perl
+ !> hv.c lib/perl5db.pl pod/perlfaq3.pod pod/perlfaq4.pod
+ !> pod/perlfaq6.pod pod/perlfaq7.pod utf8.c
+____________________________________________________________________________
+[ 23504] By: nicholas on 2004/11/16 21:29:19
+ Log: Oops. They didn't want to get here. Pesky stowaways.
+ Branch: maint-5.8/perl
+ - pod/perl590delta.pod pod/perl591delta.pod pod/perl592delta.pod
+____________________________________________________________________________
+[ 23503] By: nicholas on 2004/11/16 21:28:30
+ Log: Integrate:
+ [ 23494]
+ Add some descriptive text from Larry to op.c on how optrees are built
+
+ [ 23496]
+ Subject: [perl #32419] Spelling fixes for perl@23492
+ Date: 12 Nov 2004 16:14:49 -0000
+ From: Richard Soderberg (via RT) <perlbug-followup@perl.org>
+ Message-ID: <rt-3.0.11-32419-100173.13.0717895191322@perl.org>
+
+ [ 23500]
+ Subject: [PATCH] s/hierachy/hierarchy/
+ Date: Mon, 15 Nov 2004 15:59:14 -0700
+ From: "Larry Shatzer Jr." <larrysh@cpan.org>
+ Message-ID: <20041115225913.GA22373@zippy.zyx.net>
+ Branch: maint-5.8/perl
+ +> pod/perl590delta.pod pod/perl591delta.pod pod/perl592delta.pod
+ !> ext/B/B.pm ext/Time/HiRes/Makefile.PL op.c perlio.h
+ !> pod/perl573delta.pod pod/perl58delta.pod pod/perlapi.pod
+ !> pod/perlapio.pod pod/perldata.pod pod/perldebtut.pod
+ !> pod/perlipc.pod pod/perlport.pod pod/perlre.pod
+ !> pod/perlretut.pod pod/perlrun.pod pod/perlsub.pod
+ !> pod/perlthrtut.pod pod/perltodo.pod pod/perltooc.pod
+____________________________________________________________________________
+[ 23502] By: nicholas on 2004/11/16 14:20:15
+ Log: Disarm the maint branch
+ Branch: maint-5.8/perl
+ ! patchlevel.h
+____________________________________________________________________________
+[ 23493] By: nicholas on 2004/11/11 14:50:27
+ Log: This is RC1
+ Branch: maint-5.8/perl
+ ! patchlevel.h pod/perlhist.pod
+____________________________________________________________________________
+[ 23488] By: nicholas on 2004/11/08 21:35:33
+ Log: Integrate:
+ [ 23487]
+ No more late changes, dammit
+ Branch: maint-5.8/perl
+ !> ext/B/t/optree_concise.t
+____________________________________________________________________________
+[ 23486] By: nicholas on 2004/11/08 13:35:28
+ Log: Integrate:
+ [ 23485]
+ Subject: Re: optree tests and VMS progress (no really)
+ From: Yitzchak Scott-Thoennes <sthoenna@efn.org>
+ Date: Sun, 7 Nov 2004 23:24:15 -0800
+ Message-ID: <20041108072415.GA3928@efn.org>
+ Branch: maint-5.8/perl
+ !> ext/B/t/OptreeCheck.pm
+____________________________________________________________________________
+[ 23484] By: nicholas on 2004/11/07 13:53:14
+ Log: Integrate:
+ [ 23481]
+ Subject: Re: optree tests and VMS progress (no really)
+ From: Jim Cromie <jim.cromie@gmail.com>
+ Message-ID: <cfe85dfa041105235723398fe2@mail.gmail.com>
+ Date: Sat, 6 Nov 2004 00:57:13 -0700
+ Branch: maint-5.8/perl
+ !> ext/B/t/OptreeCheck.pm ext/B/t/optree_check.t
+ !> ext/B/t/optree_concise.t
+____________________________________________________________________________
+[ 23483] By: nicholas on 2004/11/07 13:18:19
+ Log: Integrate:
+ [ 23482]
+ document regcomp.c/regexec.c's dual life under ext/re/
+ Branch: maint-5.8/perl
+ !> regcomp.c regexec.c
+____________________________________________________________________________
+[ 23480] By: nicholas on 2004/11/05 22:48:41
+ Log: Cargo cult 5.8.6 upgrade
+ Branch: maint-5.8/perl
+ ! Cross/config.sh-arm-linux META.yml NetWare/Makefile README.os2
+ ! README.vms epoc/createpkg.pl patchlevel.h plan9/config.plan9
+ ! pod/perl585delta.pod vos/build.cm vos/config.alpha.def
+ ! vos/config.alpha.h vos/config.ga.def vos/config.ga.h
+ ! vos/install_perl.cm win32/Makefile win32/config_H.bc
+ ! win32/config_H.gc win32/config_H.vc win32/config_H.vc64
+ ! win32/makefile.mk wince/Makefile.ce
+____________________________________________________________________________
+[ 23479] By: nicholas on 2004/11/05 22:01:13
+ Log: Update perldelta
+ Branch: maint-5.8/perl
+ ! pod/perl586delta.pod
+____________________________________________________________________________
+[ 23478] By: nicholas on 2004/11/05 21:24:11
+ Log: Update Changes
+ Branch: maint-5.8/perl
+ ! Changes patchlevel.h
+____________________________________________________________________________
+[ 23477] By: nicholas on 2004/11/05 21:03:42
+ Log: Integrate:
+ [ 23475]
+ Subject: Re: Buidling stable.tar.gz on Unix as non-root [PATCH]
+ Date: Fri, 5 Nov 2004 10:36:57 -0500 (EST)
+ From: Andy Dougherty <doughera@lafayette.edu>
+ Message-ID: <Pine.SOL.4.58.0411051035020.15217@maxwell.phys.lafayette.edu>
+ Branch: maint-5.8/perl
+ !> INSTALL
+____________________________________________________________________________
+[ 23476] By: nicholas on 2004/11/05 20:18:51
+ Log: Integrate:
+ [ 23423]
+ Small updates to the web addresses for Perl, noticed by Robert Spier
+
+ [ 23466]
+ FAQ sync
+ Branch: maint-5.8/perl
+ !> pod/perl.pod pod/perlfaq.pod pod/perlfaq1.pod pod/perlfaq2.pod
+ !> pod/perlfaq3.pod pod/perlfaq4.pod pod/perlfaq5.pod
+ !> pod/perlfaq6.pod pod/perlfaq7.pod pod/perlfaq8.pod
+ !> pod/perlfaq9.pod
+____________________________________________________________________________
+[ 23464] By: nicholas on 2004/11/01 18:20:33
+ Log: Subject: Re: [patches] optree_* tests unexpectedly succeeding. + maint-only patch
+ From: Jim Cromie <jcromie@divsol.com>
+ Message-ID: <417EB697.9020301@divsol.com>
+ Date: Tue, 26 Oct 2004 14:41:59 -0600
+ Branch: maint-5.8/perl
+ ! ext/B/t/optree_check.t
+____________________________________________________________________________
+[ 23463] By: nicholas on 2004/11/01 15:28:24
+ Log: Integrate:
+ [ 23444]
+ Skip tests if Devel::Peek not built
+ Branch: maint-5.8/perl
+ !> ext/threads/shared/t/sv_refs.t ext/threads/t/end.t
+ !> ext/threads/t/join.t lib/base/t/fields-base.t
+____________________________________________________________________________
+[ 23462] By: nicholas on 2004/11/01 14:51:33
+ Log: Integrate:
+ [ 23445]
+ Set the IV values for PL_sv_yes and PL_sv_no at initialisation time.
+ Branch: maint-5.8/perl
+ !> perl.c sv.c
+____________________________________________________________________________
+[ 23461] By: nicholas on 2004/11/01 14:36:03
+ Log: Integrate:
+ [ 23440]
+ Assimilate I18N::LangTags 0.35
+
+ [ 23442]
+ Oops. Forgot to add the new test in I18N::LangTags 0.35
+
+ [ 23443]
+ Assimilate PathTools 3.01 (File::Spec and Cwd)
+ Branch: maint-5.8/perl
+ +> lib/I18N/LangTags/t/20_locales.t
+ !> MANIFEST ext/Cwd/t/cwd.t lib/Cwd.pm lib/File/Spec.pm
+ !> lib/File/Spec/VMS.pm lib/I18N/LangTags.pm
+ !> lib/I18N/LangTags/ChangeLog lib/I18N/LangTags/List.pm
+ !> lib/I18N/LangTags/README
+____________________________________________________________________________
+[ 23460] By: nicholas on 2004/11/01 14:16:33
+ Log: Integrate:
+ [ 23439]
+ Subject: [PATCH] Temporary fix for usemallocwrap problems on IRIX (was Re: usemallocwrap problems on IRIX (was Re: Problem and question))
+ Date: Sun, 31 Oct 2004 04:01:42 -0500
+ From: Ed Allen Smith <easmith@beatrice.rutgers.edu>
+ Message-Id: <mid+200410310901.i9V91g1Y519894@dogberry.rutgers.edu>
+ Branch: maint-5.8/perl
+ !> hints/irix_6.sh
+____________________________________________________________________________
+[ 23459] By: nicholas on 2004/11/01 14:04:39
+ Log: Integrate:
+ [ 23431]
+ Subject: [PATCH] 36 additional tests for B
+ From: Steve Peters <steve@fisharerojo.org>
+ Date: Fri, 29 Oct 2004 00:53:22 -0500
+ Message-Id: <200410290053.22947.steve@fisharerojo.org>
+
+ [ 23446]
+ Subject: [patches] optree_* tests unexpectedly succeeding. + maint-only patch
+ From: Jim Cromie <jim.cromie@gmail.com>
+ Message-ID: <cfe85dfa04102515365f11ef10@mail.gmail.com>
+ Date: Mon, 25 Oct 2004 16:36:40 -0600
+ Branch: maint-5.8/perl
+ !> ext/B/t/b.t ext/B/t/optree_check.t ext/B/t/optree_varinit.t
+____________________________________________________________________________
+[ 23458] By: nicholas on 2004/11/01 13:39:35
+ Log: Integrate:
+ [ 23424]
+ Fix [perl #32130] Errno.pm must not pass references to "prototype"
+ Branch: maint-5.8/perl
+ !> ext/Errno/Errno_pm.PL ext/Errno/t/Errno.t
+____________________________________________________________________________
+[ 23456] By: nicholas on 2004/11/01 13:06:23
+ Log: Integrate:
+ [ 23438]
+ [perl #32033] Using foreach on threads::shared array crashes perl
+ The FETCH code for shared aggregate elements could leak a shared RV
+ address into a private SV. RVs are now handled specially, in the
+ same way that they already were for scalar shared magic.
+ Branch: maint-5.8/perl
+ !> ext/threads/shared/shared.xs
+____________________________________________________________________________
+[ 23454] By: nicholas on 2004/11/01 12:38:48
+ Log: Integrate:
+ [ 23419]
+ Subject: [PATCH] Re: Devel::Peek: hash quality 125%?
+ From: Tels <perl_dummy@bloodgate.com>
+ Date: Sat, 23 Oct 2004 16:56:31 +0200
+ Message-Id: <200410231656.40995@bloodgate.com>
+
+ [ 23420]
+ Subject: Re: [perl #31937] perlop: add basic =~ examples
+ From: Steve Peters <steve@fisharerojo.org>
+ Date: Sat, 23 Oct 2004 08:01:51 -0500
+ Message-Id: <200410230801.51649.steve@fisharerojo.org>
+
+ [ 23422]
+ Subject: [perl #30227] [PATCH]splain vs. -w
+ From: "Steve Peters via RT" <perlbug-followup@perl.org>
+ Date: 23 Oct 2004 13:55:41 -0000
+ Message-ID: <rt-3.0.11-30227-98375.1.28465791111211@perl.org>
+
+ [ 23432]
+ Document sv_magic() changes brought about by sv_magicext()
+
+ Change 14335 made sv_magic() a wrapper to a new sv_magicext(),
+ but didn't update the documentation for sv_magic() to reflect
+ the changed handling of the name/namlen arguments.
+
+ Also correct a couple of typos, and mention sv_magicext() in
+ perlguts.
+ Branch: maint-5.8/perl
+ !> ext/Devel/Peek/Changes ext/Devel/Peek/Peek.pm
+ !> lib/diagnostics.pm pod/perlapi.pod pod/perlguts.pod
+ !> pod/perlop.pod sv.c
+____________________________________________________________________________
+[ 23453] By: nicholas on 2004/11/01 12:17:44
+ Log: Integrate:
+ [ 23266]
+ [perl #31078] Fields package bug
+ An intermediate class with no fields messes up private fields
+ in the base class.
+
+ [ 23267]
+ I somehow managed to omit the base.pm change from #23266
+ Branch: maint-5.8/perl
+ !> lib/base.pm lib/base/t/fields-base.t
+____________________________________________________________________________
+[ 23452] By: nicholas on 2004/11/01 10:24:35
+ Log: Improvements and corrections as suggested by Ed Allen Smith,
+ Glenn Linderman, Yitzchak Scott-Thoennes and Steve Hay
+ Branch: maint-5.8/perl
+ ! pod/perl586delta.pod
+____________________________________________________________________________
+[ 23451] By: nicholas on 2004/10/31 18:46:53
+ Log: First draft of 5.8.6's perldelta
+ Branch: maint-5.8/perl
+ ! pod/perl586delta.pod
+____________________________________________________________________________
+[ 23447] By: nicholas on 2004/10/31 14:25:17
+ Log: Integrate:
+ [ 23365]
+ Fix [perl #31971] local $^D gives noise
+
+ (ish. Actually a rewrite to give binary compatibility)
+ Branch: maint-5.8/perl
+ ! embed.fnc embed.h mg.c perl.c proto.h
+____________________________________________________________________________
+[ 23430] By: nicholas on 2004/10/28 10:20:54
+ Log: Integrate:
+ [ 23425]
+ Subject: [PATCH] lib/Carp.t improvements
+ From: "Craig A. Berry" <craigberry@mac.com>
+ Date: Tue, 26 Oct 2004 23:32:25 -0500
+ Message-Id: <417F24D9.1000904@mac.com>
+ Branch: maint-5.8/perl
+ !> lib/Carp.t
+____________________________________________________________________________
+[ 23429] By: nicholas on 2004/10/28 10:07:49
+ Log: Integrate:
+ [ 23418]
+ [perl #32039] Chained goto &sub drops data too early.
+
+ Change 22373 to stop a memory leak in goto &foo intead caused
+ the elements of @_ to be freed too early. This revised fix
+ just transfers the reifiedness of the old @_ to the new @_
+
+ [ 23426]
+ include flags and refcount in the list of leaked scalars
+ Branch: maint-5.8/perl
+ !> perl.c pp_ctl.c t/op/goto.t
+____________________________________________________________________________
+[ 23428] By: nicholas on 2004/10/28 09:26:16
+ Log: Integrate:
+ [ 23416]
+ Subject: [PATCH] ext/IO/IO.xs: fix blocking on sparc linux
+ Message-ID: <20041022033033.GA12362@londo.c47.org>
+ From: Brendan O'Dea <bod@debian.org>
+ Date: Fri, 22 Oct 2004 13:30:33 +1000
+ Branch: maint-5.8/perl
+ !> ext/IO/IO.xs
+____________________________________________________________________________
+[ 23427] By: nicholas on 2004/10/28 09:10:57
+ Log: Integrate:
+ [ 23417]
+ Upgrade to Encode 2.07
+
+ [ 23421]
+ Upgrade to Encode 2.08.
+ Branch: maint-5.8/perl
+ !> ext/Encode/AUTHORS ext/Encode/Changes ext/Encode/Encode.pm
+ !> ext/Encode/Encode.xs ext/Encode/META.yml
+ !> ext/Encode/Unicode/Unicode.pm ext/Encode/Unicode/Unicode.xs
+ !> ext/Encode/encoding.pm ext/Encode/lib/Encode/Encoding.pm
+ !> ext/Encode/t/Encode.t ext/Encode/t/fallback.t
+ !> ext/Encode/ucm/macArabic.ucm ext/Encode/ucm/macCentEuro.ucm
+ !> ext/Encode/ucm/macChinsimp.ucm ext/Encode/ucm/macChintrad.ucm
+ !> ext/Encode/ucm/macDingbats.ucm ext/Encode/ucm/macGreek.ucm
+ !> ext/Encode/ucm/macKorean.ucm ext/Encode/ucm/macROMnn.ucm
+ !> ext/Encode/ucm/macSymbol.ucm ext/Encode/ucm/macThai.ucm
+____________________________________________________________________________
+[ 23415] By: nicholas on 2004/10/22 18:01:45
+ Log: Update Changes
+ Branch: maint-5.8/perl
+ ! Changes patchlevel.h
+____________________________________________________________________________
+[ 23414] By: nicholas on 2004/10/22 17:48:44
+ Log: Integrate:
+ [ 23410]
+ Subject: docpatch for perltie.pod
+ From: David Cantrell <david@cantrell.org.uk>
+ Date: Thu, 21 Oct 2004 12:21:52 +0100
+ Message-ID: <20041021112151.GA22862@bytemark.barnyard.co.uk>
+ Branch: maint-5.8/perl
+ !> pod/perltie.pod
+____________________________________________________________________________
+[ 23413] By: nicholas on 2004/10/22 17:47:25
+ Log: Integrate:
+ [ 23372]
+ Implement a new -dt command-line flag, to enable threads under the
+ debugger (bug #31666).
+
+ Subject: RE: [PATCH] debugger handles threads [perl #31666]
+ From: <richard.foley@ubs.com>
+ Date: Wed, 13 Oct 2004 13:01:18 +0200
+ Message-ID: <B374141B0A424D4F9CF143CC51B3ADD903FB9E12@NZURC900PEX1.ubsgs.ubsgroup.net>
+
+ Subject: Re: [PATCH] debugger handles threads [perl #31666]
+ From: Yitzchak Scott-Thoennes <sthoenna@efn.org>
+ Date: Wed, 13 Oct 2004 02:49:58 -0700
+ Message-ID: <20041013094957.GA17184@efn.org>
+ Branch: maint-5.8/perl
+ !> lib/perl5db.pl perl.c pod/perlrun.pod
+____________________________________________________________________________
+[ 23412] By: nicholas on 2004/10/22 15:51:06
+ Log: Back out changes 23347 and 23349 for now, as they cause URI to fail
+ regression tests. (Integrated with change 23391).
+ It's not clear to me whether the regression tests are buggy, or this
+ change, or something else which this change now exposes.
+ Branch: maint-5.8/perl
+ ! lib/overload.pm lib/overload.t
+____________________________________________________________________________
+[ 23411] By: nicholas on 2004/10/22 15:26:39
+ Log: Ooops. I forgot to move Changes to Changes5.8.5. Split things properly
+ Branch: maint-5.8/perl
+ +> Changes5.8.5
+ ! Changes MANIFEST
+____________________________________________________________________________
+[ 23409] By: nicholas on 2004/10/21 15:49:06
+ Log: Update Changes
+ Branch: maint-5.8/perl
+ ! Changes patchlevel.h
+____________________________________________________________________________
+[ 23408] By: nicholas on 2004/10/21 15:42:32
+ Log: Rebuild table of contents and re-sort MANIFEST
+ Branch: maint-5.8/perl
+ ! MANIFEST pod/perltoc.pod
+____________________________________________________________________________
+[ 23407] By: nicholas on 2004/10/21 15:37:52
+ Log: Re-run regen.pl
+ Branch: maint-5.8/perl
+ ! pod/perlapi.pod pod/perlintern.pod
+____________________________________________________________________________
+[ 23406] By: nicholas on 2004/10/21 15:18:42
+ Log: Integrate:
+ [ 23393]
+ Ensure that PVA.pl returns a true value.
+
+ [ 23394]
+ Remove opmini.c when cleaning up.
+ Branch: maint-5.8/perl
+ !> Makefile.SH lib/unicore/mktables
+____________________________________________________________________________
+[ 23405] By: nicholas on 2004/10/21 15:08:19
+ Log: Integrate:
+ [ 22741]
+ Include variable names in "Use of uninitialized value" warnings
+ (just for lib/Math/BigInt/t/mbimbf.inc)
+
+
+ [ 23216]
+ Subject: [PATCH] pre Math::BigInt v1.72
+ From: Tels <perl_dummy@bloodgate.com>
+ Date: Fri, 13 Aug 2004 14:02:50 +0200
+ Message-Id: <200408131402.52270@bloodgate.com>
+
+ [ 23359]
+ Subject: Patch: BigInt v1.73 (pre-release)
+ From: Tels <perl_dummy@bloodgate.com>
+ Date: Sun, 10 Oct 2004 22:36:03 +0200
+ Message-Id: <200410102236.03637@bloodgate.com>
+
+ [ 23396]
+ Subject: [PATCH] Math::BigInt v1.73 final
+ From: Tels <perl_dummy@bloodgate.com>
+ Date: Wed, 20 Oct 2004 21:06:40 +0200
+ Message-Id: <200410202106.41840@bloodgate.com>
+
+ Subject: [PATCH] Math::BigRat v0.13 (pre-release)
+ From: Tels <tels@bloodgate.com>
+ Date: Wed, 20 Oct 2004 22:03:55 +0200
+ Message-Id: <200410202203.56063@bloodgate.com>
+ Branch: maint-5.8/perl
+ !> lib/Math/BigFloat.pm lib/Math/BigInt.pm
+ !> lib/Math/BigInt/Calc.pm lib/Math/BigInt/t/bare_mbf.t
+ !> lib/Math/BigInt/t/bare_mbi.t lib/Math/BigInt/t/bigfltpm.inc
+ !> lib/Math/BigInt/t/bigfltpm.t lib/Math/BigInt/t/bigintpm.inc
+ !> lib/Math/BigInt/t/bigintpm.t lib/Math/BigInt/t/mbimbf.inc
+ !> lib/Math/BigInt/t/sub_mbf.t lib/Math/BigInt/t/sub_mbi.t
+ !> lib/Math/BigInt/t/upgrade.inc lib/Math/BigInt/t/upgrade.t
+ !> lib/Math/BigInt/t/with_sub.t lib/Math/BigRat.pm
+ !> lib/Math/BigRat/t/big_ap.t lib/Math/BigRat/t/bigrat.t
+ !> lib/Math/BigRat/t/bigratpm.inc lib/Math/BigRat/t/bigratpm.t
+ !> lib/Math/BigRat/t/bigratup.t
+____________________________________________________________________________
+[ 23404] By: nicholas on 2004/10/21 13:53:01
+ Log: Integrate:
+ [ 23052]
+ A tool to check the AUTHORS file
+
+ [ 23371]
+ Make autodoc.pl write its output with UNIX style EOL's.
+
+ This saves the Win32 committer(s?) having to dos2unix the files
+ before committing. Maybe Perforce's "LineEnd: share" suffices
+ anyway, but there's no harm in playing safe.
+ Branch: maint-5.8/perl
+ +> Porting/checkAUTHORS.pl
+ !> MANIFEST autodoc.pl
+____________________________________________________________________________
+[ 23403] By: nicholas on 2004/10/21 13:32:54
+ Log: Integrate:
+ [ 23360]
+ Subject: [PATCH-for-23358] enable statically linked extensions for Win32
+ From: Vadim Konovalov <konovalo@mail.wplus.net>
+ Date: Mon, 11 Oct 2004 22:57:00 +0400
+ Message-ID: <80173417046.20041011225700@vkonovalov.ru>
+
+ [ 23363]
+ Subject: [PATCH@23361] RE: [PATCH-for-23358] enable statically linked exte nsions for Win32
+ From: "Konovalov, Vadim" <vkonovalov@spb.lucent.com>
+ Date: Wed, 13 Oct 2004 09:45:31 +0400
+ Message-ID: <7DD1BE2C50259746ABB8683672D2089E08133C@itotest-1.spb.lucent.com>
+ Branch: maint-5.8/perl
+ !> makedef.pl win32/Makefile win32/buildext.pl win32/dl_win32.xs
+ !> win32/makefile.mk win32/perllib.c win32/sync_ext.pl
+____________________________________________________________________________
+[ 23402] By: nicholas on 2004/10/21 13:03:35
+ Log: Integrate:
+ [ 23353]
+ A new machine type, some reformatting, some reorganization
+ and a bit of additional info on Sleepycat's db.
+
+ [ 23364]
+ A few fixes in the list of -D debugging flags
+
+ [ 23392]
+ Subject: [PATCH perl.c pod/perl.pod pod/perlfaq2.pod]
+ Rephrase "Perl Home Page" References
+ From: chromatic <chromatic@wgz.org>
+ Date: Tue, 19 Oct 2004 22:52:19 -0700
+ Message-Id: <1098251539.20976.53.camel@localhost>
+ Branch: maint-5.8/perl
+ !> AUTHORS README.hpux perl.c pod/perl.pod pod/perlfaq2.pod
+ !> pod/perlrun.pod
+____________________________________________________________________________
+[ 23401] By: nicholas on 2004/10/21 12:50:53
+ Log: Integrate:
+ [ 23354]
+ Make AIX 5 + gcc work in 64bitall
+ Branch: maint-5.8/perl
+ !> hints/aix.sh
+____________________________________________________________________________
+[ 23400] By: nicholas on 2004/10/21 11:43:53
+ Log: Integrate:
+ [ 23351]
+ Make the perl interpreter more tolerant of UTF-16-encoded script
+ (patch by Jarkko Hietaniemi)
+
+ [ 23352]
+ Briefly document the test.utf16 make target.
+
+ [ 23362]
+ Minor tweaks for the test.utf16 target, by Jarkko
+ Branch: maint-5.8/perl
+ !> Makefile.SH pod/perlhack.pod t/TEST toke.c utf8.c
+____________________________________________________________________________
+[ 23399] By: nicholas on 2004/10/21 11:13:27
+ Log: Integrate:
+ [ 23348]
+ Subject: [PATCH-for-23341] dynaloader improvements and cleanup
+ From: Vadim Konovalov <vadim@vkonovalov.ru>
+ Date: Sun, 3 Oct 2004 22:10:06 +0400
+ Message-ID: <138-1837306906.20041003221006@vkonovalov.ru>
+
+ [ 23361]
+ Subject: [perl #31843] warnings::warn($obj,...) fails when $obj overloads ""
+ From: kaminsky@math.huji.ac.il (via RT) <perlbug-followup@perl.org>
+ Date: 5 Oct 2004 09:52:07 -0000
+ Message-ID: <rt-3.0.11-31843-97358.2.89612012687236@perl.org>
+ (with tweaks)
+ Branch: maint-5.8/perl
+ !> ext/DynaLoader/DynaLoader_pm.PL lib/warnings.pm warnings.pl
+____________________________________________________________________________
+[ 23398] By: nicholas on 2004/10/21 10:54:14
+ Log: Integrate:
+ [ 23343]
+ Subject: [PATCH] make t/uni/class.t pass on VMS
+ From: "Craig A. Berry" <craigberry@mac.com>
+ Date: Fri, 01 Oct 2004 12:57:55 -0500
+ Message-ID: <415D9AA3.1000908@mac.com>
+
+ [ 23346]
+ Subject: [PATCH] vms/t/filespec.t tweak
+ From: "Craig A. Berry" <craigberry@mac.com>
+ Date: Fri, 01 Oct 2004 13:18:03 -0500
+ Message-ID: <415D9F5B.5040306@mac.com>
+
+ [ 23358]
+ Subject: [PATCH] add the 'test_harness' target to vms "makefile"
+ From: Abe Timmerman <abe@ztreet.demon.nl>
+ Date: Sat, 9 Oct 2004 18:13:38 +0200
+ Message-Id: <200410091813.38673.abe@ztreet.demon.nl>
+
+ [ 23367]
+ Subject: [PATCH] Re: [NOT OK] 23353 OpenVMS 7.2 VAX
+ From: "Craig A. Berry" <craigberry@mac.com>
+ Date: Thu, 14 Oct 2004 10:09:41 -0500
+ Message-ID: <416E96B5.5020100@mac.com>
+
+ [ 23377]
+ Subject: [PATCH] test_harness tweak for VMS
+ From: "Craig A. Berry" <craigberry@mac.com>
+ Date: Sat, 16 Oct 2004 12:15:02 -0500
+ Message-Id: <41715716.5000108@mac.com>
+ Branch: maint-5.8/perl
+ !> ext/Devel/PPPort/parts/inc/ppphtest
+ !> ext/Devel/PPPort/t/ppphtest.t t/harness t/uni/class.t
+ !> vms/descrip_mms.template vms/ext/filespec.t vms/test.com
+____________________________________________________________________________
+[ 23397] By: nicholas on 2004/10/21 10:30:49
+ Log: Integrate:
+ [ 23350]
+ Subject: [perl #31697] [PATCH] B::Showlex::newlex enhancement and pod
+ From: Jim Cromie (via RT) <perlbug-followup@perl.org>
+ Date: 23 Sep 2004 21:45:42 -0000
+ Message-ID: <rt-3.0.11-31697-96840.0.810265136907162@perl.org>
+ (with doc nits)
+
+ [ 23356]
+ Hack to make -Dusethreads -Uuseithreads -Uuse5005threads pass all tests
+
+ [ 23395]
+ Need to skip optree walking tests if perlio not built
+ Branch: maint-5.8/perl
+ !> ext/B/B/Concise.pm ext/B/B/Showlex.pm ext/B/t/OptreeCheck.pm
+ !> ext/B/t/f_map.t ext/B/t/f_sort.t ext/B/t/showlex.t
+____________________________________________________________________________
+[ 23391] By: nicholas on 2004/10/19 20:10:52
+ Log: Integrate:
+ [ 22926]
+ Subject: Re: [perl #30197] perlbug AutoReply: Data::Dumper does not indent the deparsed code properly
+ From: Mathieu Arnold <m@absolight.fr>
+ Date: Thu, 10 Jun 2004 16:43:58 +0200
+ Message-ID: <34D483170C7F84E0DFBE442B@andromede.in.reaumur.net>
+ (with a test adjustment)
+
+ [ 23347]
+ Subject: [PATCH perl-current] Re: [perl #31793] Data::Dumper: Useqq interacts badly with overloading
+ From: Rick Delaney <rick@bort.ca>
+ Date: Sat, 2 Oct 2004 01:04:49 -0400
+ Message-ID: <20041002050448.GB5059@biff.bort.ca>
+
+ [ 23349]
+ Increment $overload::VERSION after change #23347
+ Branch: maint-5.8/perl
+ !> ext/B/B/Concise.pm ext/Data/Dumper/Dumper.pm
+ !> ext/Data/Dumper/t/dumper.t lib/overload.pm lib/overload.t
+____________________________________________________________________________
+[ 23390] By: nicholas on 2004/10/19 19:35:22
+ Log: Integrate:
+ [ 23331]
+ Subject: Re: [perl #31586] utime does not reach expectations [PATCH]
+ From: LAUN Wolfgang <wolfgang.laun@alcatel.at>
+ Date: Fri, 17 Sep 2004 14:01:11 +0200
+ Message-Id: <DF27CDCBD2581D4B88431901094E4B4D02B0C88B@attmsx1.aut.alcatel.at>
+
+ Clarify the effect of utime when the file isn't owned by the user
+
+ [ 23332]
+ Document that $ENV{PATH} may not contain relative directories under -T
+
+ [ 23333]
+ Remove a couple of C<> to avoid confusing double quotes in text
+ rendering. [perl #31678]
+
+ [ 23338]
+ Spelling correction spotted by Greg McCarroll
+
+ [ 23341]
+ Subject: [patch] Sys::Syslog POD - $Sys::Syslog::host
+ From: "Jay Hannah" <jhannah@omnihotels.com>
+ Date: Wed, 15 Sep 2004 14:51:42 -0500
+ Message-ID: <002001c49b5d$6d0d79c0$4722000a@omarests2>
+
+ [ 23345]
+ More caveats on the non-portability of stat(), suggested by
+ Stas Bekman.
+
+ [ 23368]
+ Document sv_vcatpvf, sv_vsetpvf, sv_vcatpvf_mg and sv_vsetpvf_mg.
+
+ These are already in the API supported by Devel::PPPort, and are
+ often more useful than sv_vcatpvfn and sv_vsetpvfn which were
+ already documented.
+
+ [ 23369]
+ Doc nit to Data::Dumper, suggested by Peter Kay.
+
+ [ 23378]
+ Add a missing warning categorisation in perldiag.
+
+ [ 23379]
+ Fix a typo.
+
+ [ 23382]
+ Subject: [PATCH] perlfaq2.pod (add a book)
+ From: <richard.foley@ubs.com>
+ Date: Tue, 19 Oct 2004 07:29:31 +0200
+ Message-ID: <B374141B0A424D4F9CF143CC51B3ADD903FB9E3A@NZURC900PEX1.ubsgs.ubsgroup.net>
+
+ [ 23383]
+ More Data::Dumper docs nits, fix the previous one,
+ suggested by Yves Orton.
+ Branch: maint-5.8/perl
+ !> README.epoc embed.fnc ext/Data/Dumper/Dumper.pm
+ !> ext/Sys/Syslog/Syslog.pm pod/perlapi.pod pod/perldiag.pod
+ !> pod/perlfaq2.pod pod/perlfunc.pod pod/perlop.pod
+ !> pod/perlsec.pod sv.c utils/c2ph.PL
+____________________________________________________________________________
+[ 23389] By: nicholas on 2004/10/19 19:16:21
+ Log: Integrate:
+ [ 23326]
+ Subject: [PATCH] encoding and open pragmas
+ From: Jarkko Hietaniemi <jhi@iki.fi>
+ Date: Mon, 16 Aug 2004 22:27:00 +0300
+ Message-ID: <41210A84.6060506@iki.fi>
+
+ Subject: Re: [PATCH] encoding and open pragmas
+ From: Jarkko Hietaniemi <jhi@iki.fi>
+ Date: Tue, 17 Aug 2004 11:22:58 +0300 (EEST)
+ Message-Id: <200408170822.i7H8MwUU016793@vipunen.hut.fi>
+
+ [ 23334]
+ Typo fix.
+ Subject: [PATCH] Re: Smoke [5.9.2] 23330 FAIL(X) hp-ux 11.11/64 (PA-2.0/64/2 cpu)
+ From: Rafael Garcia-Suarez <rgarciasuarez@mandrakesoft.com>
+ Date: Wed, 22 Sep 2004 11:20:53 +0200
+ Message-ID: <20040922112053.686562b6@valis.local>
+
+ [ 23355]
+ Restore runtime loading of Encode and Encode-related modules, so that
+ open.pm will work when the Encode extension isn't build.
+
+ [ 23380]
+ Upgrade to Encode 2.04.
+
+ [ 23381]
+ Re-apply the encoding.pm part of:
+
+ Subject: [PATCH] encoding and open pragmas
+ From: Jarkko Hietaniemi <jhi@iki.fi>
+ Date: Mon, 16 Aug 2004 22:27:00 +0300
+ Message-ID: <41210A84.6060506@iki.fi>
+
+ [ 23384]
+ Upgrade to Encode 2.05
+ Branch: maint-5.8/perl
+ !> ext/Encode/AUTHORS ext/Encode/Changes ext/Encode/Encode.pm
+ !> ext/Encode/JP/JP.pm ext/Encode/META.yml ext/Encode/Makefile.PL
+ !> ext/Encode/bin/piconv ext/Encode/bin/ucmsort
+ !> ext/Encode/encoding.pm ext/Encode/lib/Encode/Alias.pm
+ !> ext/Encode/lib/Encode/Supported.pod
+ !> ext/Encode/ucm/big5-hkscs.ucm lib/open.pm lib/open.t
+ !> t/io/layers.t
+____________________________________________________________________________
+[ 23388] By: nicholas on 2004/10/19 18:26:52
+ Log: Integrate:
+ [ 23329]
+ Upgrade to Time::HiRes 1.65.
+
+ [ 23330]
+ Upgrade to MIME::Base64 3.05.
+
+ [ 23340]
+ A fix for [perl #31692] : as PerlIO::scalar accesses directly the
+ PV of the scalar it reads from, avoid to read it when it's an
+ undefined PV.
+
+ [ 23366]
+ Subject: AW: [perl #31864] IO::Poll - undef fd not checked in mask()
+ From: "Dintelmann, Peter" <Peter.Dintelmann@Dresdner-Bank.com>
+ Date: Mon, 11 Oct 2004 09:54:15 +0200
+ Message-ID: <8FD9B6A658383E468B55D364D1A9951601857331@ffz00zm6.ffz00e.mail.dresdner.net>
+ Branch: maint-5.8/perl
+ !> ext/IO/lib/IO/Poll.pm ext/MIME/Base64/Base64.pm
+ !> ext/MIME/Base64/Changes ext/MIME/Base64/t/warn.t
+ !> ext/PerlIO/scalar/scalar.xs ext/PerlIO/t/scalar.t
+ !> ext/Time/HiRes/Changes ext/Time/HiRes/HiRes.pm
+ !> ext/Time/HiRes/HiRes.xs ext/Time/HiRes/Makefile.PL
+ !> ext/Time/HiRes/ppport.h ext/Time/HiRes/t/HiRes.t
+____________________________________________________________________________
+[ 23387] By: nicholas on 2004/10/19 18:09:57
+ Log: Integrate:
+ [ 23373]
+ Implement sv_svset _nosteal variants by passing a flag into
+ sv_set_flags rather than messing with the SvTEMP() flag on either
+ side of the call.
+
+ [ 23374]
+ The second half of Perl_vwarner is actually a straight cut&paste job
+ from Perl_vwarn, so convert it into a (tail) call to Perl_vwarn.
+ cut&paste is bad, m'kay.
+
+ [ 23375]
+ Merge the common code from Perl_vdie and Perl_vwarner into a
+ S_vdie_common
+
+ [ 23376]
+ Merge code from vdie and vcroak into S_vdie_croak_common
+ Branch: maint-5.8/perl
+ !> sv.c sv.h util.c
+____________________________________________________________________________
+[ 23386] By: nicholas on 2004/10/19 16:56:17
+ Log: Integrate:
+ [ 23321]
+ Subject: Re: [perl #31459] Bug in read()
+ From: Chris Heath <chris@heathens.co.nz>
+ Date: 06 Sep 2004 00:03:12 -0400
+ Message-Id: <1094443392.12379.35.camel@linux.heathens.co.nz>
+
+ a read(F) into a UTF8-encoded buffer with an offset off the
+ end of the buffer, miss-calculated buffer lengths
+
+ [ 23337]
+ Subject: Patch for perl.c fixing an obscure environment bug
+ From: Merijn Broeren <merijnb@iloquent.com>
+ Date: Thu, 23 Sep 2004 17:18:17 +0200
+ Message-ID: <20040923151817.GA15782@brugman.iloquent.nl>
+
+ [ 23342]
+ [perl #31767] open $1, "file" doesn't raise an exception
+
+ [ 23344]
+ Perl_sv_recode_to_utf8 shouldn't be returning SvPVX(sv) without
+ any check on whether it's valid.
+ Branch: maint-5.8/perl
+ !> perl.c pp.c pp_sys.c sv.c t/io/open.t
+____________________________________________________________________________
+[ 23385] By: nicholas on 2004/10/19 16:29:12
+ Log: Integrate:
+ [ 23155]
+ Build the perldelta copying command for the main Unix makefile with
+ buildtoc, so that it doesn't get forgotten on version increments.
+
+ [ 23370]
+ Include opmini.c in the dependency generation.
+ Branch: maint-5.8/perl
+ ! Makefile.SH
+ !> pod/buildtoc
+____________________________________________________________________________
+[ 23335] By: nicholas on 2004/09/23 10:12:34
+ Log: Integrate:
+ [ 23320]
+ [perl #30066] Memory leak in nested shared data structures in 5.8.4
+ A pop of an item from a shared array ref causes a leak due to
+ AVf_REAL not having been set after an sv_upgrade(sv, SVt_PVAV).
+ Make sv_upgrade() set always this flag.
+ Branch: maint-5.8/perl
+ !> sv.c
+____________________________________________________________________________
+[ 23328] By: nicholas on 2004/09/20 14:14:31
+ Log: Integrate:
+ [ 23322]
+ Upgrade to Time::HiRes 1.63.
+ Note that it includes a ppport.h file. See if the one
+ previously built in Devel::PPPort can be used instead.
+ Branch: maint-5.8/perl
+ +> ext/Time/HiRes/ppport.h
+ !> MANIFEST ext/Time/HiRes/Changes ext/Time/HiRes/HiRes.pm
+ !> ext/Time/HiRes/HiRes.xs ext/Time/HiRes/Makefile.PL
+ !> ext/Time/HiRes/t/HiRes.t
+____________________________________________________________________________
+[ 23324] By: steveh on 2004/09/17 16:31:49
+ Log: Have usethreads set the same as useithreads on Win32
+
+ This should fix the current ext/B/t/optree_*.t failures.
+
+ Nicholas Clark and Andy Dougherty both say this is how it should be:
+ http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2004-09/msg00195.html
+ http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2004-09/msg00259.html
+ Branch: maint-5.8/perl
+ ! win32/Makefile win32/makefile.mk
+____________________________________________________________________________
+[ 23318] By: nicholas on 2004/09/10 16:27:07
+ Log: Update the skips for the no perlio case
+ Branch: maint-5.8/perl
+ ! ext/B/t/optree_check.t ext/B/t/optree_concise.t
+ ! ext/B/t/showlex.t
+____________________________________________________________________________
+[ 23317] By: nicholas on 2004/09/10 14:37:25
+ Log: Integrate:
+ [ 23200]
+ Fix [perl #24269] socket() call uses non-IFS providers
+ causing subsequent print/read to hang or misbehave
+
+ Patch supplied by Artiom Morozov <artiom@phreaker.net>
+ in the bug report at http://rt.perl.org/rt3/index.html?q=24269
+
+ (strictly actually use the alternative supplied "stable" patch)
+
+ [ 23275]
+ Implement new environment variable to allow the use of non-IFS
+ compatible LSP's on Windows to allow Perl to work in conjunction
+ with a firewall such as McAfee Guardian.
+
+ Bug report and possible solutions by Ken Fox <kfox@ford.com>;
+ further assistance by Artiom Morozov <artiom@phreaker.net>.
+ Branch: maint-5.8/perl
+ ! win32/win32sck.c
+ !> README.win32 pod/perlrun.pod win32/Makefile win32/makefile.mk
+____________________________________________________________________________
+[ 23316] By: nicholas on 2004/09/10 10:56:43
+ Log: Integrate:
+ [ 23170]
+ Bug report #30132 was resolved before it was finished!
+ Here's the last piece in the puzzle.
+
+ [ 23191]
+ Subject: [PATCH] extension to diagnostics.pm
+ From: Fergal Daly <fergal@esatclear.ie>
+ Date: Wed, 4 Aug 2004 00:33:09 +0100
+ Message-ID: <20040803233309.GA239@dyn.fergaldaly.com>
+
+ [ 23221]
+ Subject: [PATCH] Document Carp's global variables + provide tests
+ From: "Jos I. Boumans" <kane@dwim.org>
+ Date: Mon, 16 Aug 2004 15:53:40 +0200
+ Message-Id: <ADC6DEC6-EF8B-11D8-8425-000A95EF62E2@dwim.org>
+ (tests a bit reworked)
+ Branch: maint-5.8/perl
+ !> ext/IO/lib/IO/File.pm lib/Carp.pm lib/Carp.t
+ !> lib/diagnostics.pm
+____________________________________________________________________________
+[ 23315] By: nicholas on 2004/09/10 10:34:45
+ Log: Integrate:
+ [ 23280]
+ Upgrade to Devel::PPPort 3.02.
+
+ [ 23282]
+ Upgrade to Devel::PPPort 3.03.
+ Branch: maint-5.8/perl
+ !> (integrate 29 files)
+____________________________________________________________________________
+[ 23314] By: nicholas on 2004/09/10 10:24:09
+ Log: Integrate:
+ [ 23146]
+ Subject: [PATCH] Mention common dynaloader errors in perldiag.pod
+ From: "Jos I. Boumans" <kane@dwim.org>
+ Date: Wed, 21 Jul 2004 13:47:35 +0200
+ Message-Id: <C226C05A-DB0B-11D8-A551-000A95EF62E2@dwim.org>
+ (with tweaks)
+
+ [ 23148]
+ Grammar fix by Paul Johnson.
+
+ [ 23151]
+ Sort perldiag.
+
+ [ 23159]
+ make a note in perlrun that -i doesn't preserve UNIX hard links.
+
+ [ 23160]
+ document that -i messes soft as well hard hard links.
+
+ [ 23164]
+ Subject: [perl #7558] [PATCH] README.solaris
+ From: Andy Dougherty <doughera@lafayette.edu>
+ Date: Mon, 26 Jul 2004 15:32:35 -0400 (EDT)
+ Message-Id: <Pine.SOL.4.58.0407261530350.19559@maxwell.phys.lafayette.edu>
+
+ Add more info on /dev/random under solaris
+
+ [ 23165]
+ Subject: Re: AW: [perl #7558] [PATCH] README.solaris
+ From: Andy Dougherty <doughera@lafayette.edu>
+ Date: Tue, 27 Jul 2004 14:12:06 -0400 (EDT)
+ Message-ID: <Pine.SOL.4.58.0407271335550.22839@maxwell.phys.lafayette.edu>
+
+ [ 23172]
+ A few minor updates to README.win32 (aka perlwin32)
+
+ [ 23182]
+ Subject: [PATCH] mention refaddr() in overload::StrVal docs
+ From: Fergal Daly <fergal@esatclear.ie>
+ Date: Fri, 30 Jul 2004 16:09:19 +0100
+ Message-ID: <20040730150919.GB19022@dyn.fergaldaly.com>
+
+ [ 23184]
+ Enhance the caveat in the description of tell()
+
+ Subject: Re: [perl #30788] Error in documentation
+ From: Nick Ing-Simmons <nick@ing-simmons.net>
+ Date: Wed, 28 Jul 2004 15:12:54 +0100
+ Message-Id: <20040728141254.3861.5@llama.ing-simmons.net>
+
+ [ 23205]
+ Add a note in perltodo about a potential extension of readpipe()
+
+ [ 23220]
+ Subject: Updates to modules-related pod
+ From: Kirrily Skud Robert <skud@infotrope.net>
+ Date: Mon, 16 Aug 2004 16:00:14 -0400
+ Message-ID: <20040816200014.GC27764@infotrope.net>
+
+ [ 23224]
+ Add notes for building with MS VC++ Toolkit 2003
+
+ [ 23227]
+ Delete superfluous "with".
+
+ [ 23236]
+ Grammatical nit by Hugo.
+
+ [ 23240]
+ Pumpkinship updates
+
+ [ 23250]
+ From: david nicol <whatever@davidnicol.com>
+ Subject: [perl #31228] no no-op
+ Message-Id: 1093659222.1436.70.camel@plaza.davidnicol.com>
+ Date: 27 Aug 2004 21:13:42 -0500
+
+ Document that 0 and 1 can (sort of) be used as no-ops.
+
+ [ 23276]
+ Subject: [PATCH] perlintro.pod
+ From: Paul Johnson <paul@pjcj.net>
+ Date: Tue, 7 Sep 2004 15:13:51 +0200
+ Message-ID: <20040907131351.GD2513@pjcj.net>
+
+ [ 23281]
+ Subject: [perl #21553] Re: Solaris Perl (fwd)
+ From: Andy Dougherty <doughera@lafayette.edu>
+ Date: Wed, 8 Sep 2004 11:32:26 -0400 (EDT)
+ Message-Id: <Pine.SOL.4.58.0409081129180.17582@maxwell.phys.lafayette.edu>
+ Clarify whether it's safe to replace the perl bundled with Solaris
+
+ [ 23283]
+ Subject: [PATCH-5.8.5] lib/bigint.pm tiny typo fix
+ From: "Konovalov, Vadim" <vkonovalov@spb.lucent.com>
+ Date: Mon, 6 Sep 2004 11:09:51 +0400
+ Message-ID: <7DD1BE2C50259746ABB8683672D2089E081132@itotest-1.spb.lucent.com>
+ Branch: maint-5.8/perl
+ ! pod/perldiag.pod
+ !> README.solaris README.win32 lib/bigint.pm lib/overload.pm
+ !> pod/perlfunc.pod pod/perlhack.pod pod/perlintro.pod
+ !> pod/perlnewmod.pod pod/perlop.pod pod/perlrun.pod
+ !> pod/perltodo.pod
+____________________________________________________________________________
+[ 23313] By: nicholas on 2004/09/10 09:56:57
+ Log: Integrate:
+ [ 23277]
+ Subject: SvO?OK_off()'s return value
+ From: Marcus Holland-Moritz <mhx-perl@gmx.net>
+ Date: Sun, 1 Aug 2004 12:46:48 +0200
+ Message-Id: <20040801124648.7f9b3cee@r2d2>
+
+ Move (void) casts into SvOOK_off macro.
+ Branch: maint-5.8/perl
+ ! pp_ctl.c
+ !> gv.c mg.c perl.c pp.c pp_hot.c scope.c sv.c sv.h
+____________________________________________________________________________
+[ 23312] By: nicholas on 2004/09/10 09:20:53
+ Log: Integrate:
+ [ 23218]
+ Subject: [PATCH] make cygwin ld2 executable
+ From: Yitzchak Scott-Thoennes <sthoenna@efn.org>
+ Date: Sun, 15 Aug 2004 17:14:59 -0700
+ Message-ID: <20040816001252.GA2148@efn.org>
+
+ [ 23219]
+ Subject: [PATCH] running mktables on VMS
+ From: "Craig A. Berry" <craigberry@mac.com>
+ Date: Tue, 10 Aug 2004 22:28:04 -0500
+ Message-ID: <41199244.9020706@mac.com>
+
+ [ 23274]
+ Subject: [PATCH] -Dunlink_all_versions for VMS
+ From: "Craig A. Berry" <craigberry@mac.com>
+ Date: Sat, 04 Sep 2004 11:58:56 -0500
+ Message-ID: <4139F450.7040708@mac.com>
+ Branch: maint-5.8/perl
+ !> configure.com cygwin/Makefile.SHs vms/descrip_mms.template
+____________________________________________________________________________
+[ 23311] By: nicholas on 2004/09/10 09:09:38
+ Log: Integrate:
+ [ 23225]
+ Mark a test that relies on tainting behavior as TODO on Windows.
+
+
+ Should have been part of integration 23310, but for
+ http://www.google.com/search?q=%66%75%63%6Bing+perforce
+ Branch: maint-5.8/perl
+ !> t/comp/opsubs.t
+____________________________________________________________________________
+[ 23310] By: nicholas on 2004/09/10 08:57:45
+ Log: Integrate:
+ [ 23206]
+ Subject: Patch for t/op/sleep.t
+ From: Andy Lester <andy@petdance.com>
+ Date: Mon, 9 Aug 2004 00:11:51 -0500
+ Message-ID: <20040809051151.GA13872@petdance.com>
+
+ [ 23215]
+ Subject: Test for functions with operator names
+ From: Andy Lester <andy@petdance.com>
+ Date: Thu, 12 Aug 2004 11:31:03 -0500
+ Message-ID: <20040812163103.GA26687@petdance.com>
+
+ [ 23253]
+ Subject: PATCH: Taintedness and ternary conditional
+ From: Andy Lester <andy@petdance.com>
+ Date: Thu, 26 Aug 2004 23:44:47 -0500
+ Message-Id: <20040827044447.GA5268@petdance.com>
+
+ add tests and documentation to the effect that ($tainted ? $a : $b)
+ doesn't necessarily return a tainted value. Also tidy the markup in
+ perldoc.pod
+ Branch: maint-5.8/perl
+ +> t/comp/opsubs.t
+ !> MANIFEST pod/perlsec.pod t/op/sleep.t t/op/taint.t
+____________________________________________________________________________
+[ 23309] By: nicholas on 2004/09/10 08:41:17
+ Log: Integrate:
+ [ 23179]
+ Skip test when building without Encode.
+
+ [ 23181]
+ Fix breakage caused by Change 23179
+
+ [ 23244]
+ Skip a Data::Dumper test if configured without B module.
+
+ [ 23245]
+ Fix skipping of a Dumpvalue test when configured without Devel::Peek.
+
+ [ 23246]
+ Skip Time::HiRes tests if configured without that module.
+ Branch: maint-5.8/perl
+ !> ext/Data/Dumper/t/dumper.t ext/Time/HiRes/t/HiRes.t
+ !> lib/Dumpvalue.t t/run/fresh_perl.t
+____________________________________________________________________________
+[ 23308] By: nicholas on 2004/09/10 07:28:09
+ Log:
+ Integrate:
+ [ 23173]
+ Fix and update Perl_grok_* docs.
+
+ [ 23176]
+ Add comment to the top of most .c files explaining their purpose
+
+ [ 23180]
+ Add comment to top of reentr.c and fix typos in other files
+
+ [ 23187]
+ more typo fixes for change 3176 (comments at top of .c files)
+
+ [ 23195]
+ Comment describing purpose.
+
+ [ 23196]
+ Document sv_catpvn_nomg, sv_setsv_nomg and sv_catsv_nomg.
+
+ [ 23207]
+ fix minor nit in file description, to keep Jarkko happy
+
+ [ 23214]
+ Subject: api doc fix for SvSetMagicSV_nosteal
+ From: Stas Bekman <stas@stason.org>
+ Date: Thu, 12 Aug 2004 18:10:36 -0700
+ Message-ID: <411C150C.5020602@stason.org>
+ Branch: maint-5.8/perl
+ !> (integrate 37 files)
+____________________________________________________________________________
+[ 23307] By: nicholas on 2004/09/10 06:45:43
+ Log:
+ Email change for Steffen Mueller.
+
+ [ 23162]
+ Windows-related updates to Porting/repository.pod
+ Branch: maint-5.8/perl
+ !> AUTHORS Porting/repository.pod
+____________________________________________________________________________
+[ 23306] By: nicholas on 2004/09/10 06:39:03
+ Log: Integrate:
+ [ 23126]
+ Encourage compilers to tail call optimise in sv_savepv, sv_savepvn
+ and sv_savesharedpv. Need to create non-void returning versions of
+ Copy and Zero, as the existing macros deliberately cast to (void)
+
+ [ 23135]
+ Turn 2 strcpy()s into memcpy() because we know the length.
+ Branch: maint-5.8/perl
+ !> handy.h malloc.c perl.c pod/perlapi.pod sv.c toke.c util.c
+____________________________________________________________________________
+[ 23305] By: nicholas on 2004/09/10 06:25:00
+ Log: Integrate:
+ [ 23122]
+ oslevel can fail on AIX, but the output generated would confuse
+ Configure
+
+ [ 23124]
+ Be sure HP-UX' ANSI C compiler's PATH is found *before*
+ the path to the bundled braindead C compiler. This might
+ influence ccache's behaviour in finding the correct path
+
+ [ 23174]
+ First steps towards an explicit perl.exp-less AIX build
+ Previous method can still be used by undeffing usenativedlopen
+ If that is ever tested at all on AIX
+
+ [ 23188]
+ gcc on AIX doesn't like -G on the commandline
+
+ [ 23189]
+ gcc on AIX 4 doesn't like -G on the commandline too
+ Branch: maint-5.8/perl
+ !> Configure hints/aix.sh hints/aix_4.sh
+____________________________________________________________________________
+[ 23304] By: nicholas on 2004/09/10 06:04:43
+ Log: Integrate:
+ [ 23111]
+ This seems to be needed to get COW working on Win32
+
+ [ 23121]
+ Some calls to PerlMemShared_alloc() aren't checking the return value.
+ Bug spotted by Nigel Sandever
+
+ [ 23128]
+ Use VirtualAlloc() more flexibly when using it to mimic UNIX's sbrk().
+ From: Steve Hay <steve.hay@uk.radan.com>
+ CC: perl-win32-porters@listserv.ActiveState.com
+ Message-ID: <40F6B295.8010804@uk.radan.com>
+
+ Assumes perl's malloc can now handle non-contiguous memory (believed
+ to be true).
+ Does not address threading issues.
+
+ "The attached patch (against blead) makes sbrk() initially try to
+ extend the existing block of memory exactly as it currently does, but
+ to not fail immediately if it can't -- it now frees up that part of
+ whatever it had previously reserved+committed which hadn't actually
+ been used yet, resets all its static variables and basically starts
+ anew."
+ Branch: maint-5.8/perl
+ !> ext/threads/threads.xs util.c win32/win32.c
+____________________________________________________________________________
+[ 23303] By: nicholas on 2004/09/10 05:25:22
+ Log: Integrate:
+ [ 23091]
+ Check each line of config_re output.
+
+ [ 23147]
+ Config::config_re and config_sh would report the byteorder as 'ffff'
+
+ [ 23185]
+ Subject: [PATCH] additional -V:foo tests
+ From: Jim Cromie <jcromie@divsol.com>
+ Date: Mon, 02 Aug 2004 09:15:23 -0600
+ Message-ID: <410E5A8B.9030307@divsol.com>
+ Branch: maint-5.8/perl
+ !> configpm lib/Config.t pod/perlrun.pod
+____________________________________________________________________________
+[ 23302] By: nicholas on 2004/09/09 21:45:33
+ Log: Integrate:
+ [ 23023]
+ [perl #30258] utf8 POPSTACK crash on split execution
+ split() does a SWITCHSTACK to directly split to an array, but
+ if it subsequently dies (eg the regex triggers a 'use utf8' which
+ is then denied by Safe), then the switch doesn't get undone. Add
+ a new save type to allow for this.
+
+ [ 23150]
+ Subject: Re: "Too late for -T" could be more descriptive
+ From: Jim Cromie <jcromie@divsol.com>
+ Date: Wed, 21 Jul 2004 11:21:50 -0600
+ Message-ID: <40FEA62E.2010809@divsol.com>
+ (with tweaks)
+
+ [ 23158]
+ [perl #30733] memory leak in array delete
+ av_delete() wasn't mortalizing the returned value
+
+ [ 23209]
+ eval_sv() failing a taint test could corrupt the stack
+
+ [ 23210]
+ Fix a typo and remove some debugging crud from change #23209
+
+ [ 23271]
+ only mortalize deleted array elements for AvREAL
+ (update to change #23158)
+
+ [ 23279]
+ Add MY_CXT_CLONE to the core. (Taken from Time::HiRes.) See also:
+ http://groups.google.com/groups?selm=r5l1vv00ca033k7a06d40fgei1ion91rnp%404ax.com
+ Branch: maint-5.8/perl
+ !> av.c ext/XS/APItest/t/call.t perl.c perl.h pod/perldebug.pod
+ !> pod/perldiag.pod pod/perlrun.pod pp.c scope.c scope.h
+ !> t/op/delete.t
+____________________________________________________________________________
+[ 23301] By: nicholas on 2004/09/09 16:17:05
+ Log: Integrate:
+ [ 23300]
+ A single version of B that supports 5.8 and 5.10
+
+
+ Plus some edits to remove the last differences on the maint side.
+ Branch: maint-5.8/perl
+ ! ext/B/B.pm ext/B/B/C.pm
+ !> ext/B/B.xs ext/B/ramblings/runtime.porting ext/B/t/lint.t
+____________________________________________________________________________
+[ 23299] By: nicholas on 2004/09/09 15:44:32
+ Log: Synchronise the opname regexp with blead.
+ (No harm in including dor, as nothing in maint will generate that)
+ Branch: maint-5.8/perl
+ ! ext/B/B.pm
+____________________________________________________________________________
+[ 23298] By: nicholas on 2004/09/09 13:46:42
+ Log: Undo integration edit to make file identical with blead.
+ Expectation munging now done conditionally on perl version.
+ Branch: maint-5.8/perl
+ ! ext/B/t/stash.t
+____________________________________________________________________________
+[ 23297] By: nicholas on 2004/09/09 13:34:25
+ Log: Integrate:
+ [ 23212]
+ Subject: 2 patches: goto.t, B.pm/xs
+ From: Jim Cromie <jcromie@divsol.com>
+ Date: Sun, 08 Aug 2004 18:42:47 -0600
+ Message-ID: <4116C887.9080400@divsol.com>
+
+ [ 23249]
+ Subject: [ PATCH ] 2 added private flags for B::Concise
+ From: Jim Cromie <jcromie@divsol.com>
+ Date: Tue, 31 Aug 2004 23:19:54 -0600
+ Message-Id: <41355BFA.8010900@divsol.com>
+
+ The OPpENTERSUB_NOMOD and OPpCONST_SHORTCIRCUIT flags weren't
+ displayed by B::Concise.
+ Branch: maint-5.8/perl
+ !> ext/B/B.pm ext/B/B.xs ext/B/B/Concise.pm
+____________________________________________________________________________
+[ 23296] By: nicholas on 2004/09/09 12:58:00
+ Log: Integrate:
+ [ 23105]
+ Lots of tests for for reverse ...
+
+ [ 23108]
+ Optimise foreach my $i (reverse ...)
+ foreach without a lexical iterator not yet optimised
+
+ [ 23109]
+ "That's the way to do it"
+ In taking out a bug spotted by my regression tests in t/cmd/for.t
+ I actually managed to disable the entire optimisation. Which means
+ that I didn't find the other bug. This optimisation is live, and
+ passes all tests.
+
+ [ 23112]
+ The optrees for C<for $_ (...)> and C<for (...)> differ, so even more
+ tests.
+
+ [ 23113]
+ Now optimising for $a (reverse ...)
+
+ [ 23114]
+ Optimise for (reverse ...)
+
+ [ 23115]
+ for (reverse @foo) now iterates in reverse in place.
+ Branch: maint-5.8/perl
+ ! op.c
+ !> ext/B/B/Concise.pm op.h pp_ctl.c pp_hot.c t/cmd/for.t
+____________________________________________________________________________
+[ 23295] By: nicholas on 2004/09/09 11:25:08
+ Log: Jarkko had reverted ext/B/t/bytecode.t with change 20434.
+ Hence it was gone from the MANIFEST. Re-integrating it may prove to
+ be foolish on my part, but let's give it a smoke for now.
+ Branch: maint-5.8/perl
+ ! MANIFEST
+____________________________________________________________________________
+[ 23294] By: nicholas on 2004/09/09 11:12:47
+ Log: Integrate:
+ [ 21566]
+ Subject: [PATCH lib/overload.t] TODO tests for bug #24313.
+ From: Abigail <abigail@abigail.nl>
+ Date: Mon, 27 Oct 2003 13:05:37 +0100
+ Message-ID: <20031027120536.GA24608@abigail.nl>
+
+ Subject: [PATCH bleadperl] [perl #24313] (was Re: [PATCH lib/overload.t] TODO tests for bug #24313.)
+ From: Rick Delaney <rick@bort.ca>
+ Date: Mon, 27 Oct 2003 12:17:49 -0500
+ Message-ID: <20031027121749.E2233@biff.bort.ca>
+
+ [ 23106]
+ Numeric comparison operators mustn't compare addresses of references
+ that are overloaded.
+ Branch: maint-5.8/perl
+ !> lib/overload.t pp.c pp_hot.c toke.c
+____________________________________________________________________________
+[ 23293] By: nicholas on 2004/09/09 10:15:43
+ Log: Integrate:
+ [ 23242]
+ Skip ext/B/t/assembler.t when configured without B.
+
+ [ 23243]
+ Fix typo in B::Assembler.
+ Branch: maint-5.8/perl
+ !> ext/B/B/Assembler.pm ext/B/t/assembler.t
+____________________________________________________________________________
+[ 23292] By: nicholas on 2004/09/09 09:55:09
+ Log: Integrate:
+ [ 23093]
+ The current optimisation for sort {$b cmp $a} is bogus now that we
+ guarantee a stable sort. Disable it, pending a correct optimisation.
+
+ [ 23096]
+ A proper, working, stable optimisation for sort {$b cmp $a}
+
+ [ 23097]
+ Also test reverse sort in scalar context
+
+ [ 23098]
+ Test reverse sort as the return from a function in list and scalar
+ contexts.
+
+ [ 23099]
+ Check that non-optimimisable sort comparisons work when reversed
+ (Not optimised yet, but might be coming soon)
+
+ [ 23100]
+ check that reverse (sort (@a), @b) etc work.
+ Join some lines that don't need wrapping
+
+ [ 23102]
+ Optimise list context reverse sort to reverse as part of the sort op
+
+ [ 23166]
+ Subject: Re: more 5.9 sort tests (second draft)
+ From: david nicol <whatever@davidnicol.com>
+ Date: 21 Jul 2004 17:10:05 -0500
+ Message-Id: <1090447805.995.24.camel@plaza.davidnicol.com>
+ Branch: maint-5.8/perl
+ ! op.c
+ !> ext/B/B/Concise.pm ext/B/t/f_sort.t op.h pp_sort.c t/op/sort.t
+____________________________________________________________________________
+[ 23291] By: nicholas on 2004/09/09 09:22:38
+ Log: Integrate:
+ [ 23046]
+ Subject: Re: [perl #30504] B::Deparse scoping problem with for loop
+ From: Stephen McCamant <smcc@MIT.EDU>
+ Date: Mon, 28 Jun 2004 18:26:24 -0700
+ Message-ID: <16608.50496.787002.560481@apocalypse.OCF.Berkeley.EDU>
+
+ [ 23047]
+ Update tests and $VERSION for change 23046
+
+ plus changes to Deparse.pm from 17682 and 18727. Deparse is now
+ identical in blead and maint.
+ Branch: maint-5.8/perl
+ ! ext/B/B/Deparse.pm ext/B/defsubs_h.PL
+ !> ext/B/t/deparse.t
+____________________________________________________________________________
+[ 23290] By: nicholas on 2004/09/09 08:39:31
+ Log: Integrate:
+ [ 22824]
+ Fix new B::Concise test output
+ Subject: Re: Smoke [5.9.2] 22820 FAIL(F) openbsd 3.5 (i386/1 cpu)
+ From: Jim Cromie <jcromie@divsol.com>
+ Date: Mon, 17 May 2004 09:19:00 -0600
+ Message-ID: <40A8D7E4.1020007@divsol.com>
+
+ [ 22825]
+ Remove a TODO test that is no longer to do.
+
+ [ 22833]
+ Test portability nit.
+ Subject: [PATCH] Re: Smoke [5.9.2] 22821 FAIL(F) MSWin32 WinXP/.Net SP1 (x86/1 cpu)
+ From: Steve Hay <steve.hay@uk.radan.com>
+ Date: Tue, 18 May 2004 11:31:04 +0100
+ Message-ID: <40A9E5E8.7030800@uk.radan.com>
+
+ [ 22951]
+ If we don't build B, we should skip all its tests.
+ Branch: maint-5.8/perl
+ +> ext/B/t/bytecode.t
+ ! ext/B/t/f_sort.t ext/B/t/optree_samples.t
+ !> ext/B/t/f_map.t ext/B/t/optree_check.t
+ !> ext/B/t/optree_concise.t ext/B/t/optree_sort.t
+ !> ext/B/t/optree_specials.t ext/B/t/optree_varinit.t
+____________________________________________________________________________
+[ 23289] By: nicholas on 2004/09/09 06:48:05
+ Log: I DO NOT NEED THIS
+ //depot/maint-5.8/perl/ext/B/t/f_map.t - can't branch (already opened for add)
+ //depot/maint-5.8/perl/ext/B/t/f_sort.t - can't branch (already opened for add)
+
+ (23278 integration redux - the parts that perforce JUST CANNOT DO the
+ first time)
+ Branch: maint-5.8/perl
+ !> ext/B/t/f_map.t ext/B/t/f_sort.t
+____________________________________________________________________________
+[ 23288] By: nicholas on 2004/09/09 06:30:32
+ Log: Integrate:
+ [ 22820]
+ Subject: Re: more B::Concise stuff (PATCH - updated)
+ From: Jim Cromie <jcromie@divsol.com>
+ Date: Mon, 10 May 2004 05:28:11 -0600
+ Message-ID: <409F674B.2000506@divsol.com>
+
+ [ 23278]
+ backport B to work on 5.8.x, so that a single version of the source
+ can be maintained, and ultimately dual-lifed on CPAN
+ (the version conditional changes are actually surprisingly small)
+
+ (well, except the bits that hateful perforce won't let me integrate
+ this time round)
+ Branch: maint-5.8/perl
+ +> ext/B/t/f_map ext/B/t/f_map.t ext/B/t/f_sort ext/B/t/f_sort.t
+ +> ext/B/t/optree_specials.t
+ ! ext/B/t/concise.t ext/B/t/showlex.t
+ !> MANIFEST ext/B/B/Concise.pm ext/B/B/Showlex.pm
+ !> ext/B/B/Terse.pm ext/B/t/OptreeCheck.pm ext/B/t/optree_check.t
+ !> ext/B/t/optree_concise.t ext/B/t/optree_samples.t
+ !> ext/B/t/optree_sort.t ext/B/t/optree_varinit.t
+____________________________________________________________________________
+[ 23287] By: nicholas on 2004/09/08 22:14:31
+ Log: Integrate:
+ [ 22354]
+ Increment the version number of B, due to the incompatible
+ API change introduced by #22353 (no more op_seq method.)
+
+ [ 22801]
+ Subject: Re: stdio still supported?
+ From: Jim Cromie <jcromie@divsol.com>
+ Date: Thu, 06 May 2004 16:37:56 -0600
+ Message-Id: <409ABE44.8060307@divsol.com>
+
+ Update B::Concise tests to skip stuff requiring the
+ "open to a scalar" feature of Perlio is it isn't available.
+ Also note this caveat in perlfunc.pod
+ Branch: maint-5.8/perl
+ ! ext/B/B.pm
+ !> ext/B/B/Concise.pm ext/B/t/concise.t ext/B/t/optree_check.t
+ !> ext/B/t/optree_concise.t ext/B/t/optree_samples.t
+ !> ext/B/t/optree_sort.t ext/B/t/optree_varinit.t
+ !> pod/perlfunc.pod
+____________________________________________________________________________
+[ 23286] By: nicholas on 2004/09/08 21:58:30
+ Log: Integrate:
+ [ 22669]
+ Fix command-line quoting under Windows for the new optree tests
+ Subject: Re: Smoke [5.9.2] 22666 FAIL(F) MSWin32 WinXP/.Net SP1 (x86/1 cpu)
+ From: Steve Hay <steve.hay@uk.radan.com>
+ Date: Wed, 07 Apr 2004 09:46:01 +0100
+ Message-ID: <4073BFC9.10707@uk.radan.com>
+ Branch: maint-5.8/perl
+ !> ext/B/t/optree_samples.t
+____________________________________________________________________________
+[ 23285] By: nicholas on 2004/09/08 21:47:12
+ Log: Integrate:
+ [ 22664]
+ Subject: Re: tests for change #22539
+ From: Jim Cromie <jcromie@divsol.com>
+ Date: Tue, 30 Mar 2004 14:39:31 -0700
+ Message-ID: <4069E913.5040906@divsol.com>
+ (with some spelling tweaks)
+ Branch: maint-5.8/perl
+ +> ext/B/t/OptreeCheck.pm ext/B/t/optree_check.t
+ +> ext/B/t/optree_concise.t ext/B/t/optree_samples.t
+ +> ext/B/t/optree_sort.t ext/B/t/optree_varinit.t
+ !> MANIFEST ext/B/B/Concise.pm ext/B/t/concise.t
+____________________________________________________________________________
+[ 23284] By: nicholas on 2004/09/08 20:50:55
+ Log: Integrate:
+
+ (the parts of the first that affect ext/B/... and the parts of the
+ second that related to changes in 22353)
+
+ [ 22353]
+ Subject: Re: op_seq (was: Freeing code)
+ From: Paul Johnson <paul@pjcj.net>
+ Date: Sat, 21 Feb 2004 02:31:47 +0100
+ Message-ID: <20040221013147.GB6953@pjcj.net>
+
+ Rework the OP structure to use less space.
+ Remove op_seq (and simulate it in dump.c),
+ replace it by op_opt and op_static,
+ shrink op_type, remove PL_op_seqmax.
+
+ [ 23278]
+ backport B to work on 5.8.x, so that a single version of the source
+ can be maintained, and ultimately dual-lifed on CPAN
+ (the version conditional changes are actually surprisingly small)
+ Branch: maint-5.8/perl
+ ! ext/B/B.xs ext/B/B/C.pm ext/B/B/Concise.pm
+ !> ext/B/B/Debug.pm ext/B/t/stash.t
+____________________________________________________________________________
+[ 23273] By: nicholas on 2004/09/05 22:06:51
+ Log: Integrate:
+ [ 23232]
+ Upgrade to Time::HiRes 1.61
+
+ [ 23237]
+ Upgrade to MIME::Base64 3.02.
+
+ [ 23238]
+ Upgrade to MIME::Base64 3.03
+
+ [ 23241]
+ Subject: [PATCH] File::Spec::VMS update
+ From: "Craig A. Berry" <craigberry@mac.com>
+ Date: Fri, 27 Aug 2004 18:51:09 -0500
+ Message-ID: <412FC8ED.1020300@mac.com>
+
+ [ 23247]
+ Update to File::Spec 0.90
+
+ [ 23248]
+ Upgrade to Cwd 2.21.
+
+ [ 23258]
+ Upgrade to Encode 2.02
+ Branch: maint-5.8/perl
+ !> (integrate 28 files)
+____________________________________________________________________________
+[ 23272] By: nicholas on 2004/09/05 21:47:13
+ Log: Integrate:
+ [ 23194]
+ Subject: Re: POSIX::sigprocmask implemented incorrectly
+ From: Alan Burlison <Alan.Burlison@sun.com>
+ Date: Mon, 19 Jul 2004 12:07:02 +0100
+ Message-ID: <40FBAB56.1030208@sun.com>
+
+ (last chunk only)
+
+ [ 23204]
+ Subject: Re: POSIX::sigprocmask implemented incorrectly
+ From: Alan Burlison <Alan.Burlison@sun.com>
+ Date: Mon, 09 Aug 2004 10:30:25 +0100
+ Message-ID: <41174431.6050803@sun.com>
+
+ [ 23211]
+ Subject: Re: POSIX::sigprocmask implemented incorrectly
+ From: Alan Burlison <Alan.Burlison@sun.com>
+ Date: Mon, 09 Aug 2004 19:00:12 +0100
+ Message-ID: <4117BBAC.7080603@sun.com>
+ Branch: maint-5.8/perl
+ !> ext/POSIX/POSIX.xs
+____________________________________________________________________________
+[ 23270] By: nicholas on 2004/09/05 21:34:19
+ Log: Integrate:
+ [ 23175]
+ Fix copy & paste bugs in mX?PUSH macro tests.
+
+ [ 23203]
+ Add tests for XS call_*() API
+ Branch: maint-5.8/perl
+ +> ext/XS/APItest/t/call.t
+ !> MANIFEST ext/XS/APItest/APItest.pm ext/XS/APItest/APItest.xs
+ !> ext/XS/APItest/MANIFEST pod/perlcall.pod
+____________________________________________________________________________
+[ 23269] By: nicholas on 2004/09/05 21:03:20
+ Log: Integrate:
+ [ 23223]
+ Upgrade to Devel::PPPort 3.00_01.
+
+ [ 23226]
+ Upgrade to Devel::PPPort 3.00_02.
+
+ [ 23229]
+ Upgrade to Devel::PPPort 3.00_03.
+
+ [ 23234]
+ Upgrade to Devel::PPPort 3.01.
+ Branch: maint-5.8/perl
+ +> ext/Devel/PPPort/parts/inc/sv_xpvf ext/Devel/PPPort/t/cop.t
+ +> ext/Devel/PPPort/t/sv_xpvf.t
+ !> MANIFEST ext/Devel/PPPort/Changes ext/Devel/PPPort/MANIFEST
+ !> ext/Devel/PPPort/META.yml ext/Devel/PPPort/Makefile.PL
+ !> ext/Devel/PPPort/PPPort.pm ext/Devel/PPPort/PPPort.xs
+ !> ext/Devel/PPPort/PPPort_pm.PL ext/Devel/PPPort/TODO
+ !> ext/Devel/PPPort/module2.c ext/Devel/PPPort/parts/apicheck.pl
+ !> ext/Devel/PPPort/parts/inc/misc
+ !> ext/Devel/PPPort/parts/inc/ppphbin
+ !> ext/Devel/PPPort/parts/inc/ppphtest
+ !> ext/Devel/PPPort/parts/inc/uv
+ !> ext/Devel/PPPort/parts/inc/version
+ !> ext/Devel/PPPort/parts/ppptools.pl
+ !> ext/Devel/PPPort/parts/todo/5004000
+ !> ext/Devel/PPPort/parts/todo/5004050
+ !> ext/Devel/PPPort/parts/todo/5006000
+ !> ext/Devel/PPPort/t/ppphtest.t ext/Devel/PPPort/t/uv.t
+____________________________________________________________________________
+[ 23268] By: nicholas on 2004/09/05 20:48:03
+ Log: Integrate:
+ [ 22535]
+ Move Beau Cox's ppport.h fixes into PPPort.pm
+
+ [ 23222]
+ Upgrade to Devel::PPPort 3.00.
+ Branch: maint-5.8/perl
+ +> (branch 103 files)
+ - ext/Devel/PPPort/t/test.t
+ !> MANIFEST ext/Devel/PPPort/Changes ext/Devel/PPPort/MANIFEST
+ !> ext/Devel/PPPort/Makefile.PL ext/Devel/PPPort/PPPort.pm
+ !> ext/Devel/PPPort/PPPort.xs ext/Devel/PPPort/README
+ !> ext/Devel/PPPort/TODO ext/Devel/PPPort/module2.c
+ !> ext/Devel/PPPort/module3.c ext/Devel/PPPort/ppport_h.PL
+ !> ext/Devel/PPPort/soak
+____________________________________________________________________________
+[ 23265] By: nicholas on 2004/09/05 19:50:28
+ Log: Integrate:
+ [ 23142]
+ Subject: [perl #30609] [PATCH] BigInt v1.71 - first try
+ From: Tels <perl_dummy@bloodgate.com>
+ Date: Sat, 17 Jul 2004 16:22:57 +0200
+ Message-Id: <200407171622.58443@bloodgate.com>
+
+ [ 23152]
+ Upgrade to Cwd 2.20
+
+ [ 23168]
+ Upgrade to File::Spec 0.88.
+
+ [ 23171]
+ Upgrade to Math::BigInt v1.71.
+
+ [ 23202]
+ Subject: [PATCH] DB_File 1.810
+ From: "Paul Marquess" <Paul.Marquess@btinternet.com>
+ Date: Sat, 7 Aug 2004 15:22:09 +0100
+ Message-Id: <20040807142059.CTQC10838.mta10-svc.ntlworld.com@MARQUESSPT21>
+ Branch: maint-5.8/perl
+ +> ext/Cwd/t/win32.t
+ ! lib/Math/BigInt.pm
+ !> MANIFEST ext/Cwd/Changes ext/Cwd/Cwd.xs ext/Cwd/t/cwd.t
+ !> ext/DB_File/Changes ext/DB_File/DB_File.pm
+ !> ext/DB_File/DB_File.xs ext/DB_File/t/db-hash.t lib/Cwd.pm
+ !> lib/File/Spec.pm lib/File/Spec/Win32.pm lib/File/Spec/t/Spec.t
+ !> lib/Math/BigFloat.pm lib/Math/BigInt/Calc.pm
+ !> lib/Math/BigInt/t/bare_mbf.t lib/Math/BigInt/t/bare_mbi.t
+ !> lib/Math/BigInt/t/bigfltpm.inc lib/Math/BigInt/t/bigfltpm.t
+ !> lib/Math/BigInt/t/bigintpm.inc lib/Math/BigInt/t/bigintpm.t
+ !> lib/Math/BigInt/t/sub_mbf.t lib/Math/BigInt/t/sub_mbi.t
+ !> lib/Math/BigInt/t/with_sub.t
+____________________________________________________________________________
+[ 23264] By: nicholas on 2004/09/05 18:42:01
+ Log: Integrate:
+ [ 23092]
+ Subject: Re: [perl #30568] splice generates undef? [PATCH]
+ From: LAUN Wolfgang <wolfgang.laun@alcatel.at>
+ Date: Mon, 12 Jul 2004 08:26:01 +0200
+ Message-ID: <DF27CDCBD2581D4B88431901094E4B4D02B0C7D2@attmsx1.aut.alcatel.at>
+
+ [ 23145]
+ Subject: [PATCH perl-current] Re: [perl #30688] Empty slice arg with ($;$) prototype
+ From: Rick Delaney <rick@bort.ca>
+ Date: Tue, 20 Jul 2004 16:53:54 -0400
+ Message-ID: <20040720205353.GA970@biff.bort.ca>
+
+ [ 23177]
+ shut up a warning in mg.c
+
+ [ 23178]
+ Remove redundant SvOOK_off (called implicitly by SvOK_off)
+ and merge identical cases.
+
+ [ 23213]
+ Subject: Re: 2 patches: goto.t, B.pm/xs
+ From: Jim Cromie <jcromie@divsol.com>
+ Date: Tue, 10 Aug 2004 07:29:08 -0600
+ Message-ID: <4118CDA4.3060700@divsol.com>
+
+ [ 23217]
+ make pp_goto() cope potential stack reallocation in EXTEND
+ The code for goto &foo had local pointers to the stack that
+ pointed to the wrong place after a realloc.
+
+ [ 23230]
+ a regex in STDOUT destructor coredumped because regex pad already
+ freed
+
+ [ 23235]
+ Subject: [perl #31295] PATCH: Test comp/use.t fails on Tru64
+ From: Nikola Milutinovic (via RT) <perlbug-followup@perl.org>
+ Date: 23 Aug 2004 10:37:31 -0000
+ Message-ID: <rt-3.0.11-31295-94232.1.74127465250315@perl.org>
+
+ [ 23251]
+ [perl #31111] Random made scripts crashing perl
+ fix 'formline undef' coredump
+
+ [ 23252]
+ delete spurious blank lines added by change 23251
+ Branch: maint-5.8/perl
+ !> mg.c perl.c pp.c pp_ctl.c scope.c t/comp/use.t t/op/goto.t
+ !> t/op/list.t t/op/ref.t t/op/splice.t
+____________________________________________________________________________
+[ 23263] By: nicholas on 2004/09/05 08:30:36
+ Log: Integrate:
+ [ 23090]
+ no_plan support in test.pl
+
+ [ 23208]
+ made eq_array in t/test.pl handle undef values better
+ Branch: maint-5.8/perl
+ !> t/test.pl
+____________________________________________________________________________
+[ 23262] By: nicholas on 2004/09/05 08:11:31
+ Log: Integrate:
+ [ 23089]
+ Subject: Re: debugger 'R'estart and open database connections
+ From: Andrew Pimlott <andrew@pimlott.net>
+ Date: Mon, 12 Jul 2004 21:06:01 -0400
+ Message-ID: <20040713010601.GF8232@pimlott.net>
+
+ [ 23095]
+ Tweak to change #23089, as suggested by Tim Bunce
+ Branch: maint-5.8/perl
+ !> lib/perl5db.pl
+____________________________________________________________________________
+[ 23261] By: nicholas on 2004/09/04 20:30:30
+ Log: Integrate:
+ [ 23074]
+ Subject: Re: Segfault using HTML::Entities
+ From: Jarkko Hietaniemi <jhi@iki.fi>
+ Message-ID: <40EDBE1A.6080205@iki.fi>
+ Date: Fri, 09 Jul 2004 00:35:22 +0300
+ Branch: maint-5.8/perl
+ !> pp_ctl.c regexec.c t/run/fresh_perl.t
+____________________________________________________________________________
+[ 23260] By: nicholas on 2004/09/04 20:18:50
+ Log: Integrate:
+ [ 22997]
+ Cleanup the main regex in Text::ParseWords and make the
+ parse_line() routine faster. Add a Unicode test case.
+
+ [ 23060]
+ Failing matches don't reset numbered variables.
+ Change #22997 could cause Text::ParseWords to loop forever if the
+ regex didn't not match. Explicitly return if the match fails.
+ Branch: maint-5.8/perl
+ !> lib/Text/ParseWords.pm lib/Text/ParseWords.t
+____________________________________________________________________________
+[ 23259] By: nicholas on 2004/09/04 19:40:24
+ Log: Integrate:
+ [ 22969]
+ Abolish the "Tied variable freed while still in use" error - I have
+ a way to cleanly avoid the coredump.
+
+ [ 23040]
+ t/op/tie.t test 23 is failing when run with utf8 everywhere.
+ Problem appears to be due to theft of temporaries
+ Branch: maint-5.8/perl
+ !> mg.c pod/perldiag.pod t/op/tie.t
+____________________________________________________________________________
+[ 23169] By: nicholas on 2004/07/29 22:05:16
+ Log: Integrate:
+ [ 23058]
+ Stop ENV_IS_CASELESS hv.c picking up the wrong hash value from a
+ shared string scalar.
+
+ [ 23061]
+ hv_store was not passing hash onwards (spotted by Dave)
+ Branch: maint-5.8/perl
+ !> hv.c
+____________________________________________________________________________
+[ 23153] By: nicholas on 2004/07/22 17:05:37
+ Log: Create pod/perl586delta.pod
+ Branch: maint-5.8/perl
+ +> pod/perl586delta.pod
+ ! MANIFEST Makefile.SH pod.lst pod/perl.pod pod/perl585delta.pod
+ ! pod/perltoc.pod vms/descrip_mms.template win32/Makefile
+ ! win32/makefile.mk win32/pod.mak
+____________________________________________________________________________
+[ 23144] By: nicholas on 2004/07/20 16:39:42
+ Log: Typo spotted by Jarkko. (But not by ispell, as it was another valid
+ word)
+ Branch: maint-5.8/perl
+ ! pod/perl585delta.pod
+____________________________________________________________________________
+[ 23143] By: nicholas on 2004/07/19 21:51:18
+ Log: Disarm the maint branch
+ Branch: maint-5.8/perl
+ ! patchlevel.h
+____________________________________________________________________________
+[ 23141] By: nicholas on 2004/07/19 14:25:58
+ Log: Break a leg
+ Branch: maint-5.8/perl
+ ! patchlevel.h pod/perlhist.pod
+____________________________________________________________________________
+[ 23140] By: nicholas on 2004/07/19 14:06:59
+ Log: Update Changes
+ Branch: maint-5.8/perl
+ ! Changes patchlevel.h
diff --git a/gnu/usr.bin/perl/Changes5.8.7 b/gnu/usr.bin/perl/Changes5.8.7
new file mode 100644
index 00000000000..c0f49e1a3f8
--- /dev/null
+++ b/gnu/usr.bin/perl/Changes5.8.7
@@ -0,0 +1,3842 @@
+Please note: This file provides a complete, temporally ordered log of
+changes that went into every version of Perl. If you'd like more
+detailed information, please consult the comments in the individual
+patches posted to the perl5-porters mailing list. Patches for each
+individual change may also be obtained through ftp and rsync--see
+pod/perlhack.pod for the details.
+
+For information on what's new in this release, see pod/perldelta.pod.
+
+[The "CAST AND CREW" list has been moved to AUTHORS.]
+
+NOTE: Each change entry shows the change number; who checked it into the
+repository; when; description of the change; which branch the change
+happened in; and the affected files. The file lists have a short symbolic
+indicator:
+
+ ! modified
+ + added
+ - deleted
+ +> branched (from elsewhere)
+ !> merged changes (from elsewhere)
+
+The Message-Ids in the change entries refer to the email messages sent
+to the perl5-porters mailing list. You can retrieve the messages for
+example from http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/
+
+--------------
+Version v5.8.7 Maintenance release working toward v5.8.7
+--------------
+____________________________________________________________________________
+[ 24637] By: nicholas on 2005/05/30 20:52:19
+ Log: Danger, the emergency destruct system is now activated
+ Branch: maint-5.8/perl
+ ! pod/perlhist.pod
+____________________________________________________________________________
+[ 24636] By: nicholas on 2005/05/30 15:57:32
+ Log: Integrate:
+ [ 24623]
+ Subject: [PATCH] perlrun.pod -w description typo
+ From: Offer Kaye <offer.kaye@gmail.com>
+ Date: Mon, 30 May 2005 11:27:38 +0300
+ Message-ID: <569425050530012768a9baca@mail.gmail.com>
+
+ [ 24624]
+ Minor grammar fix by Uri Guttman
+ Branch: maint-5.8/perl
+ !> pod/perlre.pod pod/perlrun.pod
+____________________________________________________________________________
+[ 24635] By: nicholas on 2005/05/30 13:51:00
+ Log: Revert change 24070 for now (-C on the #! line)
+ Branch: maint-5.8/perl
+ ! pod/perldiag.pod toke.c
+____________________________________________________________________________
+[ 24634] By: nicholas on 2005/05/30 13:01:42
+ Log: Integrate:
+ [ 24629]
+ Subject: [perl #36037] Perl 5.8.7-RC1 build problems on LynxOS
+ From: Olli Savia (via RT) <perlbug-followup@perl.org>
+ Date: 30 May 2005 10:59:35 -0000
+ Message-ID: <rt-3.0.11-36037-113779.5.23037641993746@perl.org>
+ Branch: maint-5.8/perl
+ !> util.c
+____________________________________________________________________________
+[ 24632] By: nicholas on 2005/05/30 12:17:28
+ Log: Integrate:
+ [ 24618]
+ Subject: [PATCH configure.com] compiler awareness week
+ From: "Craig A. Berry" <craigberry@mac.com>
+ Date: Sun, 29 May 2005 12:43:09 -0500
+ Message-Id: <4299FF2D.90209@mac.com>
+ Branch: maint-5.8/perl
+ !> configure.com
+____________________________________________________________________________
+[ 24620] By: nicholas on 2005/05/29 20:56:57
+ Log: Update Changes
+ Branch: maint-5.8/perl
+ ! Changes patchlevel.h
+____________________________________________________________________________
+[ 24616] By: nicholas on 2005/05/29 14:57:28
+ Log: Integrate:
+ [ 24615]
+ Teach buildtoc about README.openbsd, and regenerate various makefiles.
+ Branch: maint-5.8/perl
+ ! pod/perltoc.pod vms/descrip_mms.template win32/Makefile
+ ! win32/makefile.mk
+ !> pod.lst pod/perl.pod
+____________________________________________________________________________
+[ 24611] By: nicholas on 2005/05/27 22:23:55
+ Log: Due to integration ordering errors, README.openbsd was missing from
+ MANIFEST. Fixed.
+ Branch: maint-5.8/perl
+ ! MANIFEST
+____________________________________________________________________________
+[ 24604] By: nicholas on 2005/05/27 14:57:31
+ Log: Update perl587delta with the updated module versions.
+ Branch: maint-5.8/perl
+ ! pod/perl587delta.pod
+____________________________________________________________________________
+[ 24603] By: nicholas on 2005/05/27 14:55:04
+ Log: Update TOC and MANIFSET
+ Branch: maint-5.8/perl
+ ! MANIFEST pod/perltoc.pod
+____________________________________________________________________________
+[ 24602] By: nicholas on 2005/05/27 14:53:41
+ Log: This appears to be missing.
+ Branch: maint-5.8/perl
+ ! embedvar.h
+____________________________________________________________________________
+[ 24601] By: nicholas on 2005/05/27 12:35:55
+ Log: Update Changes
+ Branch: maint-5.8/perl
+ ! Changes patchlevel.h
+____________________________________________________________________________
+[ 24600] By: nicholas on 2005/05/27 11:20:03
+ Log: Integrate:
+ [ 24360]
+ Fix [perl #35162] $SIG{__DIE__} = 'IGNORE' is base.pm is illegal
+
+ [ 24585]
+ Subject: [PATCH] bytes.pm doesn't check undefined subroutine calling
+ From: SADAHIRO Tomoyuki <bqw10602@nifty.com>
+ Date: Thu, 26 May 2005 23:46:35 +0900
+ Message-Id: <20050526234321.92F1.BQW10602@nifty.com>
+ Branch: maint-5.8/perl
+ !> lib/base.pm lib/bytes.pm lib/bytes.t
+____________________________________________________________________________
+[ 24599] By: nicholas on 2005/05/27 11:04:31
+ Log: Integrate:
+ [ 24579]
+ Subject: [PATCH] MPE/iX has no lchown()
+ From: Jarkko Hietaniemi <jhietaniemi@gmail.com>
+ Date: Thu, 26 May 2005 08:36:19 +0300
+ Message-Id: <42956053.4010200@gmail.com>
+ Branch: maint-5.8/perl
+ !> hints/mpeix.sh
+____________________________________________________________________________
+[ 24598] By: nicholas on 2005/05/27 10:52:16
+ Log: Integrate:
+ [ 24541]
+ Subject: Re: [PATCH 5.8.7 RC1] lib/Carp.t todo for VMS
+ From: Michael G Schwern <schwern@pobox.com>
+ Date: May 20, 2005 10:09 PM
+ Message-ID: <20050520200900.GB13473@windhund.schwern.org>
+ Branch: maint-5.8/perl
+ !> lib/Carp.t
+____________________________________________________________________________
+[ 24597] By: nicholas on 2005/05/27 10:38:37
+ Log: Integrate:
+ [ 24317]
+ Fix typo, noticed by Randal Schwartz
+
+ [ 24345]
+ Remove confusing punctuation
+ (spotted by David Rigaudiere)
+
+ [ 24354]
+ Subject: [PATCH] Small patch to perlport.pod
+ From: Sébastien Aperghis-Tramoni <maddingue@free.fr>
+ Date: Thu, 28 Apr 2005 02:24:04 +0200
+ Message-Id: <D38E89F3-B77B-11D9-B91D-000502F3279F@free.fr>
+
+ [ 24368]
+ Clarify the definition of the 'w' pack format, as suggested by
+ Alexey Toptygin.
+
+ [ 24381]
+ document the internals of exception handling
+
+ [ 24383]
+ Subject: [PATCH] perlvar.pod verbatim paragraph first line does not start with a space
+ From: Offer Kaye <offer.kaye@gmail.com>
+ Date: Wed, 4 May 2005 15:10:37 +0300
+ Message-Id: <56942505050405101bfe678d@mail.gmail.com>
+
+ [ 24429]
+ Update the comment describing arenas.
+
+ [ 24430]
+ Fix typo (bug #35368)
+
+ [ 24437]
+ Subject: [PATCH] perlop.pod nit
+ From: Steve Peters <steve@fisharerojo.org>
+ Date: Tue, 10 May 2005 09:41:01 -0500
+ Message-Id: <20050510144101.GA21362@mccoy.peters.homeunix.org>
+
+ [ 24449]
+ Subject: [perl #33765] [PATCH] perlop: mention why 'print !!0' doesn't
+ From: Steve Peters via RT <perlbug-followup@perl.org>
+ Date: 11 May 2005 16:58:22 -0000
+ Message-Id: <rt-3.0.11-33765-112475.14.5633321030279@perl.org>
+
+ Subject: [perl #33766] [PATCH] perldoc -f split lacks basic null example
+ From: Steve Peters via RT <perlbug-followup@perl.org>
+ Date: 11 May 2005 17:13:29 -0000
+ Message-Id: <rt-3.0.11-33766-112476.1.84217630998887@perl.org>
+
+ [ 24450]
+ Rework documentation of split(//,...)
+
+ [ 24493]
+ Clarify definition of octal literals
+ (thanks to Olivier Blin)
+
+ [ 24496]
+ Subject: [PATCH] Eliminate radically out of date CHANGES from perlport
+ From: Michael G Schwern <schwern@pobox.com>
+ Date: Mon, 16 May 2005 15:17:05 -0700
+ Message-ID: <20050516221705.GA212@windhund.schwern.org>
+
+ Subject: [PATCH] Eliminate function signatures from perlport
+ From: Michael G Schwern <schwern@pobox.com>
+ Date: Mon, 16 May 2005 15:24:18 -0700
+ Message-ID: <20050516222418.GA422@windhund.schwern.org>
+
+ [ 24516]
+ Fix a typo
+
+ [ 24563]
+ Documentation nit on @-, found by Guillaume Rousse
+ (plus POD markup simplification, for readability with pod2text)
+
+ [ 24564]
+ Correct the description of pte_arenaroot
+
+ [ 24593]
+ Subject: [PATCH] Re: [perl #35420] localtime corruption
+ From: Michael G Schwern <schwern@pobox.com>
+ Date: Thu, 26 May 2005 13:39:38 -0700
+ Message-ID: <20050526203938.GG11558@windhund.schwern.org>
+ Branch: maint-5.8/perl
+ !> hv.h intrpvar.h pod/perldata.pod pod/perlfunc.pod
+ !> pod/perlhack.pod pod/perlop.pod pod/perlport.pod
+ !> pod/perlreftut.pod pod/perlsyn.pod pod/perlvar.pod sv.c
+____________________________________________________________________________
+[ 24589] By: nicholas on 2005/05/26 15:41:38
+ Log: Integrate:
+ [ 24517]
+ Upgrade to Math::BigInt 1.77
+ Branch: maint-5.8/perl
+ !> lib/Math/BigFloat.pm lib/Math/BigInt.pm
+ !> lib/Math/BigInt/Calc.pm lib/Math/BigInt/t/bare_mbi.t
+ !> lib/Math/BigInt/t/bigfltpm.inc lib/Math/BigInt/t/bigintpm.inc
+ !> lib/Math/BigInt/t/bigintpm.t lib/Math/BigInt/t/sub_mbi.t
+____________________________________________________________________________
+[ 24587] By: nicholas on 2005/05/26 15:26:52
+ Log: Subject: [PATCH] perl587delta.pod - missing "=" in item
+ From: Offer Kaye <offer.kaye@gmail.com>
+ Message-ID: <5694250505220218e21b8ee@mail.gmail.com>
+ Date: Sun, 22 May 2005 12:18:34 +0300
+ Branch: maint-5.8/perl
+ ! pod/perl587delta.pod
+____________________________________________________________________________
+[ 24586] By: nicholas on 2005/05/26 15:24:59
+ Log: Not the RC any more
+ Branch: maint-5.8/perl
+ ! patchlevel.h
+____________________________________________________________________________
+[ 24515] By: nicholas on 2005/05/20 16:42:19
+ Log: The dangers of cut and paste
+ Branch: maint-5.8/perl
+ ! pod/perlhist.pod
+____________________________________________________________________________
+[ 24502] By: nicholas on 2005/05/18 16:08:53
+ Log: Making history (1 line at a time)
+ Branch: maint-5.8/perl
+ ! pod/perlhist.pod
+____________________________________________________________________________
+[ 24494] By: nicholas on 2005/05/17 16:17:16
+ Log: Integrate:
+ [ 24231]
+ Upgrade to Encode 2.0902
+
+ [ 24490]
+ Upgrade to Encode 2.10
+ Branch: maint-5.8/perl
+ +> ext/Encode/t/utf8strict.t
+ ! pod/perl587delta.pod
+ !> MANIFEST ext/Encode/AUTHORS ext/Encode/Changes
+ !> ext/Encode/Encode.pm ext/Encode/Encode.xs
+ !> ext/Encode/Encode/encode.h ext/Encode/MANIFEST
+ !> ext/Encode/META.yml ext/Encode/lib/Encode/Alias.pm
+ !> ext/Encode/t/Aliases.t ext/Encode/t/fallback.t
+____________________________________________________________________________
+[ 24488] By: nicholas on 2005/05/16 16:04:43
+ Log: D'oh. Steve puts me right once more.
+ Branch: maint-5.8/perl
+ ! pod/perl587delta.pod
+____________________________________________________________________________
+[ 24487] By: nicholas on 2005/05/16 15:46:10
+ Log: Summon more, different, fruit.
+ Branch: maint-5.8/perl
+ ! patchlevel.h
+____________________________________________________________________________
+[ 24486] By: nicholas on 2005/05/16 15:36:13
+ Log: Update perldelta.
+ Branch: maint-5.8/perl
+ ! pod/perl587delta.pod
+____________________________________________________________________________
+[ 24485] By: nicholas on 2005/05/16 15:35:24
+ Log: ++$Carp::VERSION;
+ Branch: maint-5.8/perl
+ ! lib/Carp.pm
+____________________________________________________________________________
+[ 24484] By: nicholas on 2005/05/16 15:28:58
+ Log: Update Changes
+ Branch: maint-5.8/perl
+ ! Changes patchlevel.h
+____________________________________________________________________________
+[ 24483] By: nicholas on 2005/05/16 15:19:24
+ Log: Integrate:
+ [ 24347]
+ Remove temporary clean-up from Win32 makefiles
+
+ Change 22501 temporarily added some clean-up to the Win32 makefiles
+ which was only meant to stay until cpan rt #5616 was fixed. It is
+ now fixed (in EU-MM 6.22, which in turn has been in blead for a
+ while now), so these hacks are no longer required.
+
+ This change is also good for maint, which currently contains EU-MM
+ 6.17, which didn't create the blibdirs.exists files in question
+ anyway.
+
+ [ 24349]
+ Silence a compilation warning on Win32
+
+ [ 24374]
+ Fix croak() and confess() so that they don't clobber $!
+ (plus tests to check this)
+
+ [ 24453]
+ Subject: [PATCH] Add Win32::GetFileVersion() function
+ From: "Jan Dubois" <jand@ActiveState.com>
+ Date: Wed, 11 May 2005 22:30:37 -0700
+ Message-Id: <200505120530.j4C5UhpX031152@smtp3.ActiveState.com>
+
+ [ 24454]
+ Remove a couple of unreferenced local variables
+
+ [ 24482]
+ Bump the version number on Win32::Win32
+ Branch: maint-5.8/perl
+ !> lib/Carp.pm lib/Carp.t pp.c win32/Makefile
+ !> win32/ext/Win32/Win32.pm win32/ext/Win32/Win32.xs
+ !> win32/makefile.mk
+____________________________________________________________________________
+[ 24481] By: nicholas on 2005/05/16 15:02:49
+ Log: Missed some of Steve's patches
+ Branch: maint-5.8/perl
+ ! patchlevel.h
+____________________________________________________________________________
+[ 24479] By: nicholas on 2005/05/16 14:29:35
+ Log: This is RC1, for favourable values of $fruit
+ Branch: maint-5.8/perl
+ ! patchlevel.h
+____________________________________________________________________________
+[ 24478] By: nicholas on 2005/05/16 13:43:44
+ Log: Update perldelta
+ Branch: maint-5.8/perl
+ ! pod/perl587delta.pod
+____________________________________________________________________________
+[ 24477] By: nicholas on 2005/05/16 13:29:52
+ Log: Update Changes
+ Branch: maint-5.8/perl
+ ! Changes patchlevel.h
+____________________________________________________________________________
+[ 24474] By: nicholas on 2005/05/16 08:44:34
+ Log: Integrate:
+ [ 24471]
+ Subject: [PATCH] Minor tweak to via
+ From: Andy Lester <andy@petdance.com>
+ Message-ID: <20050513163952.GA20167@petdance.com>
+ Date: Fri, 13 May 2005 11:39:52 -0500
+
+ from a bug report and patch by Matt Lawrence
+ Branch: maint-5.8/perl
+ !> ext/PerlIO/via/via.xs
+____________________________________________________________________________
+[ 24473] By: nicholas on 2005/05/16 08:27:52
+ Log: Integrate:
+ [ 24326]
+ Upgrade to CGI.pm 3.08
+
+ [ 24470]
+ Upgrade to CGI.pm 3.10
+ Branch: maint-5.8/perl
+ +> lib/CGI/t/can.t
+ !> MANIFEST lib/CGI.pm lib/CGI/Carp.pm lib/CGI/Changes
+ !> lib/CGI/Cookie.pm lib/CGI/Pretty.pm lib/CGI/t/form.t
+____________________________________________________________________________
+[ 24466] By: nicholas on 2005/05/13 21:36:27
+ Log: Update META.yml
+ Branch: maint-5.8/perl
+ ! META.yml
+____________________________________________________________________________
+[ 24464] By: nicholas on 2005/05/13 19:49:02
+ Log: Subject: RE: 5.8.7-tobe fails to compile on AIX 4.3.3
+ From: "Jan Dubois" <jand@ActiveState.com>
+ Message-Id: <200505131921.j4DJLgG5007986@smtp3.ActiveState.com>
+ Date: Fri, 13 May 2005 12:21:40 -0700
+ Branch: maint-5.8/perl
+ ! reentr.inc reentr.pl
+____________________________________________________________________________
+[ 24463] By: nicholas on 2005/05/13 15:32:16
+ Log: The danger of cargo cult is that you miss things.
+ Branch: maint-5.8/perl
+ ! README.vms
+____________________________________________________________________________
+[ 24462] By: nicholas on 2005/05/13 14:50:56
+ Log: Cargo cult 5.8.7 upgrade
+ Branch: maint-5.8/perl
+ ! Cross/config.sh-arm-linux META.yml NetWare/Makefile README.os2
+ ! README.vms epoc/createpkg.pl patchlevel.h plan9/config.plan9
+ ! pod/perl585delta.pod vos/build.cm vos/config.alpha.def
+ ! vos/config.alpha.h vos/config.ga.def vos/config.ga.h
+ ! vos/install_perl.cm win32/Makefile win32/config_H.bc
+ ! win32/config_H.gc win32/config_H.vc win32/config_H.vc64
+ ! win32/makefile.mk wince/Makefile.ce
+____________________________________________________________________________
+[ 24458] By: nicholas on 2005/05/12 21:34:03
+ Log: Fix from Steve Peters
+ Branch: maint-5.8/perl
+ ! reentr.inc reentr.pl
+____________________________________________________________________________
+[ 24457] By: nicholas on 2005/05/12 20:04:57
+ Log: Subject: Re: [PATCH] reentr.h changes so threaded Perl's compile on OpenBSD 3.7
+ From: Steve Peters <steve@fisharerojo.org>
+ Message-ID: <20050512201532.GA30279@mccoy.peters.homeunix.org>
+ Date: Thu, 12 May 2005 15:15:32 -0500
+ Branch: maint-5.8/perl
+ ! reentr.h reentr.inc reentr.pl
+____________________________________________________________________________
+[ 24456] By: nicholas on 2005/05/12 19:53:25
+ Log: Integrate:
+ [ 24446]
+ Subject: Hints changes for OS X 10.4
+ From: Michael G Schwern <schwern@pobox.com>
+ Date: Tue, 10 May 2005 18:10:47 -0700
+ Message-ID: <20050511011047.GA23955@windhund.schwern.org>
+ Branch: maint-5.8/perl
+ !> hints/darwin.sh
+____________________________________________________________________________
+[ 24448] By: nicholas on 2005/05/11 14:27:57
+ Log: Integrate:
+ [ 24433]
+ Subject: [PATCH] reentr.h changes so threaded Perl's compile on OpenBSD 3.7
+ From: Steve Peters <steve@fisharerojo.org>
+ Date: Mon, 9 May 2005 21:10:49 -0500
+ Message-Id: <20050510021049.GA20147@mccoy.peters.homeunix.org>
+
+ [ 24441]
+ Subject: Re: [PATCH] reentr.h changes so threaded Perl's compile on OpenBSD 3.7
+ From: Steve Peters <steve@fisharerojo.org>
+ Date: Tue, 10 May 2005 12:44:13 -0500
+ Message-Id: <20050510174413.GA19686@mccoy.peters.homeunix.org>
+
+ [ 24442]
+ Regenerate reentr.[ch]
+
+
+ (plus some edits to cope with the maint/blead differences)
+ Branch: maint-5.8/perl
+ +> README.openbsd
+ ! reentr.h reentr.inc reentr.pl
+ !> MANIFEST
+____________________________________________________________________________
+[ 24447] By: nicholas on 2005/05/11 13:58:12
+ Log: Integrate:
+ [ 24176]
+ cast to/from (void *) in the re-entrant code. Now watch the smoke rise.
+ Branch: maint-5.8/perl
+ ! reentr.c reentr.h reentr.inc
+ !> reentr.pl
+____________________________________________________________________________
+[ 24428] By: nicholas on 2005/05/09 13:27:16
+ Log: Integrate:
+ [ 24425]
+ Change 24413 should have updated makedef.pl with the knowledge that 2
+ symbols are ithreads only.
+ Branch: maint-5.8/perl
+ !> makedef.pl
+____________________________________________________________________________
+[ 24415] By: nicholas on 2005/05/08 05:45:28
+ Log: Integrate:
+ [ 24404]
+ Allocate pointer table entries (for ithread cloning) from an arena
+
+ [ 24405]
+ Make the arena size changeable at compile time, and up the default by
+ a factor of 4.
+
+ [ 24413]
+ The ptr_table arena variables and code is only needed for ithreads.
+
+ (plus move the 2 new variables to the end of intrpvar.h to preserve
+ bincompat)
+ Branch: maint-5.8/perl
+ ! intrpvar.h
+ !> embedvar.h hv.c perl.h perlapi.h sv.c
+____________________________________________________________________________
+[ 24400] By: nicholas on 2005/05/05 15:48:01
+ Log: Integrate:
+ [ 24396]
+ Bump B version numbers
+
+ [ 24398]
+ Bump version numbers
+
+ [ 24399]
+ Bump versions of non dual-life modules
+
+ plus ext/threads/shared/shared.pm version number from 24248
+ Branch: maint-5.8/perl
+ !> ext/B/B.pm ext/B/B/Concise.pm ext/B/B/Deparse.pm
+ !> ext/B/B/Disassembler.pm ext/B/B/Terse.pm
+ !> ext/B/t/OptreeCheck.pm ext/Devel/DProf/DProf.pm
+ !> ext/IO/lib/IO/File.pm ext/IO/lib/IO/Socket/INET.pm
+ !> ext/XS/APItest/APItest.pm ext/threads/shared/shared.pm
+ !> lib/File/Path.pm lib/FileCache.pm lib/Pod/Html.pm
+ !> lib/Symbol.pm lib/utf8.pm win32/FindExt.pm
+____________________________________________________________________________
+[ 24395] By: nicholas on 2005/05/05 13:17:06
+ Log: It's a good job that Steve Hay is paying attention.
+ Branch: maint-5.8/perl
+ ! pod/perl587delta.pod
+____________________________________________________________________________
+[ 24394] By: nicholas on 2005/05/05 12:41:31
+ Log: Subject: [PATCH perl-5.8.7-tobe] relating to 23767
+ From: Robin Barker <Robin.Barker@npl.co.uk>
+ Message-ID: <533D273D4014D411AB1D00062938C4D90849C679@hotel.npl.co.uk>
+ Date: Wed, 4 May 2005 18:21:39 +0100
+ Branch: maint-5.8/perl
+ ! Porting/pumpkin.pod perl.h sv.c
+____________________________________________________________________________
+[ 24391] By: nicholas on 2005/05/05 11:31:18
+ Log: Changes and improvements suggested by Ronald J Kimball, Dave Mitchell,
+ Steve Hay, Aaron Sherman, Hugo van der Sanden and chromatic.
+ Branch: maint-5.8/perl
+ ! pod/perl587delta.pod
+____________________________________________________________________________
+[ 24356] By: nicholas on 2005/04/30 17:02:19
+ Log: Integrate:
+ [ 24355]
+ Put back INSTALL_PREFIX and INSTALL_PREFIX_EXP as they were
+ unintendedly removed by patch #23435
+ Branch: maint-5.8/perl
+ !> config_h.SH
+____________________________________________________________________________
+[ 24346] By: nicholas on 2005/04/28 09:39:31
+ Log: Integrate:
+ [ 24339]
+ A couple of warning fixes by Gisle
+ Branch: maint-5.8/perl
+ !> pp.c pp_sys.c
+____________________________________________________________________________
+[ 24337] By: nicholas on 2005/04/27 12:31:32
+ Log: Integrate:
+ [ 24310]
+ Subject: [PATCH] lib/Time/Local.t: time_t is unsigned on VMS
+ From: "Craig A. Berry" <craigberry@mac.com>
+ Date: Sat, 23 Apr 2005 18:25:52 -0500
+ Message-ID: <426AD980.2010801@mac.com>
+ Branch: maint-5.8/perl
+ !> lib/Time/Local.t
+____________________________________________________________________________
+[ 24336] By: nicholas on 2005/04/27 11:02:09
+ Log: Remove a const that shouldn't have been integrated to maint
+ Branch: maint-5.8/perl
+ ! util.c
+____________________________________________________________________________
+[ 24335] By: nicholas on 2005/04/27 10:32:26
+ Log: Integrate:
+ [ 24319]
+ Provide $Config{libswanted_uselargefiles} on Win32
+
+ This fixes some test failures introduced by change 24271.
+
+ [ 24321]
+ Update location to fetch dmake from in README.win32
+
+ Use the generic search.cpan.org URL so that the latest version is
+ always found
+ Branch: maint-5.8/perl
+ !> README.win32 win32/config.bc win32/config.gc win32/config.vc
+ !> win32/config.vc64
+____________________________________________________________________________
+[ 24332] By: nicholas on 2005/04/26 16:02:43
+ Log: Integrate:
+ [ 24247]
+ Add CLONE_SKIP() class method to allow individual classes to skip
+ cloning objects during thread creation
+ Branch: maint-5.8/perl
+ !> dump.c ext/threads/t/thread.t pod/perlmod.pod sv.c sv.h
+____________________________________________________________________________
+[ 24331] By: nicholas on 2005/04/26 15:05:07
+ Log: Missing > spotted by Rafael. That will teach me not to run podchecker.
+ Branch: maint-5.8/perl
+ ! pod/perl587delta.pod
+____________________________________________________________________________
+[ 24330] By: nicholas on 2005/04/26 15:01:47
+ Log: Missing , spotted by Rafael
+ Branch: maint-5.8/perl
+ ! pod/perl587delta.pod
+____________________________________________________________________________
+[ 24329] By: nicholas on 2005/04/26 14:43:44
+ Log: Stab 1 at the perl delta
+ Branch: maint-5.8/perl
+ ! pod/perl587delta.pod
+____________________________________________________________________________
+[ 24327] By: nicholas on 2005/04/26 13:01:18
+ Log: Correct description of change 24297
+ Branch: maint-5.8/perl
+ ! Changes
+____________________________________________________________________________
+[ 24324] By: nicholas on 2005/04/25 15:04:43
+ Log: Integrate:
+ [ 24314]
+ Upgrade to Test::Harness 2.48
+
+ [ 24315]
+ Add files missing in 24314
+ Branch: maint-5.8/perl
+ +> lib/Test/Harness/Point.pm lib/Test/Harness/t/from_line.t
+ +> lib/Test/Harness/t/point-parse.t lib/Test/Harness/t/point.t
+ +> lib/Test/Harness/t/version.t
+ !> MANIFEST lib/Test/Harness.pm lib/Test/Harness/Changes
+ !> lib/Test/Harness/Straps.pm lib/Test/Harness/TAP.pod
+ !> lib/Test/Harness/t/00compile.t
+ !> lib/Test/Harness/t/strap-analyze.t lib/Test/Harness/t/strap.t
+ !> t/lib/sample-tests/skip
+____________________________________________________________________________
+[ 24323] By: nicholas on 2005/04/25 14:51:24
+ Log: Integrate:
+ [ 24307]
+ Subject: [PATCH] Fix for warnings in util.c/Perl_init_tm()
+ From: Steve Peters <steve@fisharerojo.org>
+ Date: Fri, 22 Apr 2005 22:36:03 -0500
+ Message-Id: <20050423033603.GA32547@mccoy.peters.homeunix.org>
+
+ localtime() can return null
+
+ [ 24308]
+ Save state when auto-generating #ifdef PERL_CORE and PERL_CORE/PERL_EXT
+ reducing embed.h by about 10%.
+
+ [ 24309]
+ Variable declarations can't come after statements in C89.
+ Branch: maint-5.8/perl
+ ! embed.h
+ !> embed.pl util.c
+____________________________________________________________________________
+[ 24322] By: nicholas on 2005/04/25 13:25:15
+ Log: Integrate:
+ [ 24301]
+ Subject: [PATCH] t/uni/class.t -- update VMS test skippage
+ From: "Craig A. Berry" <craigberry@mac.com>
+ Message-ID: <42692501.6090809@mac.com>
+ Date: Fri, 22 Apr 2005 11:23:29 -0500
+
+ [ 24320]
+ Subject: [PATCH] mktables.lst and related stuff (was Re: [PATCH] Unicode 4.1.0)
+ From: demerphq <demerphq@gmail.com>
+ Message-ID: <9b18b31105042412352fcf2bc5@mail.gmail.com>
+ Date: Sun, 24 Apr 2005 21:35:35 +0200
+ Branch: maint-5.8/perl
+ !> lib/unicore/README.perl lib/unicore/mktables
+ !> lib/unicore/mktables.lst t/uni/class.t
+____________________________________________________________________________
+[ 24306] By: nicholas on 2005/04/22 22:06:04
+ Log: Update Changes
+ Branch: maint-5.8/perl
+ ! Changes patchlevel.h
+____________________________________________________________________________
+[ 24305] By: nicholas on 2005/04/22 21:42:56
+ Log: Run pod/buildtoc --build-all
+ Branch: maint-5.8/perl
+ ! MANIFEST pod/perltoc.pod
+____________________________________________________________________________
+[ 24304] By: nicholas on 2005/04/22 21:41:25
+ Log: Run regen.pl
+ Branch: maint-5.8/perl
+ ! embed.h pod/perlapi.pod
+____________________________________________________________________________
+[ 24302] By: nicholas on 2005/04/22 21:25:13
+ Log: Integrate:
+ [ 23768]
+ Subject: Re: [PATCH] Remove Carp from warnings.pm
+ From: Jim Cromie <jim.cromie@gmail.com>
+ Date: Mon, 3 Jan 2005 06:36:16 -0700
+ Message-ID: <cfe85dfa05010305367445dee6@mail.gmail.com>
+
+ [ 23819]
+ Fix dependencies in ext/B/Makefile.PL
+ (bug #8254, fix by Alan Burlison)
+
+ [ 23841]
+ Subject: [PATCH] doc SVt_PVLV <=> SVt_PVGV change version in B.pm
+ From: Yitzchak Scott-Thoennes <sthoenna@efn.org>
+ Date: Sun, 19 Dec 2004 23:57:56 -0800
+ Message-ID: <20041220075754.GA800@efn.org>
+
+ [ 23845]
+ Subject: [perl #32967] [PATCH] Re: More B bugs: svref_2object
+ From: Stephen McCamant <smcc@OCF.Berkeley.EDU>
+ Date: Tue, 28 Dec 2004 16:01:49 -0800
+ Message-ID: <16849.62445.116153.489478@apocalypse.OCF.Berkeley.EDU>
+
+ [ 23891]
+ Subject: Re: [patch] decrufting OptreeCheck stuff
+ From: Jim Cromie <jcromie@divsol.com>
+ Date: Sun, 16 Jan 2005 17:16:00 -0700
+ Message-ID: <41EB03C0.7030509@divsol.com>
+ (with minor typos fixed)
+
+ [ 23894]
+ Calculate the number of tests in one place, so that the skip()s will
+ always agree with the plan()s
+
+ [ 23973]
+ Subject: Re: [PATCH] Re: perl winpid?
+ From: Yitzchak Scott-Thoennes <sthoenna@efn.org>
+ Date: Tue, 15 Feb 2005 20:45:13 -0800
+ Message-ID: <20050216044512.GA2516@efn.org>
+
+ [ 23983]
+ Subject: [perl #32968] [PATCH] Re: B::walkoptree segfaults
+ From: Stephen McCamant <smcc@MIT.EDU>
+ Date: Tue, 28 Dec 2004 10:13:50 -0800
+ Message-ID: <16849.41566.887352.677148@apocalypse.OCF.Berkeley.EDU>
+
+ [ 24040]
+ Subject: [PATCH] $B::Disassembler::VERSION
+ From: Alexey Tourbin <at@altlinux.ru>
+ Date: Thu, 17 Mar 2005 19:02:38 +0300
+ Message-ID: <20050317160238.GN5825@solemn.turbinal.org>
+
+ [ 24213]
+ Mangle the expected output correctly for both 5.9 and 5.8
+
+ [ 24286]
+ For now, TODO the 2 tests that fail on 5.8.x
+ Branch: maint-5.8/perl
+ !> ext/B/B.pm ext/B/B.xs ext/B/B/Concise.pm
+ !> ext/B/B/Disassembler.pm ext/B/Makefile.PL
+ !> ext/B/t/OptreeCheck.pm ext/B/t/f_map.t ext/B/t/f_sort.t
+ !> ext/B/t/optree_check.t ext/B/t/optree_concise.t
+ !> ext/B/t/optree_samples.t ext/B/t/optree_sort.t
+ !> ext/B/t/optree_specials.t ext/B/t/optree_varinit.t
+ !> ext/B/t/stash.t op.h
+____________________________________________________________________________
+[ 24299] By: nicholas on 2005/04/22 15:56:13
+ Log: Integrate:
+ [ 24254]
+ Don't set things to zero twice. Once is enough. (see also change 15255)
+ Branch: maint-5.8/perl
+ !> sv.c
+____________________________________________________________________________
+[ 24298] By: nicholas on 2005/04/22 15:40:24
+ Log: Integrate:
+ [ 23228]
+ Tweak 'h2xs -h' output.
+ Branch: maint-5.8/perl
+ !> utils/h2xs.PL
+____________________________________________________________________________
+[ 24297] By: nicholas on 2005/04/22 15:27:52
+ Log: Integrate:
+ [ 24273]
+ [perl #34902] Text::Wrap::wrap() fails with non-space separator
+
+ [ 24274]
+ bump version number in Text::Wrap after change #24273
+
+ [ 24275]
+ Sigh - really bump Text::Wrap version number this time.
+
+ Branch: maint-5.8/perl
+ !> lib/Text/TabsWrap/t/wrap.t lib/Text/Wrap.pm
+____________________________________________________________________________
+[ 24296] By: nicholas on 2005/04/22 15:13:08
+ Log: Integrate:
+ [ 23820]
+ Subject: [PATCH] Make Data::Dumper work when dynamic extensions are not available
+ From: "Jos I. Boumans" <kane@xs4all.net>
+ Date: Tue, 18 Jan 2005 15:12:03 +0100
+ Message-Id: <ED6BA2C4-695A-11D9-B09C-000A95EF62E2@xs4all.net>
+
+ [ 23851]
+ Fix spurious warnings emitted by XSLoader via Data::Dumper
+ Branch: maint-5.8/perl
+ !> ext/Data/Dumper/Dumper.pm
+____________________________________________________________________________
+[ 24295] By: nicholas on 2005/04/22 14:59:04
+ Log: Integrate:
+ [ 23671]
+ Subject: [PATCH] Data::Dumper Freezer fixes
+ From: Sam Tregar <sam@tregar.com>
+ Date: Sun, 19 Dec 2004 14:40:25 -0500 (EST)
+ Message-ID: <Pine.LNX.4.61.0412191434490.7660@hillmont.dreamhost.com>
+
+ and bump Data::Dumper's VERSION
+ Branch: maint-5.8/perl
+ +> ext/Data/Dumper/t/freezer.t
+ !> MANIFEST ext/Data/Dumper/Dumper.pm ext/Data/Dumper/Dumper.xs
+____________________________________________________________________________
+[ 24294] By: nicholas on 2005/04/22 14:41:59
+ Log: Restore 23347 and 23349 then integrate:
+
+ [ 23469]
+ Mostly revert change #23347 (keep the test suite, fixed),
+ having decided that it wasn't a correct fix for bug #31793.
+
+ [ 23470]
+ Subject: Re: [PATCH perl-current] Re: [perl #31793] Data::Dumper: Useqq interacts badly with overloading
+ From: Rick Delaney <rick@bort.ca>
+ Date: Wed, 3 Nov 2004 19:46:16 -0500
+ Message-ID: <20041104004616.GA11214@biff.bort.ca>
+ Branch: maint-5.8/perl
+ ! lib/overload.pm lib/overload.t
+____________________________________________________________________________
+[ 24293] By: nicholas on 2005/04/22 14:24:40
+ Log: We love hard coded test numbers, we do.
+ Branch: maint-5.8/perl
+ ! t/op/substr.t
+____________________________________________________________________________
+[ 24292] By: nicholas on 2005/04/22 14:15:59
+ Log: Integrate:
+ [ 24234]
+ H.Merijn changed e-mail
+
+ [ 24235]
+ Mandrakesoft is now Mandriva
+ Branch: maint-5.8/perl
+ !> AUTHORS Porting/checkAUTHORS.pl Porting/patching.pod
+ !> README.aix README.hpux
+____________________________________________________________________________
+[ 24291] By: nicholas on 2005/04/22 14:02:56
+ Log: Integrate:
+ [ 18829]
+ Patch by Salvador Fandiño to read the warning mask
+ returned by caller() and ${^WARNING_BITS} from
+ $warnings::Bits{all} and not from the hardcoded core
+ constant. (This mask could have been extended by
+ warnings::register.) Plus tests.
+
+ [ 24215]
+ Fix [perl #34892] Segfault on &DB::sub declared but not defined
+
+ [ 24237]
+ Fix for:
+ [perl #34934] perl 5.8.5 on x86 and x86-64 hang at compile-time
+ From: bstrand@switchmanagement.com (via RT) <perlbug-followup@perl.org>
+ Date: 12 Apr 2005 19:12:58 -0000
+ Message-ID: <rt-3.0.11-34934-110595.15.9181274318682@perl.org>
+
+ This syntax error now produces a panic message.
+
+ [ 24265]
+ Subject: [perl #35059] [PATCH] caller() skips frames (such as eval() frames) if $^P set
+ From: glasser@tang-eleven-seventy-nine.mit.edu (via RT) <perlbug-followup@perl.org>
+ Date: 20 Apr 2005 19:28:14 -0000
+ Message-Id: <rt-3.0.11-35059-111134.0.304511316819145@perl.org>
+
+ improved version of change 21842 that copes with glob DB::sub
+ existing but &DB::sub not existing.
+
+ [ 24270]
+ [perl #34976] substr uses utf8 length cache incorrectly
+
+ [ 24287]
+ There's no point listing '-f' in --help output
+ when perl isn't built with USE_SITECUSTOMIZE, since it might
+ confuse users about $sitelib/sitecustomize.pl being sourced
+ at startup.
+ Branch: maint-5.8/perl
+ ! t/op/caller.t
+ !> mg.c op.c perl.c pod/perldiag.pod pp_ctl.c pp_hot.c sv.c
+ !> t/op/substr.t
+____________________________________________________________________________
+[ 24289] By: nicholas on 2005/04/22 13:01:52
+ Log: Integrate:
+ [ 24166]
+ Upgrade to Unicode::Normalize 0.32
+ Branch: maint-5.8/perl
+ !> ext/Unicode/Normalize/Changes
+ !> ext/Unicode/Normalize/Makefile.PL
+ !> ext/Unicode/Normalize/Normalize.pm
+ !> ext/Unicode/Normalize/Normalize.xs
+ !> ext/Unicode/Normalize/mkheader ext/Unicode/Normalize/t/form.t
+ !> ext/Unicode/Normalize/t/norm.t ext/Unicode/Normalize/t/test.t
+____________________________________________________________________________
+[ 24288] By: nicholas on 2005/04/22 12:50:42
+ Log: Integrate:
+ [ 24155]
+ Subject: [Patch] Math::BigInt v1.76, Math::BigRat v0.15, bignum v0.17
+ From: Tels <nospam-abuse@bloodgate.com>
+ Date: Sun, 3 Apr 2005 10:43:10 +0200
+ Message-Id: <200504031043.12273@bloodgate.com>
+ Branch: maint-5.8/perl
+ !> lib/Math/BigFloat.pm lib/Math/BigInt.pm
+ !> lib/Math/BigInt/Calc.pm lib/Math/BigInt/t/_e_math.t
+ !> lib/Math/BigInt/t/bare_mbf.t lib/Math/BigInt/t/bigfltpm.inc
+ !> lib/Math/BigInt/t/bigfltpm.t lib/Math/BigInt/t/bigintpm.t
+ !> lib/Math/BigInt/t/calling.t lib/Math/BigInt/t/config.t
+ !> lib/Math/BigInt/t/req_mbf0.t lib/Math/BigInt/t/req_mbfw.t
+ !> lib/Math/BigInt/t/sub_mbf.t lib/Math/BigInt/t/trap.t
+ !> lib/Math/BigInt/t/with_sub.t lib/Math/BigRat.pm
+ !> lib/Math/BigRat/t/bigratpm.t lib/Math/BigRat/t/requirer.t
+ !> lib/bigint.pm lib/bignum.pm lib/bigrat.pm
+____________________________________________________________________________
+[ 24285] By: nicholas on 2005/04/22 12:36:53
+ Log: Integrate:
+ [ 24139]
+ Subject: Re: [PATCH] Re: [perl #34632] perlintro: "Comments start with a hash symbol"
+ From: Steven Schubiger <steven@accognoscere.org>
+ Date: Sat, 2 Apr 2005 19:37:11 +0200 (CEST)
+ Message-Id: <200504021737.j32HbBNS000652@accognoscere.homeunix.org>
+
+ [ 24147]
+ Subject: Re: [PATCH] Re: [perl #34632] perlintro: "Comments start with ahash symbol"
+ From: Steven Schubiger <steven@accognoscere.org>
+ Date: Sun, 3 Apr 2005 11:47:22 +0200 (CEST)
+ Message-Id: <200504030947.j339lMgp010306@accognoscere.homeunix.org>
+
+ [ 24187]
+ Subject: [perl #34699] documentation bug in "man perlpodspec"
+ From: "raf@tradingpost.com.au (via RT)" <perlbug-followup@perl.org>
+ Date: 7 Apr 2005 00:20:31 -0000
+ Message-ID: <rt-3.0.11-34699-110174.9.79475562169704@perl.org>
+
+ [ 24190]
+ Subject: perldbtty$$ location
+ From: Gisle Aas <gisle@ActiveState.com>
+ Date: 06 Apr 2005 01:49:54 -0700
+ Message-ID: <lr3bu48f2l.fsf@caliper.activestate.com>
+ (and remove trailing whitespace)
+
+ [ 24194]
+ Mention that select() returns -1 on error,
+ as suggested by Hernan Perez Masci
+
+ [ 24209]
+ Subject: Re: [PATCH] Re: [perl #24119] CPAN.pm error in Win32: uses rename() not File::Copy::move
+ From: Steven Schubiger <steven@accognoscere.org>
+ Date: Thu, 7 Apr 2005 22:38:25 +0200 (CEST)
+ Message-Id: <200504072038.j37KcPXY011755@accognoscere.homeunix.org>
+
+ (with arguments changed to match perlfunc.pod)
+
+ [ 24224]
+ Subject: [PATCH] perlfunc.pod: incomplete select description
+ From: Hernan Perez Masci <hmasci@uolsinectis.com.ar>
+ Date: Fri, 8 Apr 2005 15:28:28 -0300
+ Message-Id: <200504081528.28307.hmasci@uolsinectis.com.ar>
+
+ [ 24238]
+ Update the outdated info in "Minimizing the Perl installation"
+
+ [ 24266]
+ change misleading syslog() example
+
+ [ 24267]
+ In change 24266 I failed to actually change anything. Sigh.
+ Branch: maint-5.8/perl
+ !> INSTALL ext/Sys/Syslog/Syslog.pm pod/perldebug.pod
+ !> pod/perlfunc.pod pod/perlpodspec.pod pod/perlport.pod
+ !> pod/perltrap.pod
+____________________________________________________________________________
+[ 24283] By: nicholas on 2005/04/22 11:24:40
+ Log: Integrate:
+ [ 21532]
+ ...
+
+ Plus a small fix to t/TEST to recognize the added TODO test
+ as a TODO test.
+
+ [ 24078]
+ FreeBSD NDBM appears to generate files ending .db, so be prepared to
+ clean this variant up as well.
+
+ [ 24173]
+ 1. t/TEST now deals with SKIP as if it was TODO. This complies to TAP
+ 2. Removed the depricated 'my $foo if expr' there
+
+ [ 24192]
+ Subject: Re: [PATCH] Re: [perl #34650] perldoc -f my should perhaps mention BEGIN and END
+ From: Abigail <abigail@abigail.nl>
+ Date: Wed, 6 Apr 2005 01:41:55 +0200
+ Message-ID: <20050405234154.GG8680@abigail.nl>
+ Branch: maint-5.8/perl
+ !> lib/Memoize/t/tie_ndbm.t t/TEST t/japh/abigail.t
+____________________________________________________________________________
+[ 24282] By: nicholas on 2005/04/22 11:02:14
+ Log: Integrate:
+ [ 24053]
+ Subject: Re: [perl #34195] Regex: Alternations within negative lookahead assertions
+ From: hv@crypt.org
+ Date: Mon, 21 Feb 2005 17:59:49 +0000
+ Message-Id: <200502211759.j1LHxnC22894@zen.crypt.org>
+
+ [ 24055]
+ Resubmit change #24053.
+
+ [ 24067]
+ Revert change #24055, which was producing a segfault in installman
+ when it was trying to install perltoc.
+
+ [ 24086]
+ Subject: Re: [perl #34195] Regex: Alternations within negative lookahead assertions
+ From: hv@crypt.org
+ Date: Thu, 24 Mar 2005 19:51:08 +0000
+ Message-Id: <200503241951.j2OJp8s18147@zen.crypt.org>
+ Branch: maint-5.8/perl
+ !> regexec.c t/op/re_tests
+____________________________________________________________________________
+[ 24281] By: nicholas on 2005/04/22 10:42:05
+ Log: Integrate:
+ [ 23961]
+ Subject: Re: [PATCH] Re: perl winpid?
+ From: Yitzchak Scott-Thoennes <sthoenna@efn.org>
+ Date: Thu, 10 Feb 2005 20:04:35 -0800
+ Message-ID: <20050211040434.GA3824@efn.org>
+
+ [ 24242]
+ Fix bug #33664: allow for transport providers with protocol == 0
+
+ (This indicates that any protocol may be used, so don't bother checking
+ that the requested protocol matches in this case.)
+ Branch: maint-5.8/perl
+ +> t/lib/cygwin.t
+ !> MANIFEST README.cygwin cygwin/cygwin.c win32/win32sck.c
+____________________________________________________________________________
+[ 24263] By: nicholas on 2005/04/20 19:12:59
+ Log: Integrate:
+ [ 24214]
+ Subject: [PATCH] usesitecustomize for VMS
+ From: "Craig A. Berry" <craigberry@mac.com>
+ Date: Sat, 09 Apr 2005 15:58:43 -0500
+ Message-ID: <42584203.2090405@mac.com>
+ Branch: maint-5.8/perl
+ !> configure.com
+____________________________________________________________________________
+[ 24262] By: nicholas on 2005/04/20 16:30:39
+ Log: Integrate:
+ [ 24171]
+ D'oh! We were never correctly spotting a modfl prototype
+
+ [ 24208]
+ Drop d_sitecustomize again. (usesitecustomize is enough)
+
+ [ 24210]
+ now usesitecustomize is used more generic
+
+ [ 24217]
+ Configure now probes for _LIB_VERSION support in math.h/libm
+ LIBM_LIB_VERSION is defined if it does
+
+ [ 24218]
+ Sorting still is a mess. This is better.
+
+ [ 24221]
+ Subject: Re: New Configure functionality
+ From: Abe Timmerman <abe@ztreet.demon.nl>
+ Date: Sun, 10 Apr 2005 22:19:28 +0200
+ Message-Id: <200504102219.29024.abe@ztreet.demon.nl>
+
+ [ 24226]
+ Out of sync metaunit caused the erroneous return of the
+ removed d_sitecustomize. Mea Culpa.
+ Branch: maint-5.8/perl
+ ! config_h.SH
+ !> Configure Porting/config_H configure.com handy.h
+____________________________________________________________________________
+[ 24261] By: nicholas on 2005/04/20 15:30:26
+ Log: Integrate:
+ [ 23915]
+ Subject: Re: encoding neutral unpack
+ From: perl5-porters[at]ton.iguana.be (Ton Hospel)
+ Date: Sat, 29 Jan 2005 12:41:20 +0000 (UTC)
+ Message-ID: <ctg09g$j0e$1[at]post.home.lunix>
+
+ Forgotten character progress while checksumming over partial
+ b or B format. (plus a regression test)
+
+ [ 23922]
+ Subject: Re: encoding neutral unpack
+ From: perl5-porters[at]ton.iguana.be (Ton Hospel)
+ Date: Sat, 29 Jan 2005 13:24:55 +0000 (UTC)
+ Message-ID: <ctg2r7$j0e$4[at]post.home.lunix>
+
+ Ensure that with the C format, unpack checksums
+ don't get overflowed. (plus a regression test)
+
+ [ 23923]
+ Subject: Re: encoding neutral unpack
+ From: perl5-porters[at]ton.iguana.be (Ton Hospel)
+ Date: Sat, 29 Jan 2005 13:07:38 +0000 (UTC)
+ Message-ID: <ctg1qq$j0e$3[at]post.home.lunix>
+
+ Make U0 and C0 scoped to () pack subtemplates.
+ (plus a regression test)
+
+ [ 23924]
+ Subject: Re: encoding neutral unpack
+ From: perl5-porters[at]ton.iguana.be (Ton Hospel)
+ Date: Sat, 29 Jan 2005 12:54:34 +0000 (UTC)
+ Message-ID: <ctg12a$j0e$2[at]post.home.lunix>
+
+ Counted length prefixes shouldn't change C0/U0 mode
+ in pack/unpack (plus a regression test)
+
+ [ 23946]
+ Subject: [perl #34062] pack Z0 destroys the character before
+ From: perl-5.8.0@ton.iguana.be (via RT) <perlbug-followup@perl.org>
+ Date: 5 Feb 2005 18:09:00 -0000
+ Message-ID: <rt-3.0.11-34062-107199.19.360569328007@perl.org>
+ (plus a regression test)
+
+ [ 23951]
+ Subject: [perl #34076] P/p pack formats only recognize literal undef
+ From: perl-5.8.0@ton.iguana.be (via RT) <perlbug-followup@perl.org>
+ Date: 6 Feb 2005 22:03:20 -0000
+ Message-ID: <rt-3.0.11-34076-107344.19.3123360602169@perl.org>
+ Branch: maint-5.8/perl
+ !> pp_pack.c t/op/pack.t
+____________________________________________________________________________
+[ 24259] By: steveh on 2005/04/20 10:52:02
+ Log: Integrate:
+ [ 23969]
+ Fix definition of DEBUG_MSTATS for Win32 dmake builds
+
+ [ 23970]
+ Fix PERL_MALLOC/DEBUG_MSTATS options in Win32 makefiles
+
+ Currently, if USE_IMP_SYS is defined then PERL_MALLOC gets undefined.
+ We should also undefine DEBUG_MSTATS if PERL_MALLOC is (or has become)
+ undefined, and we should do all this *before* inspecting DEBUG_MSTATS
+ to see if we need to add -DPERL_DEBUGGING_MSTATS to BUILDOPT.
+
+ [ 23992]
+ Subject: Patch Win32 makefiles for blead to allow parameters to be passed to harness:
+ From: demerphq <demerphq@gmail.com>
+ Date: Sat, 19 Feb 2005 11:00:08 +0100
+ Message-ID: <9b18b31105021902003d9c2a95@mail.gmail.com>
+
+ [ 24004]
+ Stop mktables from needlessly re-running when using dmake on Win32
+
+ [ 24005]
+ Suppress "ECHO is on." messages when using dmake on Win32
+
+ (The shell's "echo" command displays the current echo setting when
+ called with no arguments. Use "echo." to display nothing.)
+
+ [ 24006]
+ A better fix than change 24005 was ;)
+
+ Actually, "@echo." still emits a blank line. Use "@rem" instead as the
+ no-op. This was being used in the Win95 case, but works fine on WinNT
+ too, and is actually what ExtUtils-MakeMaker uses.
+
+ Also change the nmake Makefile.
+
+ [ 24007]
+ Include regcomp.h in Win32 makefiles
+
+ Subject: Re: Stop mktables from needlessly re-running when using dmake on Win32
+ From: demerphq <demerphq@gmail.com>
+ Date: Sun, 6 Mar 2005 09:16:12 +0100
+ Message-ID: <9b18b311050306001624012bd@mail.gmail.com>
+
+ [ 24014]
+ More Win32 dmake fixes
+
+ Use $B macro as per change 23991 in more places, and fix some syntax
+ errors in the subst's (missing trailing ",")
+
+ Tested with GCC and MSVC. I don't have BCC available, so those parts
+ are untested.
+
+ [ 24111]
+ A few Win32 makefile tidy-ups (No real changes)
+
+ [ 24113]
+ Add support for PERL_HASH_SEED_EXPLICIT and NO_HASH_SEED in the
+ Win32 makefiles
+
+ [ 24131]
+ Remove dependency on tr(1) for MinGW builds on Win32
+
+ This leaves things slightly (more) broken for MinGW builds on Cygwin,
+ but that doesn't currently quite work in other respects and isn't
+ documented anyway. See:
+
+ http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2005-03/msg00751.html
+
+ [ 24227]
+ Support d_libm_lib_version for Win32 (see change 24217)
+ Branch: maint-5.8/perl
+ !> win32/Makefile win32/config.bc win32/config.gc win32/config.vc
+ !> win32/config.vc64 win32/config_H.bc win32/config_H.gc
+ !> win32/config_H.vc win32/config_H.vc64 win32/makefile.mk
+____________________________________________________________________________
+[ 24250] By: steveh on 2005/04/19 13:31:34
+ Log: Integrate:
+ [ 23991]
+ Fix Win32's dmake makefile.mk for new dmakes built with Visual C++
+ Branch: maint-5.8/perl
+ !> win32/makefile.mk
+____________________________________________________________________________
+[ 24203] By: nicholas on 2005/04/08 11:25:00
+ Log: Integrate:
+ [ 24134]
+ Subject: [PATCH] Unicode 4.1.0
+ From: Jarkko Hietaniemi <jhi@iki.fi>
+ Message-ID: <424E584D.5000508@iki.fi>
+ Date: Sat, 02 Apr 2005 11:31:09 +0300
+
+ [ 24135]
+ Oops. Forgot to add this.
+
+ [ 24191]
+ Subject: Re: Bugs? In Unicode::EastAsianWidth.
+ From: Autrijus Tang <autrijus@autrijus.org>
+ Date: Wed, 6 Apr 2005 18:17:32 +0800
+ Message-ID: <20050406101732.GA17931@aut.dyndns.org>
+ Branch: maint-5.8/perl
+ +> lib/unicore/NamedSequences.txt
+ !> (integrate 26 files)
+____________________________________________________________________________
+[ 24202] By: nicholas on 2005/04/08 10:58:39
+ Log: Integrate:
+ [ 24165]
+ Down with C++ reserved names
+ (and also function pointer declarations that rely on the C semantics
+ of ())
+ Branch: maint-5.8/perl
+ !> mg.c perlio.c pp_sort.c
+____________________________________________________________________________
+[ 24197] By: nicholas on 2005/04/08 09:05:27
+ Log: Integrate:
+ [ 24096]
+ Clean-up some warnings when compiling on Win32 with VC++
+
+ [ 24099]
+ A couple more Win32 compilation clean-ups
+
+ [ 24162]
+ Down with unneeded duplicate prototypes
+
+ [ 24163]
+ Down with more K&R prototypes
+
+ [ 24164]
+ Down with potentially incorrect duplicate prototypes
+ Branch: maint-5.8/perl
+ !> ext/DynaLoader/dl_dyld.xs hv.c op.c pp_sort.c pp_sys.c utf8.c
+ !> util.c win32/win32sck.c x2p/a2p.c
+____________________________________________________________________________
+[ 24196] By: nicholas on 2005/04/07 16:49:05
+ Log: Integrate:
+ [ 23631]
+ Subject: [PATCH] :encoding(utf8) broken in perl-5.8.6
+ From: Gisle Aas <gisle@ActiveState.com>
+ Date: 03 Dec 2004 06:09:19 -0800
+ Message-ID: <lrllcfeank.fsf_-_@caliper.activestate.com>
+
+ [ 23632]
+ Subject: UTF8_ALLOW_ANYUV should not allow overlong sequences [PATCH]
+ From: Gisle Aas <gisle@activestate.com>
+ Date: 06 Dec 2004 02:59:24 -0800
+ Message-ID: <lrmzwrae0j.fsf_-_@caliper.activestate.com>
+
+ [ 23640]
+ Subject: Re: Smoke [5.9.2] 23634 FAIL(F) openbsd 3.6 (i386/1 cpu) [PATCH]
+ From: Gisle Aas <gisle@ActiveState.com>
+ Date: 11 Dec 2004 02:57:19 -0800
+ Message-ID: <lrr7lxje5s.fsf_-_@caliper.activestate.com>
+
+ [ 24084]
+ [perl #33185] UTF-8 string substitution corrupts memory
+ The implicit call of 'require utf8' triggered by code like
+ "\x{100}" =~ /[[:print:]]/
+ wasn't saving state correctly first.
+ Branch: maint-5.8/perl
+ !> ext/PerlIO/t/encoding.t utf8.c utf8.h
+____________________________________________________________________________
+[ 24195] By: nicholas on 2005/04/07 16:05:43
+ Log: Integrate:
+ [ 23900]
+ minor corrections to comments in perly.y
+
+ [ 23986]
+ Subject: Patch for Perlbug #4253
+ From: Nikolai Eipel <eipel@web.de>
+ Date: Sat, 29 Jan 2005 16:52:53 +0100
+ Message-Id: <200501291652.53841.eipel@web.de>
+
+ (-T and -B invalidate _ filehandle when no read permission on file)
+ plus a regression test
+
+ [ 23997]
+ SvUTF8 can be present on scalars other than PVs
+ (specifically references with overloaded stringification)
+
+ [ 23998]
+ ithreads: cond_signal() on a non-shared object coredumped
+
+ [ 23999]
+ Fix for bug [ID 20020227.005] format bug with undefined _TOP
+ http://rt.perl.org/rt3/Ticket/Display.html?id=8698
+ If there was no TOP format the lines left on page was set
+ to fixed number, now set to the current page length of the
+ IO channel used. More debugging for yet another bug needed.
+
+ [ 24022]
+ Make the return value of close() depend not only on the success of the
+ close itself, but also on whether the output stream had a previous
+ error. From Jim Meyering <jim@meyering.net>, via Debian.
+
+ [ 24070]
+ Forbid the -C option on the command-line
+ as suggested by Merijn (see [perl #34087])
+
+ [ 24080]
+ Subject: Re: [perl #34568] Perl crashes reading past the end of a heap block while parsing foreach statement
+ From: Gurusamy Sarathy <gsar@ActiveState.com>
+ Date: Fri, 25 Mar 2005 10:31:09 -0800
+ Message-Id: <200503251831.j2PIV9A6006234@smtp3.ActiveState.com>
+
+ [ 24092]
+ Fix PerlLIO_chsize() for platforms that don't have chsize()
+
+ This is the patch from the end of the thread that started here:
+ http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2004-09/msg00055.html
+
+ [ 24167]
+ Using savesvpv() here is terser and produces smaller object code.
+
+ [ 24174]
+ If we're going to prototype modfl(), it needs extern "C" linkage.
+ Branch: maint-5.8/perl
+ !> doio.c dump.c ext/threads/shared/shared.xs iperlsys.h op.c
+ !> perl.h perly.y pod/perldiag.pod pp_sys.c t/op/stat.t toke.c
+____________________________________________________________________________
+[ 24193] By: nicholas on 2005/04/07 09:53:08
+ Log: Integrate:
+ [ 23960]
+ [perl #34101] not() || 1 produces segmentation fault
+
+ Fixed by making not() behave like not(0). This is also the
+ way not() behaved before it started segfaulting in 5.6.0.
+
+ [ 23967]
+ Subject: [PATCH] Additional tests for t/op/not.t
+ From: Steve Peters <steve@fisharerojo.org>
+ Date: Mon, 14 Feb 2005 19:54:17 -0600
+ Message-ID: <20050215015417.GA30368@mccoy.peters.homeunix.org>
+ Branch: maint-5.8/perl
+ +> t/op/not.t
+ ! perly.c perly_c.diff vms/perly_c.vms
+ !> MANIFEST perly.y
+____________________________________________________________________________
+[ 24186] By: nicholas on 2005/04/07 08:24:49
+ Log: Integrate:
+ [ 23919]
+ Picky compilers (e.g. vac on AIX 5.2) do not accept statements
+ between declarations
+ Branch: maint-5.8/perl
+ !> ext/Devel/PPPort/PPPort.xs
+____________________________________________________________________________
+[ 24184] By: nicholas on 2005/04/06 20:21:51
+ Log: Integrate:
+ [ 24043]
+ Subject: Re: sitecustomize.pl [PATCH]
+ From: Gisle Aas <gisle@ActiveState.com>
+ Date: 18 Mar 2005 04:06:40 -0800
+ Message-ID: <lru0n9w433.fsf@caliper.activestate.com>
+
+ Adds a new command-line switch, -f, and a new optional
+ compile-time setting -DUSE_SITECUSTOMIZE
+
+ [ 24104]
+ Support for -Dusesitecustomize
+
+ [ 24105]
+ Simplify #24043 note now Configure can do -Dusesitecustomize
+
+ [ 24120]
+ Add support for USE_SITECUSTOMIZE in the Win32 makefiles
+
+ Note that this feature doesn't actually work correctly on Win32
+ until the problem described here is solved:
+
+ http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2005-03/msg00740.html
+
+ [ 24122]
+ Fix USE_SITECUSTOMIZE on Win32
+
+ This fixes the problem described in:
+
+ http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2005-03/msg00740.html
+ Branch: maint-5.8/perl
+ !> Configure INSTALL config_h.SH ext/Devel/DProf/t/DProf.t perl.c
+ !> pod/perlrun.pod win32/Makefile win32/config.bc win32/config.gc
+ !> win32/config.vc win32/config.vc64 win32/makefile.mk
+ !> win32/win32.c
+____________________________________________________________________________
+[ 24183] By: nicholas on 2005/04/06 20:05:33
+ Log: Integrate:
+ [ 23964]
+ Require version 0.05 of Devel::Tokenizer::C.
+
+ [ 23965]
+ Regenerate Perl_keyword() to remove superfluous goto statements.
+ Branch: maint-5.8/perl
+ !> perl_keyword.pl toke.c
+____________________________________________________________________________
+[ 24182] By: nicholas on 2005/04/06 18:49:11
+ Log: Integrate:
+ [ 23926]
+ Upgrade to Devel::PPPort 3.06.
+
+ The hateful perforce bit. We hates software. All of it.
+ Branch: maint-5.8/perl
+ !> ext/Devel/PPPort/parts/inc/exception
+____________________________________________________________________________
+[ 24181] By: nicholas on 2005/04/06 16:45:19
+ Log: Integrate:
+ [ 23974]
+ Subject: [perl #31730] [PATCH] IO::File reads garbage from directory filehandles
+ From: "Steve Peters via RT" <perlbug-followup@perl.org>
+ Date: 1 Feb 2005 16:24:11 -0000
+ Message-ID: <rt-3.0.11-31730-107010.1.24399823945417@perl.org>
+
+ [ 23981]
+ Subject: Re: Bug in Socket::IO::INET Version 1.27
+ From: Gisle Aas <gisle@ActiveState.com>
+ Date: 03 Feb 2005 03:16:46 -0800
+ Message-ID: <lr7jlpsxk1.fsf@caliper.activestate.com>
+ Branch: maint-5.8/perl
+ !> ext/IO/lib/IO/File.pm ext/IO/lib/IO/Socket/INET.pm
+____________________________________________________________________________
+[ 24180] By: nicholas on 2005/04/06 16:20:17
+ Log: Integrate:
+ [ 23950]
+ Remove mention of sub-packages in the Symbol manpage.
+
+ [ 23953]
+ Patch for CAN-2004-0452 by Jeroen van Wolffelaar.
+ The rmtree() function in the perl File::Path module would remove
+ directories in an insecure manner which could lead to the removal
+ of arbitrary files and directories via a symlink attack.
+
+ [ 24001]
+ Subject: [perl #32193] Tie::RefHash DELETE does not return value for ref keys
+ From: Yuval Kojman (via RT) <perlbug-followup@perl.org>
+ Date: 28 Oct 2004 12:16:37 -0000
+ Message-ID: <rt-3.0.11-32193-98805.8.56634266171625@perl.org>
+
+ [ 24002]
+ Add a regression test for bug #32193, and make the
+ fix a bit more robust
+
+ [ 24018]
+ Doc patch for Devel::DProf (from Debian)
+
+ [ 24019]
+ Remove a spurious undefined warning when using getopts.pl with -w.
+ (from Debian)
+
+ [ 24064]
+ Subject: [PATCH] simple optimization for SelectSaver
+ From: Alexey Tourbin <at@altlinux.ru>
+ Date: Fri, 18 Mar 2005 21:05:51 +0300
+ Message-ID: <20050318180551.GA12596@solemn.turbinal.org>
+
+ [ 24097]
+ Subject: Re: [PATCH] 5.6 File::Glob documentation insufficient for use
+ From: Steven Schubiger <steven@accognoscere.org>
+ Date: Wed, 30 Mar 2005 03:41:03 +0200 (CEST)
+ Message-Id: <200503300141.j2U1f3EP024524@accognoscere.homeunix.org>
+
+ [ 24098]
+ Minor POD nits.
+
+ [ 24101]
+ Subject: [PATCH] ext/Errno/Errno_pm.PL: fix for GNU hurd
+ From: Brendan O'Dea <bod@debian.org>
+ Date: Wed, 30 Mar 2005 10:30:25 +1000
+ Message-ID: <20050330003025.GA29797@londo.c47.org>
+ Branch: maint-5.8/perl
+ !> ext/Devel/DProf/DProf.pm ext/Errno/Errno_pm.PL
+ !> ext/File/Glob/Glob.pm lib/File/Path.pm lib/SelectSaver.pm
+ !> lib/Symbol.pm lib/Tie/RefHash.pm lib/Tie/RefHash.t
+ !> lib/getopts.pl
+____________________________________________________________________________
+[ 24179] By: nicholas on 2005/04/06 16:03:39
+ Log: Integrate:
+ [ 23912]
+ Upgrade to Devel::PPPort 3.05.
+
+ [ 23926]
+ Upgrade to Devel::PPPort 3.06.
+
+ [ 23927]
+ Remove 2 unused variables from APItest.xs.
+ Branch: maint-5.8/perl
+ +> ext/Devel/PPPort/parts/base/5008006
+ +> ext/Devel/PPPort/parts/inc/exception
+ +> ext/Devel/PPPort/parts/todo/5008006
+ +> ext/Devel/PPPort/t/exception.t
+ !> (integrate 57 files)
+____________________________________________________________________________
+[ 24177] By: nicholas on 2005/04/06 15:49:18
+ Log: Integrate:
+ [ 23822]
+ Subject: Re: [perl #32498] h2xs generates incorrect code for Makefile.PL for enums
+ From: Noah <sitz@onastick.net>
+ Date: Wed, 19 Jan 2005 12:33:52 -0500
+ Message-ID: <20050119173352.GA15592@radu.onastick.net>
+
+ [ 24056]
+ Subject: Re: Stop mktables from needlessly re-running when using dmake on Win32
+ From: demerphq <demerphq@gmail.com>
+ Date: Tue, 8 Mar 2005 02:24:10 +0100
+ Message-ID: <9b18b311050307172455a5816e@mail.gmail.com>
+
+ Change 24004 stopped mktables from needlessly re-running when using
+ dmake on Win32, but it can still happen when using nmake because it
+ doesn't support the .UPDATEALL attribute that was used to fix dmake.
+ e.g. Build perl, touch a core header file, then rebuild -- mktables
+ re-runs when it didn't need to, and 7 times over at that! This change
+ alleviates the pain by making mktables exit quickly in such cases.
+
+ [ 24057]
+ Oops - forgot to update MANIFEST for change 24056.
+
+ [ 24085]
+ Fix -C option of mktables (for VMS)
+
+ Subject: Re: [PATCH] Consting five
+ From: demerphq <demerphq@gmail.com>
+ Date: Sat, 26 Mar 2005 21:45:09 +0100
+ Message-ID: <9b18b311050326124563db5113@mail.gmail.com>
+ Branch: maint-5.8/perl
+ +> lib/unicore/mktables.lst
+ !> MANIFEST lib/unicore/mktables utils/h2xs.PL
+____________________________________________________________________________
+[ 24168] By: nicholas on 2005/04/05 16:22:01
+ Log: Integrate:
+ [ 23935]
+ Let's (un)do the timewarp, again.
+ Attempt to bodge round Makefile sometimes being older than Makefile.PL
+ Pesky filesystems.
+
+ [ 23942]
+ Stop lib/h2xs.t failing needlessly if it failed to clear up behind
+ itself on a previous run.
+
+ [ 23987]
+ Subject: (blead patch) Skip a torture test under blead, and skip certain torture tests under Win32.
+ From: demerphq <demerphq@gmail.com>
+ Date: Sat, 19 Feb 2005 11:04:00 +0100
+ Message-ID: <9b18b3110502190204641e103c@mail.gmail.com
+
+ [ 24063]
+ minitest fix
+ Branch: maint-5.8/perl
+ !> lib/ExtUtils/t/Constant.t lib/h2xs.t t/japh/abigail.t
+ !> t/run/fresh_perl.t
+____________________________________________________________________________
+[ 24157] By: nicholas on 2005/04/05 11:50:44
+ Log: Oops. Wasn't supposed to pick this up.
+ Branch: maint-5.8/perl
+ - regen_perly.pl
+____________________________________________________________________________
+[ 24156] By: nicholas on 2005/04/05 11:07:15
+ Log: Integrate:
+ [ 23861]
+ Update copyright years and add editor blocks
+
+ [ 23941]
+ With mallocwrap New() evaluates its arguments more than once, so they
+ had better not have any side effects.
+ :-(
+
+ [ 23943]
+ Avoid evaluating a strlen twice due the new implementation
+ of New() with PERL_MALLOC_WRAP
+
+ [ 23968]
+ Use strl* functions in doio.c when available
+ Based on :
+ Subject: [PATCH] Changes to doio.c to use strlcpy() and strlcat()
+ From: Steve Peters <steve@fisharerojo.org>
+ Date: Wed, 1 Dec 2004 19:42:14 -0600
+ Message-ID: <20041202014214.GA20907@mccoy.peters.homeunix.org>
+
+ [ 24003]
+ Update -v copyright notice
+
+ [ 24032]
+ gcc warning patch by Andy Lester
+
+ [ 24046]
+ Remove an useless line, spotted by Andy Lester
+
+ [ 24058]
+ Break up long lines in -V output for compile-time options
+
+ Subject: Re: sitecustomize.pl [PATCH]
+ From: sthoenna[at]efn.org (Yitzchak Scott-Thoennes)
+ Date: Tue, 8 Mar 2005 17:46:04 -0800
+ Message-ID: <20050309014604.GA5876[at]efn.org>
+
+ [ 24102]
+ USE_STRLCAT and USE_STRLCPY now actually used
+ LIBM_VERSION_TYPE and USE_SITECUSTOMIZE are preparations
+ for future use
+
+ [ 24106]
+ Update copyrights.
+
+ [ 24108]
+ Another Win32 compilation clean-up (for when using Perl's malloc)
+
+ [ 24121]
+ Update copyrights.
+ Well, those are generated files anyway.
+ Branch: maint-5.8/perl
+ +> regen_perly.pl
+ !> (integrate 33 files)
+____________________________________________________________________________
+[ 24154] By: nicholas on 2005/04/04 22:35:30
+ Log: Integrate:
+ [ 23899]
+ Subject: h2hp: 2 fix
+ From: Olivier Thauvin <olivier.thauvin@aerov.jussieu.fr>
+ Date: Fri, 28 Jan 2005 16:53:11 +0100
+ Message-Id: <200501281653.15708.olivier.thauvin@aerov.jussieu.fr>
+
+ [ 23978]
+ Missing dependencies in x2p makefile, by Slaven Rezic.
+
+ [ 23979]
+ Subject: [PATCH] find2perl, new options
+ From: slaven@rezic.de
+ Date: Thu, 17 Feb 2005 22:30:13 +0100
+ Message-Id: <1108675813.24421@devpc01.iconmobile.de>
+
+ [ 23994]
+ Subject: [PATCH] dprofpp help
+ From: Andy Lester <andy@petdance.com>
+ Date: Thu, 24 Feb 2005 00:10:42 -0600
+ Message-ID: <20050224061042.GA20259@petdance.com>
+
+ [ 24020]
+ Fix a2p manpage (from Debian)
+
+ [ 24054]
+ Subject: [PATCH] Re: [perl #34493] h2ph `extern inline' problems
+ From: Alexey Tourbin <at@altlinux.ru>
+ Date: Sat, 19 Mar 2005 16:37:12 +0300
+ Message-ID: <20050319133712.GB6484@solemn.turbinal.org>
+
+ and
+
+ Message-ID: <20050319141457.GC6484@solemn.turbinal.org>
+ Branch: maint-5.8/perl
+ !> t/lib/h2ph.h utils/dprofpp.PL utils/h2ph.PL x2p/Makefile.SH
+ !> x2p/a2p.pod x2p/find2perl.PL
+____________________________________________________________________________
+[ 24153] By: nicholas on 2005/04/04 21:13:55
+ Log: Integrate:
+ [ 23767]
+ Subject: [PATCH] to improve -DCHECK_FORMAT
+ From: Robin Barker <Robin.Barker@npl.co.uk>
+ Date: Wed, 5 Jan 2005 11:55:09 -0000
+ Message-ID: <533D273D4014D411AB1D00062938C4D90849C55A@hotel.npl.co.uk>
+
+ [ 23781]
+ Subject: [PATCH] follow-up to 23767
+ From: Robin Barker <Robin.Barker@npl.co.uk>
+ Date: Tue, 11 Jan 2005 15:48:49 -0000
+ Message-ID: <533D273D4014D411AB1D00062938C4D90849C56A@hotel.npl.co.uk>
+
+ [ 23824]
+ Subject: [PATCH] Further follow-up to 23767
+ From: Robin Barker <Robin.Barker@npl.co.uk>
+ Date: Wed, 19 Jan 2005 18:30:31 -0000
+ Message-ID: <533D273D4014D411AB1D00062938C4D90849C57D@hotel.npl.co.uk>
+
+ [ 24151]
+ Make -DFORMAT_CHECK compile with threads.
+ Branch: maint-5.8/perl
+ ! perl.h
+ !> Porting/pumpkin.pod XSUB.h gv.c mg.c perl.c pp.h pp_ctl.c
+ !> pp_sys.c sv.c utf8.c
+____________________________________________________________________________
+[ 24150] By: nicholas on 2005/04/04 19:59:56
+ Log: Integrate:
+ [ 23750]
+ Subject: [PATCH] gcc and ld in Configure
+ From: Robin Barker <Robin.Barker@npl.co.uk>
+ Date: Wed, 5 Jan 2005 12:04:25 -0000
+ Message-ID: <533D273D4014D411AB1D00062938C4D90849C55D@hotel.npl.co.uk>
+
+ [ 23952]
+ IBM Released vac.C version 7, and changed the naming convention (again)
+ Thanks to Campo for spotting, testing and the fix
+
+ [ 23958]
+ 'what' cannot find ccversion if `which cc` is a symlink to ccache
+ ccversion is important enough to jump through some hoops to get it
+
+ [ 24016]
+ Patch for Debian bug #258618, compilation under Debian/Hurd
+
+ [ 24017]
+ Add support for Debian GNU/k*BSD
+
+ [ 24050]
+ Subject: Re: bugzilla.redhat bug #101767 (threads, threads::shared)
+ From: Alexey Tourbin <at@altlinux.ru>
+ Date: Sat, 19 Mar 2005 06:10:45 +0300
+ Message-ID: <20050319031045.GN12596@solemn.turbinal.org>
+
+ [ 24075]
+ Subject: [PATCH] Re: Smoke [5.9.2] 24061 FAIL(m) linux 2.6.10-1.770_FC3 [fedora] (i686/1 cpu)
+ From: Steve Peters <steve@fisharerojo.org>
+ Date: Tue, 22 Mar 2005 17:15:23 -0600
+ Message-ID: <20050322231523.GA3083@mccoy.peters.homeunix.org>
+
+ [ 24107]
+ Now that we have the full path, we can skip the which call,
+ that might cause trouble on testdrive systems.
+ Branch: maint-5.8/perl
+ +> ext/threads/hints/linux.pl ext/threads/shared/hints/linux.pl
+ !> MANIFEST hints/aix.sh hints/gnu.sh hints/gnukfreebsd.sh
+ !> hints/gnuknetbsd.sh hints/hpux.sh hints/linux.sh
+ !> hints/solaris_2.sh
+____________________________________________________________________________
+[ 24146] By: nicholas on 2005/04/03 15:37:36
+ Log: Integrate:
+ [ 24027]
+ Add standard core test headers to the Class::ISA new tests
+ Branch: maint-5.8/perl
+ !> lib/Class/ISA/t/00_about_verbose.t
+ !> lib/Class/ISA/t/01_old_junk.t
+____________________________________________________________________________
+[ 24145] By: nicholas on 2005/04/03 15:27:20
+ Log: Integrate:
+ [ 24026]
+ Upgrade to Class::ISA 0.33
+ Branch: maint-5.8/perl
+ +> lib/Class/ISA/ChangeLog lib/Class/ISA/t/00_about_verbose.t
+ +> lib/Class/ISA/t/01_old_junk.t
+ - lib/Class/ISA/test.pl
+ !> MANIFEST lib/Class/ISA.pm
+____________________________________________________________________________
+[ 24144] By: nicholas on 2005/04/03 15:18:11
+ Log: Integrate:
+ [ 23327]
+ Subject: [perl #27576] [PATCH] Pod::Usage -exitvalue => "NOEXIT" requires -output be set (Doc bug)
+ From: "Steve Peters via RT" <perlbug-followup@perl.org>
+ Date: 26 Aug 2004 19:06:52 -0000
+ Message-ID: <rt-3.0.11-27576-94411.2.28321880730803@perl.org>
+
+ [ 23956]
+ Upgrade to Time::Local 1.11
+
+ [ 23975]
+ Upgrade to Time::HiRes 1.66
+
+ [ 23976]
+ Upgrade to Pod::LaTeX 0.58
+
+ [ 23977]
+ Upgrade to PathTools 3.04
+ (plus tweaks to Cwd and cwd.t to run when building perl)
+
+ [ 23982]
+ Subject: Re: Integration of PathTools 3.04
+ From: demerphq <demerphq@gmail.com>
+ Date: Fri, 18 Feb 2005 16:31:50 +0100
+ Message-ID: <9b18b31105021807316af0aed5@mail.gmail.com>
+
+ [ 24013]
+ Upgrade to CGI.pm 3.06
+
+ [ 24028]
+ Upgrade to DB_File 1.811, by Paul Marquess
+
+ [ 24034]
+ Upgrade to Pod::Parser 1.30
+
+ [ 24039]
+ Upgrade to CGI 3.07.
+ Add CGI's changelog
+
+ [ 24068]
+ Upgrade to File::Temp 0.16
+
+ [ 24069]
+ Upgrade to PathTools 3.05
+ Branch: maint-5.8/perl
+ +> ext/Cwd/ppport.h lib/CGI/Changes
+ !> (integrate 51 files)
+____________________________________________________________________________
+[ 24143] By: nicholas on 2005/04/03 14:49:04
+ Log: Integrate:
+ [ 23847]
+ Upgrade to Test::Harness 2.46
+
+ [ 23871]
+ Subject: [PATCH] Test::Harness::Straps::_default_inc shell problem
+ From: "Craig A. Berry" <craigberry@mac.com>
+ Date: Sun, 23 Jan 2005 13:44:49 -0600
+ Message-ID: <41F3FEB1.9020102@mac.com>
+
+ [ 23993]
+ Subject: (patch blead) Extend t/harness to allow filtering of the file list by regex.
+ From: demerphq <demerphq@gmail.com>
+ Date: Sat, 19 Feb 2005 11:10:00 +0100
+ Message-ID: <9b18b3110502190210105decf4@mail.gmail.com>
+
+ [ 23995]
+ Subject: Re: (patch blead) Extend t/harness to allow filtering of the file list by regex.
+ From: demerphq <demerphq@gmail.com>
+ Date: Wed, 23 Feb 2005 17:49:50 +0100
+ Message-ID: <9b18b311050223084917d7ef59@mail.gmail.com>
+
+ [ 24136]
+ Fix "[perl #34643] Config_heavy.pl not in archlib"
+ Branch: maint-5.8/perl
+ +> lib/Test/Harness/TAP.pod lib/Test/Harness/t/harness.t
+ +> lib/Test/Harness/t/prove-globbing.t
+ !> MANIFEST installperl lib/Test/Harness.pm
+ !> lib/Test/Harness/Assert.pm lib/Test/Harness/Changes
+ !> lib/Test/Harness/Iterator.pm lib/Test/Harness/Straps.pm
+ !> lib/Test/Harness/t/prove-switches.t lib/Test/Harness/t/strap.t
+ !> pod/perlhack.pod t/harness
+____________________________________________________________________________
+[ 24142] By: nicholas on 2005/04/03 14:26:25
+ Log: Integrate:
+ [ 23739]
+ Subject: [PATCH] Math::BigInt v1.74, Math::BigRat v0.14, bignum v0.16
+ From: Tels <nospam-abuse@bloodgate.com>
+ Date: Sat, 1 Jan 2005 18:59:51 +0100
+ Message-Id: <200501011859.52858@bloodgate.com>
+
+ [ 23882]
+ Subject: [PATCH] BigInt mbi_rand.t failings
+ From: Tels <nospam-abuse@bloodgate.com>
+ Date: Tue, 25 Jan 2005 18:06:58 +0100
+ Message-Id: <200501251806.59782@bloodgate.com>
+
+ [ 23955]
+ Subject: Re: [PATCH] BigInt mbi_rand.t failings (solved now)
+ From: Tels <nospam-abuse@bloodgate.com>
+ Date: Wed, 9 Feb 2005 21:44:22 +0100
+ Message-Id: <200502092144.24051@bloodgate.com>
+
+ [ 24048]
+ Upgrade to Math::BigInt 1.75, by Tels
+ Branch: maint-5.8/perl
+ +> lib/Math/BigInt/t/lib_load.t lib/bignum/t/ratopt_a.t
+ !> (integrate 29 files)
+____________________________________________________________________________
+[ 24141] By: nicholas on 2005/04/03 13:58:48
+ Log: Integrate:
+ [ 23945]
+ A small precision in the docs for overloaded regexp escapes
+ (see bug #33906)
+
+ [ 23963]
+ Mac OS Classic vs Mac OS X clarications
+ by Sherm Pendley
+
+ [ 23971]
+ Fix documentation bug in using Socket's import tags :
+
+ Subject: [perl #34141] example in perlbug -f getsockopt incomplete
+ From: David Dyck (via RT) <perlbug-followup@perl.org>
+ Date: 15 Feb 2005 07:35:45 -0000
+ Message-ID: <rt-3.0.11-34141-107730.6.0777451251105@perl.org>
+
+ [ 24000]
+ do "filename" is not really used with perl subroutine librairies
+ anymore.
+
+ [ 24021]
+ 8 is not an octal digit. (from Debian)
+
+ [ 24024]
+ FAQ sync
+
+ [ 24033]
+ Doc patches to clarify the stringification rules of {} and =>
+ by Jarkko (bug #34419)
+
+ [ 24036]
+ Subject: Re: [perl #34155] perldoc -f hex should say how to convert back
+ From: David Nicol <davidnicol@gmail.com>
+ Date: Tue, 8 Mar 2005 18:23:11 -0600
+ Message-ID: <934f64a20503081623713f6d27@mail.gmail.com>
+
+ [ 24045]
+ Remove trie optimisation from the todo list
+
+ [ 24047]
+ Subject: [PATCH] perlrun typo (env PERLDB_OPTS)
+ From: Alexey Tourbin <at@altlinux.ru>
+ Date: Sat, 19 Mar 2005 03:40:13 +0300
+ Message-ID: <20050319004013.GJ12596@solemn.turbinal.org>
+
+ [ 24066]
+ Fix unresolved POD link
+
+ [ 24090]
+ Make the spelling of whitespace (vs white-space and white space)
+ more consistent
+ From: Offer Kaye <offer.kaye@gmail.com>
+ Date: Thu, 17 Mar 2005 14:47:36 -0500
+ Message-ID: <5694250503171147668e73c7@mail.gmail.com>
+
+ [ 24123]
+ This is 5.9.2. Mostly.
+
+ [ 24127]
+ Add a note about installhtml
+
+ [ 24128]
+ FAQ sync.
+
+ [ 24129]
+ POD fixes.
+ Branch: maint-5.8/perl
+ !> pod/perldata.pod pod/perlfaq.pod pod/perlfaq1.pod
+ !> pod/perlfaq2.pod pod/perlfaq3.pod pod/perlfaq4.pod
+ !> pod/perlfaq5.pod pod/perlfaq6.pod pod/perlfaq7.pod
+ !> pod/perlfaq8.pod pod/perlfaq9.pod pod/perlfunc.pod
+ !> pod/perlhist.pod pod/perllocale.pod pod/perlmodinstall.pod
+ !> pod/perlop.pod pod/perlopentut.pod pod/perlre.pod
+ !> pod/perlreref.pod pod/perlrun.pod pod/perltodo.pod
+ !> pod/perlxstut.pod
+____________________________________________________________________________
+[ 24140] By: nicholas on 2005/04/03 12:54:42
+ Log: Integrate:
+ [ 23962]
+ README.cygwin additions by Reini Urban
+
+ [ 23972]
+ Jan Dubois has taken over maintenance of Win32 stuff from Sarathy
+
+ [ 24008]
+ Some updates to current status
+
+ [ 24009]
+ Subject: Minor AUTHORS patch
+ From: Andy Lester <andy@petdance.com>
+ Date: Tue, 8 Mar 2005 09:44:45 -0600
+ Message-ID: <20050308154445.GB3213@petdance.com>
+
+ [ 24015]
+ Subject: Minor AUTHORS patch
+ From: "Mike Giroux" <rmgiroux@hotmail.com>
+ Date: Thu, 10 Mar 2005 08:39:04 -0500
+ Message-ID: <BAY104-F4B1925432A15287069D3BCE520@phx.gbl>
+
+ [ 24029]
+ Change my email, put real name of Pixel
+
+ [ 24110]
+ Fix typo in INSTALL (s/USE_HAS_SEED_EXPLICIT/USE_HASH_SEED_EXPLICIT/)
+
+ [ 24112]
+ AUTHORS update
+
+ [ 24133]
+ Add encoding::warnings to Maintainers.pl and rebuild META.yml for release
+
+ (not the META.yml part)
+ Branch: maint-5.8/perl
+ !> AUTHORS INSTALL Porting/Maintainers.pl README.cygwin
+ !> README.hpux README.win32
+____________________________________________________________________________
+[ 23944] By: nicholas on 2005/02/07 18:06:38
+ Log: Update Changes
+ Branch: maint-5.8/perl
+ ! Changes patchlevel.h
+____________________________________________________________________________
+[ 23940] By: nicholas on 2005/02/05 17:17:19
+ Log: Integrate:
+ [ 23749]
+ Subject: [PATCH] Avoid segfault when pthread_key_create fails
+ From: Gisle Aas <gisle@ActiveState.com>
+ Date: 05 Jan 2005 01:09:51 -0800
+ Message-ID: <lracroz1gg.fsf@caliper.activestate.com>
+
+ [ 23840]
+ Subject: [patch] cleanup perlsfio.h
+ From: Stas Bekman <stas@stason.org>
+ Date: Thu, 13 Jan 2005 16:14:23 -0500
+ Message-ID: <41E6E4AF.8070303@stason.org>
+
+ [ 23842]
+ Subject: Re: [PATCH] File::Find dies on find({follow=>1, ...}) on Win32
+ From: Yitzchak Scott-Thoennes <sthoenna@efn.org>
+ Date: Mon, 20 Dec 2004 16:08:56 -0800
+ Message-ID: <20041221000856.GA2924@efn.org>
+
+ [ 23844]
+ Subject: [Patch] [perl #32446] close leaves fd open
+ From: Steffen Ullrich <coyote.frank@gmx.net>
+ Date: Wed, 01 Dec 2004 15:22:34 +0100
+ Message-ID: <20041201142236.4273.qmail@lists.develooper.com>
+
+ [ 23890]
+ Subject: [PATCH] libperl leaks a THREAD_KEY each time it is reloaded
+ From: Gisle Aas <gisle@ActiveState.com>
+ Date: 05 Jan 2005 03:21:06 -0800
+ Message-ID: <lris6cxgt9.fsf@caliper.activestate.com>
+ Branch: maint-5.8/perl
+ !> perl.c perlio.c perlsfio.h pp_sys.c t/op/stat.t thread.h
+____________________________________________________________________________
+[ 23939] By: nicholas on 2005/02/05 16:59:25
+ Log: Integrate:
+ [ 23928]
+ Upgrade to Digest 1.10
+ Branch: maint-5.8/perl
+ +> lib/Digest/Changes lib/Digest/file.pm lib/Digest/t/file.t
+ !> MANIFEST lib/Digest.pm lib/Digest/base.pm
+____________________________________________________________________________
+[ 23938] By: nicholas on 2005/02/05 16:41:18
+ Log: Integrate:
+ [ 23872]
+ Subject: [perl #33906] Missing \\ in perlre
+ From: Andrew (via RT) <perlbug-followup@perl.org>
+ Date: 23 Jan 2005 20:52:51 -0000
+ Message-ID: <rt-3.0.11-33906-106339.17.5527961922343@perl.org>
+
+ [ 23880]
+ Subject: [PATCH] perlapi.pod has pod errors
+ From: "Jos I. Boumans" <kane@xs4all.net>
+ Date: Tue, 25 Jan 2005 16:42:38 +0100
+ Message-Id: <BDA482F7-6EE7-11D9-8AA7-000A95EF62E2@xs4all.net>
+
+ [ 23881]
+ Integrate change #23880 in original comment
+
+ [ 23893]
+ Add a reference to books.perl.org.
+
+ [ 23916]
+ Subject: Re: [perl #34010] localtime docs
+ From: Andy Lester <andy@petdance.com>
+ Date: Mon, 31 Jan 2005 21:24:29 -0600
+ Message-ID: <20050201032429.GA29354@petdance.com>
+
+ [ 23920]
+ Subject: [PATCH pod/perlfunc.pod] POD nit @ sysseek
+ From: Abigail <abigail@abigail.nl>
+ Date: Tue, 1 Feb 2005 21:33:14 +0100
+ Message-ID: <20050201203314.GC335@abigail.nl>
+
+ [ 23921]
+ fix POSIX::strtod error handling documentation
+ Branch: maint-5.8/perl
+ !> ext/POSIX/POSIX.pod pod/perlapi.pod pod/perlbook.pod
+ !> pod/perlfunc.pod pod/perlre.pod util.c
+____________________________________________________________________________
+[ 23937] By: nicholas on 2005/02/05 15:23:48
+ Log: (Yet another mop up job due to perforce's inability to branch and
+ then integrate)
+
+ Integrate:
+ [ 23870]
+ Subject: Re: [perl #33892] Add Interix support
+ From: Todd Vierling <tv@duh.org>
+ Date: Fri, 21 Jan 2005 15:16:16 -0500 (EST)
+ Message-ID: <Pine.NEB.4.61.0501211424350.13373@duh.net.dhis.org>
+ Branch: maint-5.8/perl
+ !> hints/interix.sh
+____________________________________________________________________________
+[ 23936] By: nicholas on 2005/02/05 15:07:43
+ Log: Integrate:
+ [ 23807]
+ Fix for building with MinGW under Cygwin
+
+ Subject: [PATCH] building win32 perl with cygwin's mingw (was: Re: [PATCH] Re: lib/Config/Extensions.t fails on Win32)
+ From: Yitzchak Scott-Thoennes <sthoenna@efn.org>
+ Date: Thu, 13 Jan 2005 16:11:36 -0800
+ Message-ID: <20050114001136.GC2516@efn.org>
+
+ [ 23849]
+ Subject: [perl #33892] Add Interix support
+ From: Todd Vierling (via RT) <perlbug-followup@perl.org>
+ Date: 21 Jan 2005 14:36:31 -0000
+ Message-ID: <rt-3.0.11-33892-106280.17.6407478352545@perl.org>
+
+ (except the Configure chunk)
+ (and bump version numbers of modules)
+ [and except the dual life modules chunk]
+
+ [ 23862]
+ Subject: Re: Smoke [5.9.2] 23792 FAIL(F) osf1 V5.1 (21264A)/4 cpu)
+ From: Jarkko Hietaniemi <jhi@iki.fi>
+ Message-ID: <41F2911E.8090204@iki.fi>
+ Date: Sat, 22 Jan 2005 19:45:02 +0200
+
+ (drop optimisation on pp_pack.c for gcc on osf1 to -O1)
+
+ [ 23864]
+ Subject: Re: Smoke [5.9.2] 23792 FAIL(F) osf1 V5.1 (21264A)/4 cpu)
+ From: Jarkko Hietaniemi <jhi@iki.fi>
+ Message-ID: <41F2C427.7020003@iki.fi>
+ Date: Sat, 22 Jan 2005 23:22:47 +0200
+
+ [ 23909]
+ Subject: [perl #33998] [PATCH] Support for GNU/kFreeBSD
+ From: "rmh@debian.org (via RT)" <perlbug-followup@perl.org>
+ Date: 31 Jan 2005 07:37:55 -0000
+ Message-ID: <rt-3.0.11-33998-106860.15.2609323921089@perl.org>
+
+ [ 23910]
+ Add all the missing gnuk{free,net}bsd hints files to MANIFEST
+
+ [ 23917]
+ "All" "all?" Who said all? There were 2 more missing gnuk{free,net}bsd
+ hints files to add to MANIFEST. Sort MANIFEST
+ while I'm in the area.
+ Branch: maint-5.8/perl
+ +> ext/DynaLoader/hints/gnukfreebsd.pl
+ +> ext/DynaLoader/hints/gnuknetbsd.pl
+ +> ext/NDBM_File/hints/gnukfreebsd.pl
+ +> ext/NDBM_File/hints/gnuknetbsd.pl
+ +> ext/ODBM_File/hints/gnukfreebsd.pl
+ +> ext/ODBM_File/hints/gnuknetbsd.pl
+ +> ext/POSIX/hints/gnukfreebsd.pl ext/POSIX/hints/gnuknetbsd.pl
+ +> ext/Storable/hints/gnukfreebsd.pl
+ +> ext/Storable/hints/gnuknetbsd.pl hints/gnukfreebsd.sh
+ +> hints/gnuknetbsd.sh hints/interix.sh
+ !> Configure MANIFEST Makefile.SH ext/Errno/Errno_pm.PL
+ !> hints/dec_osf.sh lib/File/Find.pm t/io/openpid.t t/op/groups.t
+____________________________________________________________________________
+[ 23934] By: nicholas on 2005/02/05 14:32:42
+ Log: Integrate:
+ [ 23898]
+ [perl #33928] chomp() fails after alarm(), `sleep`
+
+ PP_backtick's temp altering of PL_rs didn't restore after
+ an exception
+
+ [ 23905]
+ Fix test suite hang on Win32 caused by change #23898
+
+ ("perl -e sleep 3" does an indefinite sleep!)
+ Branch: maint-5.8/perl
+ !> pp_sys.c t/op/alarm.t
+____________________________________________________________________________
+[ 23933] By: nicholas on 2005/02/05 14:21:35
+ Log: Integrate:
+ [ 23875]
+ Replace Perl_keyword() with a version that's 20% faster on typical
+ input, generated by subclassing ExtUtils::Constant. (Typical input
+ being about 135M of input from running a lot of perl scripts)
+
+ [ 23877]
+ A script to regenerate Perl_keyword()
+
+ [ 23878]
+ Ooops. It was 190M when I was using 4 bytes per entry for lengths in
+ the dump file. The newer format is only 135M
+
+ [ 23914]
+ Make Perl_keyword() another 30% faster.
+ Branch: maint-5.8/perl
+ ! perl_keyword.pl toke.c
+ !> MANIFEST
+____________________________________________________________________________
+[ 23932] By: nicholas on 2005/02/05 13:47:07
+ Log: Integrate:
+ [ 23866]
+ Slightly terser code in S_regpposixcc (names inside [:*here*:])
+
+ [ 23868]
+ Tidy up 2 comments
+ Branch: maint-5.8/perl
+ !> regcomp.c
+____________________________________________________________________________
+[ 23931] By: nicholas on 2005/02/05 13:28:13
+ Log: Integrate:
+ [ 23876]
+ Add weights to ExtUtils::Constant to allow sorting by expected
+ frequency. This makes the Perl_keyword() replacement 20% faster,
+ rather than just 12%
+
+ [ 23879]
+ Correct and update comments (before anyone writes in)
+ Remove a temporary variable.
+
+ [ 23897]
+ More consistent names for all the parameter name/declaration methods
+
+ Which should have been part of change 23930, but for
+ http://www.google.com/search?q=%66%75%63%6Bing+perforce
+ Branch: maint-5.8/perl
+ +> perl_keyword.pl
+ !> lib/ExtUtils/Constant/Base.pm lib/ExtUtils/Constant/XS.pm
+____________________________________________________________________________
+[ 23930] By: nicholas on 2005/02/05 13:14:36
+ Log: Integrate:
+ [ 23792]
+ Avoid dogfood problems when an empty string accidentally ends up
+ as a constant name. [They don't work in qw(), strangely]
+
+ [ 23867]
+ Assimilate ExtUtils::Constant 0.16
+ Branch: maint-5.8/perl
+ +> lib/ExtUtils/Constant/Base.pm lib/ExtUtils/Constant/Utils.pm
+ +> lib/ExtUtils/Constant/XS.pm
+ !> MANIFEST lib/ExtUtils/Constant.pm
+____________________________________________________________________________
+[ 23929] By: nicholas on 2005/02/05 12:57:43
+ Log: Integrate:
+ [ 23788]
+ utf.pm needs to require Carp before croak()ing
+
+ [ 23838]
+ Subject: Re: [perl #33173] shellwords.pl and tainting
+ From: Alexey Tourbin <at@altlinux.ru>
+ Date: Tue, 28 Dec 2004 22:29:37 +0300
+ Message-ID: <20041228192937.GB7824@solemn.turbinal.org>
+
+ [ 23839]
+ VERSION++
+
+ [ 23874]
+ Subject: [PATCH] assorted tempfile clean-up in the test suite
+ From: "Craig A. Berry" <craigberry@mac.com>
+ Date: Sun, 23 Jan 2005 14:23:17 -0600
+ Message-ID: <41F407B5.7020106@mac.com>
+
+ [ 23883]
+ &_q needs to *globally* escape ' and \ in its substitution.
+ Branch: maint-5.8/perl
+ +> lib/Text/ParseWords/taint.t
+ !> MANIFEST lib/Test/Simple/t/reset.t lib/Text/ParseWords.pm
+ !> lib/shellwords.pl lib/utf8.pm lib/utf8.t t/io/fs.t t/io/tell.t
+ !> t/test.pl
+____________________________________________________________________________
+[ 23918] By: nicholas on 2005/02/01 22:27:23
+ Log: Integrate:
+ [ 23903]
+ Don't write to $PERLIO_DEBUG when setuid ([perl #33990])
+
+ [ 23904]
+ Avoid a buffer overflow with threads and PERLIO_DEBUG
+
+ [ 23906]
+ Really fix the bug [perl #33990].
+ NB. -DIAMSUID is only set to compile sperl.o.
+
+ [ 23907]
+ Document the changes to PERLIO_DEBUG.
+ Branch: maint-5.8/perl
+ !> perlio.c pod/perlrun.pod
+____________________________________________________________________________
+[ 23902] By: nicholas on 2005/01/30 23:17:16
+ Log: http://www.google.com/search?btnI=aargh&q=hate+perforce
+ Branch: maint-5.8/perl
+ !> genpacksizetables.pl
+____________________________________________________________________________
+[ 23901] By: nicholas on 2005/01/30 23:14:08
+ Log: Integrate:
+ [ 22663]
+ Make the ! suffix handle n/N/v/V as signed integers
+ within pack templates.
+
+ [ 22734]
+ Subject: [PATCH for testing/review] byte-order modifiers for (un)pack templates
+ From: Marcus Holland-Moritz <mhx-perl@gmx.net>
+ Date: Wed, 21 Apr 2004 21:09:20 +0200
+ Message-Id: <20040421210920.3c467772@r2d2>
+
+ [ 22745]
+ Cleanup variables in S_(un)pack_rec().
+ This also works around a gcc optimizer bug on dec_osf/alpha.
+
+ [ 22754]
+ More unpack cleanups.
+
+ [ 22780]
+ Add byte-order group modifiers to (un)pack templates.
+ Follow-up on: #22734, #22745, #22753, #22754.
+
+ Subject: Group modifiers in (un)pack templates
+ From: Marcus Holland-Moritz <mhx-perl@gmx.net>
+ Date: Mon, 3 May 2004 20:14:41 +0200
+ Message-Id: <20040503201441.1b058e0d@r2d2>
+
+ [ 23787]
+ Refactor all the unpack checksum-or-not logic to avoid massive
+ duplication.
+
+ [ 23791]
+ The leaktesting of NEWSV() is long dead, so create and initialise
+ SV values in one, to simplify source code and shrink object code
+ by about 1%
+
+ [ 23793]
+ Source code tidy up - avoid assigning to sv.
+
+ [ 23794]
+ Turn the unreachable code into assertions. (So prove me wrong...)
+
+ [ 23853]
+ Make the length overrun checking and stack extension table driven.
+ (Shaves about 3k off pp_pack.o)
+
+ [ 23854]
+ Shrink a switch() statment by driving the size calculations from the
+ size table. This requires #ifdef()s in the size table initialiser.
+ Astoundingly this shaves over 6K of the object size with -Os on OS X.
+ I was expecting about 1K (due to shrinking a branch table). Mind you,
+ I'm not going to argue with what I got. :-)
+
+ [ 23858]
+ Remove now-unnecessary check. (It's done earlier)
+
+ [ 23860]
+ From: Jarkko Hietaniemi <jhi@iki.fi>
+ Subject: Re: [PATCH] do not assume quads or long doubles
+ Message-ID: <41F21B0A.2050301@iki.fi>
+ Date: Sat, 22 Jan 2005 11:21:14 +0200
+
+ [ 23889]
+ Make the byte order modifers < and > and the sign modifier ! (for
+ n N v V) conditionally compile. This means that the refactored
+ pp_pack/pp_unpack code can now be used in maint.
+
+ [ 23892]
+ Retrieve the flag bit that only 'p' uses, so that it is spare for
+ future use.
+ Branch: maint-5.8/perl
+ +> genpacksizetables.pl
+ ! pod/perldiag.pod
+ !> MANIFEST embed.fnc embed.h perl.h pod/perlport.pod pp_pack.c
+ !> proto.h util.c
+____________________________________________________________________________
+[ 23896] By: nicholas on 2005/01/28 20:38:44
+ Log: For some reason pack.t isn't warnings clean on maint. For now, remove
+ warnings, but once the implementation in pp_pack.c is unified, check
+ again and if necessary track the cause down.
+ Branch: maint-5.8/perl
+ ! t/op/pack.t
+____________________________________________________________________________
+[ 23895] By: nicholas on 2005/01/28 20:28:38
+ Log: (Just the tests from)
+ Integrate:
+ [ 22663]
+ Make the ! suffix handle n/N/v/V as signed integers
+ within pack templates.
+
+ [ 22734]
+ Subject: [PATCH for testing/review] byte-order modifiers for (un)pack templates
+ From: Marcus Holland-Moritz <mhx-perl@gmx.net>
+ Date: Wed, 21 Apr 2004 21:09:20 +0200
+ Message-Id: <20040421210920.3c467772@r2d2>
+
+ [ 22780]
+ Add byte-order group modifiers to (un)pack templates.
+ Follow-up on: #22734, #22745, #22753, #22754.
+
+ Subject: Group modifiers in (un)pack templates
+ From: Marcus Holland-Moritz <mhx-perl@gmx.net>
+ Date: Mon, 3 May 2004 20:14:41 +0200
+ Message-Id: <20040503201441.1b058e0d@r2d2>
+
+ [ 23850]
+ Name another pack test
+
+ [ 23884]
+ Make the tests for the endianness modifiers < and >, and the
+ signnedness modifier ! conditional on perl version. Surprisingly
+ little change needed.
+
+ [ 23886]
+ Check that the warning behaviour on the modifiers !, < and > is as we
+ expect it for this perl.
+
+ [ 23888]
+ Oops. Was forgetting to test n! N! v! V! in pack
+ Branch: maint-5.8/perl
+ !> t/op/pack.t
+____________________________________________________________________________
+[ 23887] By: nicholas on 2005/01/27 15:47:02
+ Log: Integrate:
+ [ 23857]
+ Subject: Re: uc($long_utf8_string) exhausts memory
+ From: Jarkko Hietaniemi <jhi@iki.fi>
+ Date: Sat, 22 Jan 2005 00:20:12 +0200
+ Message-Id: <41F1801C.3080201@iki.fi>
+
+ Make buffer size estimates for utf8 case conversion less maximally
+ pessimistic
+
+ [ 23863]
+ Subject: Re: uc($long_utf8_string) exhausts memory
+ From: Jarkko Hietaniemi <jhi@iki.fi>
+ Date: Sat, 22 Jan 2005 11:33:12 +0200
+ Message-Id: <41F21DD8.3050500@iki.fi>
+
+ change #23857 miscalculated the SvGROW size
+
+ [ 23869]
+ Subject: Re: Smoke [5.9.2] 23863 FAIL(F) MSWin32 WinXP/.Net SP1 (x86/1 cpu)
+ From: Jarkko Hietaniemi <jhi@iki.fi>
+ Date: Sun, 23 Jan 2005 21:25:01 +0200
+ Message-Id: <41F3FA0D.4010301@iki.fi>
+
+ The uc() memory reduction patch had a memory leak...
+ Branch: maint-5.8/perl
+ !> doop.c op.c pp.c pp_pack.c regcomp.c regexec.c sv.c t/op/lc.t
+ !> toke.c utf8.c utf8.h
+____________________________________________________________________________
+[ 23885] By: nicholas on 2005/01/27 13:24:09
+ Log: Test that unpack with only 1 argument is a syntax error.
+ (Corresponds to the test in blead that ensures it works, and replaces
+ a placeholder test)
+ Branch: maint-5.8/perl
+ !> t/op/pack.t
+____________________________________________________________________________
+[ 23856] By: nicholas on 2005/01/22 00:03:11
+ Log: Integrate:
+ [ 23711]
+ Subject: [PATCH] Allow Configure's d_attribut to be set from the command line
+ From: Gisle Aas <gisle@ActiveState.com>
+ Date: 30 Dec 2004 03:39:36 -0800
+ Message-ID: <lrllbgypzb.fsf@caliper.activestate.com>
+
+ [ 23751]
+ Subject: [PATCH] unnecessary rmdir in Makefile
+ From: Robin Barker <Robin.Barker@npl.co.uk>
+ Date: Wed, 5 Jan 2005 11:58:54 -0000
+ Message-ID: <533D273D4014D411AB1D00062938C4D90849C55C@hotel.npl.co.uk>
+
+ [ 23848]
+ Subject: [perl #33892] Add Interix support
+ From: Todd Vierling (via RT) <perlbug-followup@perl.org>
+ Date: 21 Jan 2005 14:36:31 -0000
+ Message-ID: <rt-3.0.11-33892-106280.17.6407478352545@perl.org>
+ Branch: maint-5.8/perl
+ !> Configure Makefile.SH
+____________________________________________________________________________
+[ 23855] By: nicholas on 2005/01/21 23:27:54
+ Log: Integrate:
+ [ 23776]
+ Get $Config{osvers} filled in on Win32
+
+ [ 23806]
+ Get $Config{ccversion} or $Config{gccversion} filled in on Win32
+ Branch: maint-5.8/perl
+ !> win32/config_sh.PL
+____________________________________________________________________________
+[ 23837] By: nicholas on 2005/01/20 14:11:10
+ Log: Integrate:
+ [ 23835]
+ A little more determinacy in our sorting
+
+
+ and then re-regen pod/perlapi.pod
+ Branch: maint-5.8/perl
+ ! pod/perlapi.pod
+ !> autodoc.pl
+____________________________________________________________________________
+[ 23834] By: nicholas on 2005/01/20 11:38:52
+ Log: Run regen.pl and pod/buildtoc --build-all
+ Branch: maint-5.8/perl
+ ! MANIFEST pod/perlapi.pod pod/perlintern.pod pod/perltoc.pod
+____________________________________________________________________________
+[ 23833] By: nicholas on 2005/01/20 11:26:12
+ Log: Integrate:
+ [ 21414]
+ Subject: Re: [PATCH lib/warnings.t] Adding TODO functionality to lib/warnings.
+ From: Abigail <abigail@abigail.nl>
+ Date: Wed, 1 Oct 2003 14:19:43 +0200
+ Message-ID: <20031001121943.GA29419@abigail.nl>
+
+ [ 23758]
+ Start converting t/op/ref.t to use test.pl
+
+ [ 23759]
+ All tests now use test.pl
+
+ [ 23760]
+ Turn barewords into strings to run under strict subs.
+ Run under strict refs outside the soft reference tests.
+
+ [ 23765]
+ Subject: [PATCH] make lib/warnings.t use t/test.pl
+ From: "Craig A. Berry" <craigberry@mac.com>
+ Message-ID: <41DDCA71.1080704@mac.com>
+ Date: Thu, 06 Jan 2005 17:32:01 -0600
+
+ [ 23778]
+ Need to close files before unlinking them on Win32
+
+ (Various files created by test programs are left behind otherwise,
+ and distclean doesn't clean them up)
+
+ [ 23779]
+ Subject: [PATCH] t/op/split.t #11 nit on VMS
+ From: "Craig A. Berry" <craigberry@mac.com>
+ Message-ID: <41E1C261.5020100@mac.com>
+ Date: Sun, 09 Jan 2005 17:46:41 -0600
+
+ [ 23783]
+ Subject: [PATCH] follow-up to #23765
+ From: "Craig A. Berry" <craigberry@mac.com>
+ Date: Tue, 11 Jan 2005 21:01:27 -0600
+ Message-ID: <41E49307.7080900@mac.com>
+
+ [ 23790]
+ Not a good idea to use unpack "H*" to peek at a scalar's internal
+ representation.
+
+ [ 23805]
+ Better test diagnostics for the numbers tests.
+ (Failure diagnostics were always good, but now the tests have names,
+ which show even when they pass)
+
+ [ 23821]
+ Subject: [PATCH] op/stat.t test 9 failing on recent cygwin snapshots
+ From: Yitzchak Scott-Thoennes <sthoenna@efn.org>
+ Date: Sun, 16 Jan 2005 10:30:45 -0800
+ Message-ID: <20050116183045.GA2768@efn.org>
+ Branch: maint-5.8/perl
+ !> lib/FileCache/t/01open.t lib/FileCache/t/04twoarg.t
+ !> lib/FileCache/t/07noimport.t lib/warnings.t t/op/join.t
+ !> t/op/pack.t t/op/read.t t/op/ref.t t/op/split.t t/op/stat.t
+____________________________________________________________________________
+[ 23832] By: nicholas on 2005/01/20 10:59:16
+ Log: Integrate:
+ [ 23742]
+ Subject: [PATCH pod/perlxs.pod] RE: [perl #32660] INT2PTR not mentioned in perlxs(1)
+ From: Robin Barker <Robin.Barker@npl.co.uk>
+ Date: Tue, 4 Jan 2005 12:32:29 -0000
+ Message-ID: <533D273D4014D411AB1D00062938C4D90849C553@hotel.npl.co.uk>
+
+ [ 23754]
+ Error-free constant folding is a TODO
+
+ [ 23756]
+ Correct a Greengrocer's apostrophe.
+
+ [ 23800]
+ Improve documentation for sv_catpvf, to note that pattern's UTF-8ness
+ is taken from the SV's UTF-8ness
+ Branch: maint-5.8/perl
+ !> ext/DynaLoader/dl_dyld.xs pod/perlapi.pod pod/perltodo.pod
+ !> pod/perlxs.pod sv.c
+____________________________________________________________________________
+[ 23831] By: nicholas on 2005/01/19 23:55:18
+ Log: Integrate:
+ [ 23797]
+ Use the new SV_NOSTEAL flag to avoid the SvTEMP dance in newSVsv
+
+ [ 23802]
+ Refactor S_regclass to generate slightly smaller object code
+ Branch: maint-5.8/perl
+ !> regcomp.c sv.c
+____________________________________________________________________________
+[ 23830] By: nicholas on 2005/01/19 23:42:51
+ Log: Integrate:
+ [ 23738]
+ Happy new year
+
+ [ 23746]
+ Update copyright years.
+
+ [ 23789]
+ Update copyright years. Add an editor block while passing by.
+
+ [ 23803]
+ Correct the editor block to match the perl 5 policy on tabs
+ Branch: maint-5.8/perl
+ !> README mg.c miniperlmain.c op.c perlio.c pp.c pp_ctl.c
+ !> pp_hot.c pp_pack.c pp_sort.c pp_sys.c regcomp.c scope.c sv.c
+ !> universal.c xsutils.c
+____________________________________________________________________________
+[ 23829] By: nicholas on 2005/01/19 23:25:41
+ Log: Integrate:
+ [ 23745]
+ Make the switch statement discriminate similar names more
+ efficiently.
+
+ [ 23771]
+ Can pass in a length here without introducing a bug. Might save
+ a strlen()
+
+ [ 23772]
+ savepv(SvPV(sv,n_a)) is common, and creates an unnecessary call to
+ strlen(). Add savesvpv(sv), which gets the length from the SV,
+ and returns a copy of its PV.
+
+ [ 23774]
+ Shorter source code in pp_gelem. (But it compiles to the same size)
+
+ [ 23795]
+ replace NEWSV(), SvSetSV() with newSVsv()
+
+ [ 23796]
+ sv_2mortal(NEWSV(0,0)) better written as sv_newmortal()
+
+ [ 23798]
+ sv_catpvf holds no advantage over sv_catpv when the "pattern" isn't.
+
+ [ 23799]
+ SvUTF8_off() in do_join can be unconditional.
+
+ [ 23801]
+ A terser way to write the \-ing code in pv_uni_display
+ Plus drive-by insert of a more correct editor block. (thanks Dave)
+ Branch: maint-5.8/perl
+ !> doop.c embed.fnc embed.h global.sym mg.c op.c pp.c pp_hot.c
+ !> pp_sort.c pp_sys.c proto.h regcomp.c regexec.c scope.c toke.c
+ !> utf8.c util.c xsutils.c
+____________________________________________________________________________
+[ 23828] By: nicholas on 2005/01/19 21:33:40
+ Log: Integrate:
+ [ 23744]
+ Check all attributes in modify_SV_attributes are recognised.
+ Fix bug where 'assertion' was always rejected as invalid.
+
+ [ 23747]
+ Rafael spotted that my changes caused warnings. So clean up.
+
+ [ 23827]
+ Make "assertion" attribute code and test conditional
+ Branch: maint-5.8/perl
+ !> t/op/attrs.t xsutils.c
+____________________________________________________________________________
+[ 23826] By: nicholas on 2005/01/19 20:04:32
+ Log: Integrate:
+ [ 23727]
+ Use Rafael's sick trick of ASCII NUL as a q'' delimiter to save a
+ lot of quoting code
+
+ [ 23730]
+ Change 23727 broke code that relied on \ being escaped.
+ Fix this. *Everything* should work now.
+
+ [ 23731]
+ Remove compiler warnings.
+
+ [ 23733]
+ D'oh! Spurious aTHX_. Here was I thinking that my test build was
+ threaded, but "oh no it isn't!" :-(
+ Branch: maint-5.8/perl
+ +> t/run/switchF1.t
+ !> MANIFEST toke.c
+____________________________________________________________________________
+[ 23825] By: nicholas on 2005/01/19 19:46:24
+ Log: Integrate:
+ [ 23721]
+ Doing the strnEQ char by char for 2 and 3 character strings
+ generates a smaller object file, and will be faster.
+
+ [ 23722]
+ Skip the switch statement entirely if the pointer is null, rather
+ than the old pointless switch on '\0'. Also skip re-comparing the
+ first character. Faster, and generates terser object code.
+
+ [ 23725]
+ strEQ/strNE of 1 character strings seems better hand inlined,
+ because it generates smaller object code (as well as being
+ faster than a true function call)
+
+ [ 23726]
+ Probably should be using *pvn rather than *pv forms for speed in
+ toke.c (to save a strlen())
+
+ [ 23728]
+ Concatenate some string constants
+
+ [ 23729]
+ Splitting the -n/-p code and concatenating strings generates
+ smaller object code.
+ Branch: maint-5.8/perl
+ !> doio.c locale.c op.c perl.c pp.c toke.c util.c
+____________________________________________________________________________
+[ 23823] By: nicholas on 2005/01/19 17:43:16
+ Log: Integrate:
+ [ 23714]
+ Bug in t/io/layers.t spotted by Ignasi Roca Carrió
+
+ [ 23723]
+ Change 23714 accidentally broke t/io/layers.t when testing with
+ UTF8 locales and the -C flag. When UTF8 is flagged as enabled
+ based on the locale, we have no perl space access to PL_utf8locale
+ so assume for the moment that UTF8 is never conditionally enabled.
+
+ [ 23741]
+ Add ${^UTF8LOCALE} to give perl space access to PL_utf8locale
+
+ [ 23743]
+ Use the new ${^UTF8LOCALE} to make the test reliable.
+ Branch: maint-5.8/perl
+ !> AUTHORS gv.c mg.c t/io/layers.t
+____________________________________________________________________________
+[ 23818] By: steveh on 2005/01/19 09:49:40
+ Log: Integrate:
+ [ 23817]
+ Exclude "Thread" from $Config{extensions}
+
+ It is already excluded from $Config{dynamic_ext}, so should not be
+ in $Config{extensions} either. (Note that Thread is actually still
+ built, though. This is just for consistency with Unix builds.)
+ Branch: maint-5.8/perl
+ !> win32/config_sh.PL
+____________________________________________________________________________
+[ 23815] By: nicholas on 2005/01/18 22:27:27
+ Log: Integrate:
+ [ 23716]
+ Refactor gv_fetchpv so that the overwhelmingly common case
+ (variable names starting with a lower case letter or _, longer
+ than one character) get out of the function very quickly.
+ (Without even passing through a switch statement jump table)
+ Also fixes bug 33631
+
+ [ 23717]
+ Tidy up comments in change 23716
+
+ [ 23718]
+ Generate smaller object code by using a single switch statement
+ for determining which names are forced into main::
+
+ [ 23719]
+ Because name is always NUL terminated we can incorporate length
+ 0 names in the switch statement for length 1.
+
+ [ 23720]
+ Improve documentation for is_gv_magical, and split the switch
+ statement into 2 parts, lengths > 1 and lengths <= 1
+ This should cause most variables (lower case, multicharacter)
+ to escape the function without passing through a switch table.
+
+ [ 23724]
+ Not all the world's a VAX, er ASCII, so don't make assumptions.
+ Tweak is_gv_magical's string comparisons to produce smaller object
+ code.
+ First 2005 copyright notice.
+ Branch: maint-5.8/perl
+ !> gv.c
+____________________________________________________________________________
+[ 23814] By: nicholas on 2005/01/18 22:08:15
+ Log: Integrate:
+ [ 23357]
+ Turn regcomp into a list op
+ [fear not - just the B::Deparse change, which works on maint]
+
+ [ 23437]
+ Skip tests that require Data::Dumper if it is not built
+ [just the ext/B changes]
+
+ [ 23441]
+ Correct change 23437 - as Config isn't imported, need to use a fully
+ qualified package
+
+ [ 23651]
+ Subject: Re: B::walkoptree segfaults
+ From: Alexey Tourbin <at@altlinux.ru>
+ Date: Fri, 3 Dec 2004 05:06:49 +0300
+ Message-ID: <20041203020649.GD3898@solemn.turbinal.org>
+
+ [ 23691]
+ Subject: [PATCH] Cleanup ext/B tests for -w and to run separately
+ Date: Tue, 28 Dec 2004 13:49:19 -0800
+ From: Stephen McCamant <smcc@MIT.EDU>
+ Message-ID: <16849.54495.424654.896889@apocalypse.OCF.Berkeley.EDU>
+ Branch: maint-5.8/perl
+ !> ext/B/B.pm ext/B/B/Deparse.pm ext/B/B/Terse.pm
+ !> ext/B/t/asmdata.t ext/B/t/b.t ext/B/t/bblock.t
+ !> ext/B/t/bytecode.t ext/B/t/concise.t ext/B/t/debug.t
+ !> ext/B/t/deparse.t ext/B/t/f_map.t ext/B/t/f_sort.t
+ !> ext/B/t/lint.t ext/B/t/o.t ext/B/t/optree_check.t
+ !> ext/B/t/optree_concise.t ext/B/t/optree_samples.t
+ !> ext/B/t/optree_sort.t ext/B/t/optree_specials.t
+ !> ext/B/t/optree_varinit.t ext/B/t/showlex.t ext/B/t/stash.t
+ !> ext/B/t/terse.t ext/B/t/xref.t
+____________________________________________________________________________
+[ 23813] By: nicholas on 2005/01/18 17:29:33
+ Log: Integrate:
+ [ 23735]
+ Change dXSTARGET to dXSTARG as recommended by Spider Boardman.
+
+ [ 23736]
+ Return an immortal from attributes::_warn_reserved (a private
+ function). (saves creating a new IV)
+ Branch: maint-5.8/perl
+ !> xsutils.c
+____________________________________________________________________________
+[ 23812] By: nicholas on 2005/01/18 17:05:45
+ Log: Integrate:
+ [ 23715]
+ Subject: [PATCH] randbits and randfunc for VMS
+ From: "Craig A. Berry" <craigberry@mac.com>
+ Message-ID: <41D570BF.8010409@mac.com>
+ Date: Fri, 31 Dec 2004 09:31:11 -0600
+ Branch: maint-5.8/perl
+ !> configure.com
+____________________________________________________________________________
+[ 23811] By: nicholas on 2005/01/18 16:16:10
+ Log: Integrate:
+ [ 23681]
+ Subject: [perl #33173] shellwords.pl and tainting
+ From: perl-5.8.0@ton.iguana.be (via RT) <perlbug-followup@perl.org>
+ Date: 24 Dec 2004 00:14:19 -0000
+ Message-ID: <rt-3.0.11-33173-103504.3.54366755060383@perl.org>
+ Branch: maint-5.8/perl
+ !> lib/shellwords.pl
+____________________________________________________________________________
+[ 23810] By: nicholas on 2005/01/17 23:27:00
+ Log: Integrate:
+ [ 23782]
+ Fix bug 32294 - index()/rindex() ignore UTF8 flag
+ (for cases of mixed UTF8/bytes)
+ Test code based on bug report by John Gardiner Myers
+ Branch: maint-5.8/perl
+ !> pp.c t/op/index.t
+____________________________________________________________________________
+[ 23809] By: nicholas on 2005/01/17 22:25:28
+ Log: Integrate:
+ [ 23732]
+ Integrate a patch from Gentoo for uclibc support.
+ See :
+ Subject: Re: Static linking notes --- perl5.8.6 and uClibc
+ From: Alexey Tourbin <at@altlinux.ru>
+ Date: Tue, 28 Dec 2004 14:25:42 +0300
+ Message-ID: <20041228112542.GB21037@solemn.turbinal.org>
+
+ [ 23761]
+ Silence a compilation warning
+ Branch: maint-5.8/perl
+ !> perlio.c pp_sort.c
+____________________________________________________________________________
+[ 23808] By: nicholas on 2005/01/17 21:59:28
+ Log: Integrate:
+ [ 23645]
+ Test patch for already-solved bug #33003,
+ by Michael G Schwern.
+
+ [ 23646]
+ Fix test added in change 23645 with an eval()
+
+ [ 23660]
+ Subject: [PATCH] bop.t follow-up to #23645
+ From: "Craig A. Berry" <craigberry@mac.com>
+ Date: Thu, 16 Dec 2004 08:53:32 -0600
+ Message-ID: <41C1A16C.9040700@mac.com>
+
+ [ 23666]
+ $#a>>=1 relies on malloc wrap to avoid the segfault, so need to
+ skip the test on platforms where it's not available
+ Branch: maint-5.8/perl
+ !> t/op/bop.t
+____________________________________________________________________________
+[ 23804] By: steveh on 2005/01/14 17:21:59
+ Log: Integrate:
+ [ 23757]
+ Fix extensions config fields on Win32 to be as they are on Unix
+
+ Subject: [PATCH] Re: lib/Config/Extensions.t fails on Win32
+ From: Yitzchak Scott-Thoennes <sthoenna@efn.org>
+ Date: Wed, 5 Jan 2005 10:01:41 -0800
+ Message-ID: <20050105180141.GA676@efn.org>
+
+ [ 23785]
+ Fix Win32 build problem caused by change 23757
+
+ Change 23757 added a glob() call to win32/FindExt.pm. That code is
+ run by miniperl.exe when making the ..\config.sh target, but
+ miniperl.exe is built with -D PERL_EXTERNAL_GLOB so it requires
+ perlglob.exe to do the glob(). perlglob.exe has been built, but is
+ in the top-level of the source tree so is not found when miniperl.exe
+ is executed from within the win32/ sub-directory.
+
+ This was causing smokes to fail on t/lib/commonsense.t because the
+ "extensions" field in lib/Config_heavy.pl only contained
+ "threads/shared" as a result of the glob() not finding anything.
+
+ Manual builds had been working fine for me because I had an installed
+ perl in my PATH so perlglob.exe was being found there instead!
+ Branch: maint-5.8/perl
+ !> win32/FindExt.pm win32/config_sh.PL
+____________________________________________________________________________
+[ 23784] By: nicholas on 2005/01/12 23:23:12
+ Log: Integrate:
+ [ 23740]
+ Bring win32/config.* into line with win32/config_H.*
+ so that "perl -V:usemallocwrap" tells us what the configuration is
+ instead of saying 'UNKNOWN'.
+
+ [ 23748]
+ Subject: [PATCH] -Duselargefiles for VMS
+ From: "Craig A. Berry" <craigberry@mac.com>
+ Message-ID: <41DB63A6.7040504@mac.com>
+ Date: Tue, 04 Jan 2005 21:48:54 -0600
+
+ [ 23762]
+ Allow static linking core extensions on Win32 with MinGW
+
+ Subject: [PATCH] Re: lib/Config/Extensions.t fails on Win32
+ From: Yitzchak Scott-Thoennes <sthoenna@efn.org>
+ Date: Wed, 5 Jan 2005 10:01:41 -0800
+ Message-ID: <20050105180141.GA676@efn.org>
+
+ [ 23764]
+ Fix win32/config.*'s cc, ld and other related values
+
+ cc and ld themselves always get replaced with correct values anyway
+ so we just provide example values as per other similar settings
+
+ Other related values (ccname, cpp, cpprun, cppstdin) need to use the
+ correct ~keyword~, namely ~cc~, not ~CC~, otherwise they do not get set
+
+ Subject: [PATCH] Re: lib/Config/Extensions.t fails on Win32
+ From: Yitzchak Scott-Thoennes <sthoenna@efn.org>
+ Date: Wed, 5 Jan 2005 10:01:41 -0800
+ Message-ID: <20050105180141.GA676@efn.org>
+
+ Subject: Re: [PATCH] Re: lib/Config/Extensions.t fails on Win32
+ From: Yitzchak Scott-Thoennes <sthoenna@efn.org>
+ Date: Thu, 6 Jan 2005 11:53:11 -0800
+ Message-ID: <20050106195311.GC1300@efn.org>
+
+ [ 23769]
+ Disable PERL_MALLOC and DEBUG_MSTATS in win32/makefile.mk by default
+ and force PERL_MALLOC off if USE_IMP_SYS is on
+
+ This brings makefile.mk into line with Makefile in this regard
+
+ (PERL_MALLOC cannot currently be used with USE_IMP_SYS, e.g. see:
+ http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2004-07/msg00465.html
+ so it is sensible to enforce this, and to not have the default set
+ to a configuration that isn't allowed)
+
+ [ 23775]
+ Subject: [PATCH] follow-up to #23748, -Duselargefiles on VMS
+ Date: Sun, 09 Jan 2005 17:52:09 -0600
+ From: "Craig A. Berry" <craigberry@mac.com>
+ Message-ID: <41E1C3A9.9080900@mac.com>
+
+ [ 23777]
+ Make Win32's distclean target clean up properly
+ Branch: maint-5.8/perl
+ !> configure.com vms/descrip_mms.template vms/vmsish.h
+ !> win32/Makefile win32/buildext.pl win32/config.bc
+ !> win32/config.gc win32/config.vc win32/config.vc64
+ !> win32/makefile.mk
+____________________________________________________________________________
+[ 23737] By: nicholas on 2005/01/03 21:58:51
+ Log: Integrate:
+ [ 23701]
+ Convert op/read.t to use test.pl and make it stricture compliant.
+
+ [ 23702]
+ Add a lot of tests for combinations of values, offsets and lengths
+
+ [ 23703]
+ read (and presuambly sysread) would expose the UTF8 internals when
+ reading from a byte orientated file handle into a UTF8 scalar.
+
+ [ 23704]
+ Oops. Forgot to uncomment the last set of Unicode values for
+ testing.
+
+ [ 23705]
+ Ooops. Fix unitialised variable
+
+ [ 23706]
+ Skip tests that binmode :utf8 if there is no perlio
+ Branch: maint-5.8/perl
+ !> pp_sys.c t/op/read.t
+____________________________________________________________________________
+[ 23734] By: nicholas on 2005/01/03 20:11:00
+ Log: Integrate:
+ [ 23700]
+ Upgrade to Devel::PPPort 3.04
+ Branch: maint-5.8/perl
+ !> ext/Devel/PPPort/Changes ext/Devel/PPPort/META.yml
+ !> ext/Devel/PPPort/PPPort.pm ext/Devel/PPPort/PPPort_pm.PL
+ !> ext/Devel/PPPort/TODO ext/Devel/PPPort/parts/inc/SvPV
+ !> ext/Devel/PPPort/parts/inc/ppphbin
+ !> ext/Devel/PPPort/parts/inc/ppphdoc
+ !> ext/Devel/PPPort/parts/inc/ppphtest
+____________________________________________________________________________
+[ 23713] By: nicholas on 2004/12/30 20:33:34
+ Log: Integrate:
+ [ 23619]
+ Small addition to perlsec by Stas Bekman.
+
+ [ 23656]
+ Security fix from Debian in the debugger (in the setterm()
+ function), from:
+ Subject: Re: Security patch from Debian?
+ From: Brendan O'Dea <bod@debian.org>
+ Date: Thu, 2 Dec 2004 13:42:17 +1100
+ Message-ID: <20041202024217.GA12670@londo.c47.org>
+
+ [ 23712]
+ Mention ppport.h and its --api-info switch in perlguts.
+ Branch: maint-5.8/perl
+ !> lib/perl5db.pl pod/perlguts.pod pod/perlsec.pod
+____________________________________________________________________________
+[ 23709] By: nicholas on 2004/12/29 21:58:08
+ Log: Integrate:
+ [ 23655]
+ A couple of SCO compilation patches
+
+ Subject: [perl #3097] Re: SCO5 XS dyn loading fails
+ From: "Ilya N. Golubev" <gin@mo.msk.ru>
+ Date: Tue, 14 Dec 2004 22:37:27 +0300
+ Message-ID: <028941bf40f648-gin@mo.msk.ru>
+
+ Subject: Re: [perl #3100] NaN passed to gcvt [PATCH]
+ From: Andy Dougherty <doughera@lafayette.edu>
+ Date: Wed, 15 Dec 2004 10:29:22 -0500 (EST)
+ Message-ID: <Pine.SOL.4.58.0412150956360.3441@maxwell.phys.lafayette.edu>
+ Branch: maint-5.8/perl
+ !> hints/sco.sh
+____________________________________________________________________________
+[ 23699] By: nicholas on 2004/12/29 13:14:51
+ Log: Integrate:
+ [ 23633]
+ Subject: RE: [PATCH perl.h toke.c utf8.c] minor format clean up
+ From: Robin Barker <Robin.Barker@npl.co.uk>
+ Date: Wed, 1 Dec 2004 15:15:44 -0000
+ Message-ID: <533D273D4014D411AB1D00062938C4D90849C521@hotel.npl.co.uk>
+
+ [ 23680]
+ Subject: Missign STATEMENT brackets in PUSHMARK
+ From: perl5-porters@ton.iguana.be (Ton Hospel)
+ Date: Thu, 23 Dec 2004 17:55:13 +0000 (UTC)
+ Message-Id: <cqf0q1$9cc$1@post.home.lunix>
+ Branch: maint-5.8/perl
+ !> perl.h pp.h
+____________________________________________________________________________
+[ 23698] By: nicholas on 2004/12/29 13:01:59
+ Log: Integrate:
+ [ 23657]
+ Pod::Html is not part of the podlators distribution
+
+ [ 23658]
+ Two pod2html patches from Dave Sparks :
+
+ Fix anchors for some function names
+ Subject: pod2html fragment fix [PATCH]
+ From: Gisle Aas <gisle@ActiveState.com>
+ Date: 11 Nov 2004 14:36:46 +0100
+ Message-ID: <lrk6sso6c1.fsf@caliper.activestate.com>
+
+ Subject: Make 'pod2html --quiet' be quiet [PATCH]
+ From: Gisle Aas <gisle@ActiveState.com>
+ Date: 11 Nov 2004 15:19:58 +0100
+ Message-ID: <lrbre4o4c1.fsf@caliper.activestate.com>
+ Branch: maint-5.8/perl
+ !> Porting/Maintainers.pl lib/Pod/Html.pm
+____________________________________________________________________________
+[ 23697] By: nicholas on 2004/12/29 12:48:00
+ Log: Integrate:
+ [ 23649]
+ Allow escaping %m as %%m in Sys::Syslog format strings
+ (suggested by Joshua Richardson <jric@yahoo-inc.com>
+ and Yitzchak Scott-Thoennes)
+
+ [ 23650]
+ Make Sys::Syslog stricture-compliant
+
+ [ 23659]
+ Subject: Re: Can't locate auto/POSIX/autosplit.ix [perl #24445] [PATCH]
+ From: Andy Dougherty <doughera@lafayette.edu>
+ Date: Thu, 16 Dec 2004 09:57:44 -0500 (EST)
+ Message-ID: <Pine.SOL.4.58.0412160953470.20202@maxwell.phys.lafayette.edu>
+ Branch: maint-5.8/perl
+ !> ext/POSIX/Makefile.PL ext/Sys/Syslog/Syslog.pm
+____________________________________________________________________________
+[ 23694] By: nicholas on 2004/12/29 12:31:50
+ Log: Integrate:
+ [ 23627]
+ Subject: [PATCH] Re: [perl #32949] FileCache only works in "main" package
+ From: "Jos I. Boumans" <kane@xs4all.net>
+ Date: Wed, 8 Dec 2004 14:24:19 +0100
+ Message-Id: <7728A4F5-491C-11D9-9CA3-000A95EF62E2@xs4all.net>
+
+ [ 23643]
+ Subject: [PATCH] FileCache without import
+ From: Michael G Schwern <schwern@pobox.com>
+ Date: Sat, 11 Dec 2004 18:58:32 -0500
+ Message-ID: <20041211235832.GA13462@windhund.schwern.org>
+ Branch: maint-5.8/perl
+ +> lib/FileCache/t/06export.t lib/FileCache/t/07noimport.t
+ !> MANIFEST lib/FileCache.pm
+____________________________________________________________________________
+[ 23693] By: nicholas on 2004/12/29 12:14:05
+ Log: Integrate:
+ [ 23624]
+ Upgrade to Encode 2.09
+ Branch: maint-5.8/perl
+ !> ext/Encode/Changes ext/Encode/Encode.pm ext/Encode/Encode.xs
+ !> ext/Encode/META.yml ext/Encode/Unicode/Unicode.xs
+ !> ext/Encode/t/Encode.t ext/Encode/t/fallback.t
+____________________________________________________________________________
+[ 23692] By: nicholas on 2004/12/29 12:03:15
+ Log: Integrate:
+ [ 23620]
+ Upgrade to Term::ANSIColor 1.09
+
+ [ 23630]
+ Upgrade to perldoc 3.14
+
+ [ 23654]
+ Upgrade to Test::Simple 0.54
+ Branch: maint-5.8/perl
+ +> lib/Test/Simple/t/is_fh.t
+ !> MANIFEST lib/Pod/Perldoc.pm lib/Pod/Perldoc/ToMan.pm
+ !> lib/Term/ANSIColor.pm lib/Term/ANSIColor/ChangeLog
+ !> lib/Term/ANSIColor/README lib/Term/ANSIColor/test.pl
+ !> lib/Test/Builder.pm lib/Test/More.pm lib/Test/Simple.pm
+ !> lib/Test/Simple/Changes lib/Test/Simple/t/details.t
+ !> lib/Test/Simple/t/fail-more.t
+ !> lib/Test/Simple/t/harness_active.t
+ !> lib/Test/Simple/t/is_deeply.t lib/Test/Simple/t/maybe_regex.t
+ !> lib/Test/Simple/t/plan_no_plan.t lib/Test/Simple/t/sort_bug.t
+ !> lib/Test/Simple/t/todo.t lib/Test/Simple/t/undef.t
+____________________________________________________________________________
+[ 23690] By: nicholas on 2004/12/29 11:46:00
+ Log: Integrate:
+ [ 23615]
+ sanity check the arguments to runperl(), to try to avoid it
+ hanging waiting on STDIN for a script.
+
+ [ 23635]
+ Subject: [PATCH] cleanup t/op/taint.t
+ From: Michael G Schwern <schwern@pobox.com>
+ Date: Fri, 10 Dec 2004 02:04:49 -0500
+ Message-ID: <20041210070448.GA22347@windhund.schwern.org>
+
+ Subject: [PATCH] Add todo_skip() to test.pl
+ From: Michael G Schwern <schwern@pobox.com>
+ Date: Fri, 10 Dec 2004 04:27:06 -0500
+ Message-ID: <20041210092706.GA23378@windhund.schwern.org>
+
+ [ 23636]
+ Subject: [PATCH] Test rt.perl.org 5900
+ From: Michael G Schwern <schwern@pobox.com>
+ Date: Thu, 9 Dec 2004 22:11:59 -0500
+ Message-ID: <20041210031159.GA7629@windhund.schwern.org>
+
+ [ 23641]
+ Subject: [PATCH] t/op/taint.t follow-up to #23635
+ From: "Craig A. Berry" <craigberry@mac.com>
+ Date: Sat, 11 Dec 2004 11:03:57 -0600
+ Message-ID: <41BB287D.6090001@mac.com>
+
+ [ 23688]
+ Make Config.t warnings and strictures clean
+ Branch: maint-5.8/perl
+ ! t/op/taint.t
+ !> lib/Config.t t/test.pl
+____________________________________________________________________________
+[ 23689] By: nicholas on 2004/12/29 11:25:36
+ Log: Integrate:
+ [ 21542]
+ When %ENV has been turned into a non-magical hash after a
+ glob assignment, TAINT_ENV() may dump core because it
+ assumes $ENV{PATH} is magical. Fix this ; add a test to
+ verify that the PATH is still checked for taintedness.
+
+ [ 21563]
+ Add a new taint error, "%ENV is aliased to %s".
+ This error is thrown when taint checks are enabled and
+ when *ENV has been aliased, so that %ENV has no env-magic
+ anymore. (see bug [perl #24291].)
+ Branch: maint-5.8/perl
+ !> pod/perldiag.pod t/op/taint.t taint.c
+____________________________________________________________________________
+[ 23687] By: nicholas on 2004/12/27 20:08:27
+ Log: Integrate:
+ [ 23547]
+ Freak out if h2ph has to translate a macro that contains assembly code.
+
+ Subject: [PATCH] h2ph vs __asm__
+ From: Rafael Garcia-Suarez <rgarciasuarez@mandrakesoft.com>
+ Date: Thu, 25 Nov 2004 17:24:43 +0100
+ Message-ID: <20041125172443.757a4833@dhcp123.mandrakesoft.com>
+
+ [ 23628]
+ Subject: [perl #32962] h2ph - use of local() in generated code
+ From: Peter.Dintelmann@dresdner-bank.com (via RT)
+ Date: 8 Dec 2004 15:49:32 -0000
+ Message-ID: <rt-3.0.11-32962-102394.11.065973521948@perl.org>
+
+ [ 23629]
+ Fix test to cope with the previous h2ph change.
+
+ [ 23652]
+ Fix for [perl #32491] h2xs incorrectly parses enums with implicit values
+ Branch: maint-5.8/perl
+ !> t/lib/h2ph.pht utils/h2ph.PL utils/h2xs.PL
+____________________________________________________________________________
+[ 23686] By: nicholas on 2004/12/27 18:48:43
+ Log: Integrate:
+ [ 23611]
+ New Itanium servers
+
+ [ 23621]
+ Updates to README.win32 (aka perlwin32), with some changes.
+
+ Subject: Patch to README.win32 distributed with 5.8.6 for building under .net / MSVC7 (free)
+ From: Max Maischein <corion@corion.net>
+ Date: Sun, 05 Dec 2004 19:39:40 +0100
+ Message-ID: <41B355EC.9010505@corion.net>
+
+ [ 23622]
+ Update AUTHORS (for changes #23200 and #23621)
+
+ [ 23637]
+ Pod nit ([perl #32800])
+
+ [ 23639]
+ Subject: [PATCH] Re: [perl #2562] wantarray fails in END, INIT, and CHECK blocks
+ From: mjtg@cam.ac.uk (Mike Guy)
+ Date: Fri, 10 Dec 2004 19:08:01 +0000
+ Message-ID: <E1Ccq7V-00057s-9s@virgo.cus.cam.ac.uk>
+
+ [ 23642]
+ Subject: [PATCH] perlipc typo
+ From: Brendan O'Dea <bod@debian.org>
+ Date: Sun, 12 Dec 2004 10:25:04 +1100
+ Message-ID: <20041211232504.GA8380@londo.c47.org>
+
+ [ 23644]
+ Document gv_stashpvn
+
+ This is already in the API supported by Devel::PPPort, and is
+ more efficient than gv_stashpv if the length is already known.
+
+ [ 23647]
+ Subject: [perl #3274] [PATCH] Documentation for utime should be improved
+ Date: 14 Dec 2004 06:29:23 -0000
+ From: "Steve Peters via RT" <perlbug-followup@perl.org>
+ Message-ID: <rt-3.0.11-3274-103026.2.21000805211489@perl.org>
+
+ [ 23648]
+ Subject: [perl #24343] [PATCH] -w vs. -s
+ From: "Steve Peters via RT" <perlbug-followup@perl.org>
+ Date: 14 Dec 2004 06:41:34 -0000
+ Message-ID: <rt-3.0.11-24343-103027.13.3005637364295@perl.org>
+
+ [ 23662]
+ Subject: [PATCH] AUTHORS
+ From: Tels <nospam-abuse@bloodgate.com>
+ Date: Sun, 19 Dec 2004 14:28:44 +0100
+ Message-Id: <200412191428.45898@bloodgate.com>
+
+ [ 23663]
+ Note that the shell's test uses eq etc for numbers, = etc for
+ strings, the reverse of Perl, which is definitely a trap.
+ Spotted by Alexei Alexandrov.
+
+ [ 23672]
+ The "Setuid script not plain file" error wasn't documented.
+
+ [ 23678]
+ Subject: Re: [patch perlapi doc] sv_magic
+ From: Stas Bekman <stas@stason.org>
+ Date: Thu, 23 Dec 2004 16:28:06 -0500
+ Message-ID: <41CB3866.1080307@stason.org>
+
+ [ 23682]
+ Add investigating self tie segfaults to the TODO
+
+ [ 23683]
+ Subject: [patch sv.c] comment fix
+ From: Stas Bekman <stas@stason.org>
+ Message-ID: <41CF50FE.5070307@stason.org>
+ Date: Sun, 26 Dec 2004 19:02:06 -0500
+ Branch: maint-5.8/perl
+ !> AUTHORS README.hpux README.win32 embed.fnc gv.c
+ !> pod/perlapi.pod pod/perldiag.pod pod/perlfaq5.pod
+ !> pod/perlfunc.pod pod/perlipc.pod pod/perlrun.pod
+ !> pod/perltodo.pod pod/perltrap.pod sv.c
+____________________________________________________________________________
+[ 23685] By: nicholas on 2004/12/27 18:21:40
+ Log: (And we can't integrate deletes that were added in the same set)
+
+ Integrate:
+ [ 23661]
+ Subject: Re: [perl #32717] BeOS specific Updates
+ From: bonefish@cs.tu-berlin.de
+ Date: Fri, 17 Dec 2004 01:17:40 +0100
+ Message-Id: <20041217011740.14398.1@cs.tu-berlin.de>
+ Branch: maint-5.8/perl
+ - beos/beos_flock_server.cpp beos/beos_flock_server.h
+____________________________________________________________________________
+[ 23684] By: nicholas on 2004/12/27 18:09:04
+ Log: Integrate:
+ [ 23584]
+ Subject: [perl #32717] BeOS specific Updates
+ Date: 30 Nov 2004 15:38:32 -0000
+ From: Ingo Weinhold (via RT) <perlbug-followup@perl.org>
+ Message-ID: <rt-3.0.11-32717-101307.19.7097750538509@perl.org>
+
+ [ 23598]
+ 2 new BeOS files were missing
+
+ [ 23661]
+ Subject: Re: [perl #32717] BeOS specific Updates
+ From: bonefish@cs.tu-berlin.de
+ Date: Fri, 17 Dec 2004 01:17:40 +0100
+ Message-Id: <20041217011740.14398.1@cs.tu-berlin.de>
+ Branch: maint-5.8/perl
+ +> beos/beos_flock_server.cpp beos/beos_flock_server.h
+ !> MANIFEST Makefile.SH README.beos beos/beos.c beos/beosish.h
+ !> ext/Errno/Errno_pm.PL ext/File/Glob/t/basic.t hints/beos.sh
+ !> lib/ExtUtils/t/MM_BeOS.t lib/Tie/File/t/16_handle.t perl.c
+ !> t/op/magic.t
+____________________________________________________________________________
+[ 23665] By: nicholas on 2004/12/21 18:26:15
+ Log: Integrate:
+ [ 23587]
+ Tidy up the reference name stringification to save getting the
+ hash name twice. Pleasant side effect is 44 byte smaller object
+ file. (A small win is still a win)
+
+ [ 23602]
+ Pull out the duplicateded push @INC, $_ if -e $_ code from
+ S_pushinc into a new function S_pushinc_if_exists
+ Avoid the SV copy when pushing onto @INC by creating a new scratch
+ SV each time a push is done.
+
+ [ 23603]
+ Fix a typo in an assert(). It helps to compile with -DDEBUGGING
+
+ [ 23604]
+ There are clearer ways of saying m/^[ab]$/ than strchr("ab", c)
+ They seem to produce slightly smaller object code too.
+
+ [ 23605]
+ Small code tidy up in gv_fullname4
+
+ [ 23606]
+ use (c == '$' || c == '@' || c == '%') instead of strchr("$@%", c)
+ The latter gives larger code, is less clear and can't be any faster
+
+ [ 23607]
+ Remove double checking of acceptable switches on tr/// ops.
+
+ [ 23609]
+ gv_fullname4() can get rid of the main:: for us.
+ (well, actually, it never puts it in)
+
+ [ 23612]
+ Turn gv_fullname3 and gv_efullname3 into macros that call
+ gv_fullname4 and gv_efullname4 directly, saving overhead.
+
+ [ 23614]
+ Remove spurious semicolons
+ (As these 2 are spare, I guess I should send them to Mark Rhodes
+ (former office mate) as he often said that he kept mislaying his)
+
+ [ 23617]
+ Break out setting $^X into its own static function S_set_caret_X
+
+ [ 23623]
+ Revert part of the change to gv_fullname4(), as the change seems to
+ be fractionally slower. Re-investigation prompted by a comment from
+ Tim Bunce, who seems to be more on the ball than I am.
+
+ [ 23626]
+ Avoid getting the stash name twice (at least visually, if not also
+ in the generated code)
+ Branch: maint-5.8/perl
+ !> embed.fnc embed.h gv.c gv.h op.c perl.c proto.h sv.c toke.c
+____________________________________________________________________________
+[ 23664] By: nicholas on 2004/12/21 18:03:02
+ Log: Integrate:
+ [ 23531]
+ Wrap some long lines
+
+ [ 23535]
+ Test the currently working virtual %Config entries
+
+ [ 23536]
+ Make $Config{libs_nolargefiles} and
+ $Config{libswanted_nolargefiles} work. (For the first time)
+
+ [ 23537]
+ The first entry in the virtual config.sh is special cased. So
+ test it.
+
+ [ 23538]
+ Add an exists test for the things we loop over
+
+ [ 23541]
+ Cheat. (Add a leading newline, and so remove all the special
+ casing for "if we're at the start of $Config_SH")
+
+ [ 23542]
+ Generate the virtual entries at Config.pm build time, as they
+ don't change. This lets us get rid of the entire "fetch_virtual"
+ baggage, and makes the config_re lookup work for the virtual
+ entries.
+
+ [ 23543]
+ Fix Win32 breakage caused by changes 23535/23542.
+
+ [ 23544]
+ Make configpm and the generated Config.pm strict and warnings
+ clean.
+
+ [ 23545]
+ The change to the internal representation introduced a bug whereby
+ the key returned by FIRSTKEY had an erroneous leading newline.
+ EXISTS was also buggy.
+
+ [ 23554]
+ Put Config.pm on a diet. 3K rather than 32K
+ configpm now generates 2 files, a small Config.pm containing the
+ commonly used functions and values, which AUTOLOADs a
+ Config_heavy.pl containing anything else needed.
+ The "common" values in the small Config.pm may need some
+ tweaking, based on real world data.
+
+ [ 23555]
+ Hateful cAsE iNsEnSiTiVe file systems
+
+ [ 23557]
+ Subject: [PATCH] Re: getting Config.pm on a diet
+ From: "Craig A. Berry" <craigberry@mac.com>
+ Message-ID: <41A8F225.7080902@mac.com>
+ Date: Sat, 27 Nov 2004 15:31:17 -0600
+
+ [ 23558]
+ Generate the precached %Config entries based on some empirical
+ data, rather than just guesswork.
+
+ [ 23561]
+ Need to stub the public functions to keep some existing code
+ working.
+ No need to keep $Config_SH around in memory when we can easily
+ re-create it.
+
+ [ 23562]
+ The byteorder code doesn't need to be in Config.pm if byteorder
+ isn't actually a frequently looked up value.
+
+ [ 23563]
+ Given that there is a pre-built cache, no need for @v_fast
+
+ [ 23564]
+ Skip generating all the code to deal with "" strings in config.sh
+ if there aren't any. '' only code is much simpler.
+
+ [ 23583]
+ Subject: [PATCH] add -I../lib to VMS build to find Config_heavy.pl
+ Date: Wed, 01 Dec 2004 07:24:45 -0600
+ From: "Craig A. Berry" <craigberry@mac.com>
+ Message-ID: <41ADC61D.8010407@mac.com>
+
+ [ 23601]
+ Subject: [PATCH] configure.com: no more CONFIG=true
+ From: "Craig A. Berry" <craigberry@mac.com>
+ Message-ID: <41AF87BA.1080108@mac.com>
+ Date: Thu, 02 Dec 2004 15:23:06 -0600
+
+ [ 23610]
+ Check that @INC entries and %Config path entries are consistent.
+
+ [ 23613]
+ Tests for Config.pm much better now - toDONE
+
+ [ 23616]
+ Fix typo from change 23554 which screwed up Windows smokes
+
+ [ 23618]
+ Fix another Win32 breakage caused by change 23554
+
+ [ 23634]
+ Evade using @ in the 1 liner with some perl 1 syntax.
+
+ [ 23638]
+ Fix Win32 breakage caused by change 23610
+
+ Simply skip the offending tests on Win32. There is no sense in testing
+ that $Config dir entries appear in @INC because the $Config entries
+ relate to where perl.exe will be installed (as per INST_DRV/INST_TOP in
+ win32/Makefile), whereas @INC entries are dynamic, based on where
+ perlXX.dll is currently located.
+ Branch: maint-5.8/perl
+ !> Makefile.SH configpm configure.com lib/Config.t
+ !> pod/perltodo.pod t/win32/system.t vms/descrip_mms.template
+ !> win32/Makefile win32/makefile.mk
+____________________________________________________________________________
+[ 23625] By: nicholas on 2004/12/07 23:09:13
+ Log: Integrate:
+ [ 19505]
+ Subject: Re: Bug stomping fun. [PATCH: bug #1016]
+ From: Alex Vandiver <alexmv@MIT.EDU>
+ Date: 02 May 2003 06:45:05 -0400
+ Message-Id: <1051872303.26203.104.camel@supox>
+ (plus perldiag nit)
+
+ [ 23528]
+ Fix for bug: [perl #32562] __PACKAGE__ symbol has wrong value
+ after eval or require
+ Branch: maint-5.8/perl
+ !> dump.c gv.c hv.c pod/perldiag.pod pp.c pp_hot.c sv.c
+ !> t/comp/package.t toke.c
+____________________________________________________________________________
+[ 23600] By: nicholas on 2004/12/02 15:40:11
+ Log: Integrate:
+ [ 23571]
+ Subject: Re: [PATCH] Re: Smoke [5.9.2] 23566 FAIL(X) openbsd 3.6 (i386/1 cpu)
+ Date: Tue, 30 Nov 2004 09:29:06 -0600
+ From: Steve Peters <steve@fisharerojo.org>
+ Message-ID: <20041130152906.GA555@mccoy.peters.homeunix.org>
+ Branch: maint-5.8/perl
+ !> hints/openbsd.sh
+____________________________________________________________________________
+[ 23599] By: nicholas on 2004/12/02 15:05:06
+ Log: Integrate:
+ [ 23525]
+ Subject: [PATCH] warnings.t portability tweaks
+ From: "Craig A. Berry" <craigberry@mac.com>
+ Date: Sat, 20 Nov 2004 10:29:47 -0600
+ Message-ID: <419F70FB.7000100@mac.com>
+ Branch: maint-5.8/perl
+ !> t/lib/warnings/perlio
+____________________________________________________________________________
+[ 23597] By: nicholas on 2004/12/01 21:00:06
+ Log: Integrate:
+ [ 23167]
+ Subject: Re: [perl #30783] Test::Builder does not handle overloaded "name" values
+ From: Autrijus Tang <autrijus@gmail.com>
+ Date: Thu, 22 Jul 2004 20:17:58 -0700
+ Message-ID: <1912f0e204072220171790193a@mail.gmail.com>
+
+ [ 23566]
+ Upgrade to Test::Simple 0.53
+ Branch: maint-5.8/perl
+ +> lib/Test/Simple/t/circular_data.t
+ +> lib/Test/Simple/t/overload_threads.t
+ +> lib/Test/Simple/t/plan_bad.t
+ +> lib/Test/Simple/t/plan_shouldnt_import.t
+ +> lib/Test/Simple/t/require_ok.t lib/Test/Simple/t/sort_bug.t
+ !> MANIFEST lib/Test/Builder.pm lib/Test/More.pm
+ !> lib/Test/Simple.pm lib/Test/Simple/Changes
+ !> lib/Test/Simple/README lib/Test/Simple/TODO
+ !> lib/Test/Simple/t/00signature.t lib/Test/Simple/t/More.t
+ !> lib/Test/Simple/t/diag.t lib/Test/Simple/t/fail_one.t
+ !> lib/Test/Simple/t/is_deeply.t lib/Test/Simple/t/overload.t
+ !> lib/Test/Simple/t/todo.t t/lib/TieOut.pm
+____________________________________________________________________________
+[ 23596] By: nicholas on 2004/12/01 20:40:59
+ Log: Integrate:
+ [ 23523]
+ Assimilate Test-Simple 0.50
+ Branch: maint-5.8/perl
+ +> lib/Test/Simple/TODO lib/Test/Simple/t/00signature.t
+ +> lib/Test/Simple/t/00test_harness_check.t
+ +> lib/Test/Simple/t/eq_set.t lib/Test/Simple/t/extra_one.t
+ +> lib/Test/Simple/t/fail_one.t
+ +> lib/Test/Simple/t/harness_active.t lib/Test/Simple/t/no_diag.t
+ +> lib/Test/Simple/t/overload.t lib/Test/Simple/t/reset.t
+ +> lib/Test/Simple/t/thread_taint.t t/lib/NoExporter.pm
+ !> MANIFEST lib/Test/Builder.pm lib/Test/More.pm
+ !> lib/Test/Simple.pm lib/Test/Simple/Changes
+ !> lib/Test/Simple/README lib/Test/Simple/t/More.t
+ !> lib/Test/Simple/t/diag.t lib/Test/Simple/t/extra.t
+ !> lib/Test/Simple/t/fail-like.t lib/Test/Simple/t/fail-more.t
+ !> lib/Test/Simple/t/fail.t lib/Test/Simple/t/has_plan2.t
+ !> lib/Test/Simple/t/is_deeply.t lib/Test/Simple/t/missing.t
+ !> lib/Test/Simple/t/output.t lib/Test/Simple/t/plan_is_noplan.t
+ !> lib/Test/Simple/t/plan_no_plan.t lib/Test/Simple/t/threads.t
+ !> lib/Test/Simple/t/todo.t lib/Test/Simple/t/use_ok.t
+ !> lib/Test/Tutorial.pod t/lib/Test/Simple/Catch.pm
+ !> t/lib/TieOut.pm
+____________________________________________________________________________
+[ 23595] By: nicholas on 2004/12/01 19:53:15
+ Log: Integrate:
+ [ 23491]
+ Subject: [PATCH] Re: [perl #32272] Not OK: perl v5.8.5 +MAINT23414 on cygwin-thread-multi-64int 1.5.12s(0.11642) (UNINSTALLED)
+ From: Yitzchak Scott-Thoennes <sthoenna@efn.org>
+ Date: Tue, 9 Nov 2004 17:40:13 -0800
+ Message-ID: <20041110014012.GA2796@efn.org>
+
+ [ 23492]
+ Replace a skip by a todo.
+ Subject: Re: [PATCH] Re: [perl #32272] Not OK: perl v5.8.5 +MAINT23414 on cygwin-thread-multi-64int 1.5.12s(0.11642) (UNINSTALLED)
+ From: Yitzchak Scott-Thoennes <sthoenna@efn.org>
+ Date: Wed, 10 Nov 2004 01:30:14 -0800
+ Message-ID: <20041110093014.GA1676@efn.org>
+
+ [ 23505]
+ Subject: [PATCH 5.8.x] Allow more tries for t/op/time.t test 2.
+ From: Andy Dougherty <doughera@lafayette.edu>
+ Date: Tue, 16 Nov 2004 12:11:00 -0500 (EST)
+ Message-ID: <Pine.SOL.4.58.0411161149170.5639@maxwell.phys.lafayette.edu>
+ Branch: maint-5.8/perl
+ !> t/io/tell.t t/op/time.t
+____________________________________________________________________________
+[ 23594] By: nicholas on 2004/12/01 19:38:55
+ Log: Integrate:
+ [ 23473]
+ Subject: [perl #32327] Benchmark calls coderef with spurious arguments
+ From: Anno Siegel (via RT) <perlbug-followup@perl.org>
+ Date: 4 Nov 2004 20:12:36 -0000
+ Message-ID: <rt-3.0.11-32327-99325.8.9408996026507@perl.org>
+
+ [ 23510]
+ Subject: [perl #28929] File::Find follow_fast => 1 loses dangling symlink
+ From: "Steve Peters via RT" <perlbug-followup@perl.org>
+ Date: 12 Nov 2004 02:47:36 -0000
+ Message-ID: <rt-3.0.11-28929-100158.11.3214775505644@perl.org>
+
+ [ 23526]
+ Subject: [perl #3422] [PATCH] CHECK routine called after syntax error
+ From: "Steve Peters via RT" <perlbug-followup@perl.org>
+ Date: 23 Nov 2004 00:04:24 -0000
+ Message-ID: <rt-3.0.11-3422-100830.4.45764701781506@perl.org>
+
+ [ 23548]
+ Subject: [perl #32639] [PATCH] Bug in Term::Complete Module with $_ Usage
+ From: "Steve Peters via RT" <perlbug-followup@perl.org>
+ Date: 26 Nov 2004 17:14:33 -0000
+ Message-ID: <rt-3.0.11-32639-101066.11.6172971744206@perl.org>
+ Branch: maint-5.8/perl
+ !> ext/B/B/Deparse.pm lib/Benchmark.pm lib/Benchmark.t
+ !> lib/File/Find.pm lib/File/Find/t/find.t lib/Term/Complete.pm
+____________________________________________________________________________
+[ 23593] By: nicholas on 2004/12/01 19:11:22
+ Log: Integrate:
+ [ 23497]
+ Subject: [perl #32400] Unnecessary warning from constant.pm
+ From: Anno Siegel (via RT) <perlbug-followup@perl.org>
+ Date: 10 Nov 2004 18:30:38 -0000
+ Message-ID: <rt-3.0.11-32400-100099.4.31094423840584@perl.org>
+ Branch: maint-5.8/perl
+ !> lib/constant.pm lib/constant.t
+____________________________________________________________________________
+[ 23591] By: nicholas on 2004/12/01 18:52:08
+ Log: Integrate:
+ [ 17730]
+ missing chunk from #17725 causes lib/constant.t test failures
+ (which was also a conversion to Test::More, so integrate that and
+ convert the dropped pseudohash tests to Test::More too)
+
+ [ 23588]
+ &test in constant.t is vestigial, so amputate it.
+ Branch: maint-5.8/perl
+ ! lib/constant.t
+____________________________________________________________________________
+[ 23590] By: nicholas on 2004/12/01 17:07:31
+ Log: Integrate:
+ [ 23490]
+ Adjust test count for non-windows machines
+ Branch: maint-5.8/perl
+ !> ext/IO/t/io_file.t
+____________________________________________________________________________
+[ 23589] By: nicholas on 2004/12/01 16:58:47
+ Log: http://google.com/search?btnI=!&q=oi+perforce+no
+ I wanted 23490 too, damn you. You're more trouble than you're worth.
+
+ Integrate:
+ [ 23489]
+ Subject: [PATCH] fix IO::File to support binmode
+ From: "Jos I. Boumans" <kane@dwim.org>
+ Date: Tue, 9 Nov 2004 16:59:27 +0100
+ Message-Id: <559E356E-3268-11D9-A2E6-000A95EF62E2@dwim.org>
+ Branch: maint-5.8/perl
+ +> ext/IO/t/io_file.t
+ !> MANIFEST ext/IO/lib/IO/File.pm
+____________________________________________________________________________
+[ 23586] By: nicholas on 2004/12/01 15:02:51
+ Log: Integrate:
+ [ 23468]
+ Subject: Re: [perl #30633] Perl's "do" operator with a variety of absolute paths under Cygwin
+ From: Yitzchak Scott-Thoennes <sthoenna@efn.org>
+ Date: Tue, 2 Nov 2004 17:24:29 -0800
+ Message-ID: <20041103012429.GA7196@efn.org>
+
+ [ 23520]
+ genuine possible buffer problems spotted by flawfinder
+ Branch: maint-5.8/perl
+ !> regcomp.c util.c util.h
+____________________________________________________________________________
+[ 23585] By: nicholas on 2004/12/01 13:52:46
+ Log: Integrate:
+ [ 23501]
+ Make all scripts run by regen.pl write output with UNIX style EOL's.
+
+ (autodoc.pl was already done by change 23371.)
+
+ [ 23567]
+ Remove trailing whitespace that found their way in the docs
+ (spotted by Stas Bekman)
+
+ [ 23568]
+ Protection against trailing spaces in embed.fnc
+
+ [ 23581]
+ MANIFEST.SKIP is missing from the list of files that come
+ with MakeMaker
+ Branch: maint-5.8/perl
+ !> Porting/Maintainers.pl autodoc.pl bytecode.pl embed.fnc
+ !> embed.pl keywords.pl opcode.pl pod/perlapi.pod proto.h
+ !> regcomp.pl warnings.pl
+____________________________________________________________________________
+[ 23582] By: nicholas on 2004/12/01 13:28:06
+ Log: Integrate:
+ [ 23433]
+ [perl #31851] Threading crash with closures
+ various OpREFCNT_inc() operations weren't doing locking
+
+ [ 23499]
+ Fix Win32 breakage caused by changes to op.c in change 23433.
+
+ Also limit the scope of the locks in a couple of places, as suggested
+ by Hugo in http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2004-11/msg00286.html.
+ Branch: maint-5.8/perl
+ ! embed.fnc
+ !> embed.h global.sym op.c op.h pad.c proto.h regcomp.c sv.c
+____________________________________________________________________________
+[ 23580] By: nicholas on 2004/12/01 12:13:11
+ Log: Integrate:
+ [ 23448]
+ Make TEST and harness skip tests for extensions that were not
+ configured. Currently this skipping is silent - maybe they should
+ report what they are skipping.
+ Branch: maint-5.8/perl
+ !> t/TEST t/harness
+____________________________________________________________________________
+[ 23579] By: nicholas on 2004/11/30 23:01:57
+ Log: oops. typo. s/5/6/;
+ Branch: maint-5.8/perl
+ ! MANIFEST
+____________________________________________________________________________
+[ 23578] By: nicholas on 2004/11/30 16:56:12
+ Log: Integrate:
+ [ 23435]
+ Added probes for strlcat () and strlcpy () to Configure
+ Re-ordered config_h.SH
+
+ [ 23436]
+ Promote #23435 (strlcat ()/strlcpy ()) to non-standard OS's
+
+ [ 23450]
+ The next step in strlcat ()/ strcpy () detection and usage
+ preparation. Change to handy.h eeded for config_h.SH
+
+ [ 23455]
+ Since strlcat/strlcpy are not argument/return value compatible
+ with strncat/strncpy, replace the misleading defines with comment
+
+ [ 23457]
+ New Glossary and samples for blead
+ Glossary now is in line with recent changes to config_h.SH
+
+ [ 23467]
+ Subject: [PATCH configure.com] Re: [PATCH] Detecting strlcat() and strlcpy() in Configure
+ From: "Craig A. Berry" <craigberry@mac.com>
+ Date: Tue, 02 Nov 2004 20:02:04 -0600
+ Message-ID: <41883C1C.3080108@mac.com>
+
+ [ 23577]
+ Add placeholders for the new strlcat and strlcpy entries in
+ config.sh, to ensure that the config.h generated for cross-
+ compilation will still work.
+ Branch: maint-5.8/perl
+ !> Configure Cross/config.sh-arm-linux Makefile.SH
+ !> NetWare/config_H.wc Porting/Glossary config_h.SH configure.com
+ !> handy.h plan9/config_h.sample win32/config_H.bc
+ !> win32/config_H.gc win32/config_H.vc win32/config_H.vc64
+ !> wince/config_H.ce
+____________________________________________________________________________
+[ 23576] By: nicholas on 2004/11/30 15:48:24
+ Log: Move the old Changes file to Changes5.8.6
+ Create and update a new Changes file for 5.8.7
+ Branch: maint-5.8/perl
+ +> Changes5.8.6
+ ! Changes MANIFEST patchlevel.h
+____________________________________________________________________________
+[ 23573] By: nicholas on 2004/11/30 15:16:05
+ Log: Create perl587delta.pod
+ Branch: maint-5.8/perl
+ + pod/perl587delta.pod
+ ! MANIFEST Makefile.SH pod.lst pod/perl.pod pod/perltoc.pod
+ ! vms/descrip_mms.template win32/Makefile win32/makefile.mk
+ ! win32/pod.mak
+____________________________________________________________________________
+[ 23569] By: nicholas on 2004/11/30 13:59:34
+ Log: Fix my C<< >> error (as diagnosed by Mike Giroux), plus rename the
+ file to perl586delta ready for 5.8.7
+ Branch: maint-5.8/perl
+ ! pod/perl586delta.pod
+____________________________________________________________________________
+[ 23565] By: nicholas on 2004/11/28 21:07:27
+ Log: Subject: [PATCH] maint has the wrong MANIFEST.SKIP
+ From: Michael G Schwern <schwern@pobox.com>
+ Message-ID: <20041123052948.GA10605@windhund.schwern.org>
+ Date: Tue, 23 Nov 2004 00:29:49 -0500
+ Branch: maint-5.8/perl
+ ! lib/ExtUtils/MANIFEST.SKIP
+____________________________________________________________________________
+[ 23560] By: nicholas on 2004/11/28 00:25:25
+ Log: Integrate:
+ [ 23498]
+ Subject: [PATCH] Add the minitest target to vms buildsystem
+ From: Abe Timmerman <abe@ztreet.demon.nl>
+ Date: Sun, 14 Nov 2004 00:48:17 +0100
+ Message-Id: <200411140048.17035.abe@ztreet.demon.nl>
+ Branch: maint-5.8/perl
+ !> vms/descrip_mms.template vms/test.com
+____________________________________________________________________________
+[ 23559] By: nicholas on 2004/11/28 00:09:35
+ Log: Disarm the maint branch
+ Branch: maint-5.8/perl
+ ! patchlevel.h
+____________________________________________________________________________
+[ 23556] By: nicholas on 2004/11/27 18:34:58
+ Log: Break a leg
+ Branch: maint-5.8/perl
+ ! patchlevel.h pod/perlhist.pod
+____________________________________________________________________________
+[ 23553] By: nicholas on 2004/11/27 15:49:55
+ Log: Update Changes
+ Branch: maint-5.8/perl
+ ! Changes patchlevel.h
diff --git a/gnu/usr.bin/perl/Cross/Makefile.SH.patch b/gnu/usr.bin/perl/Cross/Makefile.SH.patch
index 661ea208752..b6772e50d60 100644
--- a/gnu/usr.bin/perl/Cross/Makefile.SH.patch
+++ b/gnu/usr.bin/perl/Cross/Makefile.SH.patch
@@ -1,6 +1,6 @@
---- ../Makefile.SH 2003-08-22 09:49:04.000000000 -0500
-+++ Makefile.SH 2003-09-05 02:38:40.000000000 -0500
-@@ -110,18 +110,7 @@
+--- ../Makefile.SH
++++ ../Makefile.SH
+@@ -129,18 +129,7 @@
# INSTALL file, under "Building a shared perl library".
# If there is no pre-existing $libperl, we don't need
# to do anything further.
@@ -20,14 +20,14 @@
;;
os390) test -f /bin/env && ldlibpth="/bin/env $ldlibpth"
;;
-@@ -349,9 +338,21 @@
+@@ -389,9 +378,21 @@
.c.s:
$(CCCMDSRC) -S $*.c
--all: $(FIRSTMAKEFILE) miniperl$(EXE_EXT) extra.pods $(private) $(public) $(dynamic_ext) $(nonxs_ext) extras.make
+-all: $(FIRSTMAKEFILE) miniperl$(EXE_EXT) extra.pods $(private) $(unidatafiles) $(public) $(dynamic_ext) $(nonxs_ext) extras.make
- @echo " ";
- @echo " Everything is up to date. Type '$(MAKE) test' to run test suite."
-+#all: $(FIRSTMAKEFILE) miniperl$(EXE_EXT) extra.pods $(private) $(public) $(dynamic_ext) $(nonxs_ext) extras.make
++#all: $(FIRSTMAKEFILE) miniperl$(EXE_EXT) extra.pods $(private) $(unidatafiles) $(public) $(dynamic_ext) $(nonxs_ext) extras.make
+# @echo " ";
+# @echo " Everything is up to date. Type '$(MAKE) test' to run test suite."
+
@@ -45,20 +45,20 @@
.PHONY: all compile translators utilities
-@@ -361,10 +362,10 @@
+@@ -401,10 +402,10 @@
cd x2p; $(MAKE) compile;
cd pod; $(MAKE) compile;
--translators: miniperl$(EXE_EXT) lib/Config.pm FORCE
-+translators: lib/Config.pm FORCE
+-translators: miniperl$(EXE_EXT) $(CONFIGPM) FORCE
++translators: $(CONFIGPM) FORCE
@echo " "; echo " Making x2p stuff"; cd x2p; $(LDLIBPTH) $(MAKE) all
--utilities: miniperl$(EXE_EXT) lib/Config.pm $(plextract) lib/lib.pm FORCE
-+utilities: lib/Config.pm $(plextract) lib/lib.pm FORCE
+-utilities: miniperl$(EXE_EXT) $(CONFIGPM) $(plextract) lib/lib.pm FORCE
++utilities: $(CONFIGPM) $(plextract) lib/lib.pm FORCE
@echo " "; echo " Making utilities"; cd utils; $(LDLIBPTH) $(MAKE) all
-@@ -541,7 +542,7 @@
+@@ -579,7 +580,7 @@
$(CC) -o miniperl $(CLDFLAGS) \
`echo $(obj) | sed 's/ op$(OBJ_EXT) / /'` \
miniperlmain$(OBJ_EXT) opmini$(OBJ_EXT) perl$(OBJ_EXT) $(libs)
@@ -66,8 +66,8 @@
+# $(LDLIBPTH) ./miniperl -w -Ilib -MExporter -e '<?>' || $(MAKE) minitest
!NO!SUBS!
;;
- beos*|next4*)
-@@ -549,7 +550,7 @@
+ next4*)
+@@ -587,7 +588,7 @@
miniperl: $& miniperlmain$(OBJ_EXT) $(LIBPERL) opmini$(OBJ_EXT)
$(CC) -o miniperl `echo $(obj) | sed 's/ op$(OBJ_EXT) / /'` \
miniperlmain$(OBJ_EXT) opmini$(OBJ_EXT) perl$(OBJ_EXT) $(libs)
@@ -76,55 +76,61 @@
!NO!SUBS!
;;
darwin*)
-@@ -716,7 +717,7 @@
+@@ -754,7 +755,7 @@
# We need to autosplit in two steps because VOS can't handle so many args
#
.PHONY: preplibrary
--preplibrary: miniperl$(EXE_EXT) lib/Config.pm lib/lib.pm $(PREPLIBRARY_LIBPERL)
-+preplibrary: lib/Config.pm lib/lib.pm $(PREPLIBRARY_LIBPERL)
+-preplibrary: miniperl$(EXE_EXT) $(CONFIGPM) lib/lib.pm $(PREPLIBRARY_LIBPERL)
++preplibrary: $(CONFIGPM) lib/lib.pm $(PREPLIBRARY_LIBPERL)
@sh ./makedir lib/auto
@echo " AutoSplitting perl library"
$(LDLIBPTH) ./miniperl -Ilib -e 'use AutoSplit; \
-@@ -728,11 +729,11 @@
- # Take care to avoid modifying lib/Config.pm without reason
- # (If trying to create a new port and having problems with the configpm script,
- # try 'make minitest' and/or commenting out the tests at the end of configpm.)
--lib/Config.pm: config.sh miniperl$(EXE_EXT) configpm Porting/Glossary
-+lib/Config.pm: config.sh configpm Porting/Glossary
- $(LDLIBPTH) ./miniperl -Ilib configpm configpm.tmp
- sh mv-if-diff configpm.tmp $@
-
--lib/ExtUtils/Miniperl.pm: miniperlmain.c miniperl$(EXE_EXT) minimod.pl lib/Config.pm
-+lib/ExtUtils/Miniperl.pm: miniperlmain.c minimod.pl lib/Config.pm
- $(LDLIBPTH) ./miniperl minimod.pl > minimod.tmp
- sh mv-if-diff minimod.tmp $@
- -touch lib/ExtUtils/Miniperl.pm
-@@ -740,18 +741,18 @@
+@@ -763,35 +764,35 @@
+ autosplit_lib_modules(@ARGV)' lib/*/*.pm
+ $(MAKE) lib/re.pm
+
+-lib/Config.pod: config.sh miniperl$(EXE_EXT) configpm Porting/Glossary
++lib/Config.pod: config.sh configpm Porting/Glossary
+ $(LDLIBPTH) ./miniperl -Ilib configpm --heavy=lib/Config_heavy.pl lib/Config.pm
+
+ $(CONFIGPM): lib/Config.pod
+
+-lib/ExtUtils/Miniperl.pm: miniperlmain.c miniperl$(EXE_EXT) minimod.pl $(CONFIGPM)
++lib/ExtUtils/Miniperl.pm: miniperlmain.c minimod.pl $(CONFIGPM)
+ $(LDLIBPTH) ./miniperl minimod.pl > lib/ExtUtils/Miniperl.pm
+
lib/re.pm: ext/re/re.pm
- cp ext/re/re.pm ext/re/re.tmp && sh mv-if-diff ext/re/re.tmp lib/re.pm
+ cp ext/re/re.pm lib/re.pm
--$(plextract): miniperl$(EXE_EXT) lib/Config.pm x2p/s2p
-+$(plextract): lib/Config.pm x2p/s2p
+-$(plextract): miniperl$(EXE_EXT) $(CONFIGPM) x2p/s2p
++$(plextract): $(CONFIGPM) x2p/s2p
@-rm -f $@
- $(LDLIBPTH) ./miniperl -Ilib $@.PL
+ $(LDLIBPTH) ./miniperl -I`pwd`/lib $@.PL
--x2p/s2p: miniperl$(EXE_EXT) lib/Config.pm x2p/s2p.PL
-+x2p/s2p: lib/Config.pm x2p/s2p.PL
+-x2p/s2p: miniperl$(EXE_EXT) $(CONFIGPM) x2p/s2p.PL
++x2p/s2p: $(CONFIGPM) x2p/s2p.PL
cd x2p; $(LDLIBPTH) $(MAKE) s2p
--lib/lib.pm: miniperl$(EXE_EXT) lib/Config.pm
-+lib/lib.pm: lib/Config.pm
+-lib/lib.pm: miniperl$(EXE_EXT) $(CONFIGPM)
++lib/lib.pm: $(CONFIGPM)
@-rm -f $@
$(LDLIBPTH) ./miniperl -Ilib lib/lib_pm.PL
+ unidatafiles $(unidatafiles): uni.data
+
+-uni.data: miniperl$(EXE_EXT) $(CONFIGPM) lib/unicore/mktables
++uni.data: $(CONFIGPM) lib/unicore/mktables
+ cd lib/unicore && $(LDLIBPTH) ../../miniperl -I../../lib mktables -w
+ touch uni.data
+
-extra.pods: miniperl$(EXE_EXT)
-+extra.pods:
++extra.pods:
-@test -f extra.pods && rm -f `cat extra.pods`
-@rm -f extra.pods
-@for x in `grep -l '^=[a-z]' README.* | grep -v README.vms` ; do \
@@ -798,18 +799,7 @@
INSTALL_DEPENDENCE = all
-
+
install.perl: $(INSTALL_DEPENDENCE) installperl
- if [ -n "$(COMPILE)" ]; \
- then \
@@ -167,8 +173,8 @@
test_prep_pre: preplibrary utilities $(nonxs_ext)
--test_prep: test_prep_pre miniperl$(EXE_EXT) perl$(EXE_EXT) $(dynamic_ext) $(TEST_PERL_DLL)
-+test_prep: test_prep_pre perl$(EXE_EXT) $(dynamic_ext) $(TEST_PERL_DLL)
+-test_prep: test_prep_pre miniperl$(EXE_EXT) $(unidatafiles) perl$(EXE_EXT) $(dynamic_ext) $(TEST_PERL_DLL)
++test_prep: test_prep_pre $(unidatafiles) perl$(EXE_EXT) $(dynamic_ext) $(TEST_PERL_DLL)
PERL=./perl $(MAKE) _test_prep
_test_tty:
@@ -176,8 +182,8 @@
# Can't depend on lib/Config.pm because that might be where miniperl
# is crashing.
--minitest: miniperl$(EXE_EXT) lib/re.pm
-+minitest: lib/re.pm
- -@test -f lib/lib.pm && test -f lib/Config.pm || \
- $(MAKE) lib/Config.pm lib/lib.pm
- @echo " "
+-minitest: miniperl$(EXE_EXT) lib/re.pm minitest.prep
++minitest: lib/re.pm minitest.prep
+ - cd t && (rm -f perl$(EXE_EXT); $(LNS) ../miniperl$(EXE_EXT) perl$(EXE_EXT)) \
+ && $(LDLIBPTH) ./perl TEST -minitest base/*.t comp/*.t cmd/*.t run/*.t io/*.t op/*.t uni/*.t </dev/tty
+
diff --git a/gnu/usr.bin/perl/Cross/config.sh-arm-linux b/gnu/usr.bin/perl/Cross/config.sh-arm-linux
index edb594a2590..5f3d7ae6232 100644
--- a/gnu/usr.bin/perl/Cross/config.sh-arm-linux
+++ b/gnu/usr.bin/perl/Cross/config.sh-arm-linux
@@ -36,8 +36,8 @@ api_subversion='0'
api_version='8'
api_versionstring='5.8.0'
ar='ar'
-archlib='/usr/lib/perl5/5.8.6/armv4l-linux'
-archlibexp='/usr/lib/perl5/5.8.6/armv4l-linux'
+archlib='/usr/lib/perl5/5.8.8/armv4l-linux'
+archlibexp='/usr/lib/perl5/5.8.8/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.8.6/armv4l-linux/CORE'
+ccdlflags='-rdynamic -Wl,-rpath,/usr/lib/perl5/5.8.8/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='gcc'
@@ -111,7 +111,13 @@ d_archlib='define'
d_asctime_r='undef'
d_atolf='undef'
d_atoll='define'
-d_attribut='define'
+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_bcmp='define'
d_bcopy='define'
d_bsd='undef'
@@ -125,6 +131,7 @@ d_chown='define'
d_chroot='define'
d_chsize='undef'
d_class='undef'
+d_clearenv='define'
d_closedir='define'
d_cmsghdr_s='define'
d_const='define'
@@ -193,6 +200,7 @@ d_fstatvfs='define'
d_fsync='define'
d_ftello='define'
d_ftime='undef'
+d_futimes='undef'
d_getcwd='define'
d_getespwnam='undef'
d_getfsstat='undef'
@@ -275,6 +283,8 @@ d_longlong='define'
d_lseekproto='define'
d_lstat='define'
d_madvise='define'
+d_malloc_good_size='undef'
+d_malloc_size='undef'
d_mblen='define'
d_mbstowcs='define'
d_mbtowc='define'
@@ -311,6 +321,7 @@ d_mymalloc='undef'
d_nice='define'
d_nl_langinfo='define'
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'
@@ -405,12 +416,14 @@ d_shmget='define'
d_sigaction='define'
d_sigprocmask='define'
d_sigsetjmp='define'
+d_snprintf='undef'
d_sockatmark='undef'
d_sockatmarkproto='undef'
d_socket='define'
d_socklen_t='define'
d_sockpair='define'
d_socks5_init='undef'
+d_sprintf_returns_strlen='define'
d_sqrtl='define'
d_srand48_r='undef'
d_srandom_r='undef'
@@ -434,6 +447,8 @@ d_strerrm='strerror(e)'
d_strerror='define'
d_strerror_r='undef'
d_strftime='define'
+d_strlcat='undef'
+d_strlcpy='undef'
d_strtod='define'
d_strtol='define'
d_strtold='define'
@@ -469,6 +484,7 @@ d_umask='define'
d_uname='define'
d_union_semun='undef'
d_unordered='undef'
+d_unsetenv='unsetenv'
d_usleep='define'
d_usleepproto='define'
d_ustat='define'
@@ -482,6 +498,7 @@ d_voidsig='define'
d_voidtty=''
d_volatile='define'
d_vprintf='define'
+d_vsnprintf='define'
d_wait4='define'
d_waitpid='define'
d_wcstombs='define'
@@ -668,7 +685,7 @@ inc_version_list=' '
inc_version_list_init='0'
incpath=''
inews=''
-installarchlib='./install_me_here/usr/lib/perl5/5.8.6/armv4l-linux'
+installarchlib='./install_me_here/usr/lib/perl5/5.8.8/armv4l-linux'
installbin='./install_me_here/usr/bin'
installhtml1dir=''
installhtml3dir=''
@@ -676,13 +693,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.8.6'
+installprivlib='./install_me_here/usr/lib/perl5/5.8.8'
installscript='./install_me_here/usr/bin'
-installsitearch='./install_me_here/usr/lib/perl5/site_perl/5.8.6/armv4l-linux'
+installsitearch='./install_me_here/usr/lib/perl5/site_perl/5.8.8/armv4l-linux'
installsitebin='./install_me_here/usr/bin'
installsitehtml1dir=''
installsitehtml3dir=''
-installsitelib='./install_me_here/usr/lib/perl5/site_perl/5.8.6'
+installsitelib='./install_me_here/usr/lib/perl5/site_perl/5.8.8'
installsiteman1dir='./install_me_here/usr/share/man/man1'
installsiteman3dir='./install_me_here/usr/share/man/man3'
installsitescript='./install_me_here/usr/bin'
@@ -808,8 +825,8 @@ pmake=''
pr=''
prefix='/usr'
prefixexp='/usr'
-privlib='/usr/lib/perl5/5.8.6'
-privlibexp='/usr/lib/perl5/5.8.6'
+privlib='/usr/lib/perl5/5.8.8'
+privlibexp='/usr/lib/perl5/5.8.8'
procselfexe='"/proc/self/exe"'
prototype='define'
ptrsize='4'
@@ -870,17 +887,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.8.6/armv4l-linux'
-sitearchexp='/usr/lib/perl5/site_perl/5.8.6/armv4l-linux'
+sitearch='/usr/lib/perl5/site_perl/5.8.8/armv4l-linux'
+sitearchexp='/usr/lib/perl5/site_perl/5.8.8/armv4l-linux'
sitebin='/usr/bin'
sitebinexp='/usr/bin'
sitehtml1dir=''
sitehtml1direxp=''
sitehtml3dir=''
sitehtml3direxp=''
-sitelib='/usr/lib/perl5/site_perl/5.8.6'
+sitelib='/usr/lib/perl5/site_perl/5.8.8'
sitelib_stem='/usr/lib/perl5/site_perl'
-sitelibexp='/usr/lib/perl5/site_perl/5.8.6'
+sitelibexp='/usr/lib/perl5/site_perl/5.8.8'
siteman1dir='/usr/share/man/man1'
siteman1direxp='/usr/share/man/man1'
siteman3dir='/usr/share/man/man3'
@@ -917,7 +934,7 @@ stdio_stream_array=''
strerror_r_proto='0'
strings='/usr/include/string.h'
submit=''
-subversion='4'
+subversion='8'
sysman='/usr/share/man/man1'
tail=''
tar=''
@@ -967,7 +984,9 @@ useopcode='true'
useperlio='define'
useposix='true'
usereentrant='undef'
+userelocatableinc='undef'
usesfio='false'
+usesitecustomize='undef'
useshrplib='true'
usesocks='undef'
usethreads='undef'
@@ -1000,8 +1019,8 @@ vendorprefix=''
vendorprefixexp=''
vendorscript=''
vendorscriptexp=''
-version='5.8.6'
-version_patchlevel_string='version 8 subversion 3'
+version='5.8.8'
+version_patchlevel_string='version 8 subversion 8'
versiononly='undef'
vi=''
voidflags='15'
@@ -1016,7 +1035,7 @@ config_args=''
config_argc=0
PERL_REVISION=5
PERL_VERSION=8
-PERL_SUBVERSION=3
+PERL_SUBVERSION=8
PERL_API_REVISION=5
PERL_API_VERSION=8
PERL_API_SUBVERSION=0
diff --git a/gnu/usr.bin/perl/META.yml b/gnu/usr.bin/perl/META.yml
index e0f8f3c1278..e7f2a63220f 100644
--- a/gnu/usr.bin/perl/META.yml
+++ b/gnu/usr.bin/perl/META.yml
@@ -1,5 +1,5 @@
name: perl
-version: 5.008006
+version: 5.008008
abstract: Practical Extraction and Reporting Language
author: perl5-porters@perl.org
license: perl
@@ -13,6 +13,7 @@ private:
- ext/Digest/MD5
- ext/Encode
- ext/Filter/Util/Call
+ - ext/IO
- ext/List/Util
- ext/MIME/Base64
- ext/Safe
@@ -20,6 +21,7 @@ private:
- ext/Time/HiRes
- ext/Unicode/Normalize
- lib/Attribute/Handlers
+ - lib/base
- lib/bignum
- lib/CGI
- lib/Class/ISA
@@ -57,8 +59,15 @@ private:
- t/lib/Test/Simple
file:
+ - ext/Compress/Zlib
+ - ext/DynaLoader/t/XSLoader.t
+ - ext/DynaLoader/XSLoader_pm.PL
- ext/Filter/t/call.t
+ - ext/Math/BigInt/FastCalc
+ - lib/Archive/Tar
+ - lib/Archive/Tar.pm
- lib/Attribute/Handlers.pm
+ - lib/base.pm
- lib/bigint.pm
- lib/bignum.pm
- lib/bigrat.pm
@@ -67,6 +76,10 @@ private:
- lib/CPAN.pm
- lib/Cwd.pm
- lib/Digest.pm
+ - lib/encoding/warnings
+ - lib/encoding/warnings.pm
+ - lib/ExtUtils/CBuilder
+ - lib/ExtUtils/CBuilder.pm
- lib/ExtUtils/Command
- lib/ExtUtils/Command.pm
- lib/ExtUtils/Install.pm
@@ -76,9 +89,11 @@ private:
- lib/ExtUtils/MakeMaker
- lib/ExtUtils/MakeMaker.pm
- lib/ExtUtils/Manifest.pm
+ - lib/ExtUtils/MANIFEST.SKIP
- lib/ExtUtils/Mkbootstrap.pm
- lib/ExtUtils/Mksymlists.pm
- lib/ExtUtils/MM.pm
+ - lib/ExtUtils/MM_AIX.pm
- lib/ExtUtils/MM_Any.pm
- lib/ExtUtils/MM_BeOS.pm
- lib/ExtUtils/MM_Cygwin.pm
@@ -86,14 +101,19 @@ private:
- lib/ExtUtils/MM_MacOS.pm
- lib/ExtUtils/MM_NW5.pm
- lib/ExtUtils/MM_OS2.pm
+ - lib/ExtUtils/MM_QNX.pm
- lib/ExtUtils/MM_Unix.pm
- lib/ExtUtils/MM_UWIN.pm
- lib/ExtUtils/MM_VMS.pm
+ - lib/ExtUtils/MM_VOS.pm
- lib/ExtUtils/MM_Win32.pm
- lib/ExtUtils/MM_Win95.pm
- lib/ExtUtils/MY.pm
- lib/ExtUtils/Packlist.pm
+ - lib/ExtUtils/ParseXS
+ - lib/ExtUtils/ParseXS.pm
- lib/ExtUtils/testlib.pm
+ - lib/fields.pm
- lib/File/Spec.pm
- lib/File/Temp.pm
- lib/Filter/Simple.pm
@@ -101,6 +121,8 @@ private:
- lib/I18N/LangTags.pm
- lib/if.pm
- lib/if.t
+ - lib/IO/Zlib
+ - lib/IO/Zlib.pm
- lib/Locale/Codes
- lib/Locale/Constants.pm
- lib/Locale/Constants.pod
@@ -117,6 +139,8 @@ private:
- lib/Math/BigInt.pm
- lib/Math/BigRat.pm
- lib/Memoize.pm
+ - lib/Module/CoreList
+ - lib/Module/CoreList.pm
- lib/Net/ChangeLog.libnet
- lib/Net/Cmd.pm
- lib/Net/Config.eg
@@ -136,8 +160,9 @@ private:
- lib/PerlIO/via/QuotedPrint.pm
- lib/PerlIO/via/t/QuotedPrint.t
- lib/Pod/Checker.pm
+ - lib/Pod/Escapes
+ - lib/Pod/Escapes.pm
- lib/Pod/Find.pm
- - lib/Pod/Html.pm
- lib/Pod/InputObjects.pm
- lib/Pod/LaTeX.pm
- lib/Pod/Man.pm
@@ -147,6 +172,9 @@ private:
- lib/Pod/Perldoc.pm
- lib/Pod/PlainText.pm
- lib/Pod/Select.pm
+ - lib/Pod/Simple
+ - lib/Pod/Simple.pm
+ - lib/Pod/Simple.pod
- lib/Pod/t/basic.cap
- lib/Pod/t/basic.clr
- lib/Pod/t/basic.man
@@ -189,6 +217,7 @@ private:
- t/lib/filter-util.pl
- t/lib/TieIn.pm
- t/lib/TieOut.pm
+ - t/lib/ZlibTestUtils.pm
- t/pod/emptycmd.t
- t/pod/emptycmd.xr
- t/pod/find.t
diff --git a/gnu/usr.bin/perl/NetWare/Makefile b/gnu/usr.bin/perl/NetWare/Makefile
index 9d4fe795131..d9647a97686 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.8.6 for NetWare"
+MODULE_DESC = "Perl 5.8.8 for NetWare"
CCTYPE = CodeWarrior
C_COMPILER = mwccnlm -c
CPP_COMPILER = mwccnlm
@@ -467,7 +467,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.8.6
+INST_VER = \5.8.8
#
# Comment this out if you DON'T want your perl installation to have
diff --git a/gnu/usr.bin/perl/NetWare/config.wc b/gnu/usr.bin/perl/NetWare/config.wc
index 745c6b5f210..763767d2aa5 100644
--- a/gnu/usr.bin/perl/NetWare/config.wc
+++ b/gnu/usr.bin/perl/NetWare/config.wc
@@ -89,6 +89,8 @@ d_PRIi64='undef'
d_PRIo64='undef'
d_PRIu64='undef'
d_PRIx64='undef'
+d_SCNfldbl='undef'
+d__fwalk='undef'
d_access='define'
d_accessx='undef'
d_aintl='undef'
@@ -97,7 +99,13 @@ d_archlib='define'
d_asctime_r='undef'
d_atolf='undef'
d_atoll='undef'
-d_attribut='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_bcmp='undef'
d_bcopy='undef'
d_bsd='define'
@@ -111,7 +119,9 @@ d_chown='undef'
d_chroot='undef'
d_chsize='define'
d_class='undef'
+d_clearenv='undef'
d_closedir='define'
+d_cmsghdr_s='undef'
d_const='define'
d_copysignl='undef'
d_crypt='undef'
@@ -121,6 +131,7 @@ d_ctermid_r='undef'
d_ctime_r='undef'
d_cuserid='undef'
d_dbl_dig='define'
+d_dbminitproto='undef'
d_difftime='define'
d_dirfd='undef'
d_dirnamlen='undef'
@@ -152,6 +163,7 @@ d_fchdir='undef'
d_fchmod='undef'
d_fchown='undef'
d_fcntl='undef'
+d_fcntl_can_lock='undef'
d_fd_macros='define'
d_fd_set='define'
d_fds_bits='define'
@@ -160,6 +172,7 @@ d_finite='undef'
d_finitel='undef'
d_flexfnam='define'
d_flock='define'
+d_flockproto='undef'
d_fork='undef'
d_fp_class='undef'
d_fpathconf='undef'
@@ -167,14 +180,18 @@ d_fpclass='undef'
d_fpclassify='undef'
d_fpclassl='undef'
d_fpos64_t='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_getcwd='define'
+d_getespwnam='undef'
d_getfsstat='undef'
d_getgrent='undef'
d_getgrent_r='undef'
@@ -189,6 +206,7 @@ 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'
@@ -200,6 +218,7 @@ d_getnetbyaddr_r='undef'
d_getnetbyname_r='undef'
d_getnetent_r='undef'
d_getnetprotos='define'
+d_getpagsz='undef'
d_getpbyname='define'
d_getpbynumber='define'
d_getpent='undef'
@@ -212,6 +231,7 @@ 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'
@@ -244,6 +264,7 @@ d_isnanl='undef'
d_killpg='undef'
d_lchown='undef'
d_ldbl_dig='define'
+d_libm_lib_version='undef'
d_link='define'
d_localtime_r='undef'
d_locconv='define'
@@ -253,6 +274,8 @@ d_longlong='undef'
d_lseekproto='define'
d_lstat='undef'
d_madvise='undef'
+d_malloc_good_size='undef'
+d_malloc_size='undef'
d_mblen='define'
d_mbstowcs='define'
d_mbtowc='define'
@@ -268,6 +291,9 @@ d_mkstemp='undef'
d_mkstemps='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'
@@ -277,6 +303,7 @@ 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'
@@ -285,6 +312,7 @@ d_mymalloc='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'
@@ -292,6 +320,7 @@ d_oldsock='undef'
d_open3='undef'
d_pathconf='undef'
d_pause='undef'
+d_perl_otherlibdirs='undef'
d_phostname='undef'
d_pipe='define'
d_poll='undef'
@@ -315,12 +344,15 @@ d_readdir64_r='undef'
d_readdir='define'
d_readdir_r='undef'
d_readlink='undef'
+d_readv='undef'
+d_recvmsg='undef'
d_rename='define'
d_rewinddir='define'
d_rmdir='define'
d_safebcpy='undef'
d_safemcpy='undef'
d_sanemcmp='define'
+d_sbrkproto='undef'
d_scalbnl='undef'
d_sched_yield='undef'
d_scm_rights='undef'
@@ -332,6 +364,7 @@ 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'
@@ -339,6 +372,7 @@ 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_r='undef'
@@ -349,6 +383,7 @@ 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'
@@ -371,19 +406,29 @@ d_shmctl='undef'
d_shmdt='undef'
d_shmget='undef'
d_sigaction='undef'
+d_sigprocmask='undef'
d_sigsetjmp='undef'
+d_snprintf='undef'
+d_sockatmark='undef'
+d_sockatmarkproto='undef'
d_socket='define'
d_socklen_t='undef'
d_sockpair='undef'
+d_socks5_init='undef'
+d_sprintf_returns_strlen='undef'
d_sqrtl='undef'
d_srand48_r='undef'
d_srandom_r='undef'
+d_sresgproto='undef'
+d_sresuproto='undef'
d_statblks='undef'
d_statfs_f_flags='undef'
d_statfs_s='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'
@@ -394,10 +439,13 @@ d_strerrm='strerror(e)'
d_strerror='define'
d_strerror_r='undef'
d_strftime='define'
+d_strlcat='undef'
+d_strlcpy='undef'
d_strtod='define'
d_strtol='define'
d_strtold='undef'
d_strtoll='undef'
+d_strtoq='undef'
d_strtoul='define'
d_strtoull='undef'
d_strtouq='undef'
@@ -405,6 +453,7 @@ d_strxfrm='define'
d_suidsafe='undef'
d_symlink='undef'
d_syscall='undef'
+d_syscallproto='undef'
d_sysconf='undef'
d_sysernlst=''
d_syserrlst='define'
@@ -421,10 +470,15 @@ d_tmpnam_r='undef'
d_truncate='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_unordered='undef'
+d_unsetenv='undef'
+d_usleep='undef'
+d_usleepproto='undef'
d_ustat='undef'
d_vendorarch='undef'
d_vendorbin='undef'
@@ -435,9 +489,11 @@ d_voidsig='define'
d_voidtty=''
d_volatile='define'
d_vprintf='define'
+d_vsnprintf='undef'
d_wait4='undef'
d_waitpid='define'
d_wcstombs='define'
+d_writev='undef'
d_wctomb='define'
d_xenix='undef'
date='date'
@@ -540,6 +596,7 @@ i_grp='undef'
i_ieeefp='undef'
i_inttypes='undef'
i_langinfo='undef'
+i_libutil='undef'
i_limits='define'
i_locale='define'
i_machcthr='undef'
@@ -553,6 +610,7 @@ i_neterrno='undef'
i_netinettcp='undef'
i_niin='define'
i_poll='undef'
+i_prot='undef'
i_pthread='undef'
i_pwd='undef'
i_rpcsvcdbm='define'
@@ -712,6 +770,7 @@ nvfformat='"f"'
nvgformat='"g"'
nvsize='8'
nvtype='double'
+nv_preserves_uv_bits='32'
o_nonblock='O_NONBLOCK'
obj_ext='.obj'
old_pthread_create_joinable=''
@@ -767,6 +826,7 @@ sPRIi64='"li"'
sPRIo64='"lo"'
sPRIu64='"lu"'
sPRIx64='"lx"'
+sSCNfldbl=''
sched_yield=''
scriptdir='~INST_TOP~~INST_VER~\bin'
scriptdirexp='~INST_TOP~~INST_VER~\bin'
@@ -869,10 +929,13 @@ use5005threads='undef'
use64bitall='undef'
use64bitint='undef'
usedl='define'
+use5005threads='undef'
+usecrosscompile='undef'
usefaststdio='define'
useithreads='define'
uselargefiles='undef'
uselongdouble='undef'
+usemallocwrap='undef'
usemorebits='undef'
usemultiplicity='define'
usemymalloc='n'
@@ -880,8 +943,11 @@ usenm='false'
useopcode='true'
useperlio='undef'
useposix='true'
+usereentrant='undef'
+userelocatableinc='undef'
usesfio='false'
useshrplib='yes'
+usesitecustomize='undef'
usesocks='undef'
usethreads='undef'
usevendorprefix='undef'
diff --git a/gnu/usr.bin/perl/NetWare/config_H.wc b/gnu/usr.bin/perl/NetWare/config_H.wc
index a9d047f683a..74f33c96d0a 100644
--- a/gnu/usr.bin/perl/NetWare/config_H.wc
+++ b/gnu/usr.bin/perl/NetWare/config_H.wc
@@ -2840,6 +2840,10 @@
* This symbol contains the number of bits a variable of type NVTYPE
* can preserve of a variable of type UVTYPE.
*/
+/* 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 /**/
@@ -2868,6 +2872,7 @@
#define NVSIZE 8 /**/
#define NV_PRESERVES_UV
#define NV_PRESERVES_UV_BITS undef
+#undef NV_ZERO_IS_ALLBITS_ZERO
/* IVdf:
* This symbol defines the format string used for printing a Perl IV
@@ -3412,6 +3417,18 @@
*/
#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
diff --git a/gnu/usr.bin/perl/NetWare/nw5.c b/gnu/usr.bin/perl/NetWare/nw5.c
index 488111ce94f..a093bb02cf1 100644
--- a/gnu/usr.bin/perl/NetWare/nw5.c
+++ b/gnu/usr.bin/perl/NetWare/nw5.c
@@ -922,8 +922,8 @@ do_aspawn(void *vreally, void **vmark, void **vsp)
return -1;
nw_perlshell_items = 0; // No Shell
-// New(1306, argv, (sp - mark) + nw_perlshell_items + 3, char*); // In the old code of 5.6.1
- New(1306, argv, (sp - mark) + nw_perlshell_items + 2, char*);
+// Newx(argv, (sp - mark) + nw_perlshell_items + 3, char*); // In the old code of 5.6.1
+ Newx(argv, (sp - mark) + nw_perlshell_items + 2, char*);
if (SvNIOKp(*(mark+1)) && !SvPOKp(*(mark+1))) {
++mark;
@@ -987,8 +987,8 @@ do_spawn2(char *cmd, int exectype)
/* Save an extra exec if possible. See if there are shell
* metacharacters in it */
if (!has_shell_metachars(cmd)) {
- New(1301,argv, strlen(cmd) / 2 + 2, char*);
- New(1302,cmd2, strlen(cmd) + 1, char);
+ Newx(argv, strlen(cmd) / 2 + 2, char*);
+ Newx(cmd2, strlen(cmd) + 1, char);
strcpy(cmd2, cmd);
a = argv;
for (s = cmd2; *s;) {
@@ -1027,7 +1027,7 @@ do_spawn2(char *cmd, int exectype)
char **argv = NULL;
int i = -1;
- New(1306, argv, nw_perlshell_items + 2, char*);
+ Newx(argv, nw_perlshell_items + 2, char*);
while (++i < nw_perlshell_items)
argv[i] = nw_perlshell_vec[i];
argv[i++] = cmd;
diff --git a/gnu/usr.bin/perl/Porting/Maintainers.pm b/gnu/usr.bin/perl/Porting/Maintainers.pm
index b8959e820aa..f71db987713 100644
--- a/gnu/usr.bin/perl/Porting/Maintainers.pm
+++ b/gnu/usr.bin/perl/Porting/Maintainers.pm
@@ -72,6 +72,7 @@ $0: Usage: $0 [[--maintainer M --module M --files --check]|file ...]
--module M list all modules matching M
--files list all files
--check check consistency of Maintainers.pl
+--opened list all modules of files opened by perforce
Matching is case-ignoring regexp, author matching is both by
the short id and by the full name and email. A "module" may
not be just a module, it may be a file or files or a subdirectory.
@@ -84,6 +85,7 @@ my $Maintainer;
my $Module;
my $Files;
my $Check;
+my $Opened;
sub process_options {
usage()
@@ -93,9 +95,18 @@ sub process_options {
'module=s' => \$Module,
'files' => \$Files,
'check' => \$Check,
+ 'opened' => \$Opened,
);
- my @Files = @ARGV;
+ my @Files;
+
+ if ($Opened) {
+ my @raw = `p4 opened`;
+ die if $?;
+ @Files = map {s!#.*!!s; s!^//depot/.*?/perl/!!; $_} @raw;
+ } else {
+ @Files = @ARGV;
+ }
usage() if @Files && ($Maintainer || $Module || $Files);
diff --git a/gnu/usr.bin/perl/Porting/check83.pl b/gnu/usr.bin/perl/Porting/check83.pl
index 5851d9ffb63..eb020023b3a 100644
--- a/gnu/usr.bin/perl/Porting/check83.pl
+++ b/gnu/usr.bin/perl/Porting/check83.pl
@@ -1,4 +1,6 @@
-#!/usr/bin/perl
+#!/usr/bin/perl -w
+
+use strict;
# Check whether there are naming conflicts when names are truncated to
# the DOSish case-ignoring 8.3 format, plus other portability no-nos.
@@ -9,25 +11,23 @@
# "no filename shall be longer than eight and a suffix if present
# not longer than three".
-# TODO: this doesn't actually check for *directory entries*, what this
-# does is to check for *MANIFEST entries*, which are only files, not
-# directories. In other words, a 8.3 conflict between a directory
-# "abcdefghx" and a file "abcdefghy" wouldn't be noticed-- or even for
-# a directory "abcdefgh" and a file "abcdefghy".
+my %seen;
+my $maxl = 30; # make up a limit for a maximum filename length
sub eight_dot_three {
- my ($dir, $base, $ext) = ($_[0] =~ m!^(?:(.+)/)?([^/.]+)(?:\.([^/.]+))?$!);
- my $file = $base . defined $ext ? ".$ext" : "";
+ return () if $seen{$_[0]}++;
+ my ($dir, $base, $ext) = ($_[0] =~ m{^(?:(.+)/)?([^/.]+)(?:\.([^/.]+))?$});
+ my $file = $base . ( defined $ext ? ".$ext" : "" );
$base = substr($base, 0, 8);
$ext = substr($ext, 0, 3) if defined $ext;
- if ($dir =~ /\./) {
- warn "$dir: directory name contains '.'\n";
+ if (defined $dir && $dir =~ /\./) {
+ print "directory name contains '.': $dir\n";
}
if ($file =~ /[^A-Za-z0-9\._-]/) {
- warn "$file: filename contains non-portable characters\n";
+ print "filename contains non-portable characters: $_[0]\n";
}
- if (length $file > 30) {
- warn "$file: filename longer than 30 characters\n"; # make up a limit
+ if (length $file > $maxl) {
+ print "filename longer than $maxl characters: $file\n";
}
if (defined $dir) {
return ($dir, defined $ext ? "$dir/$base.$ext" : "$dir/$base");
@@ -43,16 +43,19 @@ if (open(MANIFEST, "MANIFEST")) {
chomp;
s/\s.+//;
unless (-f) {
- warn "$_: missing\n";
+ print "missing: $_\n";
next;
}
if (tr/././ > 1) {
- print "$_: more than one dot\n";
+ print "more than one dot: $_\n";
next;
}
- my ($dir, $edt) = eight_dot_three($_);
- ($dir, $edt) = map { lc } ($dir, $edt);
- push @{$dir{$dir}->{$edt}}, $_;
+ while (m!/|\z!g) {
+ my ($dir, $edt) = eight_dot_three($`);
+ next unless defined $dir;
+ ($dir, $edt) = map { lc } ($dir, $edt);
+ push @{$dir{$dir}->{$edt}}, $_;
+ }
}
} else {
die "$0: MANIFEST: $!\n";
@@ -62,7 +65,7 @@ for my $dir (sort keys %dir) {
for my $edt (keys %{$dir{$dir}}) {
my @files = @{$dir{$dir}->{$edt}};
if (@files > 1) {
- print "@files: directory $dir conflict $edt\n";
+ print "directory $dir conflict $edt: @files\n";
}
}
}
diff --git a/gnu/usr.bin/perl/Porting/checkAUTHORS.pl b/gnu/usr.bin/perl/Porting/checkAUTHORS.pl
index 293b6cc2c5b..a4e7c3fb380 100755
--- a/gnu/usr.bin/perl/Porting/checkAUTHORS.pl
+++ b/gnu/usr.bin/perl/Porting/checkAUTHORS.pl
@@ -5,14 +5,16 @@ $Text::Wrap::columns = 80;
my ($committer, $patch, $log);
use Getopt::Long;
-my ($rank, @authors, %authors, %untraced, %patchers);
-my $result = GetOptions ("rank" => \$rank, # rank authors
- "acknowledged=s" => \@authors); # authors files
+my ($rank, $ta, @authors, %authors, %untraced, %patchers, %committers);
+my $result = GetOptions ("rank" => \$rank, # rank authors
+ "thanks-applied" => \$ta, # ranks committers
+ "acknowledged=s" => \@authors); # authors files
-if (!$result or !($rank xor @authors) or !@ARGV) {
+if (!$result or (($rank||0) + ($ta||0) + (@authors ? 1 : 0) != 1) or !@ARGV) {
die <<"EOS";
$0 --rank Changelogs # rank authors by patches
$0 --acknowledged <authors file> Changelogs # Display unacknowledged authors
+$0 --thanks-applied Changelogs # ranks committers
Specify stdin as - if needs be. Remember that option names can be abbreviated.
EOS
}
@@ -29,13 +31,16 @@ my %map = reverse (
gsar => "gsar\100activestate.com",
hv => "hv\100crypt.compulink.co.uk",
jhi => "jhi\100iki.fi",
- merijn => "h.m.brand\100hccnet.nl",
+ merijn => "h.m.brand\100xs4all.nl",
mhx => "mhx-perl\100gmx.net",
nicholas => "nick\100unfortu.net",
nick => "nick\100ing-simmons.net",
pudge => "pudge\100pobox.com",
rgs => "rgarciasuarez\100free.fr",
sky => "sky\100nanisky.com",
+ steveh => "steve.hay\100uk.radan.com",
+ stevep => "steve\100fisharerojo.org",
+ gisle => "gisle\100activestate.com",
"abigail\100abigail.nl"=> "abigail\100foad.org",
"chromatic\100wgz.org" => "chromatic\100rmci.net",
"slaven\100rezic.de" => "slaven.rezic\100berlin.de",
@@ -47,30 +52,74 @@ my %map = reverse (
"wolfgang.laun\100alcatel.at",
"t.jenness\100jach.hawaii.edu" => "timj\100jach.hawaii.edu",
"abe\100ztreet.demon.nl" => "abeltje\100cpan.org",
- "perl_dummy\100bloodgate.com" => "tels\100bloodgate.com",
+ "nospam-abuse\100bloodgate.com" => "tels\100bloodgate.com",
"jfriedl\100yahoo.com" => "jfriedl\100yahoo-inc.com",
"japhy\100pobox.com" => "japhy\100pobox.org",
"gellyfish\100gellyfish.com" => "jns\100gellyfish.com",
+ "jcromie\100divsol.com" => "jcromie\100cpan.org",
+ "demerphq\100gmail.com" => "demerphq\100hotmail.com",
+ "rick\100consumercontact.com" => "rick\100bort.ca",
+ "vkonovalov\100spb.lucent.com"
+ => "vkonovalov\100peterstar.ru",
+ "rjk\100linguist.dartmouth.edu"
+ => "rjk\100linguist.thayer.dartmouth.edu",
+ "domo\100computer.org" => "shouldbedomo\100mac.com",
+ "kane\100dwim.org" => "kane\100xs4all.net",
+ "allens\100cpan.org" => "easmith\100beatrice.rutgers.edu",
+ "spoon\100cpan.org" => "spoon\100dellah.org",
+ "ben_tilly\100operamail.com" => "btilly\100gmail.com",
+ "mbarbon\100dsi.unive.it" => "mattia.barbon\100libero.it",
+ "tassilo.parseval\100post.rwth-aachen.de" =>
+ "tassilo.von.parseval\100rwth-aachen.de",
+ "dcd\100tc.fluke.com" => "david.dyck\100fluke.com",
+ "kroepke\100dolphin-services.de"
+ => "kay\100dolphin-services.de",
+ "sebastien\100aperghis.net" => "maddingue\100free.fr",
+ "radu\100netsoft.ro" => "rgreab\100fx.ro",
+ "rick\100consumercontact.com"
+ => "rick.delaney\100rogers.com",
+ "p5-authors\100crystalflame.net"
+ => "perl\100crystalflame.net",
+ "stef\100mongueurs.net" => "stef\100payrard.net",
+ "kstar\100wolfetech.com" => "kstar\100cpan.org",
+ "7k8lrvf02\100sneakemail.com" =>
+ "kjx9zthh3001\100sneakemail.com",
+ "mgjv\100comdyn.com.au" => "mgjv\100tradingpost.com.au",
+ "thomas.dorner\100start.de" => "tdorner\100amadeus.net",
+ "ajohnson\100nvidia.com" => "ajohnson\100wischip.com",
+ "phil\100perkpartners.com" => "phil\100finchcomputer.com",
+ "tom.horsley\100mail.ccur.com" => "tom.horsley\100ccur.com",
+ "rootbeer\100teleport.com" => "rootbeer\100redcat.com",
+ "cp\100onsitetech.com" => "publiustemp-p5p\100yahoo.com",
+ "epeschko\100den-mdev1" => "esp5\100pge.com",
+ "pimlott\100idiomtech.com" => "andrew\100pimlott.net",
+ "fugazi\100zyx.net" => "larrysh\100cpan.org",
+ "merijnb\100iloquent.nl" => "merijnb\100iloquent.com",
+ "whatever\100davidnicol.com" => "davidnicol\100gmail.com",
+ "rmgiroux\100acm.org" => "rmgiroux\100hotmail.com",
+ "smcc\100mit.edu" => "smcc\100ocf.berkeley.edu",
+ "schubiger\100cpan.org" => "steven\100accognoscere.org",
+ "richard.foley\100ubsw.com"
+ => "richard.foley\100t-online.de",
+ "damian\100cs.monash.edu.au" => "damian\100conway.org",
+ "gp\100familiehaase.de" => "gerrit\100familiehaase.de",
+ "juerd\100cpan.org" => "juerd\100convolution.nl",
+ "paul.green\100stratus.com"
+ => "paul_greenvos\100vos.stratus.com",
+ "alian\100cpan.org" => "alian\100alianwebserver.com",
+ # Maybe we should special case this to get real names out?
+ "perlbug\100perl.org" => "perlbug-followup\100perl.org",
);
# Make sure these are all lower case.
-$map{"alan.burlison\100uk.sun.com"} = "alanbur";
-$map{"artur\100contiller.se"} = $map{"arthur\100contiller.se"} = "sky";
$map{"autrijus\100egb.elixus.org"} = $map{"autrijus\100geb.elixus.org"}
+ = $map{"autrijus\100gmail.com"} = $map{"autrijus\100ossf.iis.sinica.edu.tw"}
= "autrijus\100autrijus.org";
-$map{"craig.berry\100psinetcs.com"} = $map{"craig.berry\100metamorgs.com"}
- = $map{"craig.berry\100signaltreesolutions.com"} = "craigberry\100mac.com";
-$map{"davem\100fdgroup.co.uk"} = "davem";
$map{"ilya\100math.ohio-state.edu"} = $map{"ilya\100math.berkeley.edu"}
= $map{"ilya\100math.berkeley.edu"} = "nospam-abuse\100ilyaz.org";
-$map{"jhi\100kosh.hut.fi"} = $map{"jhi\100cc.hut.fi"} = "jhi";
-$map{"nick\100ccl4.org"} = $map{"nick\100talking.bollo.cx"}
- = $map{"nick\100plum.flirble.org"} = $map{"nick\100babyhippo.co.uk"}
- = $map{"nick\100bagpuss.unfortu.net"} = "nicholas";
$map{"philip.newton\100gmx.net"} = $map{"philip.newton\100datenrevision.de"}
- = "pnewton\100gmx.de",
-$map{"raphel.garcia-suarez\100hexaflux.com"} = "rgs";
+ = $map{"pnewton\100gmx.de"} = "pne\100cpan.org",
$map{"simon\100pembro4.pmb.ox.ac.uk"} = $map{"simon\100brecon.co.uk"}
= $map{"simon\100othersideofthe.earth.li"} = $map{"simon\100cozens.net"}
= $map{"simon\100netthink.co.uk"} = "simon\100simon-cozens.org";
@@ -78,12 +127,68 @@ $map{"spider\100web.zk3.dec.com"} = $map{"spider\100leggy.zk3.dec.com"}
= $map{"spider-perl\100orb.nashua.nh.us"}
= $map{"spider\100peano.zk3.dec.com"}
= "spider\100orb.nashua.nh.us";
-$map{"nik\100tiuk.ti.com"} = "nick";
-
-$map{"a.koenig\100mind.de"} = "andreas.koenig\100anima.de";
+$map{"andreas.koenig.gmwojprw\100franz.ak.mind.de"}
+ = $map{"a.koenig\100mind.de"} = "andreas.koenig\100anima.de";
$map{"japhy\100perlmonk.org"} = $map{"japhy\100cpan.org"}
= "japhy\100pobox.com";
$map{"rmbarker\100cpan.org"} = "robin.barker\100npl.co.uk";
+$map{"yves.orton\100de.mci.com"} = $map{"yves.orton\100mciworldcom.de"}
+ = "demerphq\100gmail.com";
+$map{"jim.cromie\100gmail.com"} = "jcromie\100divsol.com";
+$map{"perl_dummy\100bloodgate.com"} = "nospam-abuse\100bloodgate.com";
+$map{"paul.marquess\100ntlworld.com"} = "paul.marquess\100btinternet.com";
+$map{"konovalo\100mail.wplus.net"} = $map{"vadim\100vkonovalov.ru"}
+ = "vkonovalov\100spb.lucent.com";
+$map{"kane\100cpan.org"} = "kane\100dwim.org";
+$map{"rs\100crystalflame.net"} = "p5-authors\100crystalflame.net";
+$map{"(srezic\100iconmobile.com)"} = "slaven\100rezic.de";
+$map{"perl\100dellah.anu.edu.au"} = "spoon\100cpan.org";
+$map{"rjk-perl-p5p\100tamias.net"} = "rjk\100linguist.dartmouth.edu";
+$map{"sts\100accognoscere.org"} = "schubiger\100cpan.org";
+$map{"s.payrard\100wanadoo.fr"} = "stef\100mongueurs.net";
+$map{"richard.foley\100ubs.com"} = "richard.foley\100ubsw.com";
+# I assume that Ton Hopsel's lack of e-mail address in AUTHORS is deliberate
+$map{"me-02\100ton.iguana.be"} = $map{"perl-5.8.0\100ton.iguana.be"}
+ = $map{"perl5-porters\100ton.iguana.be"} = "!";
+# No real name for these address
+$map{$_} = "?" foreach ("grommel\100sears.com", "pxm\100nubz.org",
+ "padre\100elte.hu", "jdhedden\100" . "1979.usna.com",
+ "nothingmuch\100woobling.org", "bob\100starlabs.net",
+ "bbucklan\100jpl-devvax.jpl.nasa.gov",
+ "bilbo\100ua.fm", "mats\100sm5sxl.net",
+ "chris\100ex-parrot.com",
+ "kaminsky\100math.huji.ac.il",
+ "bonefish\100cs.tu-berlin.de",
+ "bstrand\100switchmanagement.com",
+ "glasser\100tang-eleven-seventy-nine.mit.edu",
+ "raf\100tradingpost.com.au", "erik\100cs.uni-jena.de",
+ "jms\100mathras.comcast.net", "kvr\100centrum.cz",
+ "perlbug\100veggiechinese.net",
+ "scott\100perlcode.org",
+ );
+# We don't have an e-mail address for Beau Cox
+$map{"beau\100beaucox.com"} = "?";
+
+$map{"rgarciasuarez\100mandrakesoft.com"}
+ = $map{"rgarciasuarez\100mandriva.com"}
+ = $map{"raphel.garcia-suarez\100hexaflux.com"} = "rgs";
+$map{"jhietaniemi\100gmail.com"} = $map{"jhi\100kosh.hut.fi"}
+ = $map{"jhi\100cc.hut.fi"} = $map{"jarkko.hietaniemi\100nokia.com"} = "jhi";
+$map{"nick\100ccl4.org"} = $map{"nick\100talking.bollo.cx"}
+ = $map{"nick\100plum.flirble.org"} = $map{"nick\100babyhippo.co.uk"}
+ = $map{"nick\100bagpuss.unfortu.net"} = "nicholas";
+$map{"craig.berry\100psinetcs.com"} = $map{"craig.berry\100metamorgs.com"}
+ = $map{"craig.berry\100signaltreesolutions.com"}
+ = $map{"craigberry\100mac.com"} = "craigb";
+$map{"davem\100iabyn.nospamdeletethisbit.com" }
+ = $map{"davem\100fdgroup.co.uk"} = $map{"davem\100fdisolutions.com"}
+ = "davem";
+$map{"alan.burlison\100uk.sun.com"} = "alanbur";
+$map{"artur\100contiller.se"} = $map{"arthur\100contiller.se"} = "sky";
+$map{"h.m.brand\100hccnet.nl"} = $map{"merijn\100l1.procura.nl"} = "merijn";
+$map{"nik\100tiuk.ti.com"} = $map{"nick.ing-simmons\100elixent.com"} = "nick";
+$map{"hv\100crypt.org"} = "hv";
+$map{"gisle\100aas.no"} = "gisle";
if (@authors) {
my %raw;
@@ -109,6 +214,8 @@ if (@authors) {
$_ = lc $_;
$authors{$map{$_} || $_}++;
}
+ ++$authors{'!'};
+ ++$authors{'?'};
}
while (<>) {
@@ -124,12 +231,14 @@ while (<>) {
$log = $_;
my $prefix = " " x length $1;
LOG: while (<>) {
+ next if /^$/;
if (s/^$prefix//) {
$log .= $_;
} elsif (/^\s+Branch:/) {
last LOG;
} else {
- die "Malformed log end with $_";
+ chomp;
+ die "Malformed log end with '$_'";
}
}
}
@@ -138,7 +247,9 @@ while (<>) {
&process ($committer, $patch, $log);
if ($rank) {
- &display_ordered;
+ &display_ordered(\%patchers);
+} elsif ($ta) {
+ &display_ordered(\%committers);
} elsif (%authors) {
my %missing;
foreach (sort keys %patchers) {
@@ -155,12 +266,14 @@ if ($rank) {
}
sub display_ordered {
+ my $what = shift;
my @sorted;
- while (my ($name, $count) = each %patchers) {
+ while (my ($name, $count) = each %$what) {
push @{$sorted[$count]}, $name;
}
my $i = @sorted;
+ return unless $i;
while (--$i) {
next unless $sorted[$i];
print wrap ("$i:\t", "\t", join (" ", sort @{$sorted[$i]}), "\n");
@@ -170,7 +283,7 @@ sub display_ordered {
sub process {
my ($committer, $patch, $log) = @_;
return unless $committer;
- my @authors = $log =~ /From:.+\s+([^\@ \t\n]+\@[^\@ \t\n]+)/gm;
+ my @authors = $log =~ /From:\s+.*?([^"\@ \t\n<>]+\@[^"\@ \t\n<>]+)/gm;
if (@authors) {
foreach (@authors) {
@@ -180,6 +293,7 @@ sub process {
$patchers{$map{$_} || $_}++;
}
# print "$patch: @authors\n";
+ ++$committers{$committer};
} else {
# print "$patch: $committer\n";
# Not entirely fair as this means that the maint pumpking scores for
diff --git a/gnu/usr.bin/perl/Porting/checkcfgvar.pl b/gnu/usr.bin/perl/Porting/checkcfgvar.pl
new file mode 100755
index 00000000000..0a7b24e743c
--- /dev/null
+++ b/gnu/usr.bin/perl/Porting/checkcfgvar.pl
@@ -0,0 +1,101 @@
+#!/usr/bin/perl -w
+
+#
+# Check that the various config.sh-clones have (at least) all the
+# same symbols as the top-level config_h.SH so that the (potentially)
+# needed symbols are not lagging after how Configure thinks the world
+# is laid out.
+#
+# VMS is not handled here, due to their own rather elaborate DCL scripting.
+#
+
+use strict;
+
+my $MASTER_CFG = "config_h.SH";
+my %MASTER_CFG;
+
+my @CFG = (
+ # This list contains both 5.8.x and 5.9.x files,
+ # we check from MANIFEST whether they are expected to be present.
+ "Cross/config.sh-arm-linux",
+ "epoc/config.sh",
+ "NetWare/config.wc",
+ "symbian/config.sh",
+ "uconfig.sh",
+ "plan9/config_sh.sample",
+ "vos/config.alpha.def",
+ "vos/config.ga.def",
+ "win32/config.bc",
+ "win32/config.gc",
+ "win32/config.vc",
+ "win32/config.vc64",
+ "wince/config.ce",
+ );
+
+sub read_file {
+ my ($fn, $sub) = @_;
+ if (open(my $fh, $fn)) {
+ local $_;
+ while (<$fh>) {
+ &$sub;
+ }
+ } else {
+ die "$0: Failed to open '$fn' for reading: $!\n";
+ }
+}
+
+sub config_h_SH_reader {
+ my $cfg = shift;
+ return sub {
+ return if 1../^echo \"Extracting \$CONFIG_H/;
+ while (/[^\\]\$(\w+)/g) {
+ my $v = $1;
+ next if $v =~ /^(CONFIG_H|CONFIG_SH)$/;
+ $cfg->{$v}++;
+ }
+ }
+}
+
+read_file($MASTER_CFG,
+ config_h_SH_reader(\%MASTER_CFG));
+
+my %MANIFEST;
+
+read_file("MANIFEST",
+ sub {
+ $MANIFEST{$1}++ if /^(.+?)\t/;
+ });
+
+my @MASTER_CFG = sort keys %MASTER_CFG;
+
+sub check_cfg {
+ my ($fn, $cfg) = @_;
+ for my $v (@MASTER_CFG) {
+ print "$fn: missing '$v'\n" unless exists $cfg->{$v};
+ }
+}
+
+for my $cfg (@CFG) {
+ unless (exists $MANIFEST{$cfg}) {
+ print "[skipping not-expected '$cfg']\n";
+ next;
+ }
+ my %cfg;
+ read_file($cfg,
+ sub {
+ return if /^\#/ || /^\s*$/;
+ # foo='bar'
+ # foo=bar
+ # $foo='bar' # VOS 5.8.x specialty
+ # $foo=bar # VOS 5.8.x specialty
+ if (/^\$?(\w+)='(.*)'$/) {
+ $cfg{$1}++;
+ }
+ elsif (/^\$?(\w+)=(.*)$/) {
+ $cfg{$1}++;
+ } else {
+ warn "$cfg:$.:$_";
+ }
+ });
+ check_cfg($cfg, \%cfg);
+}
diff --git a/gnu/usr.bin/perl/Porting/config.sh b/gnu/usr.bin/perl/Porting/config.sh
index 07ca782f518..8cf739ef4c9 100644
--- a/gnu/usr.bin/perl/Porting/config.sh
+++ b/gnu/usr.bin/perl/Porting/config.sh
@@ -8,7 +8,7 @@
# Package name : perl5
# Source directory : .
-# Configuration time: Fri Jul 16 20:59:18 BST 2004
+# Configuration time: Thu Jan 19 14:41:48 GMT 2006
# Configured by : yourname
# Target system : linux bagpuss.unfortu.net 2.4.19-rmk4 #3 fri oct 25 21:57:55 bst 2002 armv4l unknown
@@ -36,8 +36,8 @@ api_subversion='0'
api_version='8'
api_versionstring='5.8.0'
ar='ar'
-archlib='/opt/perl/lib/5.8.5/armv4l-linux'
-archlibexp='/opt/perl/lib/5.8.5/armv4l-linux'
+archlib='/opt/perl/lib/5.8.8/armv4l-linux'
+archlibexp='/opt/perl/lib/5.8.8/armv4l-linux'
archname64=''
archname='armv4l-linux'
archobjs=''
@@ -63,7 +63,7 @@ ccsymbols='__APCS_32__=1 __ARM_ARCH_3__=1 __CHAR_UNSIGNED__=1 __GNUC_MINOR__=95
ccversion=''
cf_by='yourname'
cf_email='yourname@yourhost.yourplace.com'
-cf_time='Fri Jul 16 20:59:18 BST 2004'
+cf_time='Thu Jan 19 14:41:48 GMT 2006'
charsize='1'
chgrp=''
chmod='chmod'
@@ -82,7 +82,7 @@ cpplast='-'
cppminus='-'
cpprun='cc -E'
cppstdin='cc -E'
-cppsymbols='_FILE_OFFSET_BITS=64 __GLIBC__=2 __GLIBC_MINOR__=2 __GNUC_MINOR__=95 __GNU_LIBRARY__=6 _LARGEFILE_SOURCE=1 _POSIX_C_SOURCE=199506 _POSIX_SOURCE=1 __STDC__=1 __USE_BSD=1 __USE_FILE_OFFSET64=1 __USE_LARGEFILE=1 __USE_MISC=1 __USE_POSIX=1 __USE_POSIX199309=1 __USE_POSIX199506=1 __USE_POSIX2=1 __USE_SVID=1 __linux=1 __linux__=1 __unix=1 __unix__=1'
+cppsymbols='_FILE_OFFSET_BITS=64 __GLIBC__=2 __GLIBC_MINOR__=2 __GNUC_MINOR__=95 __GNU_LIBRARY__=6 _LARGEFILE_SOURCE=1 _POSIX_C_SOURCE=199506L _POSIX_SOURCE=1 __STDC__=1 __USE_BSD=1 __USE_FILE_OFFSET64=1 __USE_LARGEFILE=1 __USE_MISC=1 __USE_POSIX=1 __USE_POSIX199309=1 __USE_POSIX199506=1 __USE_POSIX2=1 __USE_SVID=1 __linux=1 __linux__=1 __unix=1 __unix__=1'
crypt_r_proto='0'
cryptlib=''
csh='csh'
@@ -111,7 +111,13 @@ d_archlib='define'
d_asctime_r='undef'
d_atolf='undef'
d_atoll='define'
-d_attribut='define'
+d_attribute_format='define'
+d_attribute_malloc='undef'
+d_attribute_nonnull='undef'
+d_attribute_noreturn='define'
+d_attribute_pure='undef'
+d_attribute_unused='define'
+d_attribute_warn_unused_result='undef'
d_bcmp='define'
d_bcopy='define'
d_bsd='undef'
@@ -125,6 +131,7 @@ d_chown='define'
d_chroot='define'
d_chsize='undef'
d_class='undef'
+d_clearenv='define'
d_closedir='define'
d_cmsghdr_s='define'
d_const='define'
@@ -193,6 +200,7 @@ d_fstatvfs='define'
d_fsync='define'
d_ftello='define'
d_ftime='undef'
+d_futimes='undef'
d_getcwd='define'
d_getespwnam='undef'
d_getfsstat='undef'
@@ -266,6 +274,7 @@ d_isnanl='define'
d_killpg='define'
d_lchown='define'
d_ldbl_dig='define'
+d_libm_lib_version='define'
d_link='define'
d_localtime_r='undef'
d_locconv='define'
@@ -275,6 +284,8 @@ d_longlong='define'
d_lseekproto='define'
d_lstat='define'
d_madvise='define'
+d_malloc_good_size='undef'
+d_malloc_size='undef'
d_mblen='define'
d_mbstowcs='define'
d_mbtowc='define'
@@ -311,6 +322,7 @@ d_mymalloc='undef'
d_nice='define'
d_nl_langinfo='define'
d_nv_preserves_uv='define'
+d_nv_zero_is_allbits_zero='define'
d_off64_t='undef'
d_old_pthread_create_joinable='undef'
d_oldpthreads='undef'
@@ -411,6 +423,7 @@ d_socket='define'
d_socklen_t='define'
d_sockpair='define'
d_socks5_init='undef'
+d_sprintf_returns_strlen='define'
d_sqrtl='define'
d_srand48_r='undef'
d_srandom_r='undef'
@@ -434,6 +447,8 @@ d_strerrm='strerror(e)'
d_strerror='define'
d_strerror_r='undef'
d_strftime='define'
+d_strlcat='undef'
+d_strlcpy='undef'
d_strtod='define'
d_strtol='define'
d_strtold='define'
@@ -469,6 +484,7 @@ d_umask='define'
d_uname='define'
d_union_semun='undef'
d_unordered='undef'
+d_unsetenv='define'
d_usleep='define'
d_usleepproto='define'
d_ustat='define'
@@ -668,7 +684,7 @@ inc_version_list=' '
inc_version_list_init='0'
incpath=''
inews=''
-installarchlib='/opt/perl/lib/5.8.5/armv4l-linux'
+installarchlib='/opt/perl/lib/5.8.8/armv4l-linux'
installbin='/opt/perl/bin'
installhtml1dir=''
installhtml3dir=''
@@ -676,13 +692,13 @@ installman1dir='/opt/perl/man/man1'
installman3dir='/opt/perl/man/man3'
installprefix='/opt/perl'
installprefixexp='/opt/perl'
-installprivlib='/opt/perl/lib/5.8.5'
+installprivlib='/opt/perl/lib/5.8.8'
installscript='/opt/perl/bin'
-installsitearch='/opt/perl/lib/site_perl/5.8.5/armv4l-linux'
+installsitearch='/opt/perl/lib/site_perl/5.8.8/armv4l-linux'
installsitebin='/opt/perl/bin'
installsitehtml1dir=''
installsitehtml3dir=''
-installsitelib='/opt/perl/lib/site_perl/5.8.5'
+installsitelib='/opt/perl/lib/site_perl/5.8.8'
installsiteman1dir='/opt/perl/man/man1'
installsiteman3dir='/opt/perl/man/man3'
installsitescript='/opt/perl/bin'
@@ -718,7 +734,7 @@ libsdirs=' /usr/lib'
libsfiles=' libsfio.so libnsl.so libgdbm.so libdbm.so libdb.so libdl.so libm.so libcrypt.so libutil.so libc.so'
libsfound=' /usr/lib/libsfio.so /usr/lib/libnsl.so /usr/lib/libgdbm.so /usr/lib/libdbm.so /usr/lib/libdb.so /usr/lib/libdl.so /usr/lib/libm.so /usr/lib/libcrypt.so /usr/lib/libutil.so /usr/lib/libc.so'
libspath=' /usr/local/lib /lib /usr/lib'
-libswanted='sfio socket bind inet nsl nm ndbm gdbm dbm db malloc dl dld ld sun m crypt sec util c cposix posix ucb BSD'
+libswanted='sfio socket inet nsl nm ndbm gdbm dbm db malloc dl dld ld sun m crypt sec util c cposix posix ucb BSD'
libswanted_uselargefiles=''
line=''
lint=''
@@ -808,8 +824,8 @@ pmake=''
pr=''
prefix='/opt/perl'
prefixexp='/opt/perl'
-privlib='/opt/perl/lib/5.8.5'
-privlibexp='/opt/perl/lib/5.8.5'
+privlib='/opt/perl/lib/5.8.8'
+privlibexp='/opt/perl/lib/5.8.8'
procselfexe='"/proc/self/exe"'
prototype='define'
ptrsize='4'
@@ -870,17 +886,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='/opt/perl/lib/site_perl/5.8.5/armv4l-linux'
-sitearchexp='/opt/perl/lib/site_perl/5.8.5/armv4l-linux'
+sitearch='/opt/perl/lib/site_perl/5.8.8/armv4l-linux'
+sitearchexp='/opt/perl/lib/site_perl/5.8.8/armv4l-linux'
sitebin='/opt/perl/bin'
sitebinexp='/opt/perl/bin'
sitehtml1dir=''
sitehtml1direxp=''
sitehtml3dir=''
sitehtml3direxp=''
-sitelib='/opt/perl/lib/site_perl/5.8.5'
+sitelib='/opt/perl/lib/site_perl/5.8.8'
sitelib_stem='/opt/perl/lib/site_perl'
-sitelibexp='/opt/perl/lib/site_perl/5.8.5'
+sitelibexp='/opt/perl/lib/site_perl/5.8.8'
siteman1dir='/opt/perl/man/man1'
siteman1direxp='/opt/perl/man/man1'
siteman3dir='/opt/perl/man/man3'
@@ -917,7 +933,7 @@ stdio_stream_array=''
strerror_r_proto='0'
strings='/usr/include/string.h'
submit=''
-subversion='5'
+subversion='8'
sysman='/usr/share/man/man1'
tail=''
tar=''
@@ -969,6 +985,7 @@ useposix='true'
usereentrant='undef'
usesfio='false'
useshrplib='false'
+usesitecustomize='undef'
usesocks='undef'
usethreads='undef'
usevendorprefix='undef'
@@ -1000,8 +1017,8 @@ vendorprefix=''
vendorprefixexp=''
vendorscript=''
vendorscriptexp=''
-version='5.8.5'
-version_patchlevel_string='version 8 subversion 5'
+version='5.8.8'
+version_patchlevel_string='version 8 subversion 8'
versiononly='undef'
vi=''
voidflags='15'
@@ -1023,7 +1040,7 @@ config_arg6='-Dmyhostname=yourhost'
config_arg7='-dE'
PERL_REVISION=5
PERL_VERSION=8
-PERL_SUBVERSION=5
+PERL_SUBVERSION=8
PERL_API_REVISION=5
PERL_API_VERSION=8
PERL_API_SUBVERSION=0
diff --git a/gnu/usr.bin/perl/Porting/config_h.pl b/gnu/usr.bin/perl/Porting/config_h.pl
new file mode 100755
index 00000000000..7c1deec530d
--- /dev/null
+++ b/gnu/usr.bin/perl/Porting/config_h.pl
@@ -0,0 +1,60 @@
+#!/usr/bin/perl
+
+# This script reorders config_h.SH after metaconfig
+# Changing metaconfig is too complicated
+#
+# Copyright (C) 2005-2005 by H.Merijn Brand (m)'05 [25-05-2005]
+#
+# You may distribute under the terms of either the GNU General Public
+# License or the Artistic License, as specified in the README file.
+
+use strict;
+use warnings;
+
+my ($cSH, $ch, @ch, %ch) = ("config_h.SH");
+open $ch, "<$cSH" or die "Cannot open $cSH: $!\n";
+{ local $/ = "\n\n";
+ @ch = <$ch>;
+ close $ch;
+ }
+
+sub ch_index ()
+{
+ %ch = ();
+ foreach my $ch (0 .. $#ch) {
+ while ($ch[$ch] =~ m{^/\* ([A-Z]\w+)}gm) {
+ $ch{$1} = $ch;
+ }
+ }
+ } # ch_index
+
+my %dep = (
+ # This symbol must be defined BEFORE ...
+ BYTEORDER => [ qw( UVSIZE ) ],
+ LONGSIZE => [ qw( BYTEORDER ) ],
+ MULTIARCH => [ qw( BYTEORDER MEM_ALIGNBYTES ) ],
+ USE_CROSS_COMPILE => [ qw( BYTEORDER MEM_ALIGNBYTES ) ],
+ HAS_QUAD => [ qw( I64TYPE ) ],
+ HAS_GETGROUPS => [ qw( Groups_t ) ],
+ HAS_SETGROUPS => [ qw( Groups_t ) ],
+ );
+
+my $changed;
+do {
+ $changed = 0;
+ foreach my $sym (keys %dep) {
+ ch_index;
+ foreach my $dep (@{$dep{$sym}}) {
+ print STDERR "Check if $sym\t($ch{$sym}) precedes $dep\t($ch{$dep})\n";
+ $ch{$sym} < $ch{$dep} and next;
+ my $ch = splice @ch, $ch{$sym}, 1;
+ splice @ch, $ch{$dep}, 0, $ch;
+ $changed++;
+ ch_index;
+ }
+ }
+ } while ($changed);
+
+open $ch, "> $cSH" or die "Cannot write $cSH: $!\n";
+print $ch @ch;
+close $ch;
diff --git a/gnu/usr.bin/perl/Porting/corecpan.pl b/gnu/usr.bin/perl/Porting/corecpan.pl
index 48fb7d92bac..1327483f1d4 100644
--- a/gnu/usr.bin/perl/Porting/corecpan.pl
+++ b/gnu/usr.bin/perl/Porting/corecpan.pl
@@ -47,7 +47,7 @@ for my $dist (sort keys %Modules) {
next unless $Modules{$dist}{CPAN};
print "Module $dist...\n";
for my $file (get_module_files($dist)) {
- next if $file !~ /\.pm\z/ or $file =~ m{^t/};
+ next if $file !~ /\.pm\z/ or $file =~ m{^t/} or $file =~ m{/t/};
my $vcore = MM->parse_version($file) // 'undef';
my $module = $file;
$module =~ s/\.pm\z//;
diff --git a/gnu/usr.bin/perl/Porting/genlog b/gnu/usr.bin/perl/Porting/genlog
index 98bccdd7025..9926b37e700 100644
--- a/gnu/usr.bin/perl/Porting/genlog
+++ b/gnu/usr.bin/perl/Porting/genlog
@@ -69,6 +69,7 @@ if ($?) {
die "$0: `p4 -p $p4port describe -s @changes` failed, status[$?]\n";
}
else {
+ tr/\r/\n/ foreach @desc;
chomp @desc;
while (@desc) {
my ($change,$who,$date,$time,@log,$branch,$file,$type,%files);
diff --git a/gnu/usr.bin/perl/README.aix b/gnu/usr.bin/perl/README.aix
index 7e9702505ff..fa659338226 100644
--- a/gnu/usr.bin/perl/README.aix
+++ b/gnu/usr.bin/perl/README.aix
@@ -31,7 +31,7 @@ you will find xlC.C for AIX-5.0 as package
xlC.aix50.rte 5.0.2.0 or 6.0.0.3
-subversions are not the same `latest' on all OS versions. For example,
+subversions are not the same "latest" on all OS versions. For example,
the latest xlC-5 on aix41 is 5.0.2.9, while on aix43, it is 5.0.2.7.
Perl can be compiled with either IBM's ANSI C compiler or with gcc.
@@ -106,7 +106,7 @@ level. Of course this is subject to changes. You can only upgrade
versions from ftp-available updates if the first three digit groups
are the same (in where you can skip intermediate unlike the patches
in the developer snapshots of perl), or to one version up where the
-`base' is available. In other words, the AIX compiler patches are
+"base" is available. In other words, the AIX compiler patches are
cumulative.
vac.C.4.4.0.1 => vac.C.4.4.0.3 is OK (vac.C.4.4.0.2 not needed)
@@ -261,7 +261,7 @@ therefore in AIX 4.2 Perl is not linked against the libC_r.
=head1 AUTHOR
-H.Merijn Brand <h.m.brand@hccnet.nl>
+H.Merijn Brand <h.m.brand@xs4all.nl>
=head1 DATE
diff --git a/gnu/usr.bin/perl/README.beos b/gnu/usr.bin/perl/README.beos
index cc9f44b14de..0a01f50b9ee 100644
--- a/gnu/usr.bin/perl/README.beos
+++ b/gnu/usr.bin/perl/README.beos
@@ -4,110 +4,106 @@ designed to be readable as is.
=head1 NAME
-README.beos - Perl version 5 on BeOS
+README.beos - Perl version 5.8+ on BeOS
=head1 DESCRIPTION
-Notes for building Perl under BeOS.
+This file contains instructions how to build Perl under BeOS and lists
+known problems.
-=head2 General Issues with Perl on BeOS
+=head1 BUILD AND INSTALL
-To compile perl under BeOS R4 x86:
+=head2 Requirements
- ./Configure -d
+I have built and tested Perl 5.8.6 and 5.9.1 under BeOS R5 x86 net server.
+I can't say anything with regard to PPC. Since Perl 5.8.0 had been released
+for BeOS BONE, I suspect, there is a good chance, that it still compiles on
+a BONE system. The only change I've made, that affects BONE systems is the
+recognition of whether it is a BONE system or not in C<hints/beos.sh>. Now
+network socket support should remain enabled on BONE systems. This might
+as well break the build, though.
-and hit ^C when it asks you if you want to make changes to config.sh;
-edit config.sh and do the following:
-change d_socket='define' to ='undef';
-remove SDBM, Errno, and Socket from dynamic_ext= and nonxs_ext=;
-add '#define bool short' to x2p/a2p.h;
+As more recent versions of autoconf require flock() support, I wrote a flock()
+emulation (flock_server) and released it on BeBits:
- ../Configure -S; make; make install
+ http://www.bebits.com/app/4030
- cd ~/config/lib; ln -s 5.00502/BeOS-BePC/CORE/libperl.so .
+If you want to build a Perl with flock() support, you have to install this
+package first.
-(substitute 5.00502 with the appropriate filename)
+=head2 Configure
-=head2 BeOS Release-specific Notes
+With flock() support:
-=over 4
+ CFLAGS=-I/path/to/flock/server/headers ./configure.gnu \
+ --prefix=/boot/home/config
-=item R4 x86
+Replace C</path/to/flock/server/headers> with the path to the directory
+containing the C<flock.h> header.
-Dynamic loading finally works! Yay! This means you can compile your
-own modules into perl. However, Sockets and Errno still don't work.
-(Hopefully, sockets will at least work by R5, if not sooner.)
+Without flock() support:
-=item R4 PPC
+ ./configure.gnu --prefix=/boot/home/config
-I have not tested this. I rather severely doubt that dynamic loading
-will work. (My BeBox is in pieces right now, following a nasty disk
-crash.) You may have to disable dynamic loading to get the thing to
-compile at all. (use `./Configure` without -d, and say 'no' to 'Build
-a shared libperl.so'.)
+=head2 Build
-=back
+With flock() support:
-=head2 Contact Information
+ make LDLOADLIBS="-lnet -lflock"
-If you have comments, problem reports, or even patches or bugfixes (gasp!)
-please email me.
+Without flock() support:
-28 Jan 1999
-Tom Spindler
-dogcow@isi.net
+ make LDLOADLIBS="-lnet"
-=head2 Update 2002-05-30
+C<-lnet> is needed on net server systems only and if the compiler doesn't
+add it automatically (Be's R5 gcc does, Oliver Tappe's gcc 2.95.3 does not).
-The following tests fail on 5.8.0 Perl in BeOS Personal 5.03:
+=head2 Install
- t/op/lfs............................FAILED at test 17
- t/op/magic..........................FAILED at test 24
- ext/Fcntl/t/syslfs..................FAILED at test 17
- ext/File/Glob/t/basic...............FAILED at test 3
- ext/POSIX/t/sigaction...............FAILED at test 13
- ext/POSIX/t/waitpid.................FAILED at test 1
+Install all perl files:
-The reasons for the failures are as follows:
+ make install
-=over 4
+Create a symlink for libperl:
-=item *
+ cd ~/config/lib; ln -s perl5/5.8.6/BePC-beos/CORE/libperl.so .
-The t/op/lfs and ext/Fcntl/t/syslfs failures indicate that the
-LFS (large file support, files larger than 2 gigabytes) doesn't
-work from Perl (BeFS itself is well capable of supporting large
-files). What fails is that trying to position the file pointer
-past 2 gigabytes doesn't work right, the position gets truncated
-to its lower 32 bits.
+Replace C<5.8.6> with your respective version of Perl.
+
+=head1 KNOWN PROBLEMS
+
+=over 4
=item *
-The op/magic failures look like something funny going on with $0 and
-$^X that I can't now figure out: none of the generated pathnames are
-wrong as such, they just seem to accumulate "./" prefixes and infixes
-in ways that define logic.
+Network socket support is disabled for BeOS R5 net server. I didn't dare yet
+to try enabling it and see what problems occur.
=item *
-The Glob/t/basic indicates a bug in the getpw*() functions:
-they do not always return the correct user db entries.
+The LFS (large file support) tests (C<t/op/lfs> and C<xt/Fcntl/t/syslfs>) are
+disabled as seeking beyond 2 GB is broken according to jhi@iki.fi who was the
+last one checking the BeOS port and updating this file before me. Haven't
+checked this myself.
=item *
-The sigaction #13 means that signal mask doesn't get properly restored
-if sigaction returns early.
+The C<t/io/fflush> test fails at #6. As far as I can tell, this is caused by
+a bug in the BeOS pipes implementation that occurs when starting other child
+processes. In the particular test case a C<system("perl -e 0")> flushes the
+stdout pipe of another child process.
=item *
-The waitpid failure means that after there are no more child
-processes, waitpid is supposed to start returning -1 (and set
-errno to ECHILD). In BeOS, it doesn't seem to.
+The C<ext/POSIX/t/waitpid> test fails at #1. After all child processes are
+gone BeOS' waitpid(-1,...) returns 0 instead of -1 (as it should). No idea
+how to fix this.
=back
-Disclaimer: I just installed BeOS Personal Edition 5.0 and the
-Developer Tools, that is the whole extent of my BeOS expertise,
-so please don't ask me for further help in BeOS Perl problems.
+=head1 CONTACT
+
+For BeOS specifics problems feel free to mail to:
+Ingo Weinhold <bonefish@cs.tu-berlin.de>
-jhi@iki.fi
+Last update: 2004-12-16
diff --git a/gnu/usr.bin/perl/README.cygwin b/gnu/usr.bin/perl/README.cygwin
index a2748f3cebd..8940ca6ed0e 100644
--- a/gnu/usr.bin/perl/README.cygwin
+++ b/gnu/usr.bin/perl/README.cygwin
@@ -64,8 +64,8 @@ Configure will B<not> prompt you to install I<man> pages.
On WinNT with either the I<ntea> or I<ntsec> C<CYGWIN> settings, directory
and file permissions may not be set correctly. Since the build process
-creates directories and files, to be safe you may want to run a `C<chmod
--R +w *>' on the entire Perl source tree.
+creates directories and files, to be safe you may want to run a
+C<chmod -R +w *> on the entire Perl source tree.
Also, it is a well known WinNT "feature" that files created by a login
that is a member of the I<Administrators> group will be owned by the
@@ -231,7 +231,7 @@ You may see some messages during Configure that seem suspicious.
=item * I<dlsym()>
I<ld2> is needed to build dynamic libraries, but it does not exist
-when C<dlsym()> checking occurs (it is not created until `C<make>' runs).
+when C<dlsym()> checking occurs (it is not created until C<make> runs).
You will see the following message:
Checking whether your C<dlsym()> needs a leading underscore ...
@@ -287,13 +287,13 @@ Errors like these are normal:
=head2 ld2 on Cygwin
-During `C<make>', I<ld2> will be created and installed in your $installbin
+During C<make>, I<ld2> will be created and installed in your $installbin
directory (where you said to put public executables). It does not
-wait until the `C<make install>' process to install the I<ld2> script,
-this is because the remainder of the `C<make>' refers to I<ld2> without
+wait until the C<make install> process to install the I<ld2> script,
+this is because the remainder of the C<make> refers to I<ld2> without
fully specifying its path and does this from multiple subdirectories.
The assumption is that $installbin is in your current C<PATH>. If this
-is not the case `C<make>' will fail at some point. If this happens,
+is not the case C<make> will fail at some point. If this happens,
just manually copy I<ld2> from the source directory to somewhere in
your C<PATH>.
@@ -306,7 +306,7 @@ There are two steps to running the test suite:
cd t;./perl harness 2>&1 | tee ../log.harness
The same tests are run both times, but more information is provided when
-running as `C<./perl harness>'.
+running as C<./perl harness>.
Test results vary depending on your host system and your Cygwin
configuration. If a test can pass in some Cygwin setup, it is always
@@ -369,6 +369,8 @@ A C<fork()> failure may result in the following tests failing:
See comment on fork in L<Miscellaneous> below.
+=head1 Specific features of the Cygwin port
+
=head2 Script Portability on Cygwin
Cygwin does an outstanding job of providing UNIX-like semantics on top of
@@ -436,6 +438,15 @@ However, when accessing an executable as a normal file (e.g., I<cp>
in a makefile) the F<.exe> is not transparent. The I<install> included
with Cygwin automatically appends a F<.exe> when necessary.
+=item * cygwin vs. windows process ids
+
+Cygwin processes have their own pid, which is different from the
+underlying windows pid. Most posix compliant Proc functions expect
+the cygwin pid, but several Win32::Process functions expect the
+winpid. E.g. C<$$> is the cygwin pid of F</usr/bin/perl>, which is not
+the winpid. Use C<Cygwin::winpid_to_pid()> and C<Cygwin::winpid_to_pid()>
+to translate between them.
+
=item * C<chown()>
On WinNT C<chown()> can change a file's user and group IDs. On Win9x C<chown()>
@@ -470,16 +481,35 @@ F<http://www.cygwin.com/setup.exe> to install it and run rebaseall.
=back
+=head2 Prebuilt methods:
+
+=over 4
+
+=item C<Cwd::cwd>
+
+Returns current working directory.
+
+=item C<Cygwin::pid_to_winpid>
+
+Translates a cygwin pid to the corresponding Windows pid (which may or
+may not be the same).
+
+=item C<Cygwin::winpid_to_pid>
+
+Translates a Windows pid to the corresponding cygwin pid (if any).
+
+=back
+
=head1 INSTALL PERL ON CYGWIN
This will install Perl, including I<man> pages.
make install 2>&1 | tee log.make-install
-NOTE: If C<STDERR> is redirected `C<make install>' will B<not> prompt
+NOTE: If C<STDERR> is redirected C<make install> will B<not> prompt
you to install I<perl> into F</usr/bin>.
-You may need to be I<Administrator> to run `C<make install>'. If you
+You may need to be I<Administrator> to run C<make install>. If you
are not, you must have write access to the directories in question.
Information on installing the Perl documentation in HTML format can be
@@ -528,12 +558,14 @@ be kept as clean as possible (listing not updated yet).
t/op/stat.t - no /dev, skip Win32 ftCreationTime quirk
(cache manager sometimes preserves ctime of file
previously created and deleted), no -u (setuid)
+ t/lib/cygwin.t - builtin cygwin function tests
=item Compiled Perl Source
EXTERN.h - __declspec(dllimport)
XSUB.h - __declspec(dllexport)
- cygwin/cygwin.c - os_extras (getcwd, spawn)
+ cygwin/cygwin.c - os_extras (getcwd, spawn, Cygwin::winpid_to_pid,
+ Cygwin::pid_to_winpid)
perl.c - os_extras
perl.h - binmode
doio.c - win9x can not rename a file when it is open
@@ -582,4 +614,4 @@ Gerrit P. Haase <gp@familiehaase.de>.
=head1 HISTORY
-Last updated: 2003-08-12
+Last updated: 2005-02-11
diff --git a/gnu/usr.bin/perl/README.hpux b/gnu/usr.bin/perl/README.hpux
index 8f870067e81..bd9757511c3 100644
--- a/gnu/usr.bin/perl/README.hpux
+++ b/gnu/usr.bin/perl/README.hpux
@@ -14,14 +14,14 @@ compiled and/or runs.
=head2 Using perl as shipped with HP-UX
-As of application release September 2001, HP-UX 11.00 is shipped with
-perl-5.6.1 in /opt/perl. The first occurrence is on CD 5012-7954 and
-can be installed using
+Application release September 2001, HP-UX 11.00 is the first to ship
+with Perl. By the time it was perl-5.6.1 in /opt/perl. The first
+occurrence is on CD 5012-7954 and can be installed using
swinstall -s /cdrom perl
assuming you have mounted that CD on /cdrom. In this version the
-following modules are installed:
+following modules were installed:
ActivePerl::DocTools-0.04 HTML::Parser-3.19 XML::DOM-1.25
Archive::Tar-0.072 HTML::Tagset-3.03 XML::Parser-2.27
@@ -32,12 +32,15 @@ following modules are installed:
Font::AFM-1.18 Storable-1.011 libxml-perl-0.07
HTML-Tree-3.11 URI-1.11 perl-ldap-0.23
-The build is a portable hppa-1.1 multithread build that supports large
+The build was a portable hppa-1.1 multithread build that supports large
files compiled with gcc-2.9-hppa-991112
If you perform a new installation, then Perl will be installed
automatically.
+More recent (preinstalled) HP-UX systems have more recent versions of
+Perl and the updated modules.
+
=head2 Using perl from HP's porting centre
HP porting centre tries very hard to keep up with customer demand and
@@ -47,7 +50,8 @@ Perl binaries available is obvious.
The HP porting centres are limited in what systems they are allowed
to port to and they usually choose the two most recent OS versions
available. This means that at the moment of writing, there are only
-HPUX-11.00 and 11-20/22 (IA64) ports available on the porting centres.
+HP-UX 11.11 (pa-risc 2.0) and HP-UX 11.23 (Itanium 2) ports available
+on the porting centres.
HP has asked the porting centre to move Open Source binaries
from /opt to /usr/local, so binaries produced since the start
@@ -80,7 +84,8 @@ document will not attempt to address issues for compiling Perl on the
Motorola chipset.
The most recent version of PA-RISC at the time of this document's last
-update is 2.0.
+update is 2.0. HP PA-RISC systems are usually refered to with model
+description "HP 9000".
A complete list of models at the time the OS was built is in the file
/usr/sam/lib/mo/sched.models. The first column corresponds to the last
@@ -157,9 +162,9 @@ that contained the explanation is dead, so here's a short summary:
HP 9000 L-Class servers, now renamed HP Server rp5400 series.
HP 9000 N-Class servers, now renamed HP Server rp7400.
- rp2400, rp2405, rp2430, rp2450, rp2470, rp3410, rp3440, rp4440,
- rp5400, rp5405, rp5430, rp5450, rp5470, rp7400, rp7405, rp7410,
- rp7420, rp8400, rp8420, Superdome
+ rp2400, rp2405, rp2430, rp2450, rp2470, rp3410, rp3440, rp4410,
+ rp4440, rp5400, rp5405, rp5430, rp5450, rp5470, rp7400, rp7405,
+ rp7410, rp7420, rp8400, rp8420, Superdome
The current naming convention is:
@@ -183,7 +188,7 @@ The current naming convention is:
=head2 Itanium Processor Family and HP-UX
HP-UX also runs on the new Itanium processor. This requires the use
-of a different version of HP-UX (currently 11.23 or 11i v1.6), and with
+of a different version of HP-UX (currently 11.23 or 11i v2), and with
the exception of a few differences detailed below and in later sections,
Perl should compile with no problems.
@@ -192,14 +197,17 @@ attempt to use a PA-RISC version of Perl on an Itanium system. This is
because shared libraries created on an Itanium system cannot be loaded
while running a PA-RISC executable.
+HP Itanium 2 systems are usually refered to with model description
+"HP Integrity".
+
=head2 Itanium & Itanium 2
HP also ships servers with the 128-bit Itanium processor(s). As of the
date of this document's last update, the following systems contain
Itanium or Itanium 2 chips (this is very likely to be out of date):
- rx1600, rx2600, rx2600hptc, rx4610, rx4640, rx5670, rx7620, rx8620,
- rx9610
+ BL60p, rx1600, rx1620, rx2600, rx2600hptc, rx2620, rx4610, rx4640,
+ rx5670, rx7620, rx8620, rx9610
To see all about your machine, type
@@ -344,7 +352,7 @@ on that page to rebuild gcc using itself.
On PA-RISC you need a different compiler for 32-bit applications and for
64-bit applications. On PA-RISC, 32-bit objects and 64-bit objects do
-not mix. period. There is no different behaviour for HP C-ANSI-C or GNU
+not mix. Period. There is no different behaviour for HP C-ANSI-C or GNU
gcc. So if you require your perl binary to use 64-bit libraries, like
Oracle-64bit, you MUST build a 64-bit perl.
@@ -406,8 +414,7 @@ HP-UX versions before 10.30 require a separate installation of a POSIX
threads library package. Two examples are the HP DCE package, available
on "HP-UX Hardware Extensions 3.0, Install and Core OS, Release 10.20,
April 1999 (B3920-13941)" or the Freely available PTH package, available
-though worldwide HP-UX mirrors of precompiled packages
-(e.g. http://hpux.tn.tudelft.nl/hppd/hpux/)
+on H.Merijn's site (http://mirrors.develooper.com/hpux/).
If you are going to use the HP DCE package, the library used for threading
is /usr/lib/libcma.sl, but there have been multiple updates of that
@@ -433,33 +440,43 @@ reformatted output:
Date: Apr 9 2001 10:01:06
d3:/usr/lib 107 >
+If you choose for the PTH package, use swinstall to install pth in
+the default location (/opt/pth), and then make symbolic links to the
+libraries from /usr/lib
+
+ # cd /usr/lib
+ # ln -s /opt/pth/lib/libpth* .
+
+For building perl to support Oracle, it needs to be linked with libcl
+and libpthread. So even if your perl is an unthreaded build, these
+libraries might be required. See "Oracle on HP-UX" below.
=head2 64-bit Perl on HP-UX
Beginning with HP-UX 11.00, programs compiled under HP-UX can take
advantage of the LP64 programming environment (LP64 means Longs and
-Pointers are 64 bits wide).
-
-Work is being performed on Perl to make it 64-bit compliant on all
-versions of Unix. Once this is complete, scalar variables will be able
-to hold numbers larger than 2^32 with complete precision.
+Pointers are 64 bits wide), in which scalar variables will be able
+to hold numbers larger than 2^32 with complete precision. Perl has
+proven to be consistent and reliable in 64bit mode since 5.8.1 on
+all HP-UX 11.xx.
As of the date of this document, Perl is fully 64-bit compliant on
HP-UX 11.00 and up for both cc- and gcc builds. If you are about to
build a 64-bit perl with GNU gcc, please read the gcc section carefully.
-Should a user wish to experiment with compiling Perl in the LP64
-environment, use the -Duse64bitall flag to Configure. This will force
-Perl to be compiled in a pure LP64 environment (with the +DD64 flag for
-HP C-ANSI-C, with no additional options for GNU gcc 64-bit on PA-RISC,
-and with -mlp64 for GNU gcc on Itanium).
+Should a user have the need for compiling Perl in the LP64 environment,
+use the -Duse64bitall flag to Configure. This will force Perl to be
+compiled in a pure LP64 environment (with the +DD64 flag for HP C-ANSI-C,
+with no additional options for GNU gcc 64-bit on PA-RISC, and with
+-mlp64 for GNU gcc on Itanium).
If you want to compile Perl using gcc, you will have to get a version of
the compiler that supports 64-bit operations.)
You can also use the -Duse64bitint flag to Configure. Although there
are some minor differences between compiling Perl with this flag versus
the -Duse64bitall flag, they should not be noticeable from a Perl user's
-perspective.
+perspective. When configuring -Duse64bitint using a 64bit gcc on a
+pa-risc architecture, -Duse64bitint is silently promoted to -Duse64bitall.
In both cases, it is strongly recommended that you use these flags when
you run Configure. If you do not use do this, but later answer the
@@ -563,12 +580,12 @@ the same bug also affects Solaris.
=head1 AUTHOR
Jeff Okamoto <okamoto@corp.hp.com>
-H.Merijn Brand <h.m.brand@hccnet.nl>
+H.Merijn Brand <h.m.brand@xs4all.nl>
With much assistance regarding shared libraries from Marc Sabatella.
=head1 DATE
-Version 0.7.1: 2004-10-08
+Version 0.7.6: 2005-12-20
=cut
diff --git a/gnu/usr.bin/perl/README.hurd b/gnu/usr.bin/perl/README.hurd
index 071e4387ff9..251249cbc15 100644
--- a/gnu/usr.bin/perl/README.hurd
+++ b/gnu/usr.bin/perl/README.hurd
@@ -10,19 +10,19 @@ README.hurd - Perl version 5 on Hurd
If you want to use Perl on the Hurd, I recommend using the Debian
GNU/Hurd distribution ( see http://www.debian.org/ ), even if an
-official, stable release has not yet been made. The old `gnu-0.2'
+official, stable release has not yet been made. The old "gnu-0.2"
binary distribution will most certainly have additional problems.
=head2 Known Problems with Perl on Hurd
The Perl test suite may still report some errors on the Hurd. The
-`lib/anydbm' and `pragma/warnings' tests will almost certainly fail.
+"lib/anydbm" and "pragma/warnings" tests will almost certainly fail.
Both failures are not really specific to the Hurd, as indicated by the
test suite output.
The socket tests may fail if the network is not configured. You have
-to make `/hurd/pfinet' the translator for `/servers/socket/2', giving
-it the right arguments. Try `/hurd/pfinet --help' for more
+to make "/hurd/pfinet" the translator for "/servers/socket/2", giving
+it the right arguments. Try "/hurd/pfinet --help" for more
information.
Here are the statistics for Perl 5.005_62 on my system:
@@ -39,8 +39,8 @@ There are quite a few systems out there that do worse!
However, since I am running a very recent Hurd snapshot, in which a lot of
bugs that were exposed by the Perl test suite have been fixed, you may
-encounter more failures. Likely candidates are: `op/stat', `lib/io_pipe',
-`lib/io_sock', `lib/io_udp' and `lib/time'.
+encounter more failures. Likely candidates are: "op/stat", "lib/io_pipe",
+"lib/io_sock", "lib/io_udp" and "lib/time".
In any way, if you're seeing failures beyond those mentioned in this
document, please consider upgrading to the latest Hurd before reporting
diff --git a/gnu/usr.bin/perl/README.linux b/gnu/usr.bin/perl/README.linux
new file mode 100644
index 00000000000..c02ddd3fa1e
--- /dev/null
+++ b/gnu/usr.bin/perl/README.linux
@@ -0,0 +1,39 @@
+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
+
+README.linux - Perl version 5 on Linux systems
+
+=head1 DESCRIPTION
+
+This document describes various features of Linux that will affect how Perl
+version 5 (hereafter just Perl) is compiled and/or runs.
+
+=head2 Experimental Support for Sun Studio Compilers for Linux OS
+
+Sun Microsystems has released a port of their Sun Studio compiliers 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.
+
+Also, 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</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
+C<ExtUtil::MakeMaker> causing the problem, the most likely cause is an
+incomplete understanding of Sun Studio by this author. Further investigation
+is needed to get this working better.
+
+=head1 AUTHOR
+
+Steve Peters <steve@fisharerojo.org>
+
+Please report any errors, updates, or suggestions to F<perlbug@perl.org>.
+
diff --git a/gnu/usr.bin/perl/README.macosx b/gnu/usr.bin/perl/README.macosx
index 2b19bdfea07..c26eb0f8e61 100644
--- a/gnu/usr.bin/perl/README.macosx
+++ b/gnu/usr.bin/perl/README.macosx
@@ -13,14 +13,14 @@ This document briefly describes perl under Mac OS X.
=head1 DESCRIPTION
-The latest Perl (5.8.1-RC3 as of this writing) builds without changes
-under Mac OS X. Under the 10.3 "Panther" release, all self-tests pass,
-and all standard features are supported.
+The latest Perl release (5.8.8 as of this writing) builds without changes
+under Mac OS X. Under 10.3 "Panther" and newer OS versions, all self-tests
+pass, and all standard features are supported.
-Earlier Mac OS X releases did not include a completely thread-safe libc,
-so threading is not fully supported. Also, earlier releases included a
-somewhat buggy libdb, so some of the DB_File tests are known to fail on
-those releases.
+Earlier Mac OS X releases (10.2 "Jaguar" and older) did not include a
+completely thread-safe libc, so threading is not fully supported. Also,
+earlier releases included a buggy libdb, so some of the DB_File tests
+are known to fail on those releases.
=head2 Installation Prefix
@@ -38,6 +38,43 @@ that mirrors that of Apple's default Perl, with core modules stored in
on a file server and used by many Macs.
+=head2 SDK support
+
+First, export the path to the SDK into the build environment:
+
+ export SDK=/Developer/SDKs/MacOSX10.3.9.sdk
+
+Use an SDK by exporting some additions to Perl's 'ccflags' and '..flags'
+config variables:
+
+ ./Configure -Accflags="-nostdinc -B$SDK/usr/include/gcc \
+ -B$SDK/usr/lib/gcc -isystem$SDK/usr/include \
+ -F$SDK/System/Library/Frameworks" \
+ -Aldflags="-Wl,-syslibroot,$SDK" \
+ -de
+
+=head2 Universal Binary support
+
+To compile perl as a universal binary (built for both ppc and intel), export
+the SDK variable as above, selecting the 10.4u SDK:
+
+ export SDK=/Developer/SDKs/MacOSX10.4u.sdk
+
+In addition to the compiler flags used to select the SDK, also add the flags
+for creating a universal binary:
+
+ ./Configure -Accflags="-arch i686 -arch ppc -nostdinc -B$SDK/usr/include/gcc \
+ -B$SDK/usr/lib/gcc -isystem$SDK/usr/include \
+ -F$SDK/System/Library/Frameworks" \
+ -Aldflags="-arch i686 -arch ppc -Wl,-syslibroot,$SDK" \
+ -de
+
+Keep in mind that these compiler and linker settings will also be used when
+building CPAN modules. For XS modules to be compiled as a universal binary, any
+libraries it links to must also be universal binaries. The system libraries that
+Apple includes with the 10.4u SDK are all universal, but user-installed libraries
+may need to be re-installed as universal binaries.
+
=head2 libperl and Prebinding
Mac OS X ships with a dynamically-loaded libperl, but the default for
@@ -51,38 +88,30 @@ need to go to a great deal of effort to obtain the information needed
for pre-binding.
You can override the default and build a shared libperl if you wish
-(S<Configure ... -Duseshrlib>), but the load time will be
-significantly greater than either the static library, or Apple's
+(S<Configure ... -Duseshrlib>), but the load time on pre-10.4 OS
+releases will be greater than either the static library, or Apple's
pre-bound dynamic library.
+With 10.4 "Tiger" and newer, Apple has all but eliminated the performance
+penalty for non-prebound libraries.
-=head2 Updating Panther
-
-As of this writing, the latest Perl release that has been tested and
-approved for inclusion in the 10.3 "Panther" release of Mac OS X is
-5.8.1 RC3. It is currently unknown whether the final 5.8.1 release will
-be made in time to be tested and included with Panther.
-If the final release of Perl 5.8.1 is not made in time to be included
-with Panther, it is recommended that you wait for an official Apple
-update to the OS, rather than attempting to update it yourself. In most
-cases, if you need a newer Perl, it is preferable to install it in some
-other location, such as /usr/local or /opt, rather than overwriting the
-system Perl. The default location (no -Dprefix=... specified when running
-Configure) is /usr/local.
+=head2 Updating Apple's Perl
-If you find that you do need to update the system Perl, there is one
-potential issue. If you upgrade using the default static libperl, you
-will find that the dynamic libperl supplied by Apple will not be
-deleted. If both libraries are present when an application that links
-against libperl is built, ld will link against the dynamic library by
-default. So, if you need to replace Apple's dynamic libperl with a
-static libperl, you need to be sure to delete the older dynamic library
-after you've installed the update.
+In a word - don't, at least without a *very* good reason. Your scripts
+can just as easily begin with "#!/usr/local/bin/perl" as with
+"#!/usr/bin/perl". Scripts supplied by Apple and other third parties as
+part of installation packages and such have generally only been tested
+with the /usr/bin/perl that's installed by Apple.
-Note that this is only an issue when updating from an older build of the
-same Perl version. If you're updating from (for example) 5.8.1 to 5.8.2,
-this issue won't affect you.
+If you find that you do need to update the system Perl, one issue worth
+keeping in mind is the question of static vs. dynamic libraries. If you
+upgrade using the default static libperl, you will find that the dynamic
+libperl supplied by Apple will not be deleted. If both libraries are
+present when an application that links against libperl is built, ld will
+link against the dynamic library by default. So, if you need to replace
+Apple's dynamic libperl with a static libperl, you need to be sure to
+delete the older dynamic library after you've installed the update.
=head2 Known problems
@@ -111,6 +140,11 @@ applications like Tk: in that case consider building shared Perl
but remember that there's a startup cost to pay in that case (see above
"libperl and Prebinding").
+Starting with Tiger (Mac OS X 10.4), Apple shipped broken locale files for
+the eu_ES locale (Basque-Spain). In previous releases of Perl, this resulted in
+failures in the C<lib/locale> test. These failures have been supressed
+in the current release of Perl by making the test ignore the broken locale.
+If you need to use the eu_ES locale, you should contact Apple support.
=head2 MacPerl
@@ -175,20 +209,25 @@ You can find them for example by
# find /System/Library/Perl /Library/Perl -name '*.bundle' -print
-After this you can either copy Perl from your operating system CDs
+After this you can either copy Perl from your operating system media
(you will need at least the /System/Library/Perl and /usr/bin/perl),
or rebuild Perl from the source code with C<Configure -Dprefix=/usr
-Dusershrplib> NOTE: the C<-Dprefix=/usr> to replace the system Perl
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
+way to extract the Perl binaries from the OS media, without having to
+reinstall the entire OS.
+
=head1 AUTHOR
-This README was written by Sherm Pendley E<lt>sherm@dot-app.orgE<gt>.
+This README was written by Sherm Pendley E<lt>sherm@dot-app.orgE<gt>,
+and subsequently updated by Dominic Dunlop E<lt>domo@computer.orgE<gt>.
The "Starting From Scratch" recipe was contributed by John Montbriand
E<lt>montbriand@apple.comE<gt>.
=head1 DATE
-Last modified 2003-09-08.
+Last modified 2005-11-07.
diff --git a/gnu/usr.bin/perl/README.mpeix b/gnu/usr.bin/perl/README.mpeix
index 0f7c0ac0612..f6727b1bba7 100644
--- a/gnu/usr.bin/perl/README.mpeix
+++ b/gnu/usr.bin/perl/README.mpeix
@@ -11,7 +11,8 @@ README.mpeix - Perl/iX for HP e3000 MPE
http://www.bixby.org/mark/perlix.html
http://jazz.external.hp.com/src/hp_freeware/perl/
Perl language for MPE
- Last updated July 29, 2003 @ 2100 UTC
+ Last updated January 12, 2006 @ 2100 UTC
+
=head1 NOTE
@@ -31,6 +32,58 @@ Use which ever one is more recent.
=head1 What's New in Perl for MPE/iX
+January 12, 2006
+
+=over 4
+
+=item *
+
+Updated for perl-5.8.8 and perl-5.9.3 by Ken Hirsch.
+
+Simplified the build process by using the MPEAUTOCONF
+functionality in Mark Klein's ld.
+
+If you build this from scratch, make sure you have a version
+of ld which supports it. In the shell, type
+
+ ld --help
+ and look for AUTOCONF or MPEAUTOCONF near the bottom
+
+ or do this:
+ ld --help 2>&1 | grep AUTOCONF
+
+If you see don't see AUTOCONF or MPEAUTOCONF, make sure you get a new
+version.
+
+You also do not have to use mpeix/relink after building, so the
+recommend sequence is:
+
+ ./Configure -de
+
+ # or ./Configure -de -Dusedevel
+ # if you're building a development version
+
+ make
+ make test
+ # if you run this in a job, do "make test_notty"
+
+ make install
+
+Be prepared for a wait. These take much longer on MPE/iX than on a Unix
+system, because of a slow forking, mostly. On a lightly-loaded HP3000
+Series 979 running MPE/iX 7.5:
+
+ Configure: 1 hour
+ make: 1 hour 15 minutes
+ make test 1 hour 45 minutes
+
+Various socket problems were fixed in mpeix.c.
+
+Mark Klein provided a fixed sigsetjmp (that works with dynamic
+libraries) in mpeix_setjmp.c
+
+=item *
+
June 1, 2000
=over 4
diff --git a/gnu/usr.bin/perl/README.openbsd b/gnu/usr.bin/perl/README.openbsd
new file mode 100644
index 00000000000..b1d5eea14f4
--- /dev/null
+++ b/gnu/usr.bin/perl/README.openbsd
@@ -0,0 +1,30 @@
+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
+
+README.openbsd - Perl version 5 on OpenBSD systems
+
+=head1 DESCRIPTION
+
+This document describes various features of OpenBSD that will affect how Perl
+version 5 (hereafter just Perl) is compiled and/or runs.
+
+=head2 OpenBSD core dumps from getprotobyname_r and getservbyname_r with ithreads
+
+When Perl is configured to use ithreads, it will use re-entrant library calls
+in preference to non-re-entrant versions. There is an incompatability in
+OpenBSD's C<getprotobyname_r> and C<getservbyname_r> function in versions 3.7
+and later that will cause a SEGV when called without doing a C<bzero> on
+their return structs prior to calling these functions. Current Perl's
+should handle this problem correctly. Older threaded Perls (5.8.6 or earlier)
+will run into this problem. If you want to run a threaded Perl on OpenBSD
+3.7 or higher, you will need to upgrade to at least Perl 5.8.7.
+
+=head1 AUTHOR
+
+Steve Peters <steve@fisharerojo.org>
+
+Please report any errors, updates, or suggestions to F<perlbug@perl.org>.
+
diff --git a/gnu/usr.bin/perl/README.os390 b/gnu/usr.bin/perl/README.os390
index d3b299bb08f..cea717db16f 100644
--- a/gnu/usr.bin/perl/README.os390
+++ b/gnu/usr.bin/perl/README.os390
@@ -90,7 +90,7 @@ and be sure to also set the environment variable _C89_CCMODE=1 (exporting
_C89_CCMODE=1 is also a good idea for users of GNU make).
You might also want to have GNU groff for OS/390 installed before
-running the `make install` step for Perl.
+running the "make install" step for Perl.
There is a syntax error in the /usr/include/sys/socket.h header file
that IBM supplies with USS V2R7, V2R8, and possibly V2R9. The problem with
@@ -220,9 +220,9 @@ header /usr/include/sys/socket.h.
=head2 Testing Anomalies with Perl on OS/390
-The `make test` step runs a Perl Verification Procedure, usually before
+The "make test" step runs a Perl Verification Procedure, usually before
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
+run of "make test". Here is a guide to some of the more commonly seen
anomalies:
=over 4
diff --git a/gnu/usr.bin/perl/README.vmesa b/gnu/usr.bin/perl/README.vmesa
index a9881ec6a49..98fa5ec9cfd 100644
--- a/gnu/usr.bin/perl/README.vmesa
+++ b/gnu/usr.bin/perl/README.vmesa
@@ -21,7 +21,7 @@ other versions, but that's the one we've tested it on.
If you've downloaded the binary distribution, it needs to be
installed below /usr/local. Source code distributions have an
-automated `make install` step that means you do not need to extract
+automated "make install" step that means you do not need to extract
the source code below /usr/local (though that is where it will be
installed by default). You may need to worry about the networking
configuration files discussed in the last bullet below.
@@ -81,10 +81,10 @@ statements in the preprocessor output (.i) file.
=head2 Testing Anomalies of Perl on VM/ESA
-The `make test` step runs a Perl Verification Procedure, usually before
+The "make test" step runs a Perl Verification Procedure, usually before
installation. As the 5.6.1 kit was being assembled
the following "failures" were known to appear on some machines
-during `make test` (mostly due to ASCII vs. EBCDIC conflicts),
+during "make test" (mostly due to ASCII vs. EBCDIC conflicts),
your results may differ:
[the list of failures being compiled]
diff --git a/gnu/usr.bin/perl/beos/beos.c b/gnu/usr.bin/perl/beos/beos.c
index 7e799caf546..755ce993c86 100644
--- a/gnu/usr.bin/perl/beos/beos.c
+++ b/gnu/usr.bin/perl/beos/beos.c
@@ -1,9 +1,18 @@
#include "beos/beosish.h"
#undef waitpid
+#undef kill
+#undef sigaction
+#include <errno.h>
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
#include <sys/wait.h>
+#include <OS.h>
+
/* In BeOS 5.0 the waitpid() seems to misbehave in that the status
* has the upper and lower bytes swapped compared with the usual
* POSIX/UNIX implementations. To undo the surpise effect to the
@@ -18,3 +27,41 @@ pid_t beos_waitpid(pid_t process_id, int *status_location, int options) {
(*status_location & 0xFF00) >> 8;
return got;
}
+
+
+/* BeOS kill() doesn't like the combination of the pseudo-signal 0 and
+ * specifying a process group (i.e. pid < -1 || pid == 0). We work around
+ * by changing pid to the respective process group leader. That should work
+ * well enough in most cases. */
+
+int beos_kill(pid_t pid, int sig)
+{
+ if (sig == 0) {
+ if (pid == 0) {
+ /* it's our process group */
+ pid = getpgrp();
+ } else if (pid < -1) {
+ /* just address the process group leader */
+ pid = -pid;
+ }
+ }
+
+ return kill(pid, sig);
+}
+
+/* sigaction() should fail, if trying to ignore or install a signal handler
+ * for a signal that cannot be caught or ignored. The BeOS R5 sigaction()
+ * doesn't return an error, though. */
+int beos_sigaction(int sig, const struct sigaction *act,
+ struct sigaction *oact)
+{
+ int result = sigaction(sig, act, oact);
+
+ if (result == 0 && act && act->sa_handler != SIG_DFL
+ && act->sa_handler != SIG_ERR && (sig == SIGKILL || sig == SIGSTOP)) {
+ result = -1;
+ errno = EINVAL;
+ }
+
+ return result;
+}
diff --git a/gnu/usr.bin/perl/beos/beosish.h b/gnu/usr.bin/perl/beos/beosish.h
index 66de1104b2c..7aab15f4022 100644
--- a/gnu/usr.bin/perl/beos/beosish.h
+++ b/gnu/usr.bin/perl/beos/beosish.h
@@ -11,5 +11,28 @@ pid_t beos_waitpid(pid_t process_id, int *status_location, int options);
/* This seems to be protoless. */
char *gcvt(double value, int num_digits, char *buffer);
+/* flock support, if available */
+#ifdef HAS_FLOCK
+
+#include <flock.h>
+
+#undef close
+#define close flock_close
+
+#undef dup2
+#define dup2 flock_dup2
+
+#endif /* HAS_FLOCK */
+
+
+#undef kill
+#define kill beos_kill
+int beos_kill(pid_t pid, int sig);
+
+#undef sigaction
+#define sigaction(sig, act, oact) beos_sigaction((sig), (act), (oact))
+int beos_sigaction(int sig, const struct sigaction *act,
+ struct sigaction *oact);
+
#endif
diff --git a/gnu/usr.bin/perl/configure.com b/gnu/usr.bin/perl/configure.com
index b01dca9268c..570c2a5500d 100644
--- a/gnu/usr.bin/perl/configure.com
+++ b/gnu/usr.bin/perl/configure.com
@@ -37,7 +37,7 @@ $ echo = "write sys$output "
$ cat = "type"
$ delete := delete ! local symbol overrides globals with qualifiers
$ gcc_symbol = "gcc"
-$ ld = "Link"
+$ ld = "Link/nodebug"
$ ans = ""
$ macros = ""
$ extra_flags = ""
@@ -45,9 +45,12 @@ $ user_c_flags = ""
$ use_ieee_math = "y"
$ be_case_sensitive = "n"
$ unlink_all_versions = "n"
+$ builder = "MMK"
$ use_vmsdebug_perl = "n"
$ use64bitall = "n"
$ use64bitint = "n"
+$ uselargefiles = "n"
+$ usesitecustomize = "n"
$ C_Compiler_Replace = "CC="
$ Thread_Live_Dangerously = "MT="
$ use_two_pot_malloc = "N"
@@ -55,6 +58,7 @@ $ use_pack_malloc = "N"
$ use_debugmalloc = "N"
$ ccflags = ""
$ static_ext = ""
+$ nonxs_ext = ""
$ vms_default_directory_name = F$ENVIRONMENT("DEFAULT")
$ max_allowed_dir_depth = 3 ! e.g. [A.B.PERLxxx] not [A.B.C.PERLxxx]
$! max_allowed_dir_depth = 2 ! e.g. [A.PERLxxx] not [A.B.PERLxxx]
@@ -506,6 +510,8 @@ $ ELSE
$ file_2_find = "[-]" + file_2_find
$ ENDIF
$!
+$ tmp = F$PARSE(file_2_find + ";",,,,"SYNTAX_ONLY")
+$ IF F$SEARCH(tmp) .NES. "" THEN file_2_find = tmp
$ dirname = F$EXTRACT(0,F$LOCATE("]",file_2_find),file_2_find) + "]"
$ file_2_find = file_2_find - dirname
$!
@@ -787,7 +793,12 @@ Many of the questions will have default answers in square
brackets; typing carriage return will give you the default.
$ EOD
-$ READ SYS$COMMAND/PROMPT="Type carriage return to continue " ans
+$ if (fastread)
+$ then
+$ echo4 ""
+$ else
+$ READ SYS$COMMAND/PROMPT="Type carriage return to continue " ans
+$ endif
$ TYPE SYS$INPUT:
$ DECK
@@ -797,7 +808,12 @@ there was already a config.sh file). Type '@Configure "-h"' for a list of
options.
$ EOD
-$ READ SYS$COMMAND/PROMPT="Type carriage return to continue " ans
+$ if (fastread)
+$ then
+$ echo4 ""
+$ else
+$ READ SYS$COMMAND/PROMPT="Type carriage return to continue " ans
+$ endif
$ TYPE SYS$INPUT:
$ DECK
@@ -818,7 +834,12 @@ $!
$!If you make a mistake on a question, there is no easy way to back up to it
$!currently.
$!
-$ READ SYS$COMMAND/PROMPT="Type carriage return to continue " ans
+$ if (fastread)
+$ then
+$ echo4 ""
+$ else
+$ READ SYS$COMMAND/PROMPT="Type carriage return to continue " ans
+$ endif
$ IF (F$SEARCH("[-.CONFIG]INSTRUCT.").EQS."")
$ THEN
$ OPEN/WRITE CONFIG [-.CONFIG]INSTRUCT.
@@ -837,7 +858,7 @@ $! echo "I don't know where '$file' is, and my life depends on it."
$! echo "Go find a public domain implementation or fix your PATH setting!"
$! echo ""
$! echo "Don't worry if any of the following aren't found..."
-$!: determine whether symbolic links are supported !sfn
+$!: determine whether symbolic links are supported !sfn !jem- further down
$!: see whether [:lower:] and [:upper:] are supported character classes !sfn
$!: set up the translation script tr, must be called with ./tr of course !sfn
$!
@@ -881,7 +902,8 @@ $ config_symbols0 ="|archlib|archlibexp|bin|binexp|builddir|cf_email|config_sh
$ config_symbols1 ="|installprivlib|installscript|installsitearch|installsitelib|most|oldarchlib|oldarchlibexp|osname|pager|perl_symbol|perl_verb|"
$ config_symbols2 ="|prefix|privlib|privlibexp|scriptdir|sitearch|sitearchexp|sitebin|sitelib|sitelib_stem|sitelibexp|try_cxx|use64bitall|use64bitint|"
$ config_symbols3 ="|usecasesensitive|usedefaulttypes|usedevel|useieee|useithreads|usemultiplicity|usemymalloc|usedebugging_perl|useperlio|usesecurelog|"
-$ config_symbols4 ="|usethreads|usevmsdebug|usefaststdio|usemallocwrap|unlink_all_versions|"
+$ config_symbols4 ="|usethreads|usevmsdebug|usefaststdio|usemallocwrap|unlink_all_versions|uselargefiles|usesitecustomize|"
+$ config_symbols5 ="|buildmake|builder|"
$!
$ open/read CONFIG 'config_sh'
$ rd_conf_loop:
@@ -897,7 +919,7 @@ $ syms = config_symbols'k'
$ j = f$locate(dsym, syms)
$ if j .lt. f$length(syms) then goto erd_ck_loop
$ k = k + 1
-$ if k .lt. 5 then goto rd_ck_loop
+$ if k .lt. 6 then goto rd_ck_loop
$ goto rd_conf_loop
$ erd_ck_loop:
$ val = f$element(1,"=",line)
@@ -912,6 +934,7 @@ $ delete/symbol config_symbols1
$ delete/symbol config_symbols2
$ delete/symbol config_symbols3
$ delete/symbol config_symbols4
+$ delete/symbol config_symbols5
$ delete/symbol sym
$ delete/symbol val
$ delete/symbol dsym
@@ -1353,6 +1376,18 @@ $ IF (.NOT. got_patch) .OR. -
$Close_patch:
$ CLOSE CONFIG
$ ENDIF
+$!
+$ IF F$SEARCH("[-].patch") .NES. ""
+$ THEN
+$ SET NOON
+$ OPEN/READ PATCH [-].patch
+$ READ PATCH line
+$ CLOSE PATCH
+$ tmp = F$EDIT(line,"COLLAPSE")
+$ SET ON
+$ IF tmp .GT. perl_patchlevel then perl_patchlevel = tmp
+$ ENDIF
+$!
$ version_patchlevel_string = "version ''patchlevel' subversion ''subversion'"
$ IF got_perl_patchlevel .AND. perl_patchlevel .NES. "0"
$ THEN
@@ -1452,7 +1487,7 @@ $!: determine where public executables go
$ IF F$TYPE(bin) .NES. ""
$ THEN dflt = bin
$! ELSE dflt = prefix - ".]" + ".BIN]"
-$ ELSE dflt = "/''vms_prefix'/000000"
+$ ELSE dflt = "/''vms_prefix'"
$ ENDIF
$ rp = "Pathname where the public executables will reside? "
$ rp = F$FAO("!AS!/!AS",rp,"[ ''dflt' ] ")
@@ -1480,7 +1515,7 @@ $ ELSE ! skipping "where install" questions, we must set some symbols
$ IF F$TYPE(archlib).EQS."" THEN -
archlib="''vms_prefix':[lib.''archname'.''version']"
$ IF F$TYPE(bin) .EQS. "" THEN -
- bin="/''vms_prefix'/000000"
+ bin="/''vms_prefix'"
$ IF F$TYPE(privlib) .EQS. "" THEN -
privlib ="''vms_prefix':[lib]"
$ IF F$TYPE(sitearch) .EQS. "" THEN -
@@ -1595,7 +1630,7 @@ $ vms_cc_available = vms_cc_available + "cc/decc "
$ ENDIF
$ ELSE
$ IF (F$LOCATE("DEC",line).NE.F$LENGTH(line)).or.(F$LOCATE("Compaq",line).NE.F$LENGTH(line)) -
- .or.(F$LOCATE("hp",line).NE.F$LENGTH(line))
+ .or.(F$LOCATE("HP",F$EDIT(line,"UPCASE")).NE.F$LENGTH(line))
$ THEN
$ vms_cc_dflt = "/decc"
$ vms_cc_available = vms_cc_available + "cc/decc "
@@ -1671,7 +1706,7 @@ $! Which linker?
$ SET NOON
$ DEFINE/USER_MODE SYS$OUTPUT NL:
$ DEFINE/USER_MODE SYS$ERROR NL:
-$ link ccvms.obj
+$ link/nodebug ccvms.obj
$ tmp = $status
$ SET ON
$ ! success $status with:
@@ -1802,7 +1837,7 @@ $ tmp = $status
$ IF (silent) THEN GOSUB Shut_up
$ DEFINE/USER_MODE SYS$ERROR NL:
$ DEFINE/USER_MODE SYS$OUTPUT NL:
-$ link deccvers.obj
+$ link/nodebug deccvers.obj
$ tmp = $status
$ IF (silent) THEN GOSUB Shut_up
$ OPEN/WRITE CONFIG deccvers.out
@@ -1899,17 +1934,17 @@ $ IF vaxcrtl_exe .EQS. ""
$ THEN
$ IF F$LOCATE("VAXCRTL",gcclib_olb).NE.F$LENGTH(gcclib_olb)
$ THEN
-$ link gccvers.obj,'gcclib_olb',SYS$LIBRARY:VAXCRTL/Library
+$ link/nodebug gccvers.obj,'gcclib_olb',SYS$LIBRARY:VAXCRTL/Library
$ tmp = $status
$ ELSE
-$ link gccvers.obj,'gcclib_olb'
+$ link/nodebug gccvers.obj,'gcclib_olb'
$ tmp = $status
$ ENDIF
$ ELSE
$ OPEN/WRITE CONFIG GCCVERS.OPT
$ WRITE CONFIG "SYS$SHARE:VAXCRTL/SHARE"
$ CLOSE CONFIG
-$ link gccvers.obj,GCCVERS.OPT/OPT,'gcclib_olb'
+$ link/nodebug gccvers.obj,GCCVERS.OPT/OPT,'gcclib_olb'
$ tmp = $status
$ ENDIF
$ DEASSIGN SYS$ERROR
@@ -2277,15 +2312,13 @@ $ THEN
$ IF use64bitint .OR. use64bitint .eqs. "define" THEN bool_dflt = "y"
$ ENDIF
$ echo ""
-$ echo "You can have native 64-bit long integers."
+$ echo "You have natively 64-bit long integers."
$ echo ""
$ echo "Perl can be built to take advantage of 64-bit integer types"
-$ echo "on some systems, which provide a much larger range for perl's"
-$ echo "mathematical operations. (Note that does *not* enable 64-bit"
-$ echo "fileops at the moment, as Dec C doesn't do that yet)."
+$ echo "on some systems, To do so, Configure can be run with -Duse64bitint."
$ echo "Choosing this option will most probably introduce binary incompatibilities."
$ echo ""
-$ echo "If this does not make any sense to you, just accept the default ''dflt'."
+$ echo "If this does not make any sense to you, just accept the default '" + bool_dflt + "'."
$ rp = "Try to use 64-bit integers, if available? [''bool_dflt'] "
$ GOSUB myread
$ use64bitint = ans
@@ -2301,7 +2334,7 @@ $ echo "64-bitness as possible on the platform. This in turn means even more"
$ echo "binary incompatibilities. On the other hand, your platform may not"
$ echo "have any more 64-bitness available than what you already have chosen."
$ echo ""
-$ echo "If this does not make any sense to you, just accept the default ''dflt'."
+$ echo "If this does not make any sense to you, just accept the default '" + bool_dflt + "'."
$ rp = "Try to use maximal 64-bit support, if available? [''bool_dflt'] "
$ GOSUB myread
$ use64bitall=ans
@@ -2310,9 +2343,32 @@ $ THEN
$ echo ""
$ echo "Since you have chosen a maximally 64-bit build, I'm also turning on"
$ echo "the use of 64-bit integers."
+$ echo "I am also setting the default to use large files if available."
$ use64bitint="Y"
$ ENDIF
-$ ENDIF ! AXP && >= 7.1
+$!
+$ bool_dflt = use64bitall
+$ IF F$TYPE(uselargefiles) .NES. ""
+$ THEN
+$ IF uselargefiles .OR. uselargefiles .eqs. "define" THEN bool_dflt = "y"
+$ ENDIF
+$ echo ""
+$ echo "Perl can be built to understand large files (files larger than 2 gigabytes)"
+$ echo "on some systems. To do so, Configure can be run with -Duselargefiles."
+$ echo ""
+$ echo "If this does not make any sense to you, just accept the default '" + bool_dflt + "'."
+$ rp = "Try to understand large files, if available? [''bool_dflt'] "
+$ GOSUB myread
+$ uselargefiles=ans
+$!
+$ ENDIF ! not VAX && >= 7.1
+$!
+$ IF usesitecustomize .OR. usesitecustomize .eqs. "define"
+$ THEN
+$ usesitecustomize = "define"
+$ ELSE
+$ usesitecustomize = "undef"
+$ ENDIF
$!
$! Ask about threads, if appropriate
$ IF ccname .EQS. "DEC" .OR. ccname .EQS. "CXX"
@@ -2658,7 +2714,8 @@ $ builders = "IMAKE/GNUMAKE/MGMAKE/GMAKE/MAKE/MMS/MMK"
$ probers = "-f Makefile. -v!-f Makefile. -v!-f Makefile. -v!-f Makefile. -v!-f Makefile. -v!/IDENT!/IDENT"
$ max_build = 7
$!
-$ orig_dflt = "MMK"
+$ orig_dflt = f$edit(builder,"UPCASE")
+$ if orig_dflt .eqs. "" then orig_dflt = "MMK"
$ default_set = ""
$ ok_builders = ""
$ OPEN/WRITE/ERROR=Open_error CONFIG Makefile.
@@ -2807,7 +2864,7 @@ $! Build up the extra C flags
$!
$ IF use_ieee_math
$ THEN
-$ extra_flags = "''extra_flags'" + "/float=ieee/ieee=denorm_results"
+$ extra_flags = "''extra_flags'" + "/float=ieee/ieee=denorm"
$ ENDIF
$ IF be_case_sensitive
$ THEN
@@ -2948,7 +3005,6 @@ $!
$ IF use64bitint .OR. use64bitint .EQS. "define"
$ THEN
$ use64bitint = "define"
-$ uselargefiles = "define"
$ uselongdouble = "define"
$ alignbytes="16"
$ usemorebits = "define"
@@ -2959,7 +3015,6 @@ $ uvxformat="""Lx"""
$ uvXUformat="""LX"""
$ ELSE
$ use64bitint = "undef"
-$ uselargefiles = "undef"
$ uselongdouble = "undef"
$ usemorebits = "undef"
$ ivdformat="""ld"""
@@ -2984,6 +3039,12 @@ $ use64bitall = "define"
$ ELSE
$ use64bitall = "undef"
$ ENDIF
+$ IF uselargefiles .OR. uselargefiles .EQS. "define"
+$ THEN
+$ uselargefiles = "define"
+$ ELSE
+$ uselargefiles = "undef"
+$ ENDIF
$!
$ usemymalloc = "undef"
$ if mymalloc then usemymalloc = "define"
@@ -3656,6 +3717,36 @@ $ d_int64_t = "undef"
$ echo "You do not have int64_t."
$ ENDIF
$!
+$! Check to see if fseeko exists
+$!
+$ OS
+$ WS "#include <stdio.h>"
+$ WS "int main()"
+$ WS "{"
+$ WS "FILE *f=NULL;"
+$ WS "fseeko(f,(off_t)0,SEEK_SET);"
+$ WS "return(0);"
+$ WS "}"
+$ CS
+$ tmp = "fseeko"
+$ GOSUB inlibc
+$ d_fseeko = tmp
+$!
+$! Check to see if ftello exists
+$!
+$ OS
+$ WS "#include <stdio.h>"
+$ WS "int main()"
+$ WS "{"
+$ WS "FILE *f=NULL; off_t o=0;"
+$ WS "o=ftello(f);"
+$ WS "return(0);"
+$ WS "}"
+$ CS
+$ tmp = "ftello"
+$ GOSUB inlibc
+$ d_ftello = tmp
+$!
$!: see if this is a netdb.h system
$ IF Has_Dec_C_Sockets
$ THEN
@@ -3946,24 +4037,6 @@ $ tmp = "strtoq"
$ GOSUB inlibc
$ d_strtoq = tmp
$!
-$! Check for strtoq
-$!
-$ OS
-$ WS "#if defined(__DECC) || defined(__DECCXX)"
-$ WS "#include <stdlib.h>"
-$ WS "#endif"
-$ WS "#include <string.h>"
-$ WS "int main()"
-$ WS "{"
-$ WS "__int64 result;"
-$ WS "result = strtoq(""123123"", NULL, 10);"
-$ WS "exit(0);"
-$ WS "}"
-$ CS
-$ tmp = "strtoq"
-$ GOSUB inlibc
-$ d_strtoq = tmp
-$!
$! Check for strtold
$!
$ OS
@@ -4708,6 +4781,198 @@ $ GOSUB type_size_check
$ sizesize = tmp
$ echo "Your ''zzz' size is ''sizesize' bytes."
$!
+$! Check for _LARGEFILE capability.
+$!
+$ off_t_size = 4
+$ OS
+$ WS "#define _LARGEFILE"
+$ WS "#include <stdio.h>"
+$ WS "int main()"
+$ WS "{"
+$ WS "printf(""%d\n"", sizeof(off_t));"
+$ WS "return(0);"
+$ WS "}"
+$ CS
+$ GOSUB link_ok
+$ IF link_status .EQ. good_link
+$ THEN
+$ GOSUB just_mcr_it
+$ off_t_size = tmp
+$ ENDIF
+$ echo "Your off_t size is ''off_t_size' bytes when _LARGEFILE is defined."
+$ IF off_t_size .ne. 8 .AND. (uselargefiles .OR. uselargefiles .eqs. "define")
+$ THEN
+$ echo4 "You configured with -Duselargefiles but your CRTL does not support _LARGEFILE."
+$ echo4 "I'm disabling large file support."
+$ uselargefiles = "undef"
+$ ENDIF
+$!
+$! Tests for hard link, symbolic links, and 7.3 + CRTL features
+$!
+$ d_lchown = "undef"
+$ d_link = "undef"
+$ d_lstat = "undef"
+$ d_readlink = "undef"
+$ d_symlink = "undef"
+$ d_realpath = "undef"
+$ tmp = f$extract(1,3,f$edit(f$getsyi("VERSION"),"TRIM,COLLAPSE"))
+$!
+$! Hard link support has been present since 7.3-1 except for the
+$! easy to use DCL test to see if hardlinks are enabled on the build
+$! disk. That would require more work to test, and I am only testing
+$! this on 8.2, so that is why the 8.2 test.
+$!
+$ IF (tmp .GES. "8.2") .AND. (f$getsyi("HW_MODEL") .GE. 1024)
+$ THEN
+$ IF f$getdvi("SYS$DISK","HARDLINKS_SUPPORTED")
+$ THEN
+$ echo "I Found 64 bit OpenVMS 8.2 or later, and hard links enabled on build disk."
+$ echo "I will build with hard link support"
+$ d_link = "define"
+$ ELSE
+$ echo "I Found 64 bit OpenVMS 8.2 or later, and hard links disabled on build disk."
+$ echo "I will not build with hard link support."
+$ ENDIF
+$ ELSE
+$ echo4 "I can not dected if your CRTL and build disk support hard links."
+$ echo4 "I am disabling hard link support."
+$ ENDIF
+$!
+$ IF uselargefiles .OR. uselargefiles .eqs. "define"
+$ THEN
+$ IF (tmp .GES. "8.2") .AND. (f$getsyi("HW_MODEL") .GE. 1024)
+$ THEN
+$ echo4 -
+ "Looking for the realpath() function to indicate symbolic link support..."
+$ OS
+$! WS "#include <stdlib.h>"
+$ WS "void exit(int foo);"
+$ WS "char *realpath(const char *file_name, char * resolved_name, ...);"
+$ WS "int main()"
+$ WS "{"
+$ WS "char result[255];"
+$ WS "realpath(""foo"",result);"
+$ WS "exit(0);"
+$ WS "}"
+$ CS
+$ GOSUB link_ok
+$ IF compile_status .EQ. good_compile .AND. link_status .EQ. good_link
+$ THEN
+$ echo -
+ "Found realpath() which indicates symbolic link support is present."
+$ d_lchown = "define"
+$ d_lstat = "define"
+$ d_readlink = "define"
+$ d_symlink = "define"
+$! d_realpath = "define" ! Perl will not put it in the config.h file?
+$! Perl apparently does not use a built in realpath() on other platforms,
+$! but there is a severe performance penatly on OpenVMS to use the Perl
+$! script that implements a realpath(). The d_symlink symbol is used
+$! as a replacement for the d_realpath since they are related and both
+$! were activated by the CRTL at the same time.
+$!
+$ ELSE
+$ echo4 "Your system does not support symbolic links."
+$ echo4 "I am disabling symbolic link support."
+$ ENDIF
+$ ELSE
+$ echo4 "Your system does not support symbolic links."
+$ echo4 "I am disabling symbolic link support."
+$ ENDIF
+$ ELSE
+$ IF (tmp .GES. "8.2") .AND. (f$getsyi("HW_MODEL") .GE. 1024)
+$ THEN
+$ echo4 "-duselargefiles is required for symbolic link support."
+$ echo4 "You did not specify that, so I am disabling symbolic link support."
+$ ENDIF
+$ ENDIF
+$!
+$!
+$! Check for grp.h -- should be 7.3 and later, but test to be sure
+$!
+$ tmp = "grp.h"
+$ GOSUB inhdr
+$ i_grp = tmp
+$!
+$! VMS V7.3-2 powered options
+$! We know that it is only available for V7.3-2 and later on 64 bit platforms.
+$! Only implementing right now on 8.2 because that is what I am testing.
+$!
+$ d_getgrgid_r = "undef"
+$ getgrgid_r_proto = "0"
+$ d_getgrnam_r = "undef"
+$ getgrnam_r_proto = "0"
+$ d_getpgid = "undef"
+$ d_getpgrp = "undef"
+$! N.B. We already have home-grown thread-safe versions of
+$! getpwnam and getpwuid -- no need to use CRTL versions
+$ d_getpwnam_r = "undef"
+$ getpwnam_r_proto = "0"
+$ d_getpwuid_r = "undef"
+$ getpwuid_r_proto = "0"
+$ d_setgrent = "undef"
+$ d_ttyname_r = "undef"
+$ ttyname_r_proto = "0"
+$ tmp = f$extract(1,3,f$edit(f$getsyi("VERSION"),"TRIM,COLLAPSE"))
+$ if (tmp .GES. "8.2") .AND. (f$getsyi("HW_MODEL") .GE. 1024)
+$ then
+$ echo "Found 64 bit OpenVMS 8.2, will build with V7.3-2 routines"
+$ d_getgrgid_r = "define"
+$ getgrgid_r_proto = "1"
+$ d_getgrnam_r = "define"
+$ getgrnam_r_proto = "1"
+$ if d_symlink .or. d_symlink .EQS. "define"
+$ then
+$! FIXME: Need to find how to activate this.
+$! d_getpgid = "define"
+$! d_getpgrp = "define"
+$ endif
+$ d_setgrent = "define"
+$ d_ttyname_r = "define"
+$ ttyname_r_proto = "1"
+$ endif
+$!
+$! VMS V7.3-2 powered options
+$! We know that it is only available for V7.3-2 and later on 64 bit platforms.
+$! Only implementing right now on 8.2 because that is what I am testing
+$! These functions may require POSIX UIDs/GIDs to be active, so I am
+$! not activating the features at this time, just preparing this file
+$! to easily use them in the future.
+$!
+$ d_seteuid = "undef"
+$ d_setpgid = "undef"
+$ d_setpgrp = "undef"
+$ d_setregid = "undef"
+$ d_setreuid = "undef"
+$ d_setsid = "undef"
+$! tmp = f$extract(1,3,f$edit(f$getsyi("VERSION"),"TRIM,COLLAPSE"))
+$tmp = "" ! Disable this section for now.
+$ if (tmp .GES. "8.2") .AND. (f$getsyi("HW_MODEL") .GE. 1024)
+$ then
+$ echo "Found 64 bit OpenVMS 8.2, will build with V7.3-2 UID setting routines"
+$ d_seteuid = "define"
+$ d_setpgid = "define"
+$ d_setpgrp = "define"
+$ d_setregid = "define"
+$ d_setreuid = "define"
+$ d_setsid = "define"
+$ endif
+$!
+$! VMS V8 powered options
+$! We know that it is only available for 8.2 and later on 64 bit platforms.
+$!
+$ d_fstatvfs = "undef"
+$! d_statvfs = "undef"
+$ i_sysstatvfs = "undef"
+$ tmp = f$extract(1,3,f$edit(f$getsyi("VERSION"),"TRIM,COLLAPSE"))
+$ if (tmp .GES. "8.2") .AND. (f$getsyi("HW_MODEL") .GE. 1024)
+$ then
+$ echo "Found 64 bit OpenVMS 8.2, will build with 8.2 routines"
+$ d_fstatvfs = "define"
+$! d_statvfs = "define"
+$ i_sysstatvfs = "define"
+$ endif
+$!
$! Check rand48 and its ilk
$!
$ echo4 "Looking for a random number function..."
@@ -4726,6 +4991,8 @@ $ GOSUB link_ok
$ IF compile_status .EQ. good_compile .AND. link_status .EQ. good_link
$ THEN
$ drand01 = "drand48()"
+$ randbits = "48"
+$ randfunc = "drand48"
$ randseedtype = "long int"
$ seedfunc = "srand48"
$ echo4 "Good, found drand48()."
@@ -4733,6 +5000,8 @@ $ d_drand48proto = "define"
$ ELSE
$ d_drand48proto = "undef"
$ drand01="random()"
+$ randbits = "31"
+$ randfunc = "random"
$ randseedtype = "unsigned"
$ seedfunc = "srandom"
$ OS
@@ -4752,6 +5021,7 @@ $ THEN
$ echo4 "OK, found random()."
$ ELSE
$ drand01="(((float)rand())*MY_INV_RAND_MAX)"
+$ randfunc = "rand"
$ randseedtype = "unsigned"
$ seedfunc = "srand"
$ echo4 "Yick, looks like I have to use rand()."
@@ -4793,6 +5063,9 @@ $ d_munmap="define"
$ d_msync="define"
$ d_ualarm="define"
$ d_uname="define"
+$! d_unsetenv="define" ! Fix me - Activating requires changing VMS code
+$ d_unsetenv="undef" ! Change will be needed to allow GNV integration
+$ d_clearenv="undef"
$ d_usleep="define"
$ d_setitimer="define"
$ d_sigaction="define"
@@ -4801,14 +5074,37 @@ $ d_truncate="define"
$ d_wait4="define"
$ d_index="define"
$ pidtype="pid_t"
-$ sig_name="ZERO HUP INT QUIT ILL TRAP IOT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM ABRT USR1 USR2 SPARE18 SPARE19 CHLD CONT STOP TSTP TTIN TTOU DEBUG SPARE27 SPARE28 SPARE29 SPARE30 SPARE31 SPARE32 RTMIN RTMAX"
+$ sig_name1="ZERO HUP INT QUIT ILL TRAP IOT EMT FPE KILL BUS SEGV SYS PIPE ALRM "
+$ sig_name2="TERM ABRT USR1 USR2 SPARE18 SPARE19 CHLD CONT STOP TSTP TTIN TTOU "
+$ sig_name3="DEBUG SPARE27 SPARE28 SPARE29 SPARE30 SPARE31 SPARE32 "
+$ sig_name4="WINCH "
+$ sig_namert="RTMIN RTMAX"
$ psnwc1="""ZERO"",""HUP"",""INT"",""QUIT"",""ILL"",""TRAP"",""IOT"",""EMT"",""FPE"",""KILL"",""BUS"",""SEGV"",""SYS"","
$ psnwc2="""PIPE"",""ALRM"",""TERM"",""ABRT"",""USR1"",""USR2"",""SPARE18"",""SPARE19"",""CHLD"",""CONT"",""STOP"",""TSTP"","
-$ psnwc3="""TTIN"",""TTOU"",""DEBUG"",""SPARE27"",""SPARE28"",""SPARE29"",""SPARE30"",""SPARE31"",""SPARE32"",""RTMIN"",""RTMAX"",0"
-$ sig_name_init = psnwc1 + psnwc2 + psnwc3
-$ sig_num="0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 6 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 64"
-$ sig_num_init="0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,6,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,64,0"
-$ sig_size="36"
+$ psnwc3="""TTIN"",""TTOU"",""DEBUG"",""SPARE27"",""SPARE28"",""SPARE29"",""SPARE30"",""SPARE31"",""SPARE32"","
+$ psnwc4_v7_3="""WINCH"","
+$ psnwcrt="""RTMIN"",""RTMAX"",0"
+$ sig_num1="0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 6 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 "
+$ sig_num_v7_3="28 "
+$ sig_numrt="33 64"
+$ sig_num_init1="0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,6,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,"
+$ sig_num_init_v7_3="28,"
+$ sig_num_initrt="33,64,0"
+$ if (vms_ver .GES. "7.3")
+$ then
+$ sig_name = sig_name1 + sig_name2 + sig_name3 + sig_name4 + sig_namert
+$ sig_name_init = psnwc1 + psnwc2 + psnwc3 + psnwc4_v7_3 + psnwcrt
+$ sig_num = sig_num1 + sig_num_v7_3 + sig_numrt
+$ sig_num_init = sig_num_init1 + sig_num_v7_3 + sig_num_initrt
+$ sig_size="37"
+$ else
+$ sig_name = sig_name1 + sig_name2 + sig_name3 + sig_namert
+$ sig_name_init = psnwc1 + psnwc2 + psnwc3 + psnwcrt
+$ sig_num = sig_num1 + sig_numrt
+$ sig_num_init = sig_num_init1 + sig_num_initrt
+$ sig_size="36"
+$ endif
+$ sig_count="64"
$ uidtype="uid_t"
$ d_pathconf="define"
$ d_fpathconf="define"
@@ -4825,6 +5121,8 @@ $ d_munmap="undef"
$ d_msync="undef"
$ d_ualarm="undef"
$ d_uname="undef"
+$ d_unsetenv="undef"
+$ d_clearenv="undef"
$ d_usleep="undef"
$ d_setitimer="undef"
$ d_sigaction="undef"
@@ -4839,6 +5137,8 @@ $ sig_name_init = psnwc1 + psnwc2
$ sig_num="0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 6 16 17"
$ sig_num_init="0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,6,16,17,0"
$ sig_size="19"
+$ sig_count="15"
+$ if (vms_ver .GES. "6.2") then sig_count="17"
$ uidtype="unsigned int"
$ d_pathconf="undef"
$ d_fpathconf="undef"
@@ -4926,6 +5226,13 @@ $ THEN
$ d_vms_do_sockets="define"
$ d_htonl="define"
$ d_socket="define"
+$ d_sockpair = "undef"
+$ tmp = f$extract(1,3,f$edit(f$getsyi("VERSION"),"TRIM,COLLAPSE"))
+$ if (tmp .GES. "8.2") .AND. (f$getsyi("HW_MODEL") .GE. 1024)
+$ then
+$ echo "Found 64 bit OpenVMS 8.2, will build with socketpair support"
+$ d_sockpair = "define"
+$ endif
$ d_select="define"
$ netdb_hlen_type="int"
$ netdb_host_type="char *"
@@ -4953,6 +5260,7 @@ $ ELSE
$ d_vms_do_sockets="undef"
$ d_htonl="undef"
$ d_socket="undef"
+$ d_socketpair = "undef"
$ d_select="undef"
$ netdb_hlen_type="int"
$ netdb_host_type="char *"
@@ -5184,6 +5492,7 @@ $ sig_name_init = psnwc1 + psnwc2
$ sig_num="0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 6 16 17"
$ sig_num_init="0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,6,16,17,0"
$ sig_size="19"
+$ sig_count="17"
$ else
$ sig_name="ZERO HUP INT QUIT ILL TRAP IOT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM ABRT"
$ psnwc1="""ZERO"",""HUP"",""INT"",""QUIT"",""ILL"",""TRAP"",""IOT"",""EMT"",""FPE"",""KILL"",""BUS"",""SEGV"",""SYS"","
@@ -5192,6 +5501,7 @@ $ sig_name_init = psnwc1 + psnwc2
$ sig_num="0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 6"
$ sig_num_init="0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,6,0"
$ sig_size="17"
+$ sig_count="15"
$ endif
$ ELSE
$ echo4 "Nope, we can't."
@@ -5244,7 +5554,6 @@ $ WC "# Configuration time: " + cf_time
$ WC "# Configuration by : " + cf_by
$ WC "# Target system : " + myuname
$ WC ""
-$ WC "CONFIG='true'"
$ WC "Makefile_SH='" + Makefile_SH + "'"
$ WC "Mcc='" + Mcc + "'"
$ WC "PERL_REVISION='" + revision + "'"
@@ -5253,6 +5562,8 @@ $ WC "PERL_SUBVERSION='" + subversion + "'"
$ WC "PERL_API_REVISION='" + api_revision + "'"
$ WC "PERL_API_VERSION='" + api_version + "'"
$ WC "PERL_API_SUBVERSION='" + api_subversion + "'"
+$ WC "PERL_PATCHLEVEL='" + perl_patchlevel + "'"
+$ WC "PERL_CONFIG_SH='true'"
$ WC "_a='" + lib_ext + "'"
$ WC "_exe='" + exe_ext + "'"
$ WC "_o='" + obj_ext + "'"
@@ -5271,7 +5582,25 @@ $ WC "castflags='0'"
$ WC "cc='" + perl_cc + "'"
$ WC "cccdlflags='" + cccdlflags + "'"
$ WC "ccdlflags='" + ccdlflags + "'"
-$ WC "ccflags='" + ccflags + "'"
+$ IF uselargefiles .OR. uselargefiles .EQS. "define"
+$ THEN
+$! Perl can not use _USE_STD_STAT at the moment
+$! IF d_symlink .OR. d_symlink .EQS. "define"
+$! THEN
+$! ccdefines = "_USE_STD_STAT=1"
+$! ELSE
+$ ccdefines = "_LARGEFILE=1"
+$! ENDIF
+$ ELSE
+$ ccdefines = ""
+$ ENDIF
+$ IF ccdefines .NES. ""
+$ THEN
+$ WC "ccflags='" + ccflags + "/Define=" + ccdefines + "'"
+$ ELSE
+$ WC "ccflags='" + ccflags + "'"
+$ ENDIF
+$ WC "ccflags_uselargefiles='" + "'"
$ WC "ccname='" + ccname + "'"
$ WC "ccversion='" + ccversion + "'"
$ WC "cf_by='" + cf_by + "'"
@@ -5311,7 +5640,13 @@ $ WC "d_alarm='define'"
$ WC "d_archlib='define'"
$ WC "d_atolf='" + d_atolf + "'"
$ WC "d_atoll='" + d_atoll + "'"
-$ WC "d_attribut='" + d_attribut + "'"
+$ WC "d_attribute_format='" + d_attribut + "'"
+$ WC "d_attribute_malloc='undef'"
+$ WC "d_attribute_nonnull='undef'"
+$ WC "d_attribute_noreturn='undef'"
+$ WC "d_attribute_pure='undef'"
+$ WC "d_attribute_unused='undef'"
+$ WC "d_attribute_warn_unused_result='undef'"
$ WC "d_bcmp='" + d_bcmp + "'"
$ WC "d_bcopy='" + d_bcopy + "'"
$ WC "d_bincompat3='undef'"
@@ -5336,7 +5671,17 @@ $ WC "d_dbl_dig='define'"
$ WC "d_dbminitproto='undef'"
$ WC "d_difftime='define'"
$ WC "d_dirfd='undef'"
-$ WC "d_dirnamlen='define'"
+$ tmp = f$extract(1,3,f$edit(f$getsyi("VERSION"),"TRIM,COLLAPSE"))
+$ IF (tmp .GES. "8.2") .AND. (f$getsyi("HW_MODEL") .GE. 1024)
+$ then
+$! Sorry, CRTL does not have this, and in order to support
+$! POSIX filespecifications, the CRTL readdir() structures
+$! need to be used globaly for now.
+$ echo "Building for OpenVMS 8.2 uses CRTL dirent.h, so no dirnamlen member"
+$ WC "d_dirnamlen='undef'"
+$ else
+$ WC "d_dirnamlen='define'"
+$ endif
$ WC "d_dlerror='undef'"
$ WC "d_dlsymun='undef'"
$ WC "d_dosuid='undef'"
@@ -5372,12 +5717,13 @@ $ WC "d_fpclassl='undef'"
$ WC "d_fpos64_t='" + d_fpos64_t + "'"
$ WC "d_frexpl='" + d_frexpl + "'"
$ WC "d_fs_data_s='undef'"
-$ WC "d_fseeko='undef'"
+$ WC "d_fseeko='" + d_fseeko + "'"
$ WC "d_fsetpos='define'"
$ WC "d_fstatfs='undef'"
-$ WC "d_fstatvfs='undef'"
+$ WC "d_fstatvfs='" + d_fstatvfs + "'"
$ WC "d_fsync='undef'"
-$ WC "d_ftello='undef'"
+$ WC "d_ftello='" + d_ftello + "'"
+$ WC "d_futimes='undef'"
$ WC "d_getcwd='define'"
$ WC "d_getespwnam='undef'"
$ WC "d_getfsstat='undef'"
@@ -5400,9 +5746,9 @@ $ WC "d_getpagsz='undef'"
$ WC "d_getpbyname='" + d_getpbyname + "'"
$ WC "d_getpbynumber='" + d_getpbynumber + "'"
$ WC "d_getpent='" + d_getpent + "'"
-$ WC "d_getpgid='undef'"
+$ WC "d_getpgid='" + d_getpgid + "'"
$ WC "d_getpgrp2='undef'"
-$ WC "d_getpgrp='undef'"
+$ WC "d_getpgrp='" + d_getpgrp + "'"
$ WC "d_getppid='" + d_getppid + "'"
$ WC "d_getprior='undef'"
$ WC "d_getprotoprotos='" + d_getprotoprotos + "'"
@@ -5428,17 +5774,20 @@ $ WC "d_isinf='undef'"
$ WC "d_isnan='" + d_isnan + "'"
$ WC "d_isnanl='" + d_isnanl + "'"
$ WC "d_killpg='undef'"
-$ WC "d_lchown='undef'"
+$ WC "d_lchown='" + d_lchown + "'"
$ WC "d_ldbl_dig='define'"
-$ WC "d_link='undef'"
+$ WC "d_libm_lib_version='undef'"
+$ WC "d_link='" + d_link + "'"
$ WC "d_llseek='undef'"
$ WC "d_locconv='" + d_locconv + "'"
$ WC "d_lockf='undef'"
$ WC "d_longdbl='" + d_longdbl + "'"
$ WC "d_longlong='" + d_longlong + "'"
$ WC "d_lseekproto='define'"
-$ WC "d_lstat='undef'"
+$ WC "d_lstat='" + d_lstat + "'"
$ WC "d_madvise='undef'"
+$ WC "d_malloc_size='undef'"
+$ WC "d_malloc_good_size='undef'"
$ WC "d_mblen='" + d_mblen + "'"
$ WC "d_mbstowcs='" + d_mbstowcs + "'"
$ WC "d_mbtowc='" + d_mbtowc + "'"
@@ -5474,6 +5823,7 @@ $ WC "d_nice='define'"
$ WC "d_nl_langinfo='" + d_nl_langinfo + "'"
$ WC "d_nv_preserves_uv='" + d_nv_preserves_uv + "'"
$ WC "nv_preserves_uv_bits='" + nv_preserves_uv_bits + "'"
+$ WC "d_nv_zero_is_allbits_zero='define'"
$ WC "d_off64_t='" + d_off64_t + "'"
$ WC "d_old_pthread_create_joinable='" + d_old_pthread_create_joinable + "'"
$ WC "d_oldarchlib='define'"
@@ -5501,9 +5851,9 @@ $ WC "d_pwquota='undef'"
$ WC "d_qgcvt='undef'"
$ WC "d_quad='" + d_quad + "'"
$ WC "d_readdir='define'"
-$ WC "d_readlink='undef'"
+$ WC "d_readlink='" + d_readlink + "'"
$ WC "d_readv='undef'"
-$ WC "d_realpath='undef'"
+$ WC "d_realpath='" + d_realpath + "'"
$ WC "d_recvmsg='undef'"
$ WC "d_rename='define'"
$ WC "d_rewinddir='define'"
@@ -5523,8 +5873,8 @@ $ WC "d_semctl_semun='undef'"
$ WC "d_sendmsg='undef'"
$ WC "d_setegid='undef'"
$ WC "d_setenv='" + d_setenv + "'"
-$ WC "d_seteuid='undef'"
-$ WC "d_setgrent='undef'"
+$ WC "d_seteuid='" + d_seteuid + "'"
+$ WC "d_setgrent='" + d_setgrent + "'"
$ WC "d_setgrps='undef'"
$ WC "d_sethent='" + d_sethent + "'"
$ WC "d_setitimer='" + d_setitimer + "'"
@@ -5532,20 +5882,20 @@ $ WC "d_setlinebuf='undef'"
$ WC "d_setlocale='" + d_setlocale + "'"
$ WC "d_setnent='" + d_setnent + "'"
$ WC "d_setpent='" + d_setpent + "'"
-$ WC "d_setpgid='undef'"
+$ WC "d_setpgid='" + d_setpgid + "'"
$ WC "d_setpgrp2='undef'"
-$ WC "d_setpgrp='undef'"
+$ WC "d_setpgrp='" + d_setpgrp + "'"
$ WC "d_setprior='undef'"
$ WC "d_setproctitle='" + d_setproctitle + "'"
$ WC "d_setpwent='define'"
-$ WC "d_setregid='undef'"
+$ WC "d_setregid='" + d_setregid + "'"
$ WC "d_setresgid='undef'"
$ WC "d_setresuid='undef'"
-$ WC "d_setreuid='undef'"
+$ WC "d_setreuid='" + d_setreuid + "'"
$ WC "d_setrgid='undef'"
$ WC "d_setruid='undef'"
$ WC "d_setsent='" + d_setsent + "'"
-$ WC "d_setsid='undef'"
+$ WC "d_setsid='" + d_setsid + "'"
$ WC "d_setvbuf='" + d_setvbuf + "'"
$ WC "d_sfio='undef'"
$ WC "d_shm='undef'"
@@ -5557,8 +5907,9 @@ $ WC "d_sockatmark='undef'"
$ WC "d_sockatmarkproto='undef'"
$ WC "d_socket='" + d_socket + "'"
$ WC "d_socklen_t='" + d_socklen_t + "'"
-$ WC "d_sockpair='undef'"
+$ WC "d_sockpair='" + d_sockpair + "'"
$ WC "d_socks5_init='undef'"
+$ WC "d_sprintf_returns_strlen='define'"
$ WC "d_sqrtl='define'"
$ WC "d_sresgproto='undef'"
$ WC "d_sresgproto='undef'"
@@ -5582,17 +5933,19 @@ $ WC "d_strctcpy='define'"
$ WC "d_strerrm='strerror((e),vaxc$errno)'"
$ WC "d_strerror='define'"
$ WC "d_strftime='define'"
+$ WC "d_strlcat='undef'"
+$ WC "d_strlcpy='undef'"
$ WC "d_strtod='define'"
$ WC "d_strtol='define'"
$ WC "d_strtold='" + d_strtold + "'"
$ WC "d_strtoll='" + d_strtoll + "'"
-$ WC "d_strtoq='define'"
+$ WC "d_strtoq='" + d_strtoq + "'"
$ WC "d_strtoul='define'"
$ WC "d_strtoull='" + d_strtoull + "'"
$ WC "d_strtouq='" + d_strtouq + "'"
$ WC "d_strxfrm='" + d_strxfrm + "'"
$ WC "d_suidsafe='undef'"
-$ WC "d_symlink='undef'"
+$ WC "d_symlink='" + d_symlink + "'"
$ WC "d_syscall='undef'"
$ WC "d_syscallproto='undef'"
$ WC "d_sysconf='" + d_sysconf + "'"
@@ -5621,6 +5974,8 @@ $ WC "d_uname='" + d_uname + "'"
$ WC "d_union_semun='undef'"
$ WC "d_unlink_all_versions='" + d_unlink_all_versions + "'" ! VMS-specific
$ WC "d_unordered='undef'"
+$ WC "d_unsetenv='" + d_unsetenv + "'"
+$ WC "d_clearenv='" + d_clearenv + "'"
$ WC "d_usleep='" + d_usleep + "'"
$ WC "d_usleepproto='" + d_usleep + "'"
$ WC "d_ustat='undef'"
@@ -5701,7 +6056,7 @@ $ WC "i_fcntl='" + i_fcntl + "'"
$ WC "i_float='define'"
$ WC "i_fp='undef'"
$ WC "i_fp_class='undef'"
-$ WC "i_grp='undef'"
+$ WC "i_grp='" + i_grp + "'"
$ WC "i_ieeefp='undef'"
$ WC "i_inttypes='" + i_inttypes + "'"
$ WC "i_langinfo='" + i_langinfo + "'"
@@ -5748,7 +6103,7 @@ $ WC "i_sysselct='undef'"
$ WC "i_syssockio='undef'"
$ WC "i_sysstat='define'"
$ WC "i_sysstatfs='undef'"
-$ WC "i_sysstatvfs='undef'"
+$ WC "i_sysstatvfs='" + i_sysstatvfs + "'"
$ WC "i_systime='undef'"
$ WC "i_systimek='undef'"
$ WC "i_systimes='undef'"
@@ -5794,15 +6149,24 @@ $ DELETE/SYMBOL tmp
$ WC "ld='" + ld + "'"
$ WC "lddlflags='/Share'"
$ WC "ldflags='" + ldflags + "'"
+$ WC "ldflags_uselargefiles='" + "'"
$ WC "lib_ext='" + lib_ext + "'"
$ WC "libc='" + libc + "'"
$ WC "libpth='/sys$share /sys$library'"
$ WC "libs='" + libs + "'"
+$ WC "libswanted='" + "'"
+$ WC "libswanted_uselargefiles='" + "'"
$ WC "longdblsize='" + longdblsize + "'"
$ WC "longlongsize='" + longlongsize + "'"
$ WC "longsize='" + longsize + "'"
-$ WC "lseeksize='4'"
-$ WC "lseektype='int'"
+$ IF uselargefiles .OR. uselargefiles .EQS. "define"
+$ THEN
+$ WC "lseeksize='8'"
+$ WC "lseektype='off_t'"
+$ ELSE
+$ WC "lseeksize='4'"
+$ WC "lseektype='int'"
+$ ENDIF
$ WC "mab='" + "'"
$ WC "make='" + make + "'"
$ WC "malloctype='void *'"
@@ -5820,6 +6184,7 @@ $ WC "netdb_hlen_type='" + netdb_hlen_type + "'"
$ WC "netdb_host_type='" + netdb_host_type + "'"
$ WC "netdb_name_type='" + netdb_name_type + "'"
$ WC "netdb_net_type='" + netdb_net_type + "'"
+$ WC "nonxs_ext='" + nonxs_ext + "'"
$ WC "nveformat='" + nveformat + "'"
$ WC "nvfformat='" + nvfformat + "'"
$ WC "nvgformat='" + nvgformat + "'"
@@ -5855,7 +6220,8 @@ $ WC "prototype='define'"
$ WC "ptrsize='" + ptrsize + "'"
$ WC "quadkind='" + quadkind + "'"
$ WC "quadtype='" + quadtype + "'"
-$ WC "randbits='31'"
+$ WC "randbits='" + randbits + "'"
+$ WC "randfunc='" + randfunc + "'"
$ WC "randseedtype='" + randseedtype + "'"
$ WC "ranlib='" + "'"
$ WC "rd_nodata=' '"
@@ -5889,6 +6255,7 @@ $ WC/symbol tmp
$ DELETE/SYMBOL tmp
$ WC "sig_num='" + sig_num + "'"
$ WC "sig_num_init='" + sig_num_init + "'"
+$ WC "sig_count='" + sig_count + "'"
$ WC "sig_size='" + sig_size + "'"
$ WC "signal_t='" + signal_t + "'"
$ WC "sitearch='" + sitearch + "'"
@@ -5950,6 +6317,7 @@ $ WC "useperlio='" + useperlio + "'"
$ WC "useposix='false'"
$ WC "usereentrant='undef'"
$ WC "usesecurelog='" + usesecurelog + "'" ! VMS-specific
+$ WC "usesitecustomize='" + usesitecustomize + "'"
$ WC "usesocks='undef'"
$ WC "usethreads='" + usethreads + "'"
$ WC "usevendorprefix='" + "'" ! try to say no, though we'll be ignored as of MM 5.90_01
@@ -5976,7 +6344,6 @@ $ WC "vms_cc_type='" + vms_cc_type + "'" ! VMS specific
$ WC "vms_prefix='" + vms_prefix + "'" ! VMS specific
$ WC "vms_ver='" + vms_ver + "'" ! VMS specific
$ WC "voidflags='15'"
-$ WC "PERL_CONFIG_SH='true'"
$!
$! ## The UNIXy POSIXy reentrantey thingys ##
$! See "Appendix B, Version-Dependency Tables" in the C RTL
@@ -6004,8 +6371,8 @@ $ WC "d_endprotoent_r='undef'"
$ WC "d_endpwent_r='undef'"
$ WC "d_endservent_r='undef'"
$ WC "d_getgrent_r='undef'"
-$ WC "d_getgrgid_r='undef'"
-$ WC "d_getgrnam_r='undef'"
+$ WC "d_getgrgid_r='" + d_getgrgid_r + "'"
+$ WC "d_getgrnam_r='" + d_getgrnam_r + "'"
$ WC "d_gethostbyaddr_r='undef'"
$ WC "d_gethostbyname_r='undef'"
$ WC "d_gethostent_r='undef'"
@@ -6017,8 +6384,8 @@ $ WC "d_getprotobyname_r='undef'"
$ WC "d_getprotobynumber_r='undef'"
$ WC "d_getprotoent_r='undef'"
$ WC "d_getpwent_r='undef'"
-$ WC "d_getpwnam_r='undef'"
-$ WC "d_getpwuid_r='undef'"
+$ WC "d_getpwnam_r='" + d_getpwnam_r + "'"
+$ WC "d_getpwuid_r='" + d_getpwuid_r + "'"
$ WC "d_getservbyname_r='undef'"
$ WC "d_getservbyport_r='undef'"
$ WC "d_getservent_r='undef'"
@@ -6039,7 +6406,7 @@ $ WC "d_srand48_r='undef'"
$ WC "d_srandom_r='undef'"
$ WC "d_strerror_r='undef'"
$ WC "d_tmpnam_r='undef'"
-$ WC "d_ttyname_r='undef'"
+$ WC "d_ttyname_r='" + d_ttyname_r + "'"
$ WC "ctermid_r_proto='0'"
$ WC "crypt_r_proto='0'"
$ WC "drand48_r_proto='0'"
@@ -6050,8 +6417,8 @@ $ WC "endprotoent_r_proto='0'"
$ WC "endpwent_r_proto='0'"
$ WC "endservent_r_proto='0'"
$ WC "getgrent_r_proto='0'"
-$ WC "getgrgid_r_proto='0'"
-$ WC "getgrnam_r_proto='0'"
+$ WC "getgrgid_r_proto='" + getgrgid_r_proto + "'"
+$ WC "getgrnam_r_proto='" + getgrnam_r_proto + "'"
$ WC "gethostbyaddr_r_proto='0'"
$ WC "gethostbyname_r_proto='0'"
$ WC "gethostent_r_proto='0'"
@@ -6085,7 +6452,7 @@ $ WC "srand48_r_proto='0'"
$ WC "srandom_r_proto='0'"
$ WC "strerror_r_proto='0'"
$ WC "tmpnam_r_proto='0'"
-$ WC "ttyname_r_proto='0'"
+$ WC "ttyname_r_proto='" + ttyname_r_proto + "'"
$!
$! ##END WRITE NEW CONSTANTS HERE##
$!
@@ -6254,12 +6621,23 @@ $ MALLOC_REPLACE = "MALLOC=MALLOC=1"
$ ELSE
$ MALLOC_REPLACE = "MALLOC="
$ ENDIF
+$ IF uselargefiles .OR. uselargefiles .EQS. "define"
+$ THEN
+$! Perl can not use _USE_STD_STAT at the moment
+$! IF d_symlink .or. d_symlink .eqs. "define"
+$! THEN
+$! LARGEFILE_REPLACE = "LARGEFILE=LARGEFILE=_USE_STD_STAT=1"
+$! ELSE
+$ LARGEFILE_REPLACE = "LARGEFILE=LARGEFILE=_LARGEFILE=1"
+$! ENDIF
+$ ELSE
+$ LARGEFILE_REPLACE = "LARGEFILE="
+$ ENDIF
$ echo4 "Extracting ''defmakefile' (with variable substitutions)"
$ DEFINE/USER_MODE sys$output 'UUmakefile'
-$ mcr []munchconfig 'config_sh' 'Makefile_SH' "''DECC_REPLACE'" -
- "''DECCXX_REPLACE'" "''ARCH_TYPE'" "''GNUC_REPLACE'" "''SOCKET_REPLACE'" -
- "''THREAD_REPLACE'" "''C_Compiler_Replace'" "''MALLOC_REPLACE'" -
- "''Thread_Live_Dangerously'" "PV=''version'" "FLAGS=FLAGS=''extra_flags'"
+$ mcr []munchconfig 'config_sh' 'Makefile_SH' "''DECC_REPLACE'" "''DECCXX_REPLACE'" "''ARCH_TYPE'" "''GNUC_REPLACE'" -
+"''SOCKET_REPLACE'" "''THREAD_REPLACE'" "''C_Compiler_Replace'" "''MALLOC_REPLACE'" -
+"''Thread_Live_Dangerously'" "PV=''version'" "FLAGS=FLAGS=''extra_flags'" "''LARGEFILE_REPLACE'"
$! Clean up after ourselves
$ DELETE/NOLOG/NOCONFIRM []munchconfig.exe;
$!
@@ -6495,9 +6873,33 @@ $ ELSE
$ WRITE CONFIG "$! This perl configured & administered by ''perladmin'"
$ ENDIF
$ WRITE CONFIG "$!"
+$! HP hack to make distributing binaries easier
+$!----------------------------------------------
+$ pcsi_producer = f$trnlnm("PCSI_PRODUCER")
+$ if pcsi_producer .eqs. ""
+$ then
+$ prefix = prefix - "000000."
+$ IF F$LOCATE(".]",prefix) .EQ. F$LENGTH(prefix) THEN prefix = prefix - "]" + ".]"
+$ WRITE CONFIG "$ define/translation=concealed ''vms_prefix' ''prefix'"
+$ else
+$ WRITE CONFIG "$ myproc = f$environment(""PROCEDURE"")"
+$ WRITE CONFIG "$ myroot_dev = f$parse(myproc,,,""DEVICE"",""NO_CONCEAL"")"
+$ WRITE CONFIG "$ myroot_dir = f$parse(myproc,,,""DIRECTORY"",""NO_CONCEAL"")"
+$ WRITE CONFIG "$ myroot_dir = myroot_dir - ""][000000."" - ""><000000."""
+$ WRITE CONFIG "$ myroot_dir = myroot_dir - ""][000000]"" - ""><000000>"""
+$ WRITE CONFIG "$ myroot_dir = myroot_dir - ""]["" - ""><"""
+$ WRITE CONFIG "$ myroot_dir = myroot_dir - "".]"" - "".>"" - ""["" - ""]"" - ""<"" - "">"""
+$ WRITE CONFIG "$ if f$trnlnm(""HP_BUILD_PERL_BIN_KIT"",""LNM$PROCESS_TABLE"") .EQS. """""
+$ WRITE CONFIG "$ then"
+$ WRITE CONFIG "$ define/translation=concealed ''vms_prefix' 'myroot_dev'['myroot_dir'.]"
+$ WRITE CONFIG "$ endif"
+$ endif
+$
$ prefix = prefix - "000000."
$ IF F$LOCATE(".]",prefix) .EQ. F$LENGTH(prefix) THEN prefix = prefix - "]" + ".]"
$ WRITE CONFIG "$ define/translation=concealed ''vms_prefix' ''prefix'"
+
+
$ WRITE CONFIG "$ ext = "".exe"""
$ IF sharedperl
$ THEN
@@ -6556,7 +6958,7 @@ $ WRITE CONFIG "$ instmodsh == """ + perl_setup_perl + " ''vms_prefix':[utils]i
$ WRITE CONFIG "$ libnetcfg == """ + perl_setup_perl + " ''vms_prefix':[utils]libnetcfg.com"""
$ WRITE CONFIG "$ perlbug == """ + perl_setup_perl + " ''vms_prefix':[lib]perlbug.com"""
$ WRITE CONFIG "$!perlcc == """ + perl_setup_perl + " ''vms_prefix':[utils]perlcc.com"""
-$ WRITE CONFIG "$ perldoc == """ + perl_setup_perl + " ''vms_prefix':[lib.pod]perldoc.com -t"""
+$ WRITE CONFIG "$ perldoc == """ + perl_setup_perl + " ''vms_prefix':[lib.pods]perldoc.com -t"""
$ WRITE CONFIG "$ perlivp == """ + perl_setup_perl + " ''vms_prefix':[utils]perlivp.com"""
$ WRITE CONFIG "$ piconv == """ + perl_setup_perl + " ''vms_prefix':[utils]piconv.com"""
$ WRITE CONFIG "$ pl2pm == """ + perl_setup_perl + " ''vms_prefix':[utils]pl2pm.com"""
@@ -6567,6 +6969,7 @@ $ WRITE CONFIG "$!pod2man == """ + perl_setup_perl + " ''vms_prefix':[utils]p
$ WRITE CONFIG "$ pod2usage == """ + perl_setup_perl + " ''vms_prefix':[utils]pod2usage.com"""
$ WRITE CONFIG "$ podchecker == """ + perl_setup_perl + " ''vms_prefix':[utils]podchecker.com"""
$ WRITE CONFIG "$ podselect == """ + perl_setup_perl + " ''vms_prefix':[utils]podselect.com"""
+$ WRITE CONFIG "$ prove == """ + perl_setup_perl + " ''vms_prefix':[utils]prove.com"""
$ WRITE CONFIG "$ psed == """ + perl_setup_perl + " ''vms_prefix':[utils]psed.com"""
$ WRITE CONFIG "$ pstruct == """ + perl_setup_perl + " ''vms_prefix':[utils]pstruct.com"""
$ WRITE CONFIG "$ s2p == """ + perl_setup_perl + " ''vms_prefix':[utils]s2p.com"""
diff --git a/gnu/usr.bin/perl/cygwin/cygwin.c b/gnu/usr.bin/perl/cygwin/cygwin.c
index 0e9d07d35e0..682d0a15102 100644
--- a/gnu/usr.bin/perl/cygwin/cygwin.c
+++ b/gnu/usr.bin/perl/cygwin/cygwin.c
@@ -9,6 +9,7 @@
#include <unistd.h>
#include <process.h>
+#include <sys/cygwin.h>
/*
* pp_system() implemented via spawn()
@@ -117,7 +118,7 @@ do_spawn (char *cmd)
return do_spawnvp("sh",command);
}
- New (1303,PL_Argv,(s-cmd)/2+2,char*);
+ Newx (PL_Argv,(s-cmd)/2+2,char*);
PL_Cmd=savepvn (cmd,s-cmd);
a=PL_Argv;
for (s=PL_Cmd; *s;) {
@@ -146,7 +147,7 @@ XS(Cygwin_cwd)
Perl_croak(aTHX_ "Usage: Cwd::cwd()");
if((cwd = getcwd(NULL, -1))) {
ST(0) = sv_2mortal(newSVpv(cwd, 0));
- safesysfree(cwd);
+ free(cwd);
#ifndef INCOMPLETE_TAINTS
SvTAINTED_on(ST(0));
#endif
@@ -155,6 +156,45 @@ XS(Cygwin_cwd)
XSRETURN_UNDEF;
}
+static
+XS(XS_Cygwin_pid_to_winpid)
+{
+ dXSARGS;
+ dXSTARG;
+ pid_t pid, RETVAL;
+
+ if (items != 1)
+ Perl_croak(aTHX_ "Usage: Cygwin::pid_to_winpid(pid)");
+
+ pid = (pid_t)SvIV(ST(0));
+
+ if ((RETVAL = cygwin_internal(CW_CYGWIN_PID_TO_WINPID, pid)) > 0) {
+ XSprePUSH; PUSHi((IV)RETVAL);
+ XSRETURN(1);
+ }
+ XSRETURN_UNDEF;
+}
+
+static
+XS(XS_Cygwin_winpid_to_pid)
+{
+ dXSARGS;
+ dXSTARG;
+ pid_t pid, RETVAL;
+
+ if (items != 1)
+ Perl_croak(aTHX_ "Usage: Cygwin::winpid_to_pid(pid)");
+
+ pid = (pid_t)SvIV(ST(0));
+
+ if ((RETVAL = cygwin32_winpid_to_pid(pid)) > 0) {
+ XSprePUSH; PUSHi((IV)RETVAL);
+ XSRETURN(1);
+ }
+ XSRETURN_UNDEF;
+}
+
+
void
init_os_extras(void)
{
@@ -162,4 +202,6 @@ init_os_extras(void)
dTHX;
newXS("Cwd::cwd", Cygwin_cwd, file);
+ newXS("Cygwin::winpid_to_pid", XS_Cygwin_winpid_to_pid, file);
+ newXS("Cygwin::pid_to_winpid", XS_Cygwin_pid_to_winpid, file);
}
diff --git a/gnu/usr.bin/perl/djgpp/djgpp.c b/gnu/usr.bin/perl/djgpp/djgpp.c
index d770cefb969..e2260d5ed6d 100644
--- a/gnu/usr.bin/perl/djgpp/djgpp.c
+++ b/gnu/usr.bin/perl/djgpp/djgpp.c
@@ -193,7 +193,7 @@ doshell:
return convretcode (system (cmd),cmd,execf);
}
- New (1303,PL_Argv,(s-cmd)/2+2,char*);
+ Newx (PL_Argv,(s-cmd)/2+2,char*);
PL_Cmd=savepvn (cmd,s-cmd);
a=PL_Argv;
for (s=PL_Cmd; *s;) {
diff --git a/gnu/usr.bin/perl/embed.fnc b/gnu/usr.bin/perl/embed.fnc
index 0f7d0f05a65..edfbc0e011b 100644
--- a/gnu/usr.bin/perl/embed.fnc
+++ b/gnu/usr.bin/perl/embed.fnc
@@ -11,7 +11,7 @@
: d function has documentation with its source
: s static function, should have an S_ prefix in
: source file; for macros (m), suffix the usage
-: example with a semicolon
+: example with a semicolon
: n has no implicit interpreter/thread context argument
: p function has a Perl_ prefix
: f function takes printf style format string, varargs
@@ -24,6 +24,18 @@
: b binary backward compatibility; function is a macro
: but has also Perl_ implementation (which is exported)
: U suppress usage example in autogenerated documentation
+: a allocates memory a la malloc/calloc. Is also "R".
+: R Return value must not be ignored.
+: P pure function: no effects except the return value;
+: return value depends only on parms and/or globals
+: (see also L<perlguts/Internal Functions> for those flags.)
+:
+: 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.
:
: Individual flags may be separated by whitespace.
:
@@ -33,444 +45,443 @@
START_EXTERN_C
#if defined(PERL_IMPLICIT_SYS)
-Ano |PerlInterpreter* |perl_alloc_using \
- |struct IPerlMem* m|struct IPerlMem* ms \
- |struct IPerlMem* mp|struct IPerlEnv* e \
- |struct IPerlStdIO* io|struct IPerlLIO* lio \
- |struct IPerlDir* d|struct IPerlSock* s \
- |struct IPerlProc* p
+Ano |PerlInterpreter*|perl_alloc_using \
+ |NN struct IPerlMem* m|NN struct IPerlMem* ms \
+ |NN struct IPerlMem* mp|NN struct IPerlEnv* e \
+ |NN struct IPerlStdIO* io|NN struct IPerlLIO* lio \
+ |NN struct IPerlDir* d|NN struct IPerlSock* s \
+ |NN struct IPerlProc* p
#endif
Anod |PerlInterpreter* |perl_alloc
-Anod |void |perl_construct |PerlInterpreter* interp
-Anod |int |perl_destruct |PerlInterpreter* interp
-Anod |void |perl_free |PerlInterpreter* interp
-Anod |int |perl_run |PerlInterpreter* interp
-Anod |int |perl_parse |PerlInterpreter* interp|XSINIT_t xsinit \
- |int argc|char** argv|char** env
-Anp |bool |doing_taint |int argc|char** argv|char** env
+Anod |void |perl_construct |NN PerlInterpreter* interp
+Anod |int |perl_destruct |NN PerlInterpreter* interp
+Anod |void |perl_free |NN PerlInterpreter* interp
+Anod |int |perl_run |NN PerlInterpreter* interp
+Anod |int |perl_parse |NN PerlInterpreter* interp|XSINIT_t xsinit \
+ |int argc|NULLOK char** argv|NULLOK char** env
+AnpR |bool |doing_taint |int argc|NULLOK char** argv|NULLOK char** env
#if defined(USE_ITHREADS)
-Anod |PerlInterpreter*|perl_clone|PerlInterpreter* interp|UV flags
+Anod |PerlInterpreter*|perl_clone|NN PerlInterpreter* interp|UV flags
# if defined(PERL_IMPLICIT_SYS)
-Ano |PerlInterpreter*|perl_clone_using|PerlInterpreter *interp|UV flags \
- |struct IPerlMem* m|struct IPerlMem* ms \
- |struct IPerlMem* mp|struct IPerlEnv* e \
- |struct IPerlStdIO* io|struct IPerlLIO* lio \
- |struct IPerlDir* d|struct IPerlSock* s \
- |struct IPerlProc* p
+Ano |PerlInterpreter*|perl_clone_using \
+ |NN PerlInterpreter *interp|UV flags \
+ |NN struct IPerlMem* m|NN struct IPerlMem* ms \
+ |NN struct IPerlMem* mp|NN struct IPerlEnv* e \
+ |NN struct IPerlStdIO* io|NN struct IPerlLIO* lio \
+ |NN struct IPerlDir* d|NN struct IPerlSock* s \
+ |NN struct IPerlProc* p
# endif
#endif
-Anop |Malloc_t|malloc |MEM_SIZE nbytes
-Anop |Malloc_t|calloc |MEM_SIZE elements|MEM_SIZE size
-Anop |Malloc_t|realloc |Malloc_t where|MEM_SIZE nbytes
+Aanop |Malloc_t|malloc |MEM_SIZE nbytes
+Aanop |Malloc_t|calloc |MEM_SIZE elements|MEM_SIZE size
+Aanop |Malloc_t|realloc |Malloc_t where|MEM_SIZE nbytes
Anop |Free_t |mfree |Malloc_t where
#if defined(MYMALLOC)
-np |MEM_SIZE|malloced_size |void *p
+npR |MEM_SIZE|malloced_size |NN void *p
#endif
-Anp |void* |get_context
-Anp |void |set_context |void *thx
+AnpR |void* |get_context
+Anp |void |set_context |NN void *thx
END_EXTERN_C
/* functions with flag 'n' should come before here */
START_EXTERN_C
# include "pp_proto.h"
-Ap |SV* |amagic_call |SV* left|SV* right|int method|int dir
-Ap |bool |Gv_AMupdate |HV* stash
-Ap |CV* |gv_handler |HV* stash|I32 id
-p |OP* |append_elem |I32 optype|OP* head|OP* tail
-p |OP* |append_list |I32 optype|LISTOP* first|LISTOP* last
-p |I32 |apply |I32 type|SV** mark|SV** sp
-ApM |void |apply_attrs_string|char *stashpv|CV *cv|char *attrstr|STRLEN len
-Ap |SV* |avhv_delete_ent|AV *ar|SV* keysv|I32 flags|U32 hash
-Ap |bool |avhv_exists_ent|AV *ar|SV* keysv|U32 hash
-Ap |SV** |avhv_fetch_ent |AV *ar|SV* keysv|I32 lval|U32 hash
-Ap |SV** |avhv_store_ent |AV *ar|SV* keysv|SV* val|U32 hash
-Ap |HE* |avhv_iternext |AV *ar
-Ap |SV* |avhv_iterval |AV *ar|HE* entry
-Ap |HV* |avhv_keys |AV *ar
-Apd |void |av_clear |AV* ar
-Apd |SV* |av_delete |AV* ar|I32 key|I32 flags
-Apd |bool |av_exists |AV* ar|I32 key
-Apd |void |av_extend |AV* ar|I32 key
-p |AV* |av_fake |I32 size|SV** svp
-Apd |SV** |av_fetch |AV* ar|I32 key|I32 lval
-Apd |void |av_fill |AV* ar|I32 fill
-Apd |I32 |av_len |AV* ar
-Apd |AV* |av_make |I32 size|SV** svp
-Apd |SV* |av_pop |AV* ar
-Apd |void |av_push |AV* ar|SV* val
-p |void |av_reify |AV* ar
-Apd |SV* |av_shift |AV* ar
-Apd |SV** |av_store |AV* ar|I32 key|SV* val
-Apd |void |av_undef |AV* ar
-Apd |void |av_unshift |AV* ar|I32 num
-p |OP* |bind_match |I32 type|OP* left|OP* pat
-p |OP* |block_end |I32 floor|OP* seq
-Ap |I32 |block_gimme
-p |int |block_start |int full
+Ap |SV* |amagic_call |NN SV* left|NN SV* right|int method|int dir
+Ap |bool |Gv_AMupdate |NN HV* stash
+ApR |CV* |gv_handler |NULLOK HV* stash|I32 id
+p |OP* |append_elem |I32 optype|NULLOK OP* first|NULLOK OP* last
+p |OP* |append_list |I32 optype|NULLOK LISTOP* first|NULLOK LISTOP* last
+p |I32 |apply |I32 type|NN SV** mark|NN SV** sp
+ApM |void |apply_attrs_string|NN char *stashpv|NN CV *cv|NN char *attrstr|STRLEN len
+Ap |SV* |avhv_delete_ent|NULLOK AV *ar|NN SV* keysv|I32 flags|U32 hash
+Ap |bool |avhv_exists_ent|NULLOK AV *ar|NN SV* keysv|U32 hash
+Ap |SV** |avhv_fetch_ent |NULLOK AV *ar|NN SV* keysv|I32 lval|U32 hash
+Ap |SV** |avhv_store_ent |NULLOK AV *ar|NN SV* keysv|NULLOK SV* val\
+ |U32 hash
+Ap |HE* |avhv_iternext |NULLOK AV *ar
+Ap |SV* |avhv_iterval |NULLOK AV *ar|NN HE* entry
+Ap |HV* |avhv_keys |NULLOK AV *ar
+Apd |void |av_clear |NULLOK AV* ar
+Apd |SV* |av_delete |NULLOK AV* ar|I32 key|I32 flags
+ApdR |bool |av_exists |NULLOK AV* ar|I32 key
+Apd |void |av_extend |NN AV* ar|I32 key
+pR |AV* |av_fake |I32 size|NN SV** svp
+ApdR |SV** |av_fetch |NULLOK AV* ar|I32 key|I32 lval
+Apd |void |av_fill |NN AV* ar|I32 fill
+ApdR |I32 |av_len |NN AV* ar
+ApdR |AV* |av_make |I32 size|NN SV** svp
+Apd |SV* |av_pop |NULLOK AV* ar
+Apd |void |av_push |NULLOK AV* ar|NN SV* val
+p |void |av_reify |NN AV* ar
+ApdR |SV* |av_shift |NULLOK AV* ar
+Apd |SV** |av_store |NULLOK AV* ar|I32 key|NULLOK SV* val
+Apd |void |av_undef |NULLOK AV* ar
+Apd |void |av_unshift |NULLOK AV* ar|I32 num
+pR |OP* |bind_match |I32 type|NN OP* left|NN OP* pat
+pR |OP* |block_end |I32 floor|NULLOK OP* seq
+ApR |I32 |block_gimme
+pR |int |block_start |int full
p |void |boot_core_UNIVERSAL
p |void |boot_core_PerlIO
-Ap |void |call_list |I32 oldscope|AV* av_list
-p |bool |cando |Mode_t mode|Uid_t effective|Stat_t* statbufp
-Ap |U32 |cast_ulong |NV f
-Ap |I32 |cast_i32 |NV f
-Ap |IV |cast_iv |NV f
-Ap |UV |cast_uv |NV f
+Ap |void |call_list |I32 oldscope|NN AV* av_list
+pR |bool |cando |Mode_t mode|Uid_t effective|NN Stat_t* statbufp
+ApR |U32 |cast_ulong |NV f
+ApR |I32 |cast_i32 |NV f
+ApR |IV |cast_iv |NV f
+ApR |UV |cast_uv |NV f
#if !defined(HAS_TRUNCATE) && !defined(HAS_CHSIZE) && defined(F_FREESP)
-Ap |I32 |my_chsize |int fd|Off_t length
+ApR |I32 |my_chsize |int fd|Off_t length
#endif
#if defined(USE_5005THREADS)
-Ap |MAGIC* |condpair_magic |SV *sv
+Ap |MAGIC* |condpair_magic |NN SV *sv
#endif
-p |OP* |convert |I32 optype|I32 flags|OP* o
-Afprd |void |croak |const char* pat|...
-Apr |void |vcroak |const char* pat|va_list* args
+pR |OP* |convert |I32 optype|I32 flags|NULLOK OP* o
+: croak()'s first parm can be NULL. Otherwise, mod_perl breaks.
+Afprd |void |croak |NULLOK const char* pat|...
+Apr |void |vcroak |NN const char* pat|NULLOK va_list* args
#if defined(PERL_IMPLICIT_CONTEXT)
-Afnrp |void |croak_nocontext|const char* pat|...
-Afnp |OP* |die_nocontext |const char* pat|...
-Afnp |void |deb_nocontext |const char* pat|...
-Afnp |char* |form_nocontext |const char* pat|...
-Anp |void |load_module_nocontext|U32 flags|SV* name|SV* ver|...
-Afnp |SV* |mess_nocontext |const char* pat|...
-Afnp |void |warn_nocontext |const char* pat|...
-Afnp |void |warner_nocontext|U32 err|const char* pat|...
-Afnp |SV* |newSVpvf_nocontext|const char* pat|...
-Afnp |void |sv_catpvf_nocontext|SV* sv|const char* pat|...
-Afnp |void |sv_setpvf_nocontext|SV* sv|const char* pat|...
-Afnp |void |sv_catpvf_mg_nocontext|SV* sv|const char* pat|...
-Afnp |void |sv_setpvf_mg_nocontext|SV* sv|const char* pat|...
-Afnp |int |fprintf_nocontext|PerlIO* stream|const char* fmt|...
-Afnp |int |printf_nocontext|const char* fmt|...
-#endif
-p |void |cv_ckproto |CV* cv|GV* gv|char* p
-pd |CV* |cv_clone |CV* proto
-Apd |SV* |cv_const_sv |CV* cv
-p |SV* |op_const_sv |OP* o|CV* cv
-Apd |void |cv_undef |CV* cv
-Ap |void |cx_dump |PERL_CONTEXT* cs
-Ap |SV* |filter_add |filter_t funcp|SV* datasv
-Ap |void |filter_del |filter_t funcp
-Ap |I32 |filter_read |int idx|SV* buffer|int maxlen
-Ap |char** |get_op_descs
-Ap |char** |get_op_names
-p |char* |get_no_modify
-p |U32* |get_opargs
-Ap |PPADDR_t*|get_ppaddr
-Ep |I32 |cxinc
-Afp |void |deb |const char* pat|...
-Ap |void |vdeb |const char* pat|va_list* args
+Afnrp |void |croak_nocontext|NN const char* pat|...
+Afnp |OP* |die_nocontext |NN 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|NN 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* pat|...
+Afnp |void |sv_catpvf_nocontext|NN SV* sv|NN const char* pat|...
+Afnp |void |sv_setpvf_nocontext|NN SV* sv|NN const char* pat|...
+Afnp |void |sv_catpvf_mg_nocontext|NN SV* sv|NN const char* pat|...
+Afnp |void |sv_setpvf_mg_nocontext|NN SV* sv|NN const char* pat|...
+Afnp |int |fprintf_nocontext|NN PerlIO* stream|NN const char* fmt|...
+Afnp |int |printf_nocontext|NN const char* fmt|...
+#endif
+p |void |cv_ckproto |NN CV* cv|NULLOK GV* gv|NULLOK char* p
+pd |CV* |cv_clone |NN CV* proto
+ApdR |SV* |cv_const_sv |NULLOK CV* cv
+pR |SV* |op_const_sv |NULLOK OP* o|NULLOK CV* cv
+Apd |void |cv_undef |NN CV* cv
+Ap |void |cx_dump |NN PERL_CONTEXT* cx
+Ap |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* buffer|int maxlen
+ApPR |char** |get_op_descs
+ApPR |char** |get_op_names
+pPR |char* |get_no_modify
+pPR |U32* |get_opargs
+ApPR |PPADDR_t*|get_ppaddr
+EpR |I32 |cxinc
+Afp |void |deb |NN const char* pat|...
+Ap |void |vdeb |NN const char* pat|NULLOK va_list* args
Ap |void |debprofdump
-Ap |I32 |debop |OP* o
+Ap |I32 |debop |NN OP* o
Ap |I32 |debstack
Ap |I32 |debstackptrs
-Ap |char* |delimcpy |char* to|char* toend|char* from \
- |char* fromend|int delim|I32* retlen
-p |void |deprecate |char* s
-p |void |deprecate_old |char* s
-Afp |OP* |die |const char* pat|...
-p |OP* |vdie |const char* pat|va_list* args
-p |OP* |die_where |char* message|STRLEN msglen
+Ap |char* |delimcpy |NN char* to|NN char* toend|NN char* from \
+ |NN char* fromend|int delim|NN I32* retlen
+p |void |deprecate |NN char* s
+p |void |deprecate_old |NN char* s
+Afp |OP* |die |NULLOK const char* pat|...
+p |OP* |vdie |NULLOK const char* pat|NULLOK va_list* args
+p |OP* |die_where |NULLOK char* message|STRLEN msglen
Ap |void |dounwind |I32 cxix
-p |bool |do_aexec |SV* really|SV** mark|SV** sp
-p |bool |do_aexec5 |SV* really|SV** mark|SV** sp|int fd|int flag
-Ap |int |do_binmode |PerlIO *fp|int iotype|int mode
-p |void |do_chop |SV* asv|SV* sv
-Ap |bool |do_close |GV* gv|bool not_implicit
-p |bool |do_eof |GV* gv
-p |bool |do_exec |char* cmd
+p |bool |do_aexec |NULLOK SV* really|NN SV** mark|NN SV** sp
+p |bool |do_aexec5 |NULLOK SV* really|NN SV** mark|NN SV** sp|int fd|int flag
+Ap |int |do_binmode |NN PerlIO *fp|int iotype|int mode
+p |void |do_chop |NN SV* asv|NN SV* sv
+Ap |bool |do_close |NN GV* gv|bool not_implicit
+p |bool |do_eof |NN GV* gv
+p |bool |do_exec |NN char* cmd
#if defined(WIN32)
-Ap |int |do_aspawn |SV* really|SV** mark|SV** sp
-Ap |int |do_spawn |char* cmd
-Ap |int |do_spawn_nowait|char* cmd
+Ap |int |do_aspawn |NN SV* really|NN SV** mark|NN SV** sp
+Ap |int |do_spawn |NN char* cmd
+Ap |int |do_spawn_nowait|NN char* cmd
#endif
#if !defined(WIN32)
-p |bool |do_exec3 |char* cmd|int fd|int flag
+p |bool |do_exec3 |NN char* cmd|int fd|int flag
#endif
p |void |do_execfree
#if defined(HAS_MSG) || defined(HAS_SEM) || defined(HAS_SHM)
-p |I32 |do_ipcctl |I32 optype|SV** mark|SV** sp
-p |I32 |do_ipcget |I32 optype|SV** mark|SV** sp
-p |I32 |do_msgrcv |SV** mark|SV** sp
-p |I32 |do_msgsnd |SV** mark|SV** sp
-p |I32 |do_semop |SV** mark|SV** sp
-p |I32 |do_shmio |I32 optype|SV** mark|SV** sp
-#endif
-Ap |void |do_join |SV* sv|SV* del|SV** mark|SV** sp
+p |I32 |do_ipcctl |I32 optype|NN SV** mark|NN SV** sp
+p |I32 |do_ipcget |I32 optype|NN SV** mark|NN SV** sp
+p |I32 |do_msgrcv |NN SV** mark|NN SV** sp
+p |I32 |do_msgsnd |NN SV** mark|NN SV** sp
+p |I32 |do_semop |NN SV** mark|NN SV** sp
+p |I32 |do_shmio |I32 optype|NN SV** mark|NN SV** sp
+#endif
+Ap |void |do_join |NN SV* sv|NN SV* del|NN SV** mark|NN SV** sp
p |OP* |do_kv
-Ap |bool |do_open |GV* gv|char* name|I32 len|int as_raw \
- |int rawmode|int rawperm|PerlIO* supplied_fp
-Ap |bool |do_open9 |GV *gv|char *name|I32 len|int as_raw \
- |int rawmode|int rawperm|PerlIO *supplied_fp \
- |SV *svs|I32 num
-Ap |bool |do_openn |GV *gv|char *name|I32 len|int as_raw \
- |int rawmode|int rawperm|PerlIO *supplied_fp \
- |SV **svp|I32 num
-p |void |do_pipe |SV* sv|GV* rgv|GV* wgv
-p |bool |do_print |SV* sv|PerlIO* fp
-p |OP* |do_readline
-p |I32 |do_chomp |SV* sv
-p |bool |do_seek |GV* gv|Off_t pos|int whence
-Ap |void |do_sprintf |SV* sv|I32 len|SV** sarg
-p |Off_t |do_sysseek |GV* gv|Off_t pos|int whence
-p |Off_t |do_tell |GV* gv
-p |I32 |do_trans |SV* sv
-p |UV |do_vecget |SV* sv|I32 offset|I32 size
-p |void |do_vecset |SV* sv
-p |void |do_vop |I32 optype|SV* sv|SV* left|SV* right
-p |OP* |dofile |OP* term
-Ap |I32 |dowantarray
+Ap |bool |do_open |NN GV* gv|NN char* name|I32 len|int as_raw \
+ |int rawmode|int rawperm|NULLOK PerlIO* supplied_fp
+Ap |bool |do_open9 |NN GV *gv|NN char *name|I32 len|int as_raw \
+ |int rawmode|int rawperm|NULLOK PerlIO *supplied_fp \
+ |NN SV *svs|I32 num
+Ap |bool |do_openn |NN GV *gv|NN char *name|I32 len|int as_raw \
+ |int rawmode|int rawperm|NULLOK PerlIO *supplied_fp \
+ |NULLOK SV **svp|I32 num
+p |void |do_pipe |NN SV* sv|NULLOK GV* rgv|NULLOK GV* wgv
+p |bool |do_print |NULLOK SV* sv|NN PerlIO* fp
+pR |OP* |do_readline
+p |I32 |do_chomp |NN SV* sv
+p |bool |do_seek |NULLOK GV* gv|Off_t pos|int whence
+Ap |void |do_sprintf |NN SV* sv|I32 len|NN SV** sarg
+p |Off_t |do_sysseek |NN GV* gv|Off_t pos|int whence
+pR |Off_t |do_tell |NN GV* gv
+p |I32 |do_trans |NN SV* sv
+p |UV |do_vecget |NN SV* sv|I32 offset|I32 size
+p |void |do_vecset |NN SV* sv
+p |void |do_vop |I32 optype|NN SV* sv|NN SV* left|NN SV* right
+p |OP* |dofile |NN OP* term
+ApR |I32 |dowantarray
Ap |void |dump_all
Ap |void |dump_eval
#if defined(DUMP_FDS)
-Ap |void |dump_fds |char* s
-#endif
-Ap |void |dump_form |GV* gv
-Ap |void |gv_dump |GV* gv
-Ap |void |op_dump |OP* arg
-Ap |void |pmop_dump |PMOP* pm
-Ap |void |dump_packsubs |HV* stash
-Ap |void |dump_sub |GV* gv
-Apd |void |fbm_compile |SV* sv|U32 flags
-Apd |char* |fbm_instr |unsigned char* big|unsigned char* bigend \
- |SV* littlesv|U32 flags
-p |char* |find_script |char *scriptname|bool dosearch \
- |char **search_ext|I32 flags
+Ap |void |dump_fds |NN char* s
+#endif
+Ap |void |dump_form |NN GV* gv
+Ap |void |gv_dump |NN GV* gv
+Ap |void |op_dump |NN OP* arg
+Ap |void |pmop_dump |NULLOK PMOP* pm
+Ap |void |dump_packsubs |NN HV* stash
+Ap |void |dump_sub |NN GV* gv
+Apd |void |fbm_compile |NN SV* sv|U32 flags
+ApdR |char* |fbm_instr |NN unsigned char* big|NN unsigned char* bigend \
+ |NN SV* littlesv|U32 flags
+p |char* |find_script |NN char *scriptname|bool dosearch \
+ |NULLOK char **search_ext|I32 flags
#if defined(USE_5005THREADS)
-p |PADOFFSET|find_threadsv|const char *name
+p |PADOFFSET|find_threadsv|NN const char *name
#endif
-p |OP* |force_list |OP* arg
-p |OP* |fold_constants |OP* arg
-Afpd |char* |form |const char* pat|...
-Ap |char* |vform |const char* pat|va_list* args
+p |OP* |force_list |NULLOK OP* arg
+p |OP* |fold_constants |NN OP* arg
+Afpd |char* |form |NN const char* pat|...
+Ap |char* |vform |NN const char* pat|NULLOK va_list* args
Ap |void |free_tmps
-p |OP* |gen_constant_list|OP* o
+p |OP* |gen_constant_list|NULLOK OP* o
#if !defined(HAS_GETENV_LEN)
-p |char* |getenv_len |const char* key|unsigned long *len
-#endif
-Ap |void |gp_free |GV* gv
-Ap |GP* |gp_ref |GP* gp
-Ap |GV* |gv_AVadd |GV* gv
-Ap |GV* |gv_HVadd |GV* gv
-Ap |GV* |gv_IOadd |GV* gv
-Ap |GV* |gv_autoload4 |HV* stash|const char* name|STRLEN len \
- |I32 method
-Ap |void |gv_check |HV* stash
-Ap |void |gv_efullname |SV* sv|GV* gv
-Ap |void |gv_efullname3 |SV* sv|GV* gv|const char* prefix
-Ap |void |gv_efullname4 |SV* sv|GV* gv|const char* prefix|bool keepmain
-Ap |GV* |gv_fetchfile |const char* name
-Apd |GV* |gv_fetchmeth |HV* stash|const char* name|STRLEN len \
- |I32 level
-Apd |GV* |gv_fetchmeth_autoload |HV* stash|const char* name|STRLEN len \
- |I32 level
-Apd |GV* |gv_fetchmethod |HV* stash|const char* name
-Apd |GV* |gv_fetchmethod_autoload|HV* stash|const char* name \
- |I32 autoload
-Ap |GV* |gv_fetchpv |const char* name|I32 add|I32 sv_type
-Ap |void |gv_fullname |SV* sv|GV* gv
-Ap |void |gv_fullname3 |SV* sv|GV* gv|const char* prefix
-Ap |void |gv_fullname4 |SV* sv|GV* gv|const char* prefix|bool keepmain
-Ap |void |gv_init |GV* gv|HV* stash|const char* name \
- |STRLEN len|int multi
-Apd |HV* |gv_stashpv |const char* name|I32 create
-Ap |HV* |gv_stashpvn |const char* name|U32 namelen|I32 create
-Apd |HV* |gv_stashsv |SV* sv|I32 create
-Apd |void |hv_clear |HV* tb
-Ap |void |hv_delayfree_ent|HV* hv|HE* entry
-Apd |SV* |hv_delete |HV* tb|const char* key|I32 klen|I32 flags
-Apd |SV* |hv_delete_ent |HV* tb|SV* key|I32 flags|U32 hash
-Apd |bool |hv_exists |HV* tb|const char* key|I32 klen
-Apd |bool |hv_exists_ent |HV* tb|SV* key|U32 hash
-Apd |SV** |hv_fetch |HV* tb|const char* key|I32 klen|I32 lval
-Apd |HE* |hv_fetch_ent |HV* tb|SV* key|I32 lval|U32 hash
-Ap |void |hv_free_ent |HV* hv|HE* entry
-Apd |I32 |hv_iterinit |HV* tb
-Apd |char* |hv_iterkey |HE* entry|I32* retlen
-Apd |SV* |hv_iterkeysv |HE* entry
-Apd |HE* |hv_iternext |HV* tb
-Apd |SV* |hv_iternextsv |HV* hv|char** key|I32* retlen
-ApMd |HE* |hv_iternext_flags|HV* tb|I32 flags
-Apd |SV* |hv_iterval |HV* tb|HE* entry
-Ap |void |hv_ksplit |HV* hv|IV newmax
-Apd |void |hv_magic |HV* hv|GV* gv|int how
-Apd |SV** |hv_store |HV* tb|const char* key|I32 klen|SV* val \
+p |char* |getenv_len |NN const char* key|NN unsigned long *len
+#endif
+Ap |void |gp_free |NULLOK GV* gv
+Ap |GP* |gp_ref |NULLOK GP* gp
+Ap |GV* |gv_AVadd |NN GV* gv
+Ap |GV* |gv_HVadd |NN GV* gv
+Ap |GV* |gv_IOadd |NN GV* gv
+ApR |GV* |gv_autoload4 |NULLOK HV* stash|NN const char* name|STRLEN len|I32 method
+Ap |void |gv_check |NN HV* stash
+Ap |void |gv_efullname |NN SV* sv|NN GV* gv
+Apmb |void |gv_efullname3 |NN SV* sv|NN GV* gv|NULLOK const char* prefix
+Ap |void |gv_efullname4 |NN SV* sv|NN GV* gv|NULLOK const char* prefix|bool keepmain
+Ap |GV* |gv_fetchfile |NN const char* name
+Apd |GV* |gv_fetchmeth |NULLOK HV* stash|NN const char* name|STRLEN len|I32 level
+Apd |GV* |gv_fetchmeth_autoload |NULLOK HV* stash|NN const char* name|STRLEN len|I32 level
+Apd |GV* |gv_fetchmethod |NULLOK HV* stash|NN const char* name
+Apd |GV* |gv_fetchmethod_autoload|NULLOK HV* stash|NN const char* name|I32 autoload
+Ap |GV* |gv_fetchpv |NN const char* name|I32 add|I32 sv_type
+Ap |void |gv_fullname |NN SV* sv|NN GV* gv
+Apmb |void |gv_fullname3 |NN SV* sv|NN GV* gv|NULLOK const char* prefix
+Ap |void |gv_fullname4 |NN SV* sv|NN GV* gv|NULLOK const char* prefix|bool keepmain
+Ap |void |gv_init |NN GV* gv|NULLOK HV* stash|NN const char* name|STRLEN len|int multi
+Apd |HV* |gv_stashpv |NN const char* name|I32 create
+Apd |HV* |gv_stashpvn |NN const char* name|U32 namelen|I32 create
+Apd |HV* |gv_stashsv |NULLOK SV* sv|I32 create
+Apd |void |hv_clear |NULLOK HV* tb
+Ap |void |hv_delayfree_ent|NN HV* hv|NULLOK HE* entry
+Apd |SV* |hv_delete |NULLOK HV* tb|NN const char* key|I32 klen|I32 flags
+Apd |SV* |hv_delete_ent |NULLOK HV* tb|NN SV* key|I32 flags|U32 hash
+ApdR |bool |hv_exists |NULLOK HV* tb|NN const char* key|I32 klen
+ApdR |bool |hv_exists_ent |NULLOK HV* tb|NN SV* key|U32 hash
+Apd |SV** |hv_fetch |NULLOK HV* tb|NN const char* key|I32 klen|I32 lval
+Apd |HE* |hv_fetch_ent |NULLOK HV* tb|NN SV* key|I32 lval|U32 hash
+Ap |void |hv_free_ent |NN HV* hv|NULLOK HE* entryK
+Apd |I32 |hv_iterinit |NN HV* tb
+ApdR |char* |hv_iterkey |NN HE* entry|NN I32* retlen
+ApdR |SV* |hv_iterkeysv |NN HE* entry
+ApdR |HE* |hv_iternext |NN HV* tb
+ApdR |SV* |hv_iternextsv |NN HV* hv|NN char** key|NN I32* retlen
+ApMdR |HE* |hv_iternext_flags|NN HV* tb|I32 flags
+ApdR |SV* |hv_iterval |NN HV* tb|NN HE* entry
+Ap |void |hv_ksplit |NN HV* hv|IV newmax
+Apd |void |hv_magic |NN HV* hv|NULLOK GV* gv|int how
+Apd |SV** |hv_store |NULLOK HV* tb|NULLOK const char* key|I32 klen|NULLOK SV* val \
|U32 hash
-Apd |HE* |hv_store_ent |HV* tb|SV* key|SV* val|U32 hash
-ApM |SV** |hv_store_flags |HV* tb|const char* key|I32 klen|SV* val \
+Apd |HE* |hv_store_ent |NULLOK HV* tb|NULLOK SV* key|NULLOK SV* val|U32 hash
+ApM |SV** |hv_store_flags |NULLOK HV* tb|NULLOK const char* key|I32 klen|NULLOK SV* val \
|U32 hash|int flags
-Apd |void |hv_undef |HV* tb
-Ap |I32 |ibcmp |const char* a|const char* b|I32 len
-Ap |I32 |ibcmp_locale |const char* a|const char* b|I32 len
-Apd |I32 |ibcmp_utf8 |const char* a|char **pe1|UV l1|bool u1|const char* b|char **pe2|UV l2|bool u2
-p |bool |ingroup |Gid_t testgid|Uid_t effective
-p |void |init_argv_symbols|int|char **
+Apd |void |hv_undef |NULLOK HV* tb
+ApP |I32 |ibcmp |NN const char* a|NN const char* b|I32 len
+ApP |I32 |ibcmp_locale |NN const char* a|NN const char* b|I32 len
+Apd |I32 |ibcmp_utf8 |NN const char* a|NULLOK char **pe1|UV l1|bool u1 \
+ |NN const char* b|NULLOK char **pe2|UV l2|bool u2
+pR |bool |ingroup |Gid_t testgid|Uid_t effective
+p |void |init_argv_symbols|int argc|NN char **argv
p |void |init_debugger
Ap |void |init_stacks
-Ap |void |init_tm |struct tm *ptm
+Ap |void |init_tm |NN struct tm *ptm
pd |U32 |intro_my
-Ap |char* |instr |const char* big|const char* little
-p |bool |io_close |IO* io|bool not_implicit
-p |OP* |invert |OP* cmd
-dp |bool |is_gv_magical |char *name|STRLEN len|U32 flags
-Ap |I32 |is_lvalue_sub
-Ap |U32 |to_uni_upper_lc|U32 c
-Ap |U32 |to_uni_title_lc|U32 c
-Ap |U32 |to_uni_lower_lc|U32 c
-Ap |bool |is_uni_alnum |UV c
-Ap |bool |is_uni_alnumc |UV c
-Ap |bool |is_uni_idfirst |UV c
-Ap |bool |is_uni_alpha |UV c
-Ap |bool |is_uni_ascii |UV c
-Ap |bool |is_uni_space |UV c
-Ap |bool |is_uni_cntrl |UV c
-Ap |bool |is_uni_graph |UV c
-Ap |bool |is_uni_digit |UV c
-Ap |bool |is_uni_upper |UV c
-Ap |bool |is_uni_lower |UV c
-Ap |bool |is_uni_print |UV c
-Ap |bool |is_uni_punct |UV c
-Ap |bool |is_uni_xdigit |UV c
-Ap |UV |to_uni_upper |UV c|U8 *p|STRLEN *lenp
-Ap |UV |to_uni_title |UV c|U8 *p|STRLEN *lenp
-Ap |UV |to_uni_lower |UV c|U8 *p|STRLEN *lenp
-Ap |UV |to_uni_fold |UV c|U8 *p|STRLEN *lenp
-Ap |bool |is_uni_alnum_lc|UV c
-Ap |bool |is_uni_alnumc_lc|UV c
-Ap |bool |is_uni_idfirst_lc|UV c
-Ap |bool |is_uni_alpha_lc|UV c
-Ap |bool |is_uni_ascii_lc|UV c
-Ap |bool |is_uni_space_lc|UV c
-Ap |bool |is_uni_cntrl_lc|UV c
-Ap |bool |is_uni_graph_lc|UV c
-Ap |bool |is_uni_digit_lc|UV c
-Ap |bool |is_uni_upper_lc|UV c
-Ap |bool |is_uni_lower_lc|UV c
-Ap |bool |is_uni_print_lc|UV c
-Ap |bool |is_uni_punct_lc|UV c
-Ap |bool |is_uni_xdigit_lc|UV c
-Apd |STRLEN |is_utf8_char |U8 *p
-Apd |bool |is_utf8_string |U8 *s|STRLEN len
-Apd |bool |is_utf8_string_loc|U8 *s|STRLEN len|U8 **p
-Ap |bool |is_utf8_alnum |U8 *p
-Ap |bool |is_utf8_alnumc |U8 *p
-Ap |bool |is_utf8_idfirst|U8 *p
-Ap |bool |is_utf8_idcont |U8 *p
-Ap |bool |is_utf8_alpha |U8 *p
-Ap |bool |is_utf8_ascii |U8 *p
-Ap |bool |is_utf8_space |U8 *p
-Ap |bool |is_utf8_cntrl |U8 *p
-Ap |bool |is_utf8_digit |U8 *p
-Ap |bool |is_utf8_graph |U8 *p
-Ap |bool |is_utf8_upper |U8 *p
-Ap |bool |is_utf8_lower |U8 *p
-Ap |bool |is_utf8_print |U8 *p
-Ap |bool |is_utf8_punct |U8 *p
-Ap |bool |is_utf8_xdigit |U8 *p
-Ap |bool |is_utf8_mark |U8 *p
-p |OP* |jmaybe |OP* arg
-p |I32 |keyword |char* d|I32 len
+ApPR |char* |instr |NN const char* big|NN const char* little
+pR |bool |io_close |NN IO* io|bool not_implicit
+pR |OP* |invert |NULLOK OP* cmd
+dpR |bool |is_gv_magical |NN char *name|STRLEN len|U32 flags
+ApR |I32 |is_lvalue_sub
+ApPR |U32 |to_uni_upper_lc|U32 c
+ApPR |U32 |to_uni_title_lc|U32 c
+ApPR |U32 |to_uni_lower_lc|U32 c
+ApPR |bool |is_uni_alnum |UV c
+ApPR |bool |is_uni_alnumc |UV c
+ApPR |bool |is_uni_idfirst |UV c
+ApPR |bool |is_uni_alpha |UV c
+ApPR |bool |is_uni_ascii |UV c
+ApPR |bool |is_uni_space |UV c
+ApPR |bool |is_uni_cntrl |UV c
+ApPR |bool |is_uni_graph |UV c
+ApPR |bool |is_uni_digit |UV c
+ApPR |bool |is_uni_upper |UV c
+ApPR |bool |is_uni_lower |UV c
+ApPR |bool |is_uni_print |UV c
+ApPR |bool |is_uni_punct |UV c
+ApPR |bool |is_uni_xdigit |UV c
+Ap |UV |to_uni_upper |UV c|NN U8 *p|NN STRLEN *lenp
+Ap |UV |to_uni_title |UV c|NN U8 *p|NN STRLEN *lenp
+Ap |UV |to_uni_lower |UV c|NN U8 *p|NN STRLEN *lenp
+Ap |UV |to_uni_fold |UV c|NN U8 *p|NN STRLEN *lenp
+ApPR |bool |is_uni_alnum_lc|UV c
+ApPR |bool |is_uni_alnumc_lc|UV c
+ApPR |bool |is_uni_idfirst_lc|UV c
+ApPR |bool |is_uni_alpha_lc|UV c
+ApPR |bool |is_uni_ascii_lc|UV c
+ApPR |bool |is_uni_space_lc|UV c
+ApPR |bool |is_uni_cntrl_lc|UV c
+ApPR |bool |is_uni_graph_lc|UV c
+ApPR |bool |is_uni_digit_lc|UV c
+ApPR |bool |is_uni_upper_lc|UV c
+ApPR |bool |is_uni_lower_lc|UV c
+ApPR |bool |is_uni_print_lc|UV c
+ApPR |bool |is_uni_punct_lc|UV c
+ApPR |bool |is_uni_xdigit_lc|UV c
+Apd |STRLEN |is_utf8_char |NN U8 *p
+Apd |bool |is_utf8_string_loc|NN U8 *s|STRLEN len|NULLOK U8 **p
+Apd |bool |is_utf8_string |NN U8 *s|STRLEN len
+ApR |bool |is_utf8_alnum |NN U8 *p
+ApR |bool |is_utf8_alnumc |NN U8 *p
+ApR |bool |is_utf8_idfirst|NN U8 *p
+ApR |bool |is_utf8_idcont |NN U8 *p
+ApR |bool |is_utf8_alpha |NN U8 *p
+ApR |bool |is_utf8_ascii |NN U8 *p
+ApR |bool |is_utf8_space |NN U8 *p
+ApR |bool |is_utf8_cntrl |NN U8 *p
+ApR |bool |is_utf8_digit |NN U8 *p
+ApR |bool |is_utf8_graph |NN U8 *p
+ApR |bool |is_utf8_upper |NN U8 *p
+ApR |bool |is_utf8_lower |NN U8 *p
+ApR |bool |is_utf8_print |NN U8 *p
+ApR |bool |is_utf8_punct |NN U8 *p
+ApR |bool |is_utf8_xdigit |NN U8 *p
+ApR |bool |is_utf8_mark |NN U8 *p
+p |OP* |jmaybe |NN OP* arg
+pP |I32 |keyword |NN char* d|I32 len
Ap |void |leave_scope |I32 base
p |void |lex_end
-p |void |lex_start |SV* line
-Ap |void |op_null |OP* o
-p |void |op_clear |OP* o
-p |OP* |linklist |OP* o
-p |OP* |list |OP* o
-p |OP* |listkids |OP* o
-Apd |void |load_module|U32 flags|SV* name|SV* ver|...
-Ap |void |vload_module|U32 flags|SV* name|SV* ver|va_list* args
-p |OP* |localize |OP* arg|I32 lexical
-Apd |I32 |looks_like_number|SV* sv
-Apd |UV |grok_bin |char* start|STRLEN* len|I32* flags|NV *result
-Apd |UV |grok_hex |char* start|STRLEN* len|I32* flags|NV *result
-Apd |int |grok_number |const char *pv|STRLEN len|UV *valuep
-Apd |bool |grok_numeric_radix|const char **sp|const char *send
-Apd |UV |grok_oct |char* start|STRLEN* len|I32* flags|NV *result
-p |int |magic_clearenv |SV* sv|MAGIC* mg
-p |int |magic_clear_all_env|SV* sv|MAGIC* mg
-p |int |magic_clearpack|SV* sv|MAGIC* mg
-p |int |magic_clearsig |SV* sv|MAGIC* mg
-p |int |magic_existspack|SV* sv|MAGIC* mg
-p |int |magic_freeregexp|SV* sv|MAGIC* mg
-p |int |magic_freeovrld|SV* sv|MAGIC* mg
-p |int |magic_get |SV* sv|MAGIC* mg
-p |int |magic_getarylen|SV* sv|MAGIC* mg
-p |int |magic_getdefelem|SV* sv|MAGIC* mg
-p |int |magic_getglob |SV* sv|MAGIC* mg
-p |int |magic_getnkeys |SV* sv|MAGIC* mg
-p |int |magic_getpack |SV* sv|MAGIC* mg
-p |int |magic_getpos |SV* sv|MAGIC* mg
-p |int |magic_getsig |SV* sv|MAGIC* mg
-p |int |magic_getsubstr|SV* sv|MAGIC* mg
-p |int |magic_gettaint |SV* sv|MAGIC* mg
-p |int |magic_getuvar |SV* sv|MAGIC* mg
-p |int |magic_getvec |SV* sv|MAGIC* mg
-p |U32 |magic_len |SV* sv|MAGIC* mg
+p |void |lex_start |NN SV* line
+Ap |void |op_null |NN OP* o
+p |void |op_clear |NN OP* o
+p |OP* |linklist |NN OP* o
+p |OP* |list |NULLOK OP* o
+p |OP* |listkids |NULLOK OP* o
+Apd |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
+p |OP* |localize |NN OP* arg|I32 lexical
+ApdR |I32 |looks_like_number|NN SV* sv
+Apd |UV |grok_bin |NN char* start|NN STRLEN* len|NN I32* flags|NULLOK NV *result
+Apd |UV |grok_hex |NN char* start|NN STRLEN* len|NN I32* flags|NULLOK NV *result
+Apd |int |grok_number |NN const char *pv|STRLEN len|NULLOK UV *valuep
+ApdR |bool |grok_numeric_radix|NN const char **sp|NN const char *send
+Apd |UV |grok_oct |NN char* start|NN STRLEN* len_p|NN I32* flags|NULLOK NV *result
+p |int |magic_clearenv |NN SV* sv|NN MAGIC* mg
+p |int |magic_clear_all_env|NN SV* sv|NN MAGIC* mg
+p |int |magic_clearpack|NN SV* sv|NN MAGIC* mg
+p |int |magic_clearsig |NN SV* sv|NN MAGIC* mg
+p |int |magic_existspack|NN SV* sv|NN MAGIC* mg
+p |int |magic_freeregexp|NN SV* sv|NN MAGIC* mg
+p |int |magic_freeovrld|NN SV* sv|NN MAGIC* mg
+p |int |magic_get |NN SV* sv|NN MAGIC* mg
+p |int |magic_getarylen|NN SV* sv|NN MAGIC* mg
+p |int |magic_getdefelem|NN SV* sv|NN MAGIC* mg
+p |int |magic_getglob |NN SV* sv|NN MAGIC* mg
+p |int |magic_getnkeys |NN SV* sv|NN MAGIC* mg
+p |int |magic_getpack |NN SV* sv|NN MAGIC* mg
+p |int |magic_getpos |NN SV* sv|NN MAGIC* mg
+p |int |magic_getsig |NN SV* sv|NN MAGIC* mg
+p |int |magic_getsubstr|NN SV* sv|NN MAGIC* mg
+p |int |magic_gettaint |NN SV* sv|NN MAGIC* mg
+p |int |magic_getuvar |NN SV* sv|NN MAGIC* mg
+p |int |magic_getvec |NN SV* sv|NN MAGIC* mg
+p |U32 |magic_len |NN SV* sv|NN MAGIC* mg
#if defined(USE_5005THREADS)
-p |int |magic_mutexfree|SV* sv|MAGIC* mg
-#endif
-p |int |magic_nextpack |SV* sv|MAGIC* mg|SV* key
-p |U32 |magic_regdata_cnt|SV* sv|MAGIC* mg
-p |int |magic_regdatum_get|SV* sv|MAGIC* mg
-p |int |magic_regdatum_set|SV* sv|MAGIC* mg
-p |int |magic_set |SV* sv|MAGIC* mg
-p |int |magic_setamagic|SV* sv|MAGIC* mg
-p |int |magic_setarylen|SV* sv|MAGIC* mg
-p |int |magic_setbm |SV* sv|MAGIC* mg
-p |int |magic_setdbline|SV* sv|MAGIC* mg
+p |int |magic_mutexfree|NULLOK SV* sv|NN MAGIC* mg
+#endif
+p |int |magic_nextpack |NN SV* sv|NN MAGIC* mg|NN SV* key
+p |U32 |magic_regdata_cnt|NN SV* sv|NN MAGIC* mg
+p |int |magic_regdatum_get|NN SV* sv|NN MAGIC* mg
+pr |int |magic_regdatum_set|NN SV* sv|NN MAGIC* mg
+p |int |magic_set |NN SV* sv|NN MAGIC* mg
+p |int |magic_setamagic|NN SV* sv|NN MAGIC* mg
+p |int |magic_setarylen|NN SV* sv|NN MAGIC* mg
+p |int |magic_setbm |NN SV* sv|NN MAGIC* mg
+p |int |magic_setdbline|NN SV* sv|NN MAGIC* mg
#if defined(USE_LOCALE_COLLATE)
-p |int |magic_setcollxfrm|SV* sv|MAGIC* mg
-#endif
-p |int |magic_setdefelem|SV* sv|MAGIC* mg
-p |int |magic_setenv |SV* sv|MAGIC* mg
-p |int |magic_setfm |SV* sv|MAGIC* mg
-p |int |magic_setisa |SV* sv|MAGIC* mg
-p |int |magic_setglob |SV* sv|MAGIC* mg
-p |int |magic_setmglob |SV* sv|MAGIC* mg
-p |int |magic_setnkeys |SV* sv|MAGIC* mg
-p |int |magic_setpack |SV* sv|MAGIC* mg
-p |int |magic_setpos |SV* sv|MAGIC* mg
-p |int |magic_setregexp|SV* sv|MAGIC* mg
-p |int |magic_setsig |SV* sv|MAGIC* mg
-p |int |magic_setsubstr|SV* sv|MAGIC* mg
-p |int |magic_settaint |SV* sv|MAGIC* mg
-p |int |magic_setuvar |SV* sv|MAGIC* mg
-p |int |magic_setvec |SV* sv|MAGIC* mg
-p |int |magic_setutf8 |SV* sv|MAGIC* mg
-p |int |magic_set_all_env|SV* sv|MAGIC* mg
-p |U32 |magic_sizepack |SV* sv|MAGIC* mg
-p |int |magic_wipepack |SV* sv|MAGIC* mg
-p |void |magicname |char* sym|char* name|I32 namlen
+p |int |magic_setcollxfrm|NN SV* sv|NN MAGIC* mg
+#endif
+p |int |magic_setdefelem|NN SV* sv|NN MAGIC* mg
+p |int |magic_setenv |NN SV* sv|NN MAGIC* mg
+p |int |magic_setfm |NN SV* sv|NN MAGIC* mg
+p |int |magic_setisa |NN SV* sv|NN MAGIC* mg
+p |int |magic_setglob |NN SV* sv|NN MAGIC* mg
+p |int |magic_setmglob |NN SV* sv|NN MAGIC* mg
+p |int |magic_setnkeys |NN SV* sv|NN MAGIC* mg
+p |int |magic_setpack |NN SV* sv|NN MAGIC* mg
+p |int |magic_setpos |NN SV* sv|NN MAGIC* mg
+p |int |magic_setregexp|NN SV* sv|NN MAGIC* mg
+p |int |magic_setsig |NN SV* sv|NN MAGIC* mg
+p |int |magic_setsubstr|NN SV* sv|NN MAGIC* mg
+p |int |magic_settaint |NN SV* sv|NN MAGIC* mg
+p |int |magic_setuvar |NN SV* sv|NN MAGIC* mg
+p |int |magic_setvec |NN SV* sv|NN MAGIC* mg
+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
+p |void |magicname |NN char* sym|NULLOK char* name|I32 namlen
Ap |void |markstack_grow
#if defined(USE_LOCALE_COLLATE)
-p |char* |mem_collxfrm |const char* s|STRLEN len|STRLEN* xlen
-#endif
-Afp |SV* |mess |const char* pat|...
-Ap |SV* |vmess |const char* pat|va_list* args
-p |void |qerror |SV* err
-Apd |void |sortsv |SV ** array|size_t num_elts|SVCOMPARE_t cmp
-Apd |int |mg_clear |SV* sv
-Apd |int |mg_copy |SV* sv|SV* nsv|const char* key|I32 klen
-Apd |MAGIC* |mg_find |SV* sv|int type
-Apd |int |mg_free |SV* sv
-Apd |int |mg_get |SV* sv
-Apd |U32 |mg_length |SV* sv
-Apd |void |mg_magical |SV* sv
-Apd |int |mg_set |SV* sv
-Ap |I32 |mg_size |SV* sv
-Ap |void |mini_mktime |struct tm *pm
-p |OP* |mod |OP* o|I32 type
-p |int |mode_from_discipline|SV* discp
-Ap |char* |moreswitches |char* s
-p |OP* |my |OP* o
-Ap |NV |my_atof |const char *s
+p |char* |mem_collxfrm |NN const char* s|STRLEN len|NN STRLEN* xlen
+#endif
+Afp |SV* |mess |NN const char* pat|...
+Ap |SV* |vmess |NN const char* pat|NULLOK va_list* args
+p |void |qerror |NN SV* err
+Apd |void |sortsv |NN SV** array|size_t num_elts|SVCOMPARE_t cmp
+Apd |int |mg_clear |NN SV* sv
+Apd |int |mg_copy |NN SV* sv|NN SV* nsv|NULLOK const char* key|I32 klen
+ApdR |MAGIC* |mg_find |NULLOK SV* sv|int type
+Apd |int |mg_free |NN SV* sv
+Apd |int |mg_get |NN SV* sv
+Apd |U32 |mg_length |NN SV* sv
+Apd |void |mg_magical |NN SV* sv
+Apd |int |mg_set |NN SV* sv
+Ap |I32 |mg_size |NN SV* sv
+Ap |void |mini_mktime |NN struct tm *pm
+p |OP* |mod |NULLOK OP* o|I32 type
+p |int |mode_from_discipline|NULLOK SV* discp
+Ap |char* |moreswitches |NN char* s
+p |OP* |my |NN OP* o
+Ap |NV |my_atof |NN const char *s
#if (!defined(HAS_MEMCPY) && !defined(HAS_BCOPY)) || (!defined(HAS_MEMMOVE) && !defined(HAS_SAFE_MEMCPY) && !defined(HAS_SAFE_BCOPY))
-Anp |char* |my_bcopy |const char* from|char* to|I32 len
+Anp |char* |my_bcopy |NN const char* from|NN char* to|I32 len
#endif
#if !defined(HAS_BZERO) && !defined(HAS_MEMSET)
-Anp |char* |my_bzero |char* loc|I32 len
+Anp |char* |my_bzero |NN char* loc|I32 len
#endif
Apr |void |my_exit |U32 status
Apr |void |my_failure_exit
@@ -480,407 +491,412 @@ Anp |void |atfork_lock
Anp |void |atfork_unlock
Ap |I32 |my_lstat
#if !defined(HAS_MEMCMP) || !defined(HAS_SANE_MEMCMP)
-Anp |I32 |my_memcmp |const char* s1|const char* s2|I32 len
+AnpP |I32 |my_memcmp |NN const char* s1|NN const char* s2|I32 len
#endif
#if !defined(HAS_MEMSET)
-Anp |void* |my_memset |char* loc|I32 ch|I32 len
+Anp |void* |my_memset |NN char* loc|I32 ch|I32 len
#endif
-Ap |I32 |my_pclose |PerlIO* ptr
-Ap |PerlIO*|my_popen |char* cmd|char* mode
-Ap |PerlIO*|my_popen_list |char* mode|int n|SV ** args
-Ap |void |my_setenv |char* nam|char* val
+Ap |I32 |my_pclose |NULLOK PerlIO* ptr
+Ap |PerlIO*|my_popen |NN char* cmd|NN char* mode
+Ap |PerlIO*|my_popen_list |NN char* mode|int n|NN SV ** args
+Ap |void |my_setenv |NULLOK char* nam|NULLOK char* val
Ap |I32 |my_stat
-Ap |char * |my_strftime |char *fmt|int sec|int min|int hour|int mday|int mon|int year|int wday|int yday|int isdst
+Ap |char * |my_strftime |NN char *fmt|int sec|int min|int hour|int mday|int mon|int year|int wday|int yday|int isdst
#if defined(MYSWAP)
-Ap |short |my_swap |short s
-Ap |long |my_htonl |long l
-Ap |long |my_ntohl |long l
+ApPa |short |my_swap |short s
+ApPa |long |my_htonl |long l
+ApPa |long |my_ntohl |long l
#endif
p |void |my_unexec
-Ap |OP* |newANONLIST |OP* o
-Ap |OP* |newANONHASH |OP* o
-Ap |OP* |newANONSUB |I32 floor|OP* proto|OP* block
-Ap |OP* |newASSIGNOP |I32 flags|OP* left|I32 optype|OP* right
-Ap |OP* |newCONDOP |I32 flags|OP* expr|OP* trueop|OP* falseop
-Apd |CV* |newCONSTSUB |HV* stash|char* name|SV* sv
-Ap |void |newFORM |I32 floor|OP* o|OP* block
-Ap |OP* |newFOROP |I32 flags|char* label|line_t forline \
- |OP* sclr|OP* expr|OP*block|OP*cont
-Ap |OP* |newLOGOP |I32 optype|I32 flags|OP* left|OP* right
-Ap |OP* |newLOOPEX |I32 type|OP* label
-Ap |OP* |newLOOPOP |I32 flags|I32 debuggable|OP* expr|OP* block
-Ap |OP* |newNULLLIST
-Ap |OP* |newOP |I32 optype|I32 flags
-Ap |void |newPROG |OP* o
-Ap |OP* |newRANGE |I32 flags|OP* left|OP* right
-Ap |OP* |newSLICEOP |I32 flags|OP* subscript|OP* listop
-Ap |OP* |newSTATEOP |I32 flags|char* label|OP* o
-Ap |CV* |newSUB |I32 floor|OP* o|OP* proto|OP* block
-Apd |CV* |newXS |char* name|XSUBADDR_t f|char* filename
-Apd |AV* |newAV
-Ap |OP* |newAVREF |OP* o
-Ap |OP* |newBINOP |I32 type|I32 flags|OP* first|OP* last
-Ap |OP* |newCVREF |I32 flags|OP* o
-Ap |OP* |newGVOP |I32 type|I32 flags|GV* gv
-Ap |GV* |newGVgen |char* pack
-Ap |OP* |newGVREF |I32 type|OP* o
-Ap |OP* |newHVREF |OP* o
-Apd |HV* |newHV
-Ap |HV* |newHVhv |HV* hv
-Ap |IO* |newIO
-Ap |OP* |newLISTOP |I32 type|I32 flags|OP* first|OP* last
-Ap |OP* |newPADOP |I32 type|I32 flags|SV* sv
-Ap |OP* |newPMOP |I32 type|I32 flags
-Ap |OP* |newPVOP |I32 type|I32 flags|char* pv
-Ap |SV* |newRV |SV* pref
-Apd |SV* |newRV_noinc |SV *sv
-Apd |SV* |newSV |STRLEN len
-Ap |OP* |newSVREF |OP* o
-Ap |OP* |newSVOP |I32 type|I32 flags|SV* sv
-Apd |SV* |newSViv |IV i
-Apd |SV* |newSVuv |UV u
-Apd |SV* |newSVnv |NV n
-Apd |SV* |newSVpv |const char* s|STRLEN len
-Apd |SV* |newSVpvn |const char* s|STRLEN len
-Apd |SV* |newSVpvn_share |const char* s|I32 len|U32 hash
-Afpd |SV* |newSVpvf |const char* pat|...
-Ap |SV* |vnewSVpvf |const char* pat|va_list* args
-Apd |SV* |newSVrv |SV* rv|const char* classname
-Apd |SV* |newSVsv |SV* old
-Ap |OP* |newUNOP |I32 type|I32 flags|OP* first
-Ap |OP* |newWHILEOP |I32 flags|I32 debuggable|LOOP* loop \
- |I32 whileline|OP* expr|OP* block|OP* cont
-
-Ap |PERL_SI*|new_stackinfo|I32 stitems|I32 cxitems
-Ap |char* |scan_vstring |char *vstr|SV *sv
-p |PerlIO*|nextargv |GV* gv
-Ap |char* |ninstr |const char* big|const char* bigend \
- |const char* little|const char* lend
-p |OP* |oopsCV |OP* o
-Ap |void |op_free |OP* arg
-p |void |package |OP* o
+Apa |OP* |newANONLIST |NULLOK OP* o
+Apa |OP* |newANONHASH |NULLOK OP* o
+Ap |OP* |newANONSUB |I32 floor|NULLOK OP* proto|NULLOK OP* block
+Apa |OP* |newASSIGNOP |I32 flags|NULLOK OP* left|I32 optype|NULLOK OP* right
+Apa |OP* |newCONDOP |I32 flags|NN OP* first|NULLOK OP* trueop|NULLOK OP* falseop
+Apd |CV* |newCONSTSUB |NULLOK HV* stash|NULLOK char* name|NULLOK SV* sv
+Ap |void |newFORM |I32 floor|NULLOK OP* o|NULLOK OP* block
+Apa |OP* |newFOROP |I32 flags|NULLOK char* label|line_t forline \
+ |NULLOK OP* sv|NN OP* expr|NULLOK OP* block|NULLOK OP* cont
+Apa |OP* |newLOGOP |I32 optype|I32 flags|NN OP* left|NN OP* right
+Apa |OP* |newLOOPEX |I32 type|NN OP* label
+Apa |OP* |newLOOPOP |I32 flags|I32 debuggable|NULLOK OP* expr|NULLOK OP* block
+Apa |OP* |newNULLLIST
+Apa |OP* |newOP |I32 optype|I32 flags
+Ap |void |newPROG |NN OP* o
+Apa |OP* |newRANGE |I32 flags|NN OP* left|NN OP* right
+Apa |OP* |newSLICEOP |I32 flags|NULLOK OP* subscript|NULLOK OP* listop
+Apa |OP* |newSTATEOP |I32 flags|NULLOK char* label|NULLOK OP* o
+Ap |CV* |newSUB |I32 floor|NULLOK OP* o|NULLOK OP* proto|NULLOK OP* block
+Apd |CV* |newXS |NULLOK char* name|NN XSUBADDR_t f|NN char* filename
+Apda |AV* |newAV
+Apa |OP* |newAVREF |NN OP* o
+Apa |OP* |newBINOP |I32 type|I32 flags|NULLOK OP* first|NULLOK OP* last
+Apa |OP* |newCVREF |I32 flags|NULLOK OP* o
+Apa |OP* |newGVOP |I32 type|I32 flags|NN GV* gv
+Apa |GV* |newGVgen |NN char* pack
+Apa |OP* |newGVREF |I32 type|NULLOK OP* o
+ApaR |OP* |newHVREF |NN OP* o
+ApdaR |HV* |newHV
+ApaR |HV* |newHVhv |NULLOK HV* hv
+Apa |IO* |newIO
+Apa |OP* |newLISTOP |I32 type|I32 flags|NULLOK OP* first|NULLOK OP* last
+Apa |OP* |newPADOP |I32 type|I32 flags|NULLOK SV* sv
+Apa |OP* |newPMOP |I32 type|I32 flags
+Apa |OP* |newPVOP |I32 type|I32 flags|NULLOK char* pv
+Apa |SV* |newRV |NN SV* pref
+Apda |SV* |newRV_noinc |NN SV *sv
+Apda |SV* |newSV |STRLEN len
+Apa |OP* |newSVREF |NN OP* o
+Apa |OP* |newSVOP |I32 type|I32 flags|NN SV* sv
+Apda |SV* |newSViv |IV i
+Apda |SV* |newSVuv |UV u
+Apda |SV* |newSVnv |NV n
+Apda |SV* |newSVpv |NULLOK const char* s|STRLEN len
+Apda |SV* |newSVpvn |NULLOK const char* s|STRLEN len
+Apda |SV* |newSVpvn_share |NULLOK const char* s|I32 len|U32 hash
+Afpda |SV* |newSVpvf |NN const char* pat|...
+Apa |SV* |vnewSVpvf |NN const char* pat|NULLOK va_list* args
+Apd |SV* |newSVrv |NN SV* rv|NULLOK const char* classname
+Apda |SV* |newSVsv |NULLOK SV* old
+Apa |OP* |newUNOP |I32 type|I32 flags|NULLOK OP* first
+Apa |OP* |newWHILEOP |I32 flags|I32 debuggable|NULLOK LOOP* loop \
+ |I32 whileline|NULLOK OP* expr|NULLOK OP* block|NULLOK OP* cont
+Apa |PERL_SI*|new_stackinfo|I32 stitems|I32 cxitems
+Ap |char* |scan_vstring |NN char *vstr|NN SV *sv
+p |PerlIO*|nextargv |NN GV* gv
+ApP |char* |ninstr |NN const char* big|NN const char* bigend \
+ |NN const char* little|NN const char* lend
+pr |OP* |oopsCV |NN OP* o
+Ap |void |op_free |NULLOK OP* arg
+p |void |package |NN OP* o
pd |PADOFFSET|pad_alloc |I32 optype|U32 tmptype
-p |PADOFFSET|allocmy |char* name
-pd |PADOFFSET|pad_findmy |char* name
-p |OP* |oopsAV |OP* o
-p |OP* |oopsHV |OP* o
+p |PADOFFSET|allocmy |NN char* name
+pdR |PADOFFSET|pad_findmy |NN char* name
+pR |OP* |oopsAV |NN OP* o
+pR |OP* |oopsHV |NN OP* o
pd |void |pad_leavemy
Apd |SV* |pad_sv |PADOFFSET po
pd |void |pad_free |PADOFFSET po
pd |void |pad_reset
pd |void |pad_swipe |PADOFFSET po|bool refadjust
-p |void |peep |OP* o
-dopM |PerlIO*|start_glob |SV* pattern|IO *io
+p |void |peep |NULLOK OP* o
+dopM |PerlIO*|start_glob |NN SV* pattern|NN IO *io
#if defined(USE_5005THREADS)
-Ap |struct perl_thread* |new_struct_thread|struct perl_thread *t
+Ap |struct perl_thread* |new_struct_thread|NN struct perl_thread *t
#endif
#if defined(USE_REENTRANT_API)
Ap |void |reentrant_size
Ap |void |reentrant_init
Ap |void |reentrant_free
-Anp |void* |reentrant_retry|const char*|...
+Anp |void* |reentrant_retry|NN const char*|...
#endif
-Ap |void |call_atexit |ATEXIT_t fn|void *ptr
-Apd |I32 |call_argv |const char* sub_name|I32 flags|char** argv
-Apd |I32 |call_method |const char* methname|I32 flags
-Apd |I32 |call_pv |const char* sub_name|I32 flags
-Apd |I32 |call_sv |SV* sv|I32 flags
+Ap |void |call_atexit |ATEXIT_t fn|NULLOK void *ptr
+Apd |I32 |call_argv |NN const char* sub_name|I32 flags|NN char** argv
+Apd |I32 |call_method |NN const char* methname|I32 flags
+Apd |I32 |call_pv |NN const char* sub_name|I32 flags
+Apd |I32 |call_sv |NN SV* sv|I32 flags
Ap |void |despatch_signals
-Apd |SV* |eval_pv |const char* p|I32 croak_on_error
-Apd |I32 |eval_sv |SV* sv|I32 flags
-Apd |SV* |get_sv |const char* name|I32 create
-Apd |AV* |get_av |const char* name|I32 create
-Apd |HV* |get_hv |const char* name|I32 create
-Apd |CV* |get_cv |const char* name|I32 create
+Apd |SV* |eval_pv |NN const char* p|I32 croak_on_error
+Apd |I32 |eval_sv |NN SV* sv|I32 flags
+Apd |SV* |get_sv |NN const char* name|I32 create
+Apd |AV* |get_av |NN const char* name|I32 create
+Apd |HV* |get_hv |NN const char* name|I32 create
+Apd |CV* |get_cv |NN const char* name|I32 create
Ap |int |init_i18nl10n |int printwarn
Ap |int |init_i18nl14n |int printwarn
-Ap |void |new_collate |char* newcoll
-Ap |void |new_ctype |char* newctype
-Ap |void |new_numeric |char* newcoll
+Ap |void |new_collate |NULLOK char* newcoll
+Ap |void |new_ctype |NN char* newctype
+Ap |void |new_numeric |NULLOK char* newcoll
Ap |void |set_numeric_local
Ap |void |set_numeric_radix
Ap |void |set_numeric_standard
-Apd |void |require_pv |const char* pv
-Apd |void |pack_cat |SV *cat|char *pat|char *patend|SV **beglist|SV **endlist|SV ***next_in_list|U32 flags
-Apd |void |packlist |SV *cat|char *pat|char *patend|SV **beglist|SV **endlist
+Apd |void |require_pv |NN const char* pv
+Apd |void |pack_cat |NN SV *cat|NN char *pat|NN char *patend \
+ |NN SV **beglist|NN SV **endlist|NN SV ***next_in_list|U32 flags
+Apd |void |packlist |NN SV *cat|NN char *pat|NN char *patend|NN SV **beglist|NN SV **endlist
p |void |pidgone |Pid_t pid|int status
-Ap |void |pmflag |U32* pmfl|int ch
-p |OP* |pmruntime |OP* pm|OP* expr|OP* repl
-p |OP* |pmtrans |OP* o|OP* expr|OP* repl
+Ap |void |pmflag |NN U32* pmfl|int ch
+p |OP* |pmruntime |NN OP* pm|NN OP* expr|NULLOK OP* repl
+p |OP* |pmtrans |NN OP* o|NN OP* expr|NN OP* repl
p |OP* |pop_return
Ap |void |pop_scope
-p |OP* |prepend_elem |I32 optype|OP* head|OP* tail
-p |void |push_return |OP* o
+p |OP* |prepend_elem |I32 optype|NULLOK OP* head|NULLOK OP* tail
+p |void |push_return |NULLOK OP* o
Ap |void |push_scope
-p |OP* |ref |OP* o|I32 type
-p |OP* |refkids |OP* o|I32 type
-Ap |void |regdump |regexp* r
-Ap |SV* |regclass_swash |struct regnode *n|bool doinit|SV **listsvp|SV **altsvp
-Ap |I32 |pregexec |regexp* prog|char* stringarg \
- |char* strend|char* strbeg|I32 minend \
- |SV* screamer|U32 nosave
-Ap |void |pregfree |struct regexp* r
-Ap |regexp*|pregcomp |char* exp|char* xend|PMOP* pm
-Ap |char* |re_intuit_start|regexp* prog|SV* sv|char* strpos \
- |char* strend|U32 flags \
- |struct re_scream_pos_data_s *data
-Ap |SV* |re_intuit_string|regexp* prog
-Ap |I32 |regexec_flags |regexp* prog|char* stringarg \
- |char* strend|char* strbeg|I32 minend \
- |SV* screamer|void* data|U32 flags
-Ap |regnode*|regnext |regnode* p
-Ep |void |regprop |SV* sv|regnode* o
-Ap |void |repeatcpy |char* to|const char* from|I32 len|I32 count
-Ap |char* |rninstr |const char* big|const char* bigend \
- |const char* little|const char* lend
+p |OP* |ref |NULLOK OP* o|I32 type
+p |OP* |refkids |NULLOK OP* o|I32 type
+Ap |void |regdump |NN regexp* r
+Ap |SV* |regclass_swash |NN struct regnode *n|bool doinit|NULLOK SV **listsvp|NULLOK SV **altsvp
+Ap |I32 |pregexec |NN regexp* prog|NN char* stringarg \
+ |NN char* strend|NN char* strbeg|I32 minend \
+ |NN SV* screamer|U32 nosave
+Ap |void |pregfree |NULLOK struct regexp* r
+Ap |regexp*|pregcomp |NN char* exp|NN char* xend|NN PMOP* pm
+Ap |char* |re_intuit_start|NN regexp* prog|NULLOK SV* sv|NN char* strpos \
+ |NN char* strend|U32 flags \
+ |NULLOK struct re_scream_pos_data_s *data
+Ap |SV* |re_intuit_string|NN regexp* prog
+Ap |I32 |regexec_flags |NN regexp* prog|NN char* stringarg \
+ |NN char* strend|NN char* strbeg|I32 minend \
+ |NN SV* screamer|NULLOK void* data|U32 flags
+ApR |regnode*|regnext |NN regnode* p
+Ep |void |regprop |NN SV* sv|NN regnode* o
+Ap |void |repeatcpy |NN char* to|NN const char* from|I32 len|I32 count
+ApP |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
-p |int |rsignal_restore|int i|Sigsave_t* t
-p |int |rsignal_save |int i|Sighandler_t t1|Sigsave_t* t2
+p |int |rsignal_restore|int i|NULLOK Sigsave_t* t
+p |int |rsignal_save |int i|Sighandler_t t1|NN Sigsave_t* t2
Ap |Sighandler_t|rsignal_state|int i
-p |void |rxres_free |void** rsp
-p |void |rxres_restore |void** rsp|REGEXP* prx
-p |void |rxres_save |void** rsp|REGEXP* prx
+p |void |rxres_free |NN void** rsp
+p |void |rxres_restore |NN void** rsp|NN REGEXP* prx
+p |void |rxres_save |NN void** rsp|NN REGEXP* prx
#if !defined(HAS_RENAME)
-p |I32 |same_dirent |char* a|char* b
+p |I32 |same_dirent |NN char* a|NN char* b
#endif
-Apd |char* |savepv |const char* pv
-Apd |char* |savesharedpv |const char* pv
-Apd |char* |savepvn |const char* pv|I32 len
+Apda |char* |savepv |NULLOK const char* pv
+Apda |char* |savepvn |NULLOK const char* pv|I32 len
+Apda |char* |savesharedpv |NULLOK const char* pv
Ap |void |savestack_grow
Ap |void |savestack_grow_cnt |I32 need
-Ap |void |save_aelem |AV* av|I32 idx|SV **sptr
+Ap |void |save_aelem |NN AV* av|I32 idx|NN SV **sptr
Ap |I32 |save_alloc |I32 size|I32 pad
-Ap |void |save_aptr |AV** aptr
-Ap |AV* |save_ary |GV* gv
-Ap |void |save_bool |bool* boolp
-Ap |void |save_clearsv |SV** svp
-Ap |void |save_delete |HV* hv|char* key|I32 klen
-Ap |void |save_destructor|DESTRUCTORFUNC_NOCONTEXT_t f|void* p
-Ap |void |save_destructor_x|DESTRUCTORFUNC_t f|void* p
-Ap |void |save_freesv |SV* sv
-p |void |save_freeop |OP* o
-Ap |void |save_freepv |char* pv
-Ap |void |save_generic_svref|SV** sptr
-Ap |void |save_generic_pvref|char** str
-Ap |void |save_shared_pvref|char** str
-Ap |void |save_gp |GV* gv|I32 empty
-Ap |HV* |save_hash |GV* gv
-Ap |void |save_helem |HV* hv|SV *key|SV **sptr
-Ap |void |save_hints
-Ap |void |save_hptr |HV** hptr
-Ap |void |save_I16 |I16* intp
-Ap |void |save_I32 |I32* intp
-Ap |void |save_I8 |I8* bytep
-Ap |void |save_int |int* intp
-Ap |void |save_item |SV* item
-Ap |void |save_iv |IV* iv
-Ap |void |save_list |SV** sarg|I32 maxsarg
-Ap |void |save_long |long* longp
-Ap |void |save_mortalizesv|SV* sv
-Ap |void |save_nogv |GV* gv
+Ap |void |save_aptr |NN AV** aptr
+Ap |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
+Ap |void |save_destructor|DESTRUCTORFUNC_NOCONTEXT_t f|NN void* p
+Ap |void |save_destructor_x|DESTRUCTORFUNC_t f|NULLOK void* p
+Ap |void |save_freesv |NULLOK SV* sv
+p |void |save_freeop |NULLOK OP* o
+Ap |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
+Ap |void |save_gp |NN GV* gv|I32 empty
+Ap |HV* |save_hash |NN GV* gv
+Ap |void |save_helem |NN HV* hv|NN SV *key|NN SV **sptr
+Apr |void |save_hints
+Ap |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
+Ap |void |save_iv |NN IV* iv
+Ap |void |save_list |NN SV** sarg|I32 maxsarg
+Ap |void |save_long |NN long* longp
+Ap |void |save_mortalizesv|NN SV* sv
+Ap |void |save_nogv |NULLOK GV* gv
p |void |save_op
-Ap |SV* |save_scalar |GV* gv
-Ap |void |save_pptr |char** pptr
-Ap |void |save_vptr |void* pptr
+Ap |SV* |save_scalar |NN GV* gv
+Ap |void |save_pptr |NN char** pptr
+Ap |void |save_vptr |NN void* pptr
Ap |void |save_re_context
Ap |void |save_padsv |PADOFFSET off
-Ap |void |save_sptr |SV** sptr
-Ap |SV* |save_svref |SV** sptr
+Ap |void |save_sptr |NN SV** sptr
+Ap |SV* |save_svref |NN SV** sptr
+#ifdef USE_5005THREADS
Ap |SV** |save_threadsv |PADOFFSET i
-p |OP* |sawparens |OP* o
-p |OP* |scalar |OP* o
-p |OP* |scalarkids |OP* o
-p |OP* |scalarseq |OP* o
-p |OP* |scalarvoid |OP* o
-Apd |NV |scan_bin |char* start|STRLEN len|STRLEN* retlen
-Apd |NV |scan_hex |char* start|STRLEN len|STRLEN* retlen
-Ap |char* |scan_num |char* s|YYSTYPE *lvalp
-Apd |NV |scan_oct |char* start|STRLEN len|STRLEN* retlen
-p |OP* |scope |OP* o
-Ap |char* |screaminstr |SV* bigsv|SV* littlesv|I32 start_shift \
- |I32 end_shift|I32 *state|I32 last
+#else
+Apr |SV** |save_threadsv |PADOFFSET i
+#endif
+p |OP* |sawparens |NULLOK OP* o
+p |OP* |scalar |NULLOK OP* o
+p |OP* |scalarkids |NULLOK OP* o
+p |OP* |scalarseq |NULLOK OP* o
+p |OP* |scalarvoid |NN OP* o
+Apd |NV |scan_bin |NN char* start|STRLEN len|NN STRLEN* retlen
+Apd |NV |scan_hex |NN char* start|STRLEN len|NN STRLEN* retlen
+Ap |char* |scan_num |NN char* s|NN YYSTYPE *lvalp
+Apd |NV |scan_oct |NN char* start|STRLEN len|NN STRLEN* retlen
+p |OP* |scope |NULLOK OP* o
+Ap |char* |screaminstr |NN SV *bigstr|NN SV *littlestr|I32 start_shift \
+ |I32 end_shift|NN I32 *oldposp|I32 last
#if !defined(VMS)
-p |I32 |setenv_getix |char* nam
+p |I32 |setenv_getix |NN char* nam
#endif
-p |void |setdefout |GV* gv
-p |HEK* |share_hek |const char* sv|I32 len|U32 hash
+p |void |setdefout |NULLOK GV* gv
+Ap |HEK* |share_hek |NN const char* str|I32 len|U32 hash
np |Signal_t |sighandler |int sig
Anp |Signal_t |csighandler |int sig
-Ap |SV** |stack_grow |SV** sp|SV**p|int n
+Ap |SV** |stack_grow |NN SV** sp|NN SV**p|int n
Ap |I32 |start_subparse |I32 is_format|U32 flags
-p |void |sub_crush_depth|CV* cv
-Apd |bool |sv_2bool |SV* sv
-Apd |CV* |sv_2cv |SV* sv|HV** st|GV** gvp|I32 lref
-Apd |IO* |sv_2io |SV* sv
-Apd |IV |sv_2iv |SV* sv
-Apd |SV* |sv_2mortal |SV* sv
-Apd |NV |sv_2nv |SV* sv
-Amb |char* |sv_2pv |SV* sv|STRLEN* lp
-Apd |char* |sv_2pvutf8 |SV* sv|STRLEN* lp
-Apd |char* |sv_2pvbyte |SV* sv|STRLEN* lp
-Ap |char* |sv_pvn_nomg |SV* sv|STRLEN* lp
-Apd |UV |sv_2uv |SV* sv
-Apd |IV |sv_iv |SV* sv
-Apd |UV |sv_uv |SV* sv
-Apd |NV |sv_nv |SV* sv
-Apd |char* |sv_pvn |SV *sv|STRLEN *len
-Apd |char* |sv_pvutf8n |SV *sv|STRLEN *len
-Apd |char* |sv_pvbyten |SV *sv|STRLEN *len
-Apd |I32 |sv_true |SV *sv
-pd |void |sv_add_arena |char* ptr|U32 size|U32 flags
-Apd |int |sv_backoff |SV* sv
-Apd |SV* |sv_bless |SV* sv|HV* stash
-Afpd |void |sv_catpvf |SV* sv|const char* pat|...
-Apd |void |sv_vcatpvf |SV* sv|const char* pat|va_list* args
-Apd |void |sv_catpv |SV* sv|const char* ptr
-Amdb |void |sv_catpvn |SV* sv|const char* ptr|STRLEN len
-Amdb |void |sv_catsv |SV* dsv|SV* ssv
-Apd |void |sv_chop |SV* sv|char* ptr
+p |void |sub_crush_depth|NN CV* cv
+Apd |bool |sv_2bool |NN SV* sv
+Apd |CV* |sv_2cv |NULLOK SV* sv|NN HV** st|NN GV** gvp|I32 lref
+Apd |IO* |sv_2io |NN SV* sv
+Apd |IV |sv_2iv |NN SV* sv
+Apd |SV* |sv_2mortal |NULLOK SV* sv
+Apd |NV |sv_2nv |NN SV* sv
+Amb |char* |sv_2pv |NN SV* sv|NULLOK STRLEN* lp
+Apd |char* |sv_2pvutf8 |NN SV* sv|NULLOK STRLEN* lp
+Apd |char* |sv_2pvbyte |NN SV* sv|NULLOK STRLEN* lp
+Ap |char* |sv_pvn_nomg |NN SV* sv|NULLOK STRLEN* lp
+Apd |UV |sv_2uv |NN SV* sv
+Apd |IV |sv_iv |NN SV* sv
+Apd |UV |sv_uv |NN SV* sv
+Apd |NV |sv_nv |NN SV* sv
+Apd |char* |sv_pvn |NN SV *sv|NN STRLEN *len
+Apd |char* |sv_pvutf8n |NN SV *sv|NN STRLEN *len
+Apd |char* |sv_pvbyten |NN SV *sv|NN STRLEN *len
+Apd |I32 |sv_true |NULLOK SV *sv
+pd |void |sv_add_arena |NN char* ptr|U32 size|U32 flags
+Apd |int |sv_backoff |NN SV* sv
+Apd |SV* |sv_bless |NN SV* sv|NN HV* stash
+Afpd |void |sv_catpvf |NN SV* sv|NN const char* pat|...
+Apd |void |sv_vcatpvf |NN SV* sv|NN const char* pat|NULLOK va_list* args
+Apd |void |sv_catpv |NN SV* sv|NN const char* ptr
+Amdb |void |sv_catpvn |NN SV* sv|NN const char* ptr|STRLEN len
+Amdb |void |sv_catsv |NN SV* dsv|NULLOK SV* ssv
+Apd |void |sv_chop |NN SV* sv|NULLOK char* ptr
pd |I32 |sv_clean_all
pd |void |sv_clean_objs
-Apd |void |sv_clear |SV* sv
-Apd |I32 |sv_cmp |SV* sv1|SV* sv2
-Apd |I32 |sv_cmp_locale |SV* sv1|SV* sv2
+Apd |void |sv_clear |NN SV* sv
+Apd |I32 |sv_cmp |NN SV* sv1|NN SV* sv2
+Apd |I32 |sv_cmp_locale |NN SV* sv1|NN SV* sv2
#if defined(USE_LOCALE_COLLATE)
-Apd |char* |sv_collxfrm |SV* sv|STRLEN* nxp
-#endif
-Ap |OP* |sv_compile_2op |SV* sv|OP** startp|char* code|PAD** padp
-Apd |int |getcwd_sv |SV* sv
-Apd |void |sv_dec |SV* sv
-Ap |void |sv_dump |SV* sv
-Apd |bool |sv_derived_from|SV* sv|const char* name
-Apd |I32 |sv_eq |SV* sv1|SV* sv2
-Apd |void |sv_free |SV* sv
+Apd |char* |sv_collxfrm |NN SV* sv|NN STRLEN* nxp
+#endif
+Ap |OP* |sv_compile_2op |NN SV* sv|NN OP** startp|NN char* code|NN PAD** padp
+Apd |int |getcwd_sv |NN SV* sv
+Apd |void |sv_dec |NN SV* sv
+Ap |void |sv_dump |NN SV* sv
+ApdR |bool |sv_derived_from|NN SV* sv|NN const char* name
+Apd |I32 |sv_eq |NULLOK SV* sv1|NULLOK SV* sv2
+Apd |void |sv_free |NULLOK SV* sv
pd |void |sv_free_arenas
-Apd |char* |sv_gets |SV* sv|PerlIO* fp|I32 append
-Apd |char* |sv_grow |SV* sv|STRLEN newlen
-Apd |void |sv_inc |SV* sv
-Apd |void |sv_insert |SV* bigsv|STRLEN offset|STRLEN len \
- |char* little|STRLEN littlelen
-Apd |int |sv_isa |SV* sv|const char* name
-Apd |int |sv_isobject |SV* sv
-Apd |STRLEN |sv_len |SV* sv
-Apd |STRLEN |sv_len_utf8 |SV* sv
-Apd |void |sv_magic |SV* sv|SV* obj|int how|const char* name \
+Apd |char* |sv_gets |NN SV* sv|NN PerlIO* fp|I32 append
+Apd |char* |sv_grow |NN SV* sv|STRLEN newlen
+Apd |void |sv_inc |NN SV* sv
+Apd |void |sv_insert |NN SV* bigsv|STRLEN offset|STRLEN len \
+ |NN char* little|STRLEN littlelen
+Apd |int |sv_isa |NULLOK SV* sv|NN const char* name
+Apd |int |sv_isobject |NULLOK SV* sv
+Apd |STRLEN |sv_len |NULLOK SV* sv
+Apd |STRLEN |sv_len_utf8 |NULLOK SV* sv
+Apd |void |sv_magic |NN SV* sv|NULLOK SV* obj|int how|NULLOK const char* name \
|I32 namlen
-Apd |MAGIC *|sv_magicext |SV* sv|SV* obj|int how|MGVTBL *vtbl \
- | const char* name|I32 namlen
-Apd |SV* |sv_mortalcopy |SV* oldsv
-Apd |SV* |sv_newmortal
-Apd |SV* |sv_newref |SV* sv
-Ap |char* |sv_peek |SV* sv
-Apd |void |sv_pos_u2b |SV* sv|I32* offsetp|I32* lenp
-Apd |void |sv_pos_b2u |SV* sv|I32* offsetp
-Amdb |char* |sv_pvn_force |SV* sv|STRLEN* lp
-Apd |char* |sv_pvutf8n_force|SV* sv|STRLEN* lp
-Apd |char* |sv_pvbyten_force|SV* sv|STRLEN* lp
-Apd |char* |sv_recode_to_utf8 |SV* sv|SV *encoding
-Apd |bool |sv_cat_decode |SV* dsv|SV *encoding|SV *ssv|int *offset \
- |char* tstr|int tlen
-Apd |char* |sv_reftype |SV* sv|int ob
-Apd |void |sv_replace |SV* sv|SV* nsv
+Apd |MAGIC *|sv_magicext |NN SV* sv|NULLOK SV* obj|int how|NULLOK MGVTBL *vtbl \
+ |NULLOK const char* name|I32 namlen
+ApdaR |SV* |sv_mortalcopy |NULLOK SV* oldsv
+ApdR |SV* |sv_newmortal
+Apd |SV* |sv_newref |NULLOK SV* sv
+Ap |char* |sv_peek |NULLOK SV* sv
+Apd |void |sv_pos_u2b |NULLOK SV* sv|NN I32* offsetp|NULLOK I32* lenp
+Apd |void |sv_pos_b2u |NULLOK SV* sv|NN I32* offsetp
+Amdb |char* |sv_pvn_force |NN SV* sv|NULLOK STRLEN* lp
+Apd |char* |sv_pvutf8n_force|NN SV* sv|NULLOK STRLEN* lp
+Apd |char* |sv_pvbyten_force|NN SV* sv|NULLOK STRLEN* lp
+Apd |char* |sv_recode_to_utf8 |NN SV* sv|NN SV *encoding
+Apd |bool |sv_cat_decode |NN SV* dsv|NN SV *encoding|NN SV *ssv|NN int *offset \
+ |NN char* tstr|int tlen
+ApdR |char* |sv_reftype |NN SV* sv|int ob
+Apd |void |sv_replace |NN SV* sv|NN SV* nsv
Apd |void |sv_report_used
-Apd |void |sv_reset |char* s|HV* stash
-Afpd |void |sv_setpvf |SV* sv|const char* pat|...
-Apd |void |sv_vsetpvf |SV* sv|const char* pat|va_list* args
-Apd |void |sv_setiv |SV* sv|IV num
-Apdb |void |sv_setpviv |SV* sv|IV num
-Apd |void |sv_setuv |SV* sv|UV num
-Apd |void |sv_setnv |SV* sv|NV num
-Apd |SV* |sv_setref_iv |SV* rv|const char* classname|IV iv
-Apd |SV* |sv_setref_uv |SV* rv|const char* classname|UV uv
-Apd |SV* |sv_setref_nv |SV* rv|const char* classname|NV nv
-Apd |SV* |sv_setref_pv |SV* rv|const char* classname|void* pv
-Apd |SV* |sv_setref_pvn |SV* rv|const char* classname|char* pv \
- |STRLEN n
-Apd |void |sv_setpv |SV* sv|const char* ptr
-Apd |void |sv_setpvn |SV* sv|const char* ptr|STRLEN len
-Amdb |void |sv_setsv |SV* dsv|SV* ssv
-Apd |void |sv_taint |SV* sv
-Apd |bool |sv_tainted |SV* sv
-Apd |int |sv_unmagic |SV* sv|int type
-Apd |void |sv_unref |SV* sv
-Apd |void |sv_unref_flags |SV* sv|U32 flags
-Apd |void |sv_untaint |SV* sv
-Apd |bool |sv_upgrade |SV* sv|U32 mt
-Apd |void |sv_usepvn |SV* sv|char* ptr|STRLEN len
-Apd |void |sv_vcatpvfn |SV* sv|const char* pat|STRLEN patlen \
- |va_list* args|SV** svargs|I32 svmax \
- |bool *maybe_tainted
-Apd |void |sv_vsetpvfn |SV* sv|const char* pat|STRLEN patlen \
- |va_list* args|SV** svargs|I32 svmax \
- |bool *maybe_tainted
-Ap |NV |str_to_version |SV *sv
-Ap |SV* |swash_init |char* pkg|char* name|SV* listsv \
- |I32 minbits|I32 none
-Ap |UV |swash_fetch |SV *sv|U8 *ptr|bool do_utf8
+Apd |void |sv_reset |NN char* s|NULLOK HV* stash
+Afpd |void |sv_setpvf |NN SV* sv|NN const char* pat|...
+Apd |void |sv_vsetpvf |NN SV* sv|NN const char* pat|NULLOK va_list* args
+Apd |void |sv_setiv |NN SV* sv|IV num
+Apdb |void |sv_setpviv |NN SV* sv|IV num
+Apd |void |sv_setuv |NN SV* sv|UV num
+Apd |void |sv_setnv |NN SV* sv|NV num
+Apd |SV* |sv_setref_iv |NN SV* rv|NULLOK const char* classname|IV iv
+Apd |SV* |sv_setref_uv |NN SV* rv|NULLOK const char* classname|UV uv
+Apd |SV* |sv_setref_nv |NN SV* rv|NULLOK const char* classname|NV nv
+Apd |SV* |sv_setref_pv |NN SV* rv|NULLOK const char* classname|NULLOK void* pv
+Apd |SV* |sv_setref_pvn |NN SV* rv|NULLOK const char* classname|NN char* pv|STRLEN n
+Apd |void |sv_setpv |NN SV* sv|NULLOK const char* ptr
+Apd |void |sv_setpvn |NN SV* sv|NULLOK const char* ptr|STRLEN len
+Amdb |void |sv_setsv |NN SV* dsv|NULLOK SV* ssv
+Apd |void |sv_taint |NN SV* sv
+ApdR |bool |sv_tainted |NN SV* sv
+Apd |int |sv_unmagic |NN SV* sv|int type
+Apd |void |sv_unref |NN SV* sv
+Apd |void |sv_unref_flags |NN SV* sv|U32 flags
+Apd |void |sv_untaint |NN SV* sv
+Apd |bool |sv_upgrade |NN SV* sv|U32 mt
+Apd |void |sv_usepvn |NN SV* sv|NULLOK char* ptr|STRLEN len
+Apd |void |sv_vcatpvfn |NN SV* sv|NN const char* pat|STRLEN patlen \
+ |NULLOK va_list* args|NULLOK SV** svargs|I32 svmax \
+ |NULLOK bool *maybe_tainted
+Apd |void |sv_vsetpvfn |NN SV* sv|NN const char* pat|STRLEN patlen \
+ |NULLOK va_list* args|NULLOK SV** svargs|I32 svmax \
+ |NULLOK bool *maybe_tainted
+ApR |NV |str_to_version |NN SV *sv
+Ap |SV* |swash_init |NN char* pkg|NN char* name|NN SV* listsv|I32 minbits|I32 none
+Ap |UV |swash_fetch |NN SV *sv|NN U8 *ptr|bool do_utf8
Ap |void |taint_env
-Ap |void |taint_proper |const char* f|const char* s
-Apd |UV |to_utf8_case |U8 *p|U8* ustrp|STRLEN *lenp \
- |SV **swash|char *normal|char *special
-Apd |UV |to_utf8_lower |U8 *p|U8* ustrp|STRLEN *lenp
-Apd |UV |to_utf8_upper |U8 *p|U8* ustrp|STRLEN *lenp
-Apd |UV |to_utf8_title |U8 *p|U8* ustrp|STRLEN *lenp
-Apd |UV |to_utf8_fold |U8 *p|U8* ustrp|STRLEN *lenp
+Ap |void |taint_proper |NULLOK const char* f|NN const char* s
+Apd |UV |to_utf8_case |NN U8 *p|NN U8* ustrp|NULLOK STRLEN *lenp \
+ |NN SV **swashp|NN char *normal|NN char *special
+Apd |UV |to_utf8_lower |NN U8 *p|NN U8* ustrp|NULLOK STRLEN *lenp
+Apd |UV |to_utf8_upper |NN U8 *p|NN U8* ustrp|NULLOK STRLEN *lenp
+Apd |UV |to_utf8_title |NN U8 *p|NN U8* ustrp|NULLOK STRLEN *lenp
+Apd |UV |to_utf8_fold |NN U8 *p|NN U8* ustrp|NULLOK STRLEN *lenp
#if defined(UNLINK_ALL_VERSIONS)
-Ap |I32 |unlnk |char* f
+Ap |I32 |unlnk |NN char* f
#endif
#if defined(USE_5005THREADS)
-Ap |void |unlock_condpair|void* svv
-#endif
-Apd |I32 |unpack_str |char *pat|char *patend|char *s|char *strbeg|char *strend|char **new_s|I32 ocnt|U32 flags
-Apd |I32 |unpackstring |char *pat|char *patend|char *s|char *strend|U32 flags
-Ap |void |unsharepvn |const char* sv|I32 len|U32 hash
-p |void |unshare_hek |HEK* hek
-p |void |utilize |int aver|I32 floor|OP* version|OP* idop|OP* arg
-Ap |U8* |utf16_to_utf8 |U8* p|U8 *d|I32 bytelen|I32 *newlen
-Ap |U8* |utf16_to_utf8_reversed|U8* p|U8 *d|I32 bytelen|I32 *newlen
-Adp |STRLEN |utf8_length |U8* s|U8 *e
-Apd |IV |utf8_distance |U8 *a|U8 *b
-Apd |U8* |utf8_hop |U8 *s|I32 off
-ApMd |U8* |utf8_to_bytes |U8 *s|STRLEN *len
-ApMd |U8* |bytes_from_utf8|U8 *s|STRLEN *len|bool *is_utf8
-ApMd |U8* |bytes_to_utf8 |U8 *s|STRLEN *len
-Apd |UV |utf8_to_uvchr |U8 *s|STRLEN* retlen
-Apd |UV |utf8_to_uvuni |U8 *s|STRLEN* retlen
-Adp |UV |utf8n_to_uvchr |U8 *s|STRLEN curlen|STRLEN* retlen|U32 flags
-Adp |UV |utf8n_to_uvuni |U8 *s|STRLEN curlen|STRLEN* retlen|U32 flags
-Apd |U8* |uvchr_to_utf8 |U8 *d|UV uv
-Ap |U8* |uvuni_to_utf8 |U8 *d|UV uv
-Ap |U8* |uvchr_to_utf8_flags |U8 *d|UV uv|UV flags
-Apd |U8* |uvuni_to_utf8_flags |U8 *d|UV uv|UV flags
-Apd |char* |pv_uni_display |SV *dsv|U8 *spv|STRLEN len \
+Ap |void |unlock_condpair|NN void* svv
+#endif
+Apd |I32 |unpack_str |NN char *pat|NN char *patend|NN char *s \
+ |NULLOK char *strbeg|NN char *strend|NULLOK char **new_s \
+ |I32 ocnt|U32 flags
+Apd |I32 |unpackstring |NN char *pat|NN char *patend|NN char *s \
+ |NN char *strend|U32 flags
+Ap |void |unsharepvn |NULLOK const char* sv|I32 len|U32 hash
+p |void |unshare_hek |NULLOK HEK* hek
+p |void |utilize |int aver|I32 floor|NULLOK OP* version|NN OP* idop|NULLOK OP* arg
+Ap |U8* |utf16_to_utf8 |NN U8* p|NN U8 *d|I32 bytelen|NN I32 *newlen
+Ap |U8* |utf16_to_utf8_reversed|NN U8* p|NN U8 *d|I32 bytelen|NN I32 *newlen
+AdpPR |STRLEN |utf8_length |NN U8* s|NN U8 *e
+ApdPR |IV |utf8_distance |NN U8 *a|NN U8 *b
+ApdPR |U8* |utf8_hop |NN U8 *s|I32 off
+ApMd |U8* |utf8_to_bytes |NN U8 *s|NN STRLEN *len
+ApMd |U8* |bytes_from_utf8|NN U8 *s|NN STRLEN *len|NULLOK bool *is_utf8
+ApMd |U8* |bytes_to_utf8 |NN U8 *s|NN STRLEN *len
+Apd |UV |utf8_to_uvchr |NN U8 *s|NULLOK STRLEN *retlen
+Apd |UV |utf8_to_uvuni |NN U8 *s|NULLOK STRLEN *retlen
+Adp |UV |utf8n_to_uvchr |NN U8 *s|STRLEN curlen|NULLOK STRLEN *retlen|U32 flags
+Adp |UV |utf8n_to_uvuni |NN U8 *s|STRLEN curlen|NULLOK STRLEN *retlen|U32 flags
+Apd |U8* |uvchr_to_utf8 |NN U8 *d|UV uv
+Ap |U8* |uvuni_to_utf8 |NN U8 *d|UV uv
+Ap |U8* |uvchr_to_utf8_flags |NN U8 *d|UV uv|UV flags
+Apd |U8* |uvuni_to_utf8_flags |NN U8 *d|UV uv|UV flags
+Apd |char* |pv_uni_display |NN SV *dsv|NN U8 *spv|STRLEN len \
|STRLEN pvlim|UV flags
-Apd |char* |sv_uni_display |SV *dsv|SV *ssv|STRLEN pvlim|UV flags
-p |void |vivify_defelem |SV* sv
-p |void |vivify_ref |SV* sv|U32 to_what
-p |I32 |wait4pid |Pid_t pid|int* statusp|int flags
-p |U32 |parse_unicode_opts|char **popt
-p |U32 |seed
-p |UV |get_hash_seed
-p |void |report_evil_fh |GV *gv|IO *io|I32 op
+ApdR |char* |sv_uni_display |NN SV *dsv|NN SV *ssv|STRLEN pvlim|UV flags
+p |void |vivify_defelem |NN SV* sv
+p |void |vivify_ref |NN SV* sv|U32 to_what
+p |I32 |wait4pid |Pid_t pid|NN int* statusp|int flags
+p |U32 |parse_unicode_opts|NN char **popt
+Ap |U32 |seed
+pR |UV |get_hash_seed
+p |void |report_evil_fh |NULLOK GV *gv|NULLOK IO *io|I32 op
pd |void |report_uninit
-Afpd |void |warn |const char* pat|...
-Ap |void |vwarn |const char* pat|va_list* args
-Afp |void |warner |U32 err|const char* pat|...
-Ap |void |vwarner |U32 err|const char* pat|va_list* args
-p |void |watch |char** addr
-Ap |I32 |whichsig |char* sig
-p |void |write_to_stderr|const char* message|int msglen
-p |int |yyerror |char* s
+Afpd |void |warn |NN const char* pat|...
+Ap |void |vwarn |NN const char* pat|NULLOK va_list* args
+Afp |void |warner |U32 err|NN const char* pat|...
+Ap |void |vwarner |U32 err|NN const char* pat|NULLOK va_list* args
+p |void |watch |NN char** addr
+Ap |I32 |whichsig |NN char* sig
+p |void |write_to_stderr|NN const char* message|int msglen
+p |int |yyerror |NN char* s
#ifdef USE_PURE_BISON
-p |int |yylex_r |YYSTYPE *lvalp|int *lcharp
+p |int |yylex_r |NULLOK YYSTYPE *lvalp|NULLOK int *lcharp
#endif
p |int |yylex
p |int |yyparse
-p |int |yywarn |char* s
+p |int |yywarn |NN char* s
#if defined(MYMALLOC)
-Ap |void |dump_mstats |char* s
-Ap |int |get_mstats |perl_mstats_t *buf|int buflen|int level
+Ap |void |dump_mstats |NN char* s
+ApR |int |get_mstats |NN perl_mstats_t *buf|int buflen|int level
#endif
-Anp |Malloc_t|safesysmalloc |MEM_SIZE nbytes
-Anp |Malloc_t|safesyscalloc |MEM_SIZE elements|MEM_SIZE size
-Anp |Malloc_t|safesysrealloc|Malloc_t where|MEM_SIZE nbytes
+Anpa |Malloc_t|safesysmalloc |MEM_SIZE nbytes
+Anpa |Malloc_t|safesyscalloc |MEM_SIZE elements|MEM_SIZE size
+Anpa |Malloc_t|safesysrealloc|Malloc_t where|MEM_SIZE nbytes
Anp |Free_t |safesysfree |Malloc_t where
#if defined(PERL_GLOBAL_STRUCT)
Ap |struct perl_vars *|GetVars
@@ -888,192 +904,195 @@ Ap |struct perl_vars *|GetVars
Ap |int |runops_standard
Ap |int |runops_debug
#if defined(USE_5005THREADS)
-Ap |SV* |sv_lock |SV *sv
-#endif
-Afpd |void |sv_catpvf_mg |SV *sv|const char* pat|...
-Apd |void |sv_vcatpvf_mg |SV* sv|const char* pat|va_list* args
-Apd |void |sv_catpv_mg |SV *sv|const char *ptr
-Apd |void |sv_catpvn_mg |SV *sv|const char *ptr|STRLEN len
-Apd |void |sv_catsv_mg |SV *dstr|SV *sstr
-Afpd |void |sv_setpvf_mg |SV *sv|const char* pat|...
-Apd |void |sv_vsetpvf_mg |SV* sv|const char* pat|va_list* args
-Apd |void |sv_setiv_mg |SV *sv|IV i
-Apdb |void |sv_setpviv_mg |SV *sv|IV iv
-Apd |void |sv_setuv_mg |SV *sv|UV u
-Apd |void |sv_setnv_mg |SV *sv|NV num
-Apd |void |sv_setpv_mg |SV *sv|const char *ptr
-Apd |void |sv_setpvn_mg |SV *sv|const char *ptr|STRLEN len
-Apd |void |sv_setsv_mg |SV *dstr|SV *sstr
-Apd |void |sv_usepvn_mg |SV *sv|char *ptr|STRLEN len
-Ap |MGVTBL*|get_vtbl |int vtbl_id
-Ap |char* |pv_display |SV *dsv|char *pv|STRLEN cur|STRLEN len \
+Ap |SV* |sv_lock |NN SV *sv
+#endif
+Afpd |void |sv_catpvf_mg |NN SV *sv|NN const char* pat|...
+Apd |void |sv_vcatpvf_mg |NN SV* sv|NN const char* pat|NULLOK va_list* args
+Apd |void |sv_catpv_mg |NN SV *sv|NN const char *ptr
+Apd |void |sv_catpvn_mg |NN SV *sv|NN const char *ptr|STRLEN len
+Apd |void |sv_catsv_mg |NN SV *dstr|NULLOK SV *sstr
+Afpd |void |sv_setpvf_mg |NN SV *sv|NN const char* pat|...
+Apd |void |sv_vsetpvf_mg |NN SV* sv|NN const char* pat|NULLOK va_list* args
+Apd |void |sv_setiv_mg |NN SV *sv|IV i
+Apdb |void |sv_setpviv_mg |NN SV *sv|IV iv
+Apd |void |sv_setuv_mg |NN SV *sv|UV u
+Apd |void |sv_setnv_mg |NN SV *sv|NV num
+Apd |void |sv_setpv_mg |NN SV *sv|NULLOK const char *ptr
+Apd |void |sv_setpvn_mg |NN SV *sv|NN const char *ptr|STRLEN len
+Apd |void |sv_setsv_mg |NN SV *dstr|NULLOK SV *sstr
+Apd |void |sv_usepvn_mg |NN SV *sv|NULLOK char *ptr|STRLEN len
+ApR |MGVTBL*|get_vtbl |int vtbl_id
+Ap |char* |pv_display |NN SV *dsv|NN char *pv|STRLEN cur|STRLEN len \
|STRLEN pvlim
-Afp |void |dump_indent |I32 level|PerlIO *file|const char* pat|...
-Ap |void |dump_vindent |I32 level|PerlIO *file|const char* pat \
- |va_list *args
-Ap |void |do_gv_dump |I32 level|PerlIO *file|char *name|GV *sv
-Ap |void |do_gvgv_dump |I32 level|PerlIO *file|char *name|GV *sv
-Ap |void |do_hv_dump |I32 level|PerlIO *file|char *name|HV *sv
-Ap |void |do_magic_dump |I32 level|PerlIO *file|MAGIC *mg|I32 nest \
+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
+Ap |void |do_gv_dump |I32 level|NN PerlIO *file|NN char *name|NN GV *sv
+Ap |void |do_gvgv_dump |I32 level|NN PerlIO *file|NN char *name|NN GV *sv
+Ap |void |do_hv_dump |I32 level|NN PerlIO *file|NN char *name|NN HV *sv
+Ap |void |do_magic_dump |I32 level|NN PerlIO *file|NN MAGIC *mg|I32 nest \
|I32 maxnest|bool dumpops|STRLEN pvlim
-Ap |void |do_op_dump |I32 level|PerlIO *file|OP *o
-Ap |void |do_pmop_dump |I32 level|PerlIO *file|PMOP *pm
-Ap |void |do_sv_dump |I32 level|PerlIO *file|SV *sv|I32 nest \
+Ap |void |do_op_dump |I32 level|NN PerlIO *file|NULLOK OP *o
+Ap |void |do_pmop_dump |I32 level|NN PerlIO *file|NULLOK PMOP *pm
+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 |MAGIC *mg
+Ap |void |magic_dump |NULLOK MAGIC *mg
#if defined(PERL_FLEXIBLE_EXCEPTIONS)
-Ap |void* |default_protect|volatile JMPENV *je|int *excpt \
+Ap |void* |default_protect|NN volatile JMPENV *je|NN int *excpt \
|protect_body_t body|...
-Ap |void* |vdefault_protect|volatile JMPENV *je|int *excpt \
- |protect_body_t body|va_list *args
+Ap |void* |vdefault_protect|NN volatile JMPENV *je|NN int *excpt \
+ |protect_body_t body|NN va_list *args
#endif
Ap |void |reginitcolors
-Apd |char* |sv_2pv_nolen |SV* sv
-Apd |char* |sv_2pvutf8_nolen|SV* sv
-Apd |char* |sv_2pvbyte_nolen|SV* sv
-Amdb |char* |sv_pv |SV *sv
-Amdb |char* |sv_pvutf8 |SV *sv
-Amdb |char* |sv_pvbyte |SV *sv
-Amdb |STRLEN |sv_utf8_upgrade|SV *sv
-ApdM |bool |sv_utf8_downgrade|SV *sv|bool fail_ok
-Apd |void |sv_utf8_encode |SV *sv
-ApdM |bool |sv_utf8_decode |SV *sv
-Apd |void |sv_force_normal|SV *sv
-Apd |void |sv_force_normal_flags|SV *sv|U32 flags
+ApdR |char* |sv_2pv_nolen |NN SV* sv
+ApdR |char* |sv_2pvutf8_nolen|NN SV* sv
+ApdR |char* |sv_2pvbyte_nolen|NN SV* sv
+AmdbR |char* |sv_pv |NN SV *sv
+AmdbR |char* |sv_pvutf8 |NN SV *sv
+AmdbR |char* |sv_pvbyte |NN SV *sv
+Amdb |STRLEN |sv_utf8_upgrade|NN SV *sv
+ApdM |bool |sv_utf8_downgrade|NN SV *sv|bool fail_ok
+Apd |void |sv_utf8_encode |NN SV *sv
+ApdM |bool |sv_utf8_decode |NN SV *sv
+Apd |void |sv_force_normal|NN SV *sv
+Apd |void |sv_force_normal_flags|NN SV *sv|U32 flags
Ap |void |tmps_grow |I32 n
-Apd |SV* |sv_rvweaken |SV *sv
-p |int |magic_killbackrefs|SV *sv|MAGIC *mg
-Ap |OP* |newANONATTRSUB |I32 floor|OP *proto|OP *attrs|OP *block
-Ap |CV* |newATTRSUB |I32 floor|OP *o|OP *proto|OP *attrs|OP *block
-Ap |void |newMYSUB |I32 floor|OP *o|OP *proto|OP *attrs|OP *block
-p |OP * |my_attrs |OP *o|OP *attrs
+Apd |SV* |sv_rvweaken |NN SV *sv
+p |int |magic_killbackrefs|NN SV *sv|NN MAGIC *mg
+Ap |OP* |newANONATTRSUB |I32 floor|NULLOK OP *proto|NULLOK OP *attrs|NULLOK OP *block
+Ap |CV* |newATTRSUB |I32 floor|NULLOK OP *o|NULLOK OP *proto|NULLOK OP *attrs|NULLOK OP *block
+Apr |void |newMYSUB |I32 floor|NULLOK OP *o|NULLOK OP *proto|NULLOK OP *attrs|NULLOK OP *block
+p |OP * |my_attrs |NN OP *o|NULLOK OP *attrs
p |void |boot_core_xsutils
#if defined(USE_ITHREADS)
-Ap |PERL_CONTEXT*|cx_dup |PERL_CONTEXT* cx|I32 ix|I32 max|CLONE_PARAMS* param
-Ap |PERL_SI*|si_dup |PERL_SI* si|CLONE_PARAMS* param
-Ap |ANY* |ss_dup |PerlInterpreter* proto_perl|CLONE_PARAMS* param
-Ap |void* |any_dup |void* v|PerlInterpreter* proto_perl
-Ap |HE* |he_dup |HE* e|bool shared|CLONE_PARAMS* param
-Ap |REGEXP*|re_dup |REGEXP* r|CLONE_PARAMS* param
-Ap |PerlIO*|fp_dup |PerlIO* fp|char type|CLONE_PARAMS* param
-Ap |DIR* |dirp_dup |DIR* dp
-Ap |GP* |gp_dup |GP* gp|CLONE_PARAMS* param
-Ap |MAGIC* |mg_dup |MAGIC* mg|CLONE_PARAMS* param
-Ap |SV* |sv_dup |SV* sstr|CLONE_PARAMS* param
+Apa |PERL_CONTEXT*|cx_dup |NULLOK PERL_CONTEXT* cx|I32 ix|I32 max|NN CLONE_PARAMS* param
+Apa |PERL_SI*|si_dup |NULLOK PERL_SI* si|NN CLONE_PARAMS* param
+Apa |ANY* |ss_dup |NN PerlInterpreter* proto_perl|NN CLONE_PARAMS* param
+Apa |void* |any_dup |NULLOK void* v|NN PerlInterpreter* proto_perl
+Apa |HE* |he_dup |NULLOK HE* e|bool shared|NN CLONE_PARAMS* param
+Apa |REGEXP*|re_dup |NULLOK REGEXP* r|NN CLONE_PARAMS* param
+Apa |PerlIO*|fp_dup |NULLOK PerlIO* fp|char type|NN CLONE_PARAMS* param
+Apa |DIR* |dirp_dup |NULLOK DIR* dp
+Apa |GP* |gp_dup |NULLOK GP* gp|NN CLONE_PARAMS* param
+Apa |MAGIC* |mg_dup |NULLOK MAGIC* mg|NN CLONE_PARAMS* param
+Apa |SV* |sv_dup |NULLOK SV* sstr|NN CLONE_PARAMS* param
+Ap |void |rvpv_dup |NN SV* dstr|NN SV *sstr|NN CLONE_PARAMS* param
#if defined(HAVE_INTERP_INTERN)
-Ap |void |sys_intern_dup |struct interp_intern* src \
- |struct interp_intern* dst
+Ap |void |sys_intern_dup |NN struct interp_intern* src \
+ |NN struct interp_intern* dst
#endif
-Ap |PTR_TBL_t*|ptr_table_new
-Ap |void* |ptr_table_fetch|PTR_TBL_t *tbl|void *sv
-Ap |void |ptr_table_store|PTR_TBL_t *tbl|void *oldsv|void *newsv
-Ap |void |ptr_table_split|PTR_TBL_t *tbl
-Ap |void |ptr_table_clear|PTR_TBL_t *tbl
-Ap |void |ptr_table_free|PTR_TBL_t *tbl
+Apa |PTR_TBL_t*|ptr_table_new
+Apa |void* |ptr_table_fetch|NN PTR_TBL_t *tbl|NN void *sv
+Ap |void |ptr_table_store|NN PTR_TBL_t *tbl|NULLOK void *oldsv|NN void *newsv
+Ap |void |ptr_table_split|NN PTR_TBL_t *tbl
+Ap |void |ptr_table_clear|NULLOK PTR_TBL_t *tbl
+Ap |void |ptr_table_free|NULLOK PTR_TBL_t *tbl
#endif
#if defined(HAVE_INTERP_INTERN)
Ap |void |sys_intern_clear
Ap |void |sys_intern_init
#endif
-Ap |char * |custom_op_name |OP* op
-Ap |char * |custom_op_desc |OP* op
+ApR |char * |custom_op_name |NN OP* op
+ApR |char * |custom_op_desc |NN OP* op
-Adp |void |sv_nosharing |SV *
-Adp |void |sv_nolocking |SV *
-Adp |void |sv_nounlocking |SV *
+Adp |void |sv_nosharing |NULLOK SV *
+Adp |void |sv_nolocking |NULLOK SV *
+Adp |void |sv_nounlocking |NULLOK SV *
Adp |int |nothreadhook
END_EXTERN_C
#if defined(PERL_IN_AV_C) || defined(PERL_DECL_PROT)
-s |I32 |avhv_index_sv |SV* sv
-s |I32 |avhv_index |AV* av|SV* sv|U32 hash
+s |I32 |avhv_index_sv |NN SV* sv
+s |I32 |avhv_index |NULLOK AV* av|NN SV* sv|U32 hash
#endif
#if defined(PERL_IN_DOOP_C) || defined(PERL_DECL_PROT)
-s |I32 |do_trans_simple |SV *sv
-s |I32 |do_trans_count |SV *sv
-s |I32 |do_trans_complex |SV *sv
-s |I32 |do_trans_simple_utf8 |SV *sv
-s |I32 |do_trans_count_utf8 |SV *sv
-s |I32 |do_trans_complex_utf8 |SV *sv
+sR |I32 |do_trans_simple |NN SV *sv
+sR |I32 |do_trans_count |NN SV *sv
+sR |I32 |do_trans_complex |NN SV *sv
+sR |I32 |do_trans_simple_utf8 |NN SV *sv
+sR |I32 |do_trans_count_utf8 |NN SV *sv
+sR |I32 |do_trans_complex_utf8 |NN SV *sv
#endif
#if defined(PERL_IN_GV_C) || defined(PERL_DECL_PROT)
-s |void |gv_init_sv |GV *gv|I32 sv_type
-s |void |require_errno |GV *gv
+s |void |gv_init_sv |NN GV *gv|I32 sv_type
+s |void |require_errno |NN GV *gv
#endif
#if defined(PERL_IN_HV_C) || defined(PERL_DECL_PROT)
-s |void |hsplit |HV *hv
-s |void |hfreeentries |HV *hv
-s |void |more_he
-s |HE* |new_he
-s |void |del_he |HE *p
-s |HEK* |save_hek_flags |const char *str|I32 len|U32 hash|int flags
-s |void |hv_magic_check |HV *hv|bool *needs_copy|bool *needs_store
-s |void |unshare_hek_or_pvn|HEK* hek|const char* sv|I32 len|U32 hash
-s |HEK* |share_hek_flags|const char* sv|I32 len|U32 hash|int flags
-s |void |hv_notallowed |int flags|const char *key|I32 klen|const char *msg
+s |void |hsplit |NN HV *hv
+s |void |hfreeentries |NN HV *hv
+sa |HE* |new_he
+s |void |del_he |NN HE *p
+sa |HEK* |save_hek_flags |NN const char *str|I32 len|U32 hash|int flags
+s |void |hv_magic_check |NN HV *hv|NN bool *needs_copy|NN bool *needs_store
+s |void |unshare_hek_or_pvn|NULLOK HEK* hek|NULLOK const char* str|I32 len|U32 hash
+sR |HEK* |share_hek_flags|NN const char* str|I32 len|U32 hash|int flags
+rs |void |hv_notallowed |int flags|NN const char *key|I32 klen|NN const char *msg
#endif
#if defined(PERL_IN_MG_C) || defined(PERL_DECL_PROT)
-s |void |save_magic |I32 mgs_ix|SV *sv
-s |int |magic_methpack |SV *sv|MAGIC *mg|char *meth
-s |int |magic_methcall |SV *sv|MAGIC *mg|char *meth|I32 f \
- |int n|SV *val
+s |void |save_magic |I32 mgs_ix|NN SV *sv
+s |int |magic_methpack |NN SV *sv|NN const MAGIC *mg|NN const char *meth
+s |int |magic_methcall |NN SV *sv|NN const MAGIC *mg|NN const char *meth|I32 f \
+ |int n|NULLOK SV *val
+s |void |restore_magic |NN const void *p
+s |void |unwind_handler_stack|NN const void *p
+
#endif
#if defined(PERL_IN_OP_C) || defined(PERL_DECL_PROT)
-s |I32 |list_assignment|OP *o
-s |void |bad_type |I32 n|char *t|char *name|OP *kid
-s |void |cop_free |COP *cop
-s |OP* |modkids |OP *o|I32 type
-s |void |no_bareword_allowed|OP *o
-s |OP* |no_fh_allowed |OP *o
-s |OP* |scalarboolean |OP *o
-s |OP* |too_few_arguments|OP *o|char* name
-s |OP* |too_many_arguments|OP *o|char* name
-s |OP* |newDEFSVOP
-s |OP* |new_logop |I32 type|I32 flags|OP **firstp|OP **otherp
-s |void |simplify_sort |OP *o
-s |bool |is_handle_constructor |OP *o|I32 argnum
-s |char* |gv_ename |GV *gv
-s |bool |scalar_mod_type|OP *o|I32 type
-s |OP * |my_kid |OP *o|OP *attrs|OP **imopsp
-s |OP * |dup_attrlist |OP *o
-s |void |apply_attrs |HV *stash|SV *target|OP *attrs|bool for_my
-s |void |apply_attrs_my |HV *stash|OP *target|OP *attrs|OP **imopsp
+sR |bool |is_handle_constructor|NN const OP *o|I32 numargs
+sR |I32 |is_list_assignment|NULLOK const 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* |newDEFSVOP
+sR |OP* |new_logop |I32 type|I32 flags|NN OP **firstp|NN OP **otherp
+s |void |simplify_sort |NN OP *o
+s |const char* |gv_ename |NN GV *gv
+s |bool |scalar_mod_type|NN 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|bool for_my
+s |void |apply_attrs_my |NN HV *stash|NN OP *target|NULLOK OP *attrs|NN OP **imopsp
+s |void |bad_type |I32 n|NN const char *t|NN const char *name|NN const OP *kid
+s |void |no_bareword_allowed|NN const OP *o
+sR |OP* |no_fh_allowed|NN OP *o
+sR |OP* |too_few_arguments|NN OP *o|NN const char* name
+sR |OP* |too_many_arguments|NN OP *o|NN const char* name
#endif
#if defined(PL_OP_SLAB_ALLOC)
-Ap |void* |Slab_Alloc |int m|size_t sz
-Ap |void |Slab_Free |void *op
+Apa |void* |Slab_Alloc |int m|size_t sz
+Ap |void |Slab_Free |NN void *op
#endif
#if defined(PERL_IN_PERL_C) || defined(PERL_DECL_PROT)
s |void |find_beginning
-s |void |forbid_setid |char *
-s |void |incpush |char *|int|int|int
+s |void |forbid_setid |NN const char * s
+s |void |incpush |NULLOK const char *dir|bool addsubdirs|bool addoldvers|bool usesep
s |void |init_interp
s |void |init_ids
s |void |init_lexer
s |void |init_main_stash
s |void |init_perllib
-s |void |init_postdump_symbols|int|char **|char **
+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 |void |open_script |char *|bool|SV *
-s |void |usage |char *
-s |void |validate_suid |char *|char*
+s |void |open_script |NN const char *scriptname|bool dosearch|NN SV *sv
+s |void |usage |NN const char *name
+s |void |validate_suid |NN const char *validarg|NN const char *scriptname
# if defined(IAMSUID)
s |int |fd_on_nosuid_fs|int fd
# endif
-s |void* |parse_body |char **env|XSINIT_t xsinit
-s |void* |run_body |I32 oldscope
-s |void |call_body |OP *myop|int is_eval
-s |void* |call_list_body |CV *cv
+s |void* |parse_body |NULLOK char **env|XSINIT_t xsinit
+rs |void |run_body |I32 oldscope
+s |void |call_body |NN const OP *myop|bool is_eval
+s |void* |call_list_body |NN CV *cv
#if defined(PERL_FLEXIBLE_EXCEPTIONS)
s |void* |vparse_body |va_list args
s |void* |vrun_body |va_list args
@@ -1086,140 +1105,131 @@ s |struct perl_thread * |init_main_thread
#endif
#if defined(PERL_IN_PP_C) || defined(PERL_DECL_PROT)
-s |SV* |refto |SV* sv
+sR |SV* |refto |NN SV* sv
#endif
#if defined(PERL_IN_PP_PACK_C) || defined(PERL_DECL_PROT)
-s |I32 |unpack_rec |tempsym_t* symptr|char *s|char *strbeg|char *strend|char **new_s
-s |SV ** |pack_rec |SV *cat|tempsym_t* symptr|SV **beglist|SV **endlist
-s |SV* |mul128 |SV *sv|U8 m
-s |I32 |measure_struct |tempsym_t* symptr
-s |char * |group_end |char *pat|char *patend|char ender
-s |char * |get_num |char *ppat|I32 *
-s |bool |next_symbol |tempsym_t* symptr
-s |void |doencodes |SV* sv|char* s|I32 len
-s |SV* |is_an_int |char *s|STRLEN l
-s |int |div128 |SV *pnum|bool *done
+s |I32 |unpack_rec |NN tempsym_t* symptr|NN char *s \
+ |NN char *strbeg|NN char *strend|NULLOK char **new_s
+s |SV ** |pack_rec |NN SV *cat|NN tempsym_t* symptr|NN SV **beglist|NN SV **endlist
+s |SV* |mul128 |NN SV *sv|U8 m
+s |I32 |measure_struct |NN tempsym_t* symptr
+s |const char * |group_end |NN const char *pat|NN const char *patend|char ender
+s |const char * |get_num |NN const char *ppat|NN I32 *
+s |bool |next_symbol |NN tempsym_t* symptr
+s |void |doencodes |NN SV* sv|NN char* s|I32 len
+sR |SV* |is_an_int |NN const char *s|STRLEN l
+s |int |div128 |NN SV *pnum|NN bool *done
#endif
#if defined(PERL_IN_PP_CTL_C) || defined(PERL_DECL_PROT)
-s |OP* |docatch |OP *o
-s |void* |docatch_body
+sR |OP* |docatch |NULLOK OP *o
+s |void |docatch_body
#if defined(PERL_FLEXIBLE_EXCEPTIONS)
s |void* |vdocatch_body |va_list args
#endif
-s |OP* |dofindlabel |OP *o|char *label|OP **opstack|OP **oplimit
-s |OP* |doparseform |SV *sv
-sn |bool |num_overflow |NV value|I32 fldsize|I32 frcsize
-s |I32 |dopoptoeval |I32 startingblock
-s |I32 |dopoptolabel |char *label
-s |I32 |dopoptoloop |I32 startingblock
-s |I32 |dopoptosub |I32 startingblock
-s |I32 |dopoptosub_at |PERL_CONTEXT* cxstk|I32 startingblock
-s |void |save_lines |AV *array|SV *sv
-s |OP* |doeval |int gimme|OP** startop|CV* outside|U32 seq
-s |PerlIO *|doopen_pm |const char *name|const char *mode
-s |bool |path_is_absolute|char *name
+sR |OP* |dofindlabel |NN OP *o|NN const char *label|NN OP **opstack|NN OP **oplimit
+sR |OP* |doparseform |NN SV *sv
+snR |bool |num_overflow |NV value|I32 fldsize|I32 frcsize
+sR |I32 |dopoptoeval |I32 startingblock
+sR |I32 |dopoptolabel |NN const char *label
+sR |I32 |dopoptoloop |I32 startingblock
+sR |I32 |dopoptosub |I32 startingblock
+sR |I32 |dopoptosub_at |NN const PERL_CONTEXT* cxstk|I32 startingblock
+s |void |save_lines |NULLOK AV *array|NN SV *sv
+sR |OP* |doeval |int gimme|NULLOK OP** startop|NULLOK CV* outside|U32 seq
+sR |PerlIO *|check_type_and_open|NN const char *name|NN const char *mode
+sR |PerlIO *|doopen_pm |NN const char *name|NN const char *mode
+sR |bool |path_is_absolute|NN const char *name
#endif
#if defined(PERL_IN_PP_HOT_C) || defined(PERL_DECL_PROT)
-s |int |do_maybe_phash |AV *ary|SV **lelem|SV **firstlelem \
- |SV **relem|SV **lastrelem
-s |void |do_oddball |HV *hash|SV **relem|SV **firstrelem
-s |CV* |get_db_sub |SV **svp|CV *cv
-s |SV* |method_common |SV* meth|U32* hashp
+s |int |do_maybe_phash |NN AV *ary|NN SV **lelem|NN SV **firstlelem \
+ |NN SV **relem|NN SV **lastrelem
+s |void |do_oddball |NN HV *hash|NN SV **relem|NN SV **firstrelem
+sR |CV* |get_db_sub |NN SV **svp|NN CV *cv
+sR |SV* |method_common |NN SV* meth|NULLOK U32* hashp
#endif
#if defined(PERL_IN_PP_SYS_C) || defined(PERL_DECL_PROT)
-s |OP* |doform |CV *cv|GV *gv|OP *retop
-s |int |emulate_eaccess|const char* path|Mode_t mode
+s |OP* |doform |NN CV *cv|NN GV *gv|NN OP *retop
+s |int |emulate_eaccess|NN const char* path|Mode_t mode
# if !defined(HAS_MKDIR) || !defined(HAS_RMDIR)
-s |int |dooneliner |char *cmd|char *filename
+sR |int |dooneliner |NN const char *cmd|NN const char *filename
# endif
#endif
#if defined(PERL_IN_REGCOMP_C) || defined(PERL_DECL_PROT)
-Es |regnode*|reg |struct RExC_state_t*|I32|I32 *
-Es |regnode*|reganode |struct RExC_state_t*|U8|U32
-Es |regnode*|regatom |struct RExC_state_t*|I32 *
-Es |regnode*|regbranch |struct RExC_state_t*|I32 *|I32
-Es |void |reguni |struct RExC_state_t*|UV|char *|STRLEN*
-Es |regnode*|regclass |struct RExC_state_t*
-Es |I32 |regcurly |char *
-Es |regnode*|reg_node |struct RExC_state_t*|U8
-Es |regnode*|regpiece |struct RExC_state_t*|I32 *
-Es |void |reginsert |struct RExC_state_t*|U8|regnode *
-Es |void |regoptail |struct RExC_state_t*|regnode *|regnode *
-Es |void |regtail |struct RExC_state_t*|regnode *|regnode *
-Es |char*|regwhite |char *|char *
-Es |char*|nextchar |struct RExC_state_t*
+Es |regnode*|reg |NN struct RExC_state_t *state|I32 paren|NN I32 *flagp
+Es |regnode*|reganode |NN struct RExC_state_t *state|U8 op|U32 arg
+Es |regnode*|regatom |NN struct RExC_state_t *state|NN I32 *flagp
+Es |regnode*|regbranch |NN struct RExC_state_t *state|NN I32 *flagp|I32 first
+Es |void |reguni |NN const struct RExC_state_t *state|UV uv|NN char *s|NN STRLEN *lenp
+Es |regnode*|regclass |NN struct RExC_state_t *state
+ERs |I32 |regcurly |NN const char *
+Es |regnode*|reg_node |NN struct RExC_state_t *state|U8 op
+Es |regnode*|regpiece |NN struct RExC_state_t *state|NN I32 *flagp
+Es |void |reginsert |NN struct RExC_state_t *state|U8 op|NN regnode *opnd
+Es |void |regoptail |NN struct RExC_state_t *state|NN regnode *p|NN regnode *val
+Es |void |regtail |NN struct RExC_state_t *state|NN regnode *p|NN regnode *val
+Es |char* |regwhite |NN char *p|NN const char *e
+Es |char* |nextchar |NN struct RExC_state_t*
# ifdef DEBUGGING
-Es |regnode*|dumpuntil |regnode *start|regnode *node \
- |regnode *last|SV* sv|I32 l
-Es |void |put_byte |SV* sv|int c
+Es |regnode*|dumpuntil |NN regnode *start|NN regnode *node \
+ |NULLOK regnode *last|NN SV* sv|I32 l
+Es |void |put_byte |NN SV* sv|int c
# endif
-Es |void |scan_commit |struct RExC_state_t*|struct scan_data_t *data
-Es |void |cl_anything |struct RExC_state_t*|struct regnode_charclass_class *cl
-Es |int |cl_is_anything |struct regnode_charclass_class *cl
-Es |void |cl_init |struct RExC_state_t*|struct regnode_charclass_class *cl
-Es |void |cl_init_zero |struct RExC_state_t*|struct regnode_charclass_class *cl
-Es |void |cl_and |struct regnode_charclass_class *cl \
- |struct regnode_charclass_class *and_with
-Es |void |cl_or |struct RExC_state_t*|struct regnode_charclass_class *cl \
- |struct regnode_charclass_class *or_with
-Es |I32 |study_chunk |struct RExC_state_t*|regnode **scanp|I32 *deltap \
- |regnode *last|struct scan_data_t *data \
+Es |void |scan_commit |NN struct RExC_state_t*|NN struct scan_data_t *data
+Es |void |cl_anything |NN struct RExC_state_t*|NN struct regnode_charclass_class *cl
+Es |int |cl_is_anything |NN const struct regnode_charclass_class *cl
+Es |void |cl_init |NN struct RExC_state_t*|NN struct regnode_charclass_class *cl
+Es |void |cl_init_zero |NN struct RExC_state_t*|NN struct regnode_charclass_class *cl
+Es |void |cl_and |NN struct regnode_charclass_class *cl \
+ |NN const struct regnode_charclass_class *and_with
+Es |void |cl_or |NN struct RExC_state_t*|NN struct regnode_charclass_class *cl \
+ |NN const struct regnode_charclass_class *or_with
+Es |I32 |study_chunk |NN struct RExC_state_t* pRExC_state|NN regnode **scanp \
+ |NN I32 *deltap|NN regnode *last|NULLOK struct scan_data_t *data \
|U32 flags
-Es |I32 |add_data |struct RExC_state_t*|I32 n|char *s
-rs |void|re_croak2 |const char* pat1|const char* pat2|...
-Es |I32 |regpposixcc |struct RExC_state_t*|I32 value
-Es |void |checkposixcc |struct RExC_state_t*
+Es |I32 |add_data |NN struct RExC_state_t*|I32 n|NN const char *s
+rs |void |re_croak2 |NN const char* pat1|NN const char* pat2|...
+Es |I32 |regpposixcc |NN struct RExC_state_t*|I32 value
+Es |void |checkposixcc |NN struct RExC_state_t*
#endif
#if defined(PERL_IN_REGEXEC_C) || defined(PERL_DECL_PROT)
-Es |I32 |regmatch |regnode *prog
-Es |I32 |regrepeat |regnode *p|I32 max
-Es |I32 |regrepeat_hard |regnode *p|I32 max|I32 *lp
-Es |I32 |regtry |regexp *prog|char *startpos
-Es |bool |reginclass |regnode *n|U8 *p|STRLEN *lenp|bool do_utf8sv_is_utf8
+ERs |I32 |regmatch |NN regnode *prog
+ERs |I32 |regrepeat |NN const regnode *p|I32 max
+ERs |I32 |regrepeat_hard |NN regnode *p|I32 max|NN I32 *lp
+ERs |I32 |regtry |NN regexp *prog|NN char *startpos
+ERs |bool |reginclass |NN const regnode *n|NN const U8 *p|NULLOK STRLEN *lenp\
+ |bool do_utf8sv_is_utf8
Es |CHECKPOINT|regcppush |I32 parenfloor
Es |char*|regcppop
Es |char*|regcp_set_to |I32 ss
-Es |void |cache_re |regexp *prog
-Es |U8* |reghop |U8 *pos|I32 off
-Es |U8* |reghop3 |U8 *pos|I32 off|U8 *lim
-Es |U8* |reghopmaybe |U8 *pos|I32 off
-Es |U8* |reghopmaybe3 |U8 *pos|I32 off|U8 *lim
-Es |char* |find_byclass |regexp * prog|regnode *c|char *s|char *strend|char *startpos|I32 norun
-Es |void |to_utf8_substr |regexp * prog
-Es |void |to_byte_substr |regexp * prog
+Es |void |cache_re |NN regexp *prog
+ERs |U8* |reghop |NN U8 *pos|I32 off
+ERs |U8* |reghop3 |NN U8 *pos|I32 off|NN U8 *lim
+ERs |U8* |reghopmaybe |NN U8 *pos|I32 off
+ERs |U8* |reghopmaybe3 |NN U8 *pos|I32 off|NN U8 *lim
+ERs |char* |find_byclass |NN regexp * prog|NN regnode *c|NN char *s|NN const char *strend|I32 norun
+Es |void |to_utf8_substr |NN regexp * prog
+Es |void |to_byte_substr |NN regexp * prog
#endif
#if defined(PERL_IN_DUMP_C) || defined(PERL_DECL_PROT)
s |CV* |deb_curcv |I32 ix
-s |void |debprof |OP *o
+s |void |debprof |NN const OP *o
#endif
#if defined(PERL_IN_SCOPE_C) || defined(PERL_DECL_PROT)
-s |SV* |save_scalar_at |SV **sptr
+s |SV* |save_scalar_at |NN SV **sptr
#endif
#if defined(PERL_IN_SV_C) || defined(PERL_DECL_PROT)
-s |IV |asIV |SV* sv
-s |UV |asUV |SV* sv
-s |SV* |more_sv
-s |void |more_xiv
-s |void |more_xnv
-s |void |more_xpv
-s |void |more_xpviv
-s |void |more_xpvnv
-s |void |more_xpvcv
-s |void |more_xpvav
-s |void |more_xpvhv
-s |void |more_xpvmg
-s |void |more_xpvlv
-s |void |more_xpvbm
-s |void |more_xrv
+nsR |char * |uiv_2buf |NN char *buf|IV iv|UV uv|int is_uv|NN char **peob
+sR |IV |asIV |NN SV* sv
+sR |UV |asUV |NN SV* sv
s |XPVIV* |new_xiv
s |XPVNV* |new_xnv
s |XPV* |new_xpv
@@ -1232,197 +1242,344 @@ s |XPVMG* |new_xpvmg
s |XPVLV* |new_xpvlv
s |XPVBM* |new_xpvbm
s |XRV* |new_xrv
-s |void |del_xiv |XPVIV* p
-s |void |del_xnv |XPVNV* p
-s |void |del_xpv |XPV* p
-s |void |del_xpviv |XPVIV* p
-s |void |del_xpvnv |XPVNV* p
-s |void |del_xpvcv |XPVCV* p
-s |void |del_xpvav |XPVAV* p
-s |void |del_xpvhv |XPVHV* p
-s |void |del_xpvmg |XPVMG* p
-s |void |del_xpvlv |XPVLV* p
-s |void |del_xpvbm |XPVBM* p
-s |void |del_xrv |XRV* p
-s |void |sv_unglob |SV* sv
-s |void |not_a_number |SV *sv
-s |I32 |visit |SVFUNC_t f|U32 flags|U32 mask
-s |void |sv_add_backref |SV *tsv|SV *sv
-s |void |sv_del_backref |SV *sv
+s |void |del_xiv |NN XPVIV* p
+s |void |del_xnv |NN XPVNV* p
+s |void |del_xpv |NN XPV* p
+s |void |del_xpviv |NN XPVIV* p
+s |void |del_xpvnv |NN XPVNV* p
+s |void |del_xpvcv |NN XPVCV* p
+s |void |del_xpvav |NN XPVAV* p
+s |void |del_xpvhv |NN XPVHV* p
+s |void |del_xpvmg |NN XPVMG* p
+s |void |del_xpvlv |NN XPVLV* p
+s |void |del_xpvbm |NN XPVBM* p
+s |void |del_xrv |NN XRV* p
+s |void |sv_unglob |NN SV* sv
+s |void |not_a_number |NN SV *sv
+s |I32 |visit |NN SVFUNC_t f|U32 flags|U32 mask
+s |void |sv_add_backref |NN SV *tsv|NN SV *sv
+s |void |sv_del_backref |NN SV *sv
# ifdef DEBUGGING
-s |void |del_sv |SV *p
+s |void |del_sv |NN SV *p
# endif
# if !defined(NV_PRESERVES_UV)
-s |int |sv_2iuv_non_preserve |SV *sv|I32 numtype
+s |int |sv_2iuv_non_preserve |NN SV *sv|I32 numtype
# endif
-s |I32 |expect_number |char** pattern
+sR |I32 |expect_number |NN char** pattern
#
-# if defined(USE_ITHREADS)
-s |SV* |gv_share |SV *sv|CLONE_PARAMS *param
-# endif
-s |bool |utf8_mg_pos |SV *sv|MAGIC **mgp|STRLEN **cachep|I32 i|I32 *offsetp|I32 uoff|U8 **sp|U8 *start|U8 *send
-s |bool |utf8_mg_pos_init |SV *sv|MAGIC **mgp|STRLEN **cachep|I32 i|I32 *offsetp|U8 *s|U8 *start
+s |bool |utf8_mg_pos |NN SV *sv|NN MAGIC **mgp|NN STRLEN **cachep \
+ |I32 i|NN I32 *offsetp|I32 uoff \
+ |NN const U8 **sp|NN const U8 *start \
+ |NN const U8 *send
+s |bool |utf8_mg_pos_init |NN SV *sv|NN MAGIC **mgp \
+ |NN STRLEN **cachep|I32 i|I32 offsetp \
+ |NN const U8 *s|NN const U8 *start
#endif
#if defined(PERL_IN_TOKE_C) || defined(PERL_DECL_PROT)
s |void |check_uni
s |void |force_next |I32 type
-s |char* |force_version |char *start|int guessing
-s |char* |force_word |char *start|int token|int check_keyword \
+s |char* |force_version |NN char *start|int guessing
+s |char* |force_word |NN char *start|int token|int check_keyword \
|int allow_pack|int allow_tick
-s |SV* |tokeq |SV *sv
+s |SV* |tokeq |NN SV *sv
s |int |pending_ident
-s |char* |scan_const |char *start
-s |char* |scan_formline |char *s
-s |char* |scan_heredoc |char *s
-s |char* |scan_ident |char *s|char *send|char *dest \
+sR |char* |scan_const |NN char *start
+sR |char* |scan_formline |NN char *s
+sR |char* |scan_heredoc |NN char *s
+s |char* |scan_ident |NN char *s|NN const char *send|NN char *dest \
|STRLEN destlen|I32 ck_uni
-s |char* |scan_inputsymbol|char *start
-s |char* |scan_pat |char *start|I32 type
-s |char* |scan_str |char *start|int keep_quoted|int keep_delims
-s |char* |scan_subst |char *start
-s |char* |scan_trans |char *start
-s |char* |scan_word |char *s|char *dest|STRLEN destlen \
- |int allow_package|STRLEN *slp
-s |char* |skipspace |char *s
-s |char* |swallow_bom |U8 *s
-s |void |checkcomma |char *s|char *name|char *what
-s |void |force_ident |char *s|int kind
-s |void |incline |char *s
-s |int |intuit_method |char *s|GV *gv
-s |int |intuit_more |char *s
-s |I32 |lop |I32 f|int x|char *s
-s |void |missingterm |char *s
-s |void |no_op |char *what|char *s
+sR |char* |scan_inputsymbol|NN char *start
+sR |char* |scan_pat |NN char *start|I32 type
+sR |char* |scan_str |NN char *start|int keep_quoted|int keep_delims
+sR |char* |scan_subst |NN char *start
+sR |char* |scan_trans |NN char *start
+s |char* |scan_word |NN char *s|NN char *dest|STRLEN destlen \
+ |int allow_package|NN STRLEN *slp
+sR |char* |skipspace |NN char *s
+sR |char* |swallow_bom |NN U8 *s
+s |void |checkcomma |NN char *s|NN const char *name|NN const char *what
+s |void |force_ident |NN const char *s|int kind
+s |void |incline |NN char *s
+s |int |intuit_method |NN char *s|NULLOK GV *gv
+s |int |intuit_more |NN char *s
+s |I32 |lop |I32 f|int x|NN char *s
+rs |void |missingterm |NULLOK char *s
+s |void |no_op |NN const char *what|NULLOK char *s
s |void |set_csh
-s |I32 |sublex_done
-s |I32 |sublex_push
-s |I32 |sublex_start
-s |char * |filter_gets |SV *sv|PerlIO *fp|STRLEN append
-s |HV * |find_in_my_stash|char *pkgname|I32 len
-s |SV* |new_constant |char *s|STRLEN len|const char *key|SV *sv \
- |SV *pv|const char *type
+sR |I32 |sublex_done
+sR |I32 |sublex_push
+sR |I32 |sublex_start
+sR |char * |filter_gets |NN SV *sv|NN PerlIO *fp|STRLEN append
+sR |HV * |find_in_my_stash|NN const char *pkgname|I32 len
+s |SV* |new_constant |NULLOK const char *s|STRLEN len|NN const char *key|NN SV *sv \
+ |NULLOK SV *pv|NULLOK const char *type
# if defined(DEBUGGING)
-s |void |tokereport |char *thing|char *s|I32 rv
+s |int |tokereport |NN const char *s|I32 rv
# endif
s |int |ao |int toketype
s |void |depcom
-s |char* |incl_perldb
-#if 0
-s |I32 |utf16_textfilter|int idx|SV *sv|int maxlen
-s |I32 |utf16rev_textfilter|int idx|SV *sv|int maxlen
-#endif
+s |const char*|incl_perldb
# if defined(PERL_CR_FILTER)
-s |I32 |cr_textfilter |int idx|SV *sv|int maxlen
+s |I32 |cr_textfilter |int idx|NULLOK SV *sv|int maxlen
# endif
#endif
#if defined(PERL_IN_UNIVERSAL_C) || defined(PERL_DECL_PROT)
-s |SV*|isa_lookup |HV *stash|const char *name|HV *name_stash|int len|int level
+s |SV*|isa_lookup |NULLOK HV *stash|NN const char *name|NULLOK HV *name_stash|int len|int level
#endif
#if defined(PERL_IN_LOCALE_C) || defined(PERL_DECL_PROT)
-s |char* |stdize_locale |char* locs
+s |char* |stdize_locale |NN char* locs
#endif
#if defined(PERL_IN_UTIL_C) || defined(PERL_DECL_PROT)
-s |COP* |closest_cop |COP *cop|OP *o
+s |COP* |closest_cop |NN COP *cop|NULLOK const OP *o
s |SV* |mess_alloc
+xo |const char *|vdie_croak_common|NULLOK const char *pat|NULLOK va_list *args \
+ |NULLOK STRLEN *msglen|NULLOK I32* utf8
+xo |void |vdie_common |NULLOK const char *message|STRLEN msglen|I32 utf8
#endif
#if defined(PERL_IN_NUMERIC_C) || defined(PERL_DECL_PROT)
sn |NV|mulexp10 |NV value|I32 exponent
#endif
+#if defined(PERL_IN_UTF8_C) || defined(PERL_DECL_PROT)
+s |STRLEN |is_utf8_char_slow|NN const U8 *s|const STRLEN len
+#endif
+
START_EXTERN_C
-Apd |void |sv_setsv_flags |SV* dsv|SV* ssv|I32 flags
-Apd |void |sv_catpvn_flags|SV* sv|const char* ptr|STRLEN len|I32 flags
-Apd |void |sv_catsv_flags |SV* dsv|SV* ssv|I32 flags
-Apd |STRLEN |sv_utf8_upgrade_flags|SV *sv|I32 flags
-Apd |char* |sv_pvn_force_flags|SV* sv|STRLEN* lp|I32 flags
-Apd |char* |sv_2pv_flags |SV* sv|STRLEN* lp|I32 flags
-Apd |void |sv_copypv |SV* dsv|SV* ssv
-Ap |char* |my_atof2 |const char *s|NV* value
+Apd |void |sv_setsv_flags |NN SV* dsv|NULLOK SV* ssv|I32 flags
+Apd |void |sv_catpvn_flags|NN SV* sv|NN const char* ptr|STRLEN len|I32 flags
+Apd |void |sv_catsv_flags |NN SV* dsv|NULLOK SV* ssv|I32 flags
+Apd |STRLEN |sv_utf8_upgrade_flags|NN SV *sv|I32 flags
+Apd |char* |sv_pvn_force_flags|NN SV* sv|NULLOK STRLEN* lp|I32 flags
+Apd |char* |sv_2pv_flags |NN SV* sv|NULLOK STRLEN* lp|I32 flags
+Apd |void |sv_copypv |NN SV* dsv|NN SV* ssv
+Ap |char* |my_atof2 |NN const char *s|NN NV* value
Apn |int |my_socketpair |int family|int type|int protocol|int fd[2]
#if defined(USE_PERLIO) && !defined(USE_SFIO)
-Ap |int |PerlIO_close |PerlIO *
-Ap |int |PerlIO_fill |PerlIO *
-Ap |int |PerlIO_fileno |PerlIO *
-Ap |int |PerlIO_eof |PerlIO *
-Ap |int |PerlIO_error |PerlIO *
-Ap |int |PerlIO_flush |PerlIO *
-Ap |void |PerlIO_clearerr |PerlIO *
-Ap |void |PerlIO_set_cnt |PerlIO *|int
-Ap |void |PerlIO_set_ptrcnt |PerlIO *|STDCHAR *|int
-Ap |void |PerlIO_setlinebuf |PerlIO *
-Ap |SSize_t|PerlIO_read |PerlIO *|void *|Size_t
-Ap |SSize_t|PerlIO_write |PerlIO *|const void *|Size_t
-Ap |SSize_t|PerlIO_unread |PerlIO *|const void *|Size_t
-Ap |Off_t |PerlIO_tell |PerlIO *
-Ap |int |PerlIO_seek |PerlIO *|Off_t|int
+Ap |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|int cnt
+Ap |void |PerlIO_set_ptrcnt |NULLOK PerlIO *f|NN STDCHAR *ptr|int cnt
+Ap |void |PerlIO_setlinebuf |NULLOK PerlIO *f
+Ap |SSize_t|PerlIO_read |NULLOK PerlIO *f|NN void *buf|Size_t count
+Ap |SSize_t|PerlIO_write |NULLOK PerlIO *f|NN const void *buf|Size_t count
+Ap |SSize_t|PerlIO_unread |NULLOK PerlIO *f|NN const void *buf|Size_t count
+Ap |Off_t |PerlIO_tell |NULLOK PerlIO *f
+Ap |int |PerlIO_seek |NULLOK PerlIO *f|Off_t offset|int whence
-Ap |STDCHAR *|PerlIO_get_base |PerlIO *
-Ap |STDCHAR *|PerlIO_get_ptr |PerlIO *
-Ap |int |PerlIO_get_bufsiz |PerlIO *
-Ap |int |PerlIO_get_cnt |PerlIO *
+Ap |STDCHAR *|PerlIO_get_base |NULLOK PerlIO *f
+Ap |STDCHAR *|PerlIO_get_ptr |NULLOK PerlIO *f
+ApR |int |PerlIO_get_bufsiz |NULLOK PerlIO *f
+ApR |int |PerlIO_get_cnt |NULLOK PerlIO *f
-Ap |PerlIO *|PerlIO_stdin
-Ap |PerlIO *|PerlIO_stdout
-Ap |PerlIO *|PerlIO_stderr
+ApR |PerlIO *|PerlIO_stdin
+ApR |PerlIO *|PerlIO_stdout
+ApR |PerlIO *|PerlIO_stderr
#endif /* PERLIO_LAYERS */
p |void |deb_stack_all
#ifdef PERL_IN_DEB_C
-s |void |deb_stack_n |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
-pd |PADLIST*|pad_new |int flags
-pd |void |pad_undef |CV* cv
-pd |PADOFFSET|pad_add_name |char *name\
- |HV* typestash|HV* ourstash \
- |bool clone
-pd |PADOFFSET|pad_add_anon |SV* sv|OPCODE op_type
-pd |void |pad_check_dup |char* name|bool is_our|HV* ourstash
+pda |PADLIST*|pad_new |int flags
+pd |void |pad_undef |NN CV* cv
+pd |PADOFFSET|pad_add_name |NN char *name\
+ |NULLOK HV* typestash|NULLOK HV* ourstash|bool clone
+pd |PADOFFSET|pad_add_anon |NN SV* sv|OPCODE op_type
+pd |void |pad_check_dup |NN char* name|bool is_our|NN HV* ourstash
#ifdef DEBUGGING
-pd |void |pad_setsv |PADOFFSET po|SV* sv
+pd |void |pad_setsv |PADOFFSET po|NN SV* sv
#endif
pd |void |pad_block_start|int full
pd |void |pad_tidy |padtidy_type type
-pd |void |do_dump_pad |I32 level|PerlIO *file \
- |PADLIST *padlist|int full
-pd |void |pad_fixup_inner_anons|PADLIST *padlist|CV *old_cv|CV *new_cv
+pd |void |do_dump_pad |I32 level|NN PerlIO *file|NULLOK PADLIST *padlist|int full
+pd |void |pad_fixup_inner_anons|NN PADLIST *padlist|NN CV *old_cv|NN CV *new_cv
-pd |void |pad_push |PADLIST *padlist|int depth|int has_args
+pd |void |pad_push |NN PADLIST *padlist|int depth|int has_args
+pR |HV* |pad_compname_type|const PADOFFSET po
#if defined(PERL_IN_PAD_C) || defined(PERL_DECL_PROT)
-sd |PADOFFSET|pad_findlex |char* name|PADOFFSET newoff|CV* innercv
+sd |PADOFFSET|pad_findlex |NN const char* name|PADOFFSET newoff\
+ |NN const CV* innercv
# if defined(DEBUGGING)
-sd |void |cv_dump |CV *cv|char *title
+sd |void |cv_dump |NN const CV *cv|NN const char *title
# endif
-s |CV* |cv_clone2 |CV *proto|CV *outside
+s |CV* |cv_clone2 |NN CV *proto|NULLOK CV *outside
#endif
-pd |CV* |find_runcv |U32 *db_seqp
+pdR |CV* |find_runcv |NULLOK U32 *db_seqp
p |void |free_tied_hv_pool
#if defined(DEBUGGING)
-p |int |get_debug_opts |char **s
+pR |int |get_debug_opts |NN char **s
#endif
+Apd |void |hv_clear_placeholders|NN HV* hb
+#if defined(PERL_IN_HV_C) || defined(PERL_DECL_PROT)
+sM |SV* |hv_delete_common|NULLOK HV* tb|NULLOK SV* key_sv|NULLOK const char* key|STRLEN klen|int k_flags|I32 d_flags|U32 hash
+sM |HE* |hv_fetch_common|NULLOK HV* tb|NULLOK SV* key_sv|NULLOK const char* key|STRLEN klen|int flags|int action|NULLOK SV* val|U32 hash
+#endif
+ApdR |SV* |hv_scalar |NN HV* hv|
+p |SV* |magic_scalarpack|NN HV* hv|NN MAGIC* mg
+#if defined(DEBUGGING)
+p |int |get_debug_opts_flags |NN char **s|int flags
+#endif
-Apd |void |hv_clear_placeholders|HV* hb
+Ap |void |op_refcnt_lock
+Ap |void |op_refcnt_unlock
+Apda |char* |savesvpv |NN SV* sv
-#if defined(PERL_IN_HV_C) || defined(PERL_DECL_PROT)
-sM |SV* |hv_delete_common|HV* tb|SV* key_sv|const char* key|STRLEN klen|int k_flags|I32 d_flags|U32 hash
-sM |HE* |hv_fetch_common|HV* tb|SV* key_sv|const char* key|STRLEN klen|int flags|int action|SV* val|U32 hash
+#ifdef PERL_NEED_MY_HTOLE16
+np |U16 |my_htole16 |U16 n
+#endif
+#ifdef PERL_NEED_MY_LETOH16
+np |U16 |my_letoh16 |U16 n
+#endif
+#ifdef PERL_NEED_MY_HTOBE16
+np |U16 |my_htobe16 |U16 n
+#endif
+#ifdef PERL_NEED_MY_BETOH16
+np |U16 |my_betoh16 |U16 n
+#endif
+#ifdef PERL_NEED_MY_HTOLE32
+np |U32 |my_htole32 |U32 n
+#endif
+#ifdef PERL_NEED_MY_LETOH32
+np |U32 |my_letoh32 |U32 n
+#endif
+#ifdef PERL_NEED_MY_HTOBE32
+np |U32 |my_htobe32 |U32 n
+#endif
+#ifdef PERL_NEED_MY_BETOH32
+np |U32 |my_betoh32 |U32 n
+#endif
+#ifdef PERL_NEED_MY_HTOLE64
+np |U64 |my_htole64 |U64 n
+#endif
+#ifdef PERL_NEED_MY_LETOH64
+np |U64 |my_letoh64 |U64 n
+#endif
+#ifdef PERL_NEED_MY_HTOBE64
+np |U64 |my_htobe64 |U64 n
+#endif
+#ifdef PERL_NEED_MY_BETOH64
+np |U64 |my_betoh64 |U64 n
#endif
-Apd |SV* |hv_scalar |HV* hv|
-p |SV* |magic_scalarpack|HV* hv|MAGIC* mg
-#if defined(DEBUGGING)
-p |int |get_debug_opts_flags |char **s|int flags
+#ifdef PERL_NEED_MY_HTOLES
+np |short |my_htoles |short n
+#endif
+#ifdef PERL_NEED_MY_LETOHS
+np |short |my_letohs |short n
+#endif
+#ifdef PERL_NEED_MY_HTOBES
+np |short |my_htobes |short n
+#endif
+#ifdef PERL_NEED_MY_BETOHS
+np |short |my_betohs |short n
+#endif
+#ifdef PERL_NEED_MY_HTOLEI
+np |int |my_htolei |int n
+#endif
+#ifdef PERL_NEED_MY_LETOHI
+np |int |my_letohi |int n
+#endif
+#ifdef PERL_NEED_MY_HTOBEI
+np |int |my_htobei |int n
#endif
+#ifdef PERL_NEED_MY_BETOHI
+np |int |my_betohi |int n
+#endif
+#ifdef PERL_NEED_MY_HTOLEL
+np |long |my_htolel |long n
+#endif
+#ifdef PERL_NEED_MY_LETOHL
+np |long |my_letohl |long n
+#endif
+#ifdef PERL_NEED_MY_HTOBEL
+np |long |my_htobel |long n
+#endif
+#ifdef PERL_NEED_MY_BETOHL
+np |long |my_betohl |long n
+#endif
+
+np |void |my_swabn |NN void* ptr|int n
+
+#if defined(PERL_IN_OP_C) || defined(PERL_DECL_PROT)
+ApR |OP* |ck_anoncode |NN OP *o
+ApR |OP* |ck_bitop |NN OP *o
+ApR |OP* |ck_concat |NN OP *o
+ApR |OP* |ck_defined |NN OP *o
+ApR |OP* |ck_delete |NN OP *o
+ApR |OP* |ck_die |NN OP *o
+ApR |OP* |ck_eof |NN OP *o
+ApR |OP* |ck_eval |NN OP *o
+ApR |OP* |ck_exec |NN OP *o
+ApR |OP* |ck_exists |NN OP *o
+ApR |OP* |ck_exit |NN OP *o
+ApR |OP* |ck_ftst |NN OP *o
+ApR |OP* |ck_fun |NN OP *o
+ApR |OP* |ck_glob |NN OP *o
+ApR |OP* |ck_grep |NN OP *o
+ApR |OP* |ck_index |NN OP *o
+ApR |OP* |ck_join |NN OP *o
+ApR |OP* |ck_lengthconst |NN OP *o
+ApR |OP* |ck_lfun |NN OP *o
+ApR |OP* |ck_listiob |NN OP *o
+ApR |OP* |ck_match |NN OP *o
+ApR |OP* |ck_method |NN OP *o
+ApR |OP* |ck_null |NN OP *o
+ApR |OP* |ck_open |NN OP *o
+ApR |OP* |ck_repeat |NN OP *o
+ApR |OP* |ck_require |NN OP *o
+ApR |OP* |ck_return |NN OP *o
+ApR |OP* |ck_rfun |NN OP *o
+ApR |OP* |ck_rvconst |NN OP *o
+ApR |OP* |ck_sassign |NN OP *o
+ApR |OP* |ck_select |NN OP *o
+ApR |OP* |ck_shift |NN OP *o
+ApR |OP* |ck_sort |NN OP *o
+ApR |OP* |ck_spair |NN OP *o
+ApR |OP* |ck_split |NN OP *o
+ApR |OP* |ck_subr |NN OP *o
+ApR |OP* |ck_substr |NN OP *o
+ApR |OP* |ck_svconst |NN OP *o
+ApR |OP* |ck_trunc |NN OP *o
+#endif
+
+Apd |bool |is_utf8_string_loclen|NN const U8 *s|STRLEN len|NULLOK const U8 **ep|NULLOK STRLEN *el
+Apda |SV* |newSVhek |NULLOK const HEK *hek
+ApR |bool |stashpv_hvname_match|NN const COP *cop|NN const HV *hv
+
+p |void |offer_nice_chunk |NN void *chunk|U32 chunk_size
+
+
+#ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
+p |void |dump_sv_child |NN SV *sv
+#endif
+
+#ifdef PERL_DONT_CREATE_GVSV
+Ap |GV* |gv_SVadd |NN GV* gv
+#endif
+Apo |bool |ckwarn |U32 w
+Apo |bool |ckwarn_d |U32 w
+
+px |void |my_clearenv
+
END_EXTERN_C
+/*
+ * ex: set ts=8 sts=4 sw=4 noet:
+ */
diff --git a/gnu/usr.bin/perl/embedvar.h b/gnu/usr.bin/perl/embedvar.h
index 8f485933fe7..4120901f95c 100644
--- a/gnu/usr.bin/perl/embedvar.h
+++ b/gnu/usr.bin/perl/embedvar.h
@@ -1,7 +1,9 @@
-/*
+/* -*- buffer-read-only: t -*-
+ *
* embedvar.h
*
- * Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, by Larry Wall and others
+ * Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+ * 2000, 2001, 2002, 2003, 2004, 2005, 2006, 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.
@@ -247,6 +249,7 @@
#define PL_doextract (PERL_GET_INTERP->Idoextract)
#define PL_doswitches (PERL_GET_INTERP->Idoswitches)
#define PL_dowarn (PERL_GET_INTERP->Idowarn)
+#define PL_dumper_fd (PERL_GET_INTERP->Idumper_fd)
#define PL_e_script (PERL_GET_INTERP->Ie_script)
#define PL_egid (PERL_GET_INTERP->Iegid)
#define PL_encoding (PERL_GET_INTERP->Iencoding)
@@ -386,6 +389,8 @@
#define PL_psig_name (PERL_GET_INTERP->Ipsig_name)
#define PL_psig_pend (PERL_GET_INTERP->Ipsig_pend)
#define PL_psig_ptr (PERL_GET_INTERP->Ipsig_ptr)
+#define PL_pte_arenaroot (PERL_GET_INTERP->Ipte_arenaroot)
+#define PL_pte_root (PERL_GET_INTERP->Ipte_root)
#define PL_ptr_table (PERL_GET_INTERP->Iptr_table)
#define PL_reentrant_buffer (PERL_GET_INTERP->Ireentrant_buffer)
#define PL_reentrant_retint (PERL_GET_INTERP->Ireentrant_retint)
@@ -569,6 +574,7 @@
#define PL_doextract (vTHX->Idoextract)
#define PL_doswitches (vTHX->Idoswitches)
#define PL_dowarn (vTHX->Idowarn)
+#define PL_dumper_fd (vTHX->Idumper_fd)
#define PL_e_script (vTHX->Ie_script)
#define PL_egid (vTHX->Iegid)
#define PL_encoding (vTHX->Iencoding)
@@ -708,6 +714,8 @@
#define PL_psig_name (vTHX->Ipsig_name)
#define PL_psig_pend (vTHX->Ipsig_pend)
#define PL_psig_ptr (vTHX->Ipsig_ptr)
+#define PL_pte_arenaroot (vTHX->Ipte_arenaroot)
+#define PL_pte_root (vTHX->Ipte_root)
#define PL_ptr_table (vTHX->Iptr_table)
#define PL_reentrant_buffer (vTHX->Ireentrant_buffer)
#define PL_reentrant_retint (vTHX->Ireentrant_retint)
@@ -894,6 +902,7 @@
#define PL_Idoextract PL_doextract
#define PL_Idoswitches PL_doswitches
#define PL_Idowarn PL_dowarn
+#define PL_Idumper_fd PL_dumper_fd
#define PL_Ie_script PL_e_script
#define PL_Iegid PL_egid
#define PL_Iencoding PL_encoding
@@ -1033,6 +1042,8 @@
#define PL_Ipsig_name PL_psig_name
#define PL_Ipsig_pend PL_psig_pend
#define PL_Ipsig_ptr PL_psig_ptr
+#define PL_Ipte_arenaroot PL_pte_arenaroot
+#define PL_Ipte_root PL_pte_root
#define PL_Iptr_table PL_ptr_table
#define PL_Ireentrant_buffer PL_reentrant_buffer
#define PL_Ireentrant_retint PL_reentrant_retint
@@ -1498,3 +1509,5 @@
#define tainting PL_tainting
#endif /* PERL_POLLUTE */
+
+/* ex: set ro: */
diff --git a/gnu/usr.bin/perl/epoc/config.sh b/gnu/usr.bin/perl/epoc/config.sh
index 4435a49f8d8..0244db5b757 100644
--- a/gnu/usr.bin/perl/epoc/config.sh
+++ b/gnu/usr.bin/perl/epoc/config.sh
@@ -103,7 +103,13 @@ d_archlib='define'
d_asctime_r='undef'
d_atolf='undef'
d_atoll='undef'
-d_attribut='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_bcmp='define'
d_bcopy='define'
d_bsd='undef'
@@ -117,6 +123,7 @@ d_chown='undef'
d_chroot='undef'
d_chsize='undef'
d_class='undef'
+d_clearenv='define'
d_closedir='undef'
d_cmsghdr_s='undef'
d_cmsghdr_s='undef'
@@ -185,6 +192,7 @@ d_fstatvfs='undef'
d_fsync='undef'
d_ftello='undef'
d_ftime='undef'
+d_futimes='undef'
d_getespwnam='undef'
d_getfsstat='undef'
d_getgrent='undef'
@@ -267,6 +275,8 @@ d_longlong='define'
d_lseekproto='define'
d_lstat='undef'
d_madvise='undef'
+d_malloc_good_size='undef'
+d_malloc_size='undef'
d_mblen='undef'
d_mbstowcs='undef'
d_mbtowc='undef'
@@ -280,6 +290,7 @@ d_mkfifo='undef'
d_mktime='define'
d_mmap='undef'
d_modfl='undef'
+d_modflproto='undef'
d_modfl_pow32_bug='undef'
d_mprotect='undef'
d_msg='undef'
@@ -394,6 +405,7 @@ d_shmget='undef'
d_sigaction='undef'
d_sigprocmask='undef'
d_sigsetjmp='undef'
+d_snprintf='undef'
d_sockatmark='undef'
d_sockatmarkproto='undef'
d_socket='define'
@@ -421,6 +433,8 @@ d_strerrm='strerror(e)'
d_strerror='define'
d_strerror_r='undef'
d_strftime='define'
+d_strlcat='undef'
+d_strlcpy='undef'
d_strtod='define'
d_strtol='define'
d_strtoq='undef'
@@ -454,6 +468,7 @@ d_umask='undef'
d_uname='undef'
d_union_semun='undef'
d_unordered='undef'
+d_unsetenv='undef'
d_usleepproto='undef'
d_vendorlib='undef'
d_vfork='undef'
@@ -462,6 +477,7 @@ d_voidsig='undef'
d_voidtty='undef'
d_volatile='define'
d_vprintf='define'
+d_vsnprintf='undef'
d_wait4='undef'
d_waitpid='undef'
d_wcstombs='undef'
@@ -836,6 +852,7 @@ usedl='undef'
usefaststdio='define'
uselargefiles='undef'
uselongdouble='undef'
+usemallocwrap='undef'
usemorebits='undef'
usemultiplicity='undef'
usemymalloc='n'
@@ -844,8 +861,10 @@ useopcode=''
useperlio='undef'
useposix=''
usereentrant='undef'
+userelocatableinc='undef'
usesfio=''
useshrplib=''
+usesitecustomize='undef'
usesocks='undef'
usethreads='undef'
usevendorprefix=''
@@ -917,6 +936,7 @@ u64size='8'
d_fs_data_s='undef'
d_fseeko='undef'
d_ldbl_dig='undef'
+d_sprintf_returns_strlen='undef'
d_sqrtl='undef'
d_getmnt='undef'
d_statfs_f_flags='undef'
@@ -1070,6 +1090,7 @@ d_strtold='undef'
d_strtoll='undef'
d_strtouq='undef'
d_nv_preserves_uv='define'
+d_nv_zero_is_allbits_zero='undef'
use5005threads='undef'
useithreads='undef'
inc_version_list=' '
@@ -1125,5 +1146,8 @@ installsitelib='/home/of/PERL/perl/lib/site_perl/5.6.0'
installstyle=''
installusrbinperl='undef'
installvendorlib=''
-
-
+nveformat='"e"'
+nvfformat='"f"'
+nvgformat='"g"'
+sSCNfldbl=''
+uquadtype='uint64_t'
diff --git a/gnu/usr.bin/perl/epoc/createpkg.pl b/gnu/usr.bin/perl/epoc/createpkg.pl
index 90718e158e0..b71e2d48982 100644
--- a/gnu/usr.bin/perl/epoc/createpkg.pl
+++ b/gnu/usr.bin/perl/epoc/createpkg.pl
@@ -3,7 +3,7 @@
use File::Find;
use Cwd;
-$VERSION="5.8.6";
+$VERSION="5.8.8";
$EPOC_VERSION=1;
diff --git a/gnu/usr.bin/perl/ext/B/B.pm b/gnu/usr.bin/perl/ext/B/B.pm
index bd6a60ad076..12917347cd0 100644
--- a/gnu/usr.bin/perl/ext/B/B.pm
+++ b/gnu/usr.bin/perl/ext/B/B.pm
@@ -7,7 +7,7 @@
#
package B;
-our $VERSION = '1.07';
+our $VERSION = '1.09_01';
use XSLoader ();
require Exporter;
@@ -31,12 +31,12 @@ use strict;
@B::NULL::ISA = 'B::SV';
@B::PV::ISA = 'B::SV';
@B::IV::ISA = 'B::SV';
-@B::NV::ISA = 'B::IV';
+@B::NV::ISA = 'B::SV';
@B::RV::ISA = 'B::SV';
@B::PVIV::ISA = qw(B::PV B::IV);
-@B::PVNV::ISA = qw(B::PV B::NV);
+@B::PVNV::ISA = qw(B::PVIV B::NV);
@B::PVMG::ISA = 'B::PVNV';
-# Change in the inheritance hierarchy post 5.8
+# Change in the inheritance hierarchy post 5.9.0
@B::PVLV::ISA = $] > 5.009 ? 'B::GV' : 'B::PVMG';
@B::BM::ISA = 'B::PVMG';
@B::AV::ISA = 'B::PVMG';
@@ -128,7 +128,7 @@ sub walkoptree_slow {
}
shift @parents;
}
- if (class($op) eq 'PMOP' && $op->pmreplroot && ${$op->pmreplroot}) {
+ if (class($op) eq 'PMOP' && ref($op->pmreplroot) && ${$op->pmreplroot}) {
unshift(@parents, $op);
walkoptree_slow($op->pmreplroot, $method, $level + 1);
shift @parents;
@@ -368,6 +368,10 @@ class. Apart from functions such as C<main_root>, this is the primary
way to get an initial "handle" on an internal perl data structure
which can then be followed with the other access methods.
+The returned object will only be valid as long as the underlying OPs
+and SVs continue to exist. Do not attempt to use the object after the
+underlying structures are freed.
+
=item amagic_generation
Returns the SV object corresponding to the C variable C<amagic_generation>.
@@ -523,42 +527,46 @@ The bulk of the C<B> module is the methods for accessing fields of
these structures.
Note that all access is read-only. You cannot modify the internals by
-using this module.
+using this module. Also, note that the B::OP and B::SV objects created
+by this module are only valid for as long as the underlying objects
+exist; their creation doesn't increase the reference counts of the
+underlying objects. Trying to access the fields of a freed object will
+give incomprehensible results, or worse.
=head2 SV-RELATED CLASSES
B::IV, B::NV, B::RV, B::PV, B::PVIV, B::PVNV, B::PVMG, B::BM, B::PVLV,
B::AV, B::HV, B::CV, B::GV, B::FM, B::IO. These classes correspond in
the obvious way to the underlying C structures of similar names. The
-inheritance hierarchy mimics the underlying C "inheritance". For 5.9 and
-later this is:
+inheritance hierarchy mimics the underlying C "inheritance". For 5.9.1
+and later this is:
B::SV
|
- +--------------+----------------------+
- | | |
- B::PV B::IV B::RV
- | \ / \
- | \ / \
- | B::PVIV B::NV
- \ /
- \____ __/
- \ /
- B::PVNV
- |
- |
- B::PVMG
- |
- +-----+----+------+-----+-----+
- | | | | | |
- B::BM B::AV B::GV B::HV B::CV B::IO
- | |
- B::PVLV |
- B::FM
+ +--------------+----------+------------+
+ | | | |
+ B::PV B::IV B::NV B::RV
+ \ / /
+ \ / /
+ B::PVIV /
+ \ /
+ \ /
+ \ /
+ B::PVNV
+ |
+ |
+ B::PVMG
+ |
+ +-----+----+------+-----+-----+
+ | | | | | |
+ B::BM B::AV B::GV B::HV B::CV B::IO
+ | |
+ B::PVLV |
+ B::FM
-For 5.8 and earlier, PVLV is a direct subclass of PVMG, so the base of this
-diagram is
+For 5.9.0 and earlier, PVLV is a direct subclass of PVMG, so the base
+of this diagram is
|
B::PVMG
diff --git a/gnu/usr.bin/perl/ext/B/B.xs b/gnu/usr.bin/perl/ext/B/B.xs
index 63f5a99fa3c..47594b8aadf 100644
--- a/gnu/usr.bin/perl/ext/B/B.xs
+++ b/gnu/usr.bin/perl/ext/B/B.xs
@@ -101,7 +101,7 @@ START_MY_CXT
#define specialsv_list (MY_CXT.x_specialsv_list)
static opclass
-cc_opclass(pTHX_ OP *o)
+cc_opclass(pTHX_ const OP *o)
{
if (!o)
return OPc_NULL;
@@ -209,7 +209,7 @@ cc_opclass(pTHX_ OP *o)
}
static char *
-cc_opclassname(pTHX_ OP *o)
+cc_opclassname(pTHX_ const OP *o)
{
return opclassnames[cc_opclass(aTHX_ o)];
}
@@ -246,32 +246,28 @@ static SV *
cstring(pTHX_ SV *sv, bool perlstyle)
{
SV *sstr = newSVpvn("", 0);
- STRLEN len;
- char *s;
- char escbuff[5]; /* to fit backslash, 3 octals + trailing \0 */
if (!SvOK(sv))
sv_setpvn(sstr, "0", 1);
- else if (perlstyle && SvUTF8(sv))
- {
+ else if (perlstyle && SvUTF8(sv)) {
SV *tmpsv = sv_newmortal(); /* Temporary SV to feed sv_uni_display */
- len = SvCUR(sv);
- s = sv_uni_display(tmpsv, sv, 8*len, UNI_DISPLAY_QQ);
- sv_setpv(sstr,"\"");
+ const STRLEN len = SvCUR(sv);
+ const char *s = sv_uni_display(tmpsv, sv, 8*len, UNI_DISPLAY_QQ);
+ sv_setpvn(sstr,"\"",1);
while (*s)
{
if (*s == '"')
- sv_catpv(sstr, "\\\"");
+ sv_catpvn(sstr, "\\\"", 2);
else if (*s == '$')
- sv_catpv(sstr, "\\$");
+ sv_catpvn(sstr, "\\$", 2);
else if (*s == '@')
- sv_catpv(sstr, "\\@");
+ sv_catpvn(sstr, "\\@", 2);
else if (*s == '\\')
{
if (strchr("nrftax\\",*(s+1)))
sv_catpvn(sstr, s++, 2);
else
- sv_catpv(sstr, "\\\\");
+ sv_catpvn(sstr, "\\\\", 2);
}
else /* should always be printable */
sv_catpvn(sstr, s, 1);
@@ -283,7 +279,8 @@ cstring(pTHX_ SV *sv, bool perlstyle)
else
{
/* XXX Optimise? */
- s = SvPV(sv, len);
+ STRLEN len;
+ const char *s = SvPV(sv, len);
sv_catpv(sstr, "\"");
for (; len; len--, s++)
{
@@ -293,8 +290,8 @@ cstring(pTHX_ SV *sv, bool perlstyle)
else if (*s == '\\')
sv_catpv(sstr, "\\\\");
/* trigraphs - bleagh */
- else if (!perlstyle && *s == '?' && len>=3 && s[1] == '?')
- {
+ else if (!perlstyle && *s == '?' && len>=3 && s[1] == '?') {
+ char escbuff[5]; /* to fit backslash, 3 octals + trailing \0 */
sprintf(escbuff, "\\%03o", '?');
sv_catpv(sstr, escbuff);
}
@@ -325,7 +322,8 @@ cstring(pTHX_ SV *sv, bool perlstyle)
else
{
/* Don't want promotion of a signed -1 char in sprintf args */
- unsigned char c = (unsigned char) *s;
+ char escbuff[5]; /* to fit backslash, 3 octals + trailing \0 */
+ const unsigned char c = (unsigned char) *s;
sprintf(escbuff, "\\%03o", c);
sv_catpv(sstr, escbuff);
}
@@ -340,13 +338,12 @@ static SV *
cchar(pTHX_ SV *sv)
{
SV *sstr = newSVpvn("'", 1);
- STRLEN n_a;
- char *s = SvPV(sv, n_a);
+ const char *s = SvPV_nolen(sv);
if (*s == '\'')
- sv_catpv(sstr, "\\'");
+ sv_catpvn(sstr, "\\'", 2);
else if (*s == '\\')
- sv_catpv(sstr, "\\\\");
+ sv_catpvn(sstr, "\\\\", 2);
#ifdef EBCDIC
else if (isPRINT(*s))
#else
@@ -354,19 +351,19 @@ cchar(pTHX_ SV *sv)
#endif /* EBCDIC */
sv_catpvn(sstr, s, 1);
else if (*s == '\n')
- sv_catpv(sstr, "\\n");
+ sv_catpvn(sstr, "\\n", 2);
else if (*s == '\r')
- sv_catpv(sstr, "\\r");
+ sv_catpvn(sstr, "\\r", 2);
else if (*s == '\t')
- sv_catpv(sstr, "\\t");
+ sv_catpvn(sstr, "\\t", 2);
else if (*s == '\a')
- sv_catpv(sstr, "\\a");
+ sv_catpvn(sstr, "\\a", 2);
else if (*s == '\b')
- sv_catpv(sstr, "\\b");
+ sv_catpvn(sstr, "\\b", 2);
else if (*s == '\f')
- sv_catpv(sstr, "\\f");
+ sv_catpvn(sstr, "\\f", 2);
else if (*s == '\v')
- sv_catpv(sstr, "\\v");
+ sv_catpvn(sstr, "\\v", 2);
else
{
/* no trigraph support */
@@ -376,12 +373,12 @@ cchar(pTHX_ SV *sv)
sprintf(escbuff, "\\%03o", c);
sv_catpv(sstr, escbuff);
}
- sv_catpv(sstr, "'");
+ sv_catpvn(sstr, "'", 1);
return sstr;
}
-void
-walkoptree(pTHX_ SV *opsv, char *method)
+static void
+walkoptree(pTHX_ SV *opsv, const char *method)
{
dSP;
OP *o, *kid;
@@ -408,15 +405,15 @@ walkoptree(pTHX_ SV *opsv, char *method)
walkoptree(aTHX_ opsv, method);
}
}
- if (o && (cc_opclass(aTHX_ o) == OPc_PMOP)
+ if (o && (cc_opclass(aTHX_ o) == OPc_PMOP) && o->op_type != OP_PUSHRE
&& (kid = cPMOPo->op_pmreplroot))
{
- sv_setiv(newSVrv(opsv, opclassnames[OPc_PMOP]), PTR2IV(kid));
+ sv_setiv(newSVrv(opsv, cc_opclassname(aTHX_ kid)), PTR2IV(kid));
walkoptree(aTHX_ opsv, method);
}
}
-SV **
+static SV **
oplist(pTHX_ OP *o, SV **SP)
{
for(; o; o = o->op_next) {
@@ -605,7 +602,7 @@ MODULE = B PACKAGE = B
void
walkoptree(opsv, method)
SV * opsv
- char * method
+ const char * method
CODE:
walkoptree(aTHX_ opsv, method);
@@ -637,7 +634,7 @@ svref_2object(sv)
void
opnumber(name)
-char * name
+const char * name
CODE:
{
int i;
@@ -670,11 +667,10 @@ void
hash(sv)
SV * sv
CODE:
- char *s;
STRLEN len;
U32 hash = 0;
char hexhash[19]; /* must fit "0xffffffffffffffff" plus trailing \0 */
- s = SvPV(sv, len);
+ const char *s = SvPV(sv, len);
PERL_HASH(hash, s, len);
sprintf(hexhash, "0x%"UVxf, (UV)hash);
ST(0) = sv_2mortal(newSVpv(hexhash, 0));
@@ -724,7 +720,7 @@ threadsv_names()
#if PERL_VERSION <= 8
# ifdef USE_5005THREADS
int i;
- STRLEN len = strlen(PL_threadsv_names);
+ const STRLEN len = strlen(PL_threadsv_names);
EXTEND(sp, len);
for (i = 0; i < len; i++)
@@ -1011,8 +1007,8 @@ PVOP_pv(o)
(o->op_private & OPpTRANS_COMPLEMENT) &&
!(o->op_private & OPpTRANS_DELETE))
{
- short* tbl = (short*)o->op_pv;
- short entries = 257 + tbl[256];
+ const short* const tbl = (short*)o->op_pv;
+ const short entries = 257 + tbl[256];
ST(0) = sv_2mortal(newSVpv(o->op_pv, entries * sizeof(short)));
}
else if (o->op_type == OP_TRANS) {
@@ -1158,7 +1154,7 @@ packiv(sv)
CODE:
if (sizeof(IV) == 8) {
U32 wp[2];
- IV iv = SvIVX(sv);
+ const IV iv = SvIVX(sv);
/*
* The following way of spelling 32 is to stop compilers on
* 32-bit architectures from moaning about the shift count
@@ -1218,8 +1214,16 @@ SvPV(sv)
B::PV sv
CODE:
ST(0) = sv_newmortal();
- if( SvPOK(sv) ) {
- sv_setpvn(ST(0), SvPVX(sv), SvCUR(sv));
+ if( SvPOK(sv) ) {
+ /* FIXME - we need a better way for B to identify PVs that are
+ in the pads as variable names. */
+ if((SvLEN(sv) && SvCUR(sv) >= SvLEN(sv))) {
+ /* It claims to be longer than the space allocated for it -
+ presuambly it's a variable name in the pad */
+ sv_setpv(ST(0), SvPV_nolen_const(sv));
+ } else {
+ sv_setpvn(ST(0), SvPVX_const(sv), SvCUR(sv));
+ }
SvFLAGS(ST(0)) |= SvUTF8(sv);
}
else {
@@ -1233,7 +1237,7 @@ SvPVBM(sv)
B::PV sv
CODE:
ST(0) = sv_newmortal();
- sv_setpvn(ST(0), SvPVX(sv),
+ sv_setpvn(ST(0), SvPVX_const(sv),
SvCUR(sv) + (SvTYPE(sv) == SVt_PVBM ? 257 : 0));
@@ -1519,7 +1523,7 @@ IoSUBPROCESS(io)
bool
IsSTD(io,name)
B::IO io
- char* name
+ const char* name
PREINIT:
PerlIO* handle = 0;
CODE:
@@ -1653,7 +1657,7 @@ CvXSUBANY(cv)
B::CV cv
CODE:
ST(0) = CvCONST(cv) ?
- make_sv_object(aTHX_ sv_newmortal(),CvXSUBANY(cv).any_ptr) :
+ make_sv_object(aTHX_ sv_newmortal(),(SV *)CvXSUBANY(cv).any_ptr) :
sv_2mortal(newSViv(CvXSUBANY(cv).any_iv));
MODULE = B PACKAGE = B::CV
diff --git a/gnu/usr.bin/perl/ext/B/B/Terse.pm b/gnu/usr.bin/perl/ext/B/B/Terse.pm
index 8d295cdd714..1d53950ad3b 100644
--- a/gnu/usr.bin/perl/ext/B/B/Terse.pm
+++ b/gnu/usr.bin/perl/ext/B/B/Terse.pm
@@ -1,6 +1,6 @@
package B::Terse;
-our $VERSION = '1.02';
+our $VERSION = '1.03_01';
use strict;
use B qw(class);
@@ -51,14 +51,14 @@ sub B::SV::terse {
}
sub B::NULL::terse {
- my ($sv, $level) = @_;
+ my ($sv, $level) = (@_, 0);
my $s = indent($level) . sprintf "%s (0x%lx)", class($sv), $$sv;
print "$s\n" unless defined wantarray;
$s;
}
sub B::SPECIAL::terse {
- my ($sv, $level) = @_;
+ my ($sv, $level) = (@_, 0);
my $s = indent($level)
. sprintf( "%s #%d %s", class($sv), $$sv, $specialsv_name[$$sv]);
print "$s\n" unless defined wantarray;
@@ -83,7 +83,7 @@ This version of B::Terse is really just a wrapper that calls B::Concise
with the B<-terse> option. It is provided for compatibility with old scripts
(and habits) but using B::Concise directly is now recommended instead.
-For compatiblilty with the old B::Terse, this module also adds a
+For compatibility with the old B::Terse, this module also adds a
method named C<terse> to B::OP and B::SV objects. The B::SV method is
largely compatible with the old one, though authors of new software
might be advised to choose a more user-friendly output format. The
diff --git a/gnu/usr.bin/perl/ext/B/Makefile.PL b/gnu/usr.bin/perl/ext/B/Makefile.PL
index f38adb0ef8c..d59e9d77205 100644
--- a/gnu/usr.bin/perl/ext/B/Makefile.PL
+++ b/gnu/usr.bin/perl/ext/B/Makefile.PL
@@ -43,6 +43,6 @@ sub MY::postamble {
B\$(OBJ_EXT) : defsubs.h
defsubs.h :: $op_h $cop_h defsubs_h.PL
- $noecho \$(NOOP)
+ \$(PERL) -I\$(INST_ARCHLIB) -I\$(INST_LIB) -I\$(PERL_ARCHLIB) -I\$(PERL_LIB) defsubs_h.PL defsubs.h
"
}
diff --git a/gnu/usr.bin/perl/ext/B/t/OptreeCheck.pm b/gnu/usr.bin/perl/ext/B/t/OptreeCheck.pm
index f8e2995346a..fa1a8252a08 100644
--- a/gnu/usr.bin/perl/ext/B/t/OptreeCheck.pm
+++ b/gnu/usr.bin/perl/ext/B/t/OptreeCheck.pm
@@ -1,7 +1,13 @@
-# non-package OptreeCheck.pm
-# pm allows 'use OptreeCheck', which also imports
-# no package decl means all functions defined into main
-# otherwise, it's like "require './test.pl'"
+package OptreeCheck;
+use base 'Exporter';
+require "test.pl";
+
+our $VERSION = '0.01';
+
+# now export checkOptree, and those test.pl functions used by tests
+our @EXPORT = qw( checkOptree plan skip skip_all pass is like unlike
+ require_ok runperl );
+
=head1 NAME
@@ -9,27 +15,44 @@ OptreeCheck - check optrees as rendered by B::Concise
=head1 SYNOPSIS
-OptreeCheck supports regression testing of perl's parser, optimizer,
-bytecode generator, via a single function: checkOptree(%args). It
-invokes B::Concise upon sample code, and checks that it 'agrees' with
-reference renderings.
+OptreeCheck supports 'golden-sample' regression testing of perl's
+parser, optimizer, bytecode generator, via a single function:
+checkOptree(%in).
+
+It invokes B::Concise upon the sample code, checks that the rendering
+'agrees' with the golden sample, and reports mismatches.
+
+Additionally, the module processes @ARGV (which is typically unused in
+the Core test harness), and thus provides a means to run the tests in
+various modes.
+
+=head1 EXAMPLE
+
+ # your test file
+ use OptreeCheck;
+ plan tests => 1;
checkOptree (
- name => "test-name', # optional, (synth from others)
+ name => "test-name', # optional, made from others if not given
- # 2 kinds of code-under-test: must provide 1
+ # code-under-test: must provide 1 of them
code => sub {my $a}, # coderef, or source (wrapped and evald)
prog => 'sort @a', # run in subprocess, aka -MO=Concise
-
bcopts => '-exec', # $opt or \@opts, passed to BC::compile
+
+ errs => 'Useless variable "@main::a" .*' # str, regex, [str+] [regex+],
+
+ # various test options
# errs => '.*', # match against any emitted errs, -w warnings
# skip => 1, # skips test
# todo => 'excuse', # anticipated failures
# fail => 1 # force fail (by redirecting result)
- # debug => 1, # turns on regex debug for match test !!
- # retry => 1 # retry with debug on test failure
+ # retry => 1 # retry on test failure
+ # debug => 1, # use re 'debug' for retried failures !!
+
+ # the 'golden-sample's, (must provide both)
- expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT' );
+ expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT' ); # start HERE-DOCS
# 1 <;> nextstate(main 45 optree.t:23) v
# 2 <0> padsv[$a:45,46] M/LVINTRO
# 3 <1> leavesub[1 ref] K/REFC,1
@@ -39,126 +62,223 @@ reference renderings.
# 3 <1> leavesub[1 ref] K/REFC,1
EONT_EONT
-=head1 checkOptree(%in) Overview
+ __END__
+
+=head2 Failure Reports
+
+ Heres a sample failure, as induced by the following command.
+ Note the argument; option=value, after the test-file, more on that later
+
+ $> PERL_CORE=1 ./perl ext/B/t/optree_check.t testmode=cross
+ ...
+ ok 19 - canonical example w -basic
+ not ok 20 - -exec code: $a=$b+42
+ # Failed at test.pl line 249
+ # got '1 <;> nextstate(main 600 optree_check.t:208) v
+ # 2 <#> gvsv[*b] s
+ # 3 <$> const[IV 42] s
+ # 4 <2> add[t3] sK/2
+ # 5 <#> gvsv[*a] s
+ # 6 <2> sassign sKS/2
+ # 7 <1> leavesub[1 ref] K/REFC,1
+ # '
+ # expected /(?ms-xi:^1 <;> (?:next|db)state(.*?) v
+ # 2 <\$> gvsv\(\*b\) s
+ # 3 <\$> const\(IV 42\) s
+ # 4 <2> add\[t\d+\] sK/2
+ # 5 <\$> gvsv\(\*a\) s
+ # 6 <2> sassign sKS/2
+ # 7 <1> leavesub\[\d+ refs?\] K/REFC,1
+ # $)/
+ # got: '2 <#> gvsv[*b] s'
+ # want: (?-xism:2 <\$> gvsv\(\*b\) s)
+ # got: '3 <$> const[IV 42] s'
+ # want: (?-xism:3 <\$> const\(IV 42\) s)
+ # got: '5 <#> gvsv[*a] s'
+ # want: (?-xism:5 <\$> gvsv\(\*a\) s)
+ # remainder:
+ # 2 <#> gvsv[*b] s
+ # 3 <$> const[IV 42] s
+ # 5 <#> gvsv[*a] s
+ # these lines not matched:
+ # 2 <#> gvsv[*b] s
+ # 3 <$> const[IV 42] s
+ # 5 <#> gvsv[*a] s
+
+Errors are reported 3 different ways;
+
+The 1st form is directly from test.pl's like() and unlike(). Note
+that this form is used as input, so you can easily cut-paste results
+into test-files you are developing. Just make sure you recognize
+insane results, to avoid canonizing them as golden samples.
+
+The 2nd and 3rd forms show only the unexpected results and opcodes.
+This is done because it's blindingly tedious to find a single opcode
+causing the failure. 2 different ways are done in case one is
+unhelpful.
+
+=head1 TestCase Overview
+
+checkOptree(%tc) constructs a testcase object from %tc, and then calls
+methods which eventually call test.pl's like() to produce test
+results.
+
+=head2 getRendering
+
+getRendering() runs code or prog through B::Concise, and captures its
+rendering. Errors emitted during rendering are checked against
+expected errors, and are reported as diagnostics by default, or as
+failures if 'report=fail' cmdline-option is given.
+
+prog is run in a sub-shell, with $bcopts passed through. This is the way
+to run code intended for main. The code arg in contrast, is always a
+CODEREF, either because it starts that way as an arg, or because it's
+wrapped and eval'd as $sub = sub {$code};
+
+=head2 mkCheckRex
+
+mkCheckRex() selects the golden-sample for the threaded-ness of the
+platform, and produces a regex which matches the expected rendering,
+and fails when it doesn't match.
+
+The regex includes 'workarounds' which accommodate expected rendering
+variations. These include:
+
+ string constants # avoid injection
+ line numbers, etc # args of nexstate()
+ hexadecimal-numbers
+
+ pad-slot-assignments # for 5.8 compat, and testmode=cross
+ (map|grep)(start|while) # for 5.8 compat
+
+=head2 mylike
+
+mylike() calls either unlike() or like(), depending on
+expectations. Mismatch reports are massaged, because the actual
+difference can easily be lost in the forest of opcodes.
+
+=head1 checkOptree API and Operation
+
+Since the arg is a hash, the api is wide-open, and this really is
+about what elements must be or are in the hash, and what they do. %tc
+is passed to newTestCase(), the ctor, which adds in %proto, a global
+prototype object.
+
+=head2 name => STRING
+
+If name property is not provided, it is synthesized from these params:
+bcopts, note, prog, code. This is more convenient than trying to do
+it manually.
+
+=head2 code or prog
+
+Either code or prog must be present.
+
+=head2 prog => $perl_source_string
+
+prog => $src provides a snippet of code, which is run in a sub-process,
+via test.pl:runperl, and through B::Concise like so:
-optreeCheck() calls getRendering(), which runs code or prog through
-B::Concise, and captures its rendering.
+ './perl -w -MO=Concise,$bcopts_massaged -e $src'
-It then calls mkCheckRex() to produce a regex which will match the
-expected rendering, and fail when it doesn't match.
+=head2 code => $perl_source_string || CODEREF
-Finally, it compares the 2; like($rendering,/$regex/,$testname).
+The $code arg is passed to B::Concise::compile(), and run in-process.
+If $code is a string, it's first wrapped and eval'd into a $coderef.
+In either case, $coderef is then passed to B::Concise::compile():
+ $subref = eval "sub{$code}";
+ $render = B::Concise::compile($subref)->();
-=head1 checkOptree(%Args) API
+=head2 expect and expect_nt
-Accepts %Args, with following requirements and actions:
+expect and expect_nt args are the B<golden-sample> renderings, and are
+sampled from known-ok threaded and un-threaded bleadperl (5.9.1) builds.
+They're both required, and the correct one is selected for the platform
+being tested, and saved into the synthesized property B<wanted>.
-Either code or prog must be present. prog is some source code, and is
-passed through via test.pl:runperl, to B::Concise like this: (bcopts
-are fixed up for cmdline)
+=head2 bcopts => $bcopts || [ @bcopts ]
- './perl -w -MO=Concise,$bcopts_massaged -e $src'
+When getRendering() runs, it passes bcopts into B::Concise::compile().
+The bcopts arg can be a single string, or an array of strings.
-code is a subref, or $src, like above. If it's not a subref, it's
-treated like source-code, is wrapped as a subroutine, and is passed to
-B::Concise::compile().
+=head2 errs => $err_str_regex || [ @err_str_regexs ]
- $subref = eval "sub{$src}";
- B::Concise::compile($subref).
+getRendering() processes the code or prog arg under warnings, and both
+parsing and optree-traversal errors are collected. These are
+validated against the one or more errors you specify.
-expect and expect_nt are the reference optree renderings. Theyre
-required, except when the code/prog compilation fails.
+=head1 testcase modifier properties
-I suppose I should also explain these more, but they seem obvious.
+These properties are set as %tc parameters to change test behavior.
- # prog => 'sort @a', # run in subprocess, aka -MO=Concise
- # noanchors => 1, # no /^$/. needed for 1-liners like above
+=head2 skip => 'reason'
- # skip => 1, # skips test
- # todo => 'excuse', # anticipated failures
- # fail => 1 # fails (by redirecting result)
- # debug => 1, # turns on regex debug for match test !!
- # retry => 1 # retry with debug on test failure
+invokes skip('reason'), causing test to skip.
-=head1 Test Philosophy
+=head2 todo => 'reason'
-2 platforms --> 2 reftexts: You want an accurate test, independent of
-which platform you're on. So, two refdata properties, 'expect' and
-'expect_nt', carry renderings taken from threaded and non-threaded
-builds. This has several benefits:
+invokes todo('reason')
- 1. native reference data allows closer matching by regex.
- 2. samples can be eyeballed to grok t-nt differences.
- 3. data can help to validate mkCheckRex() operation.
- 4. can develop regexes which accomodate t-nt differences.
- 5. can test with both native and cross+converted regexes.
+=head2 fail => 1
-Cross-testing (expect_nt on threaded, expect on non-threaded) exposes
-differences in B::Concise output, so mkCheckRex has code to do some
-cross-test manipulations. This area needs more work.
+For code arguments, this option causes getRendering to redirect the
+rendering operation to STDERR, which causes the regex match to fail.
-=head1 Test Modes
+=head2 retry => 1
-One consequence of a single-function API is difficulty controlling
-test-mode. Ive chosen for now to use a package hash, %gOpts, to store
-test-state. These properties alter checkOptree() function, either
-short-circuiting to selftest, or running a loop that runs the testcase
-2^N times, varying conditions each time. (current N is 2 only).
+If retry is set, and a test fails, it is run a second time, possibly
+with regex debug.
-So Test-mode is controlled with cmdline args, also called options below.
-Run with 'help' to see the test-state, and how to change it.
+=head2 debug => 1
-=head2 selftest
+If a failure is retried, this turns on eval "use re 'debug'", thus
+turning on regex debug. It's quite verbose, and not hugely helpful.
-This argument invokes runSelftest(), which tests a regex against the
-reference renderings that they're made from. Failure of a regex match
-its 'mold' is a strong indicator that mkCheckRex is buggy.
+=head2 noanchors => 1
-That said, selftest mode currently runs a cross-test too, they're not
-completely orthogonal yet. See below.
+If set, this relaxes the regex check, which is normally pretty strict.
+It's used primarily to validate checkOptree via tests in optree_check.
-=head2 testmode=cross
-Cross-testing is purposely creating a T-NT mismatch, looking at the
-fallout, and tweaking the regex to deal with it. Thus tests lead to
-'provably' complete understanding of the differences.
+=head1 Synthesized object properties
-The tweaking appears contrary to the 2-refs philosophy, but the tweaks
-will be made in conversion-specific code, which (will) handles T->NT
-and NT->T separately. The tweaking is incomplete.
+These properties are added into the test object during execution.
-A reasonable 1st step is to add tags to indicate when TonNT or NTonT
-is known to fail. This needs an option to force failure, so the
-test.pl reporting mechanics show results to aid the user.
+=head2 wanted
-=head2 testmode=native
+This stores the chosen expect expect_nt string. The OptreeCheck
+object may in the future delete the raw strings once wanted is set,
+thus saving space.
-This is normal mode. Other valid values are: native, cross, both.
+=head2 cross => 1
-=head2 checkOptree Notes
+This tag is added if testmode=cross is passed in as argument.
+It causes test-harness to purposely use the wrong string.
-Accepts test code, renders its optree using B::Concise, and matches that
-rendering against a regex built from one of 2 reference-renderings %in data.
-The regex is built by mkCheckRex(\%in), which scrubs %in data to
-remove match-irrelevancies, such as (args) and [args]. For example,
-it strips leading '# ', making it easy to cut-paste new tests into
-your test-file, run it, and cut-paste actual results into place. You
-then retest and reedit until all 'errors' are gone. (now make sure you
-haven't 'enshrined' a bug).
+=head2 checkErrs
+
+checkErrs() is a getRendering helper that verifies that expected errs
+against those found when rendering the code on the platform. It is
+run after rendering, and before mkCheckRex.
+
+Errors can be reported 3 different ways; diag, fail, print.
+
+ diag - uses test.pl _diag()
+ fail - causes double-testing
+ print-.no # in front of the output (may mess up test harnesses)
+
+The 3 ways are selectable at runtimve via cmdline-arg:
+report={diag,fail,print}.
+
-name: The test name. May be augmented by a label, which is built from
-important params, and which helps keep names in sync with whats being
-tested.'
=cut
use Config;
use Carp;
use B::Concise qw(walk_output);
-use Data::Dumper;
-$Data::Dumper::Sortkeys = 1;
BEGIN {
$SIG{__WARN__} = sub {
@@ -167,8 +287,12 @@ BEGIN {
};
}
-# but wait - more skullduggery !
-sub OptreeCheck::import { &getCmdLine; } # process @ARGV
+sub import {
+ my $pkg = shift;
+ $pkg->export_to_level(1,'checkOptree', @EXPORT);
+ getCmdLine(); # process @ARGV
+}
+
# %gOpts params comprise a global test-state. Initial values here are
# HELP strings, they MUST BE REPLACED by runtime values before use, as
@@ -177,52 +301,49 @@ sub OptreeCheck::import { &getCmdLine; } # process @ARGV
our %gOpts = # values are replaced at runtime !!
(
# scalar values are help string
- rextract => 'writes src-code todo same Optree matching',
- vbasic => 'prints $str and $rex',
retry => 'retry failures after turning on re debug',
- retrydbg => 'retry failures after turning on re debug',
+ debug => 'turn on re debug for those retries',
selftest => 'self-tests mkCheckRex vs the reference rendering',
- selfdbg => 'redo failing selftests with re debug',
- xtest => 'extended thread/non-thread testing',
+
fail => 'force all test to fail, print to stdout',
dump => 'dump cmdline arg prcessing',
- rexpedant => 'try tighter regex, still buggy',
noanchors => 'dont anchor match rex',
- help => 0, # 1 ends in die
# array values are one-of selections, with 1st value as default
- testmode => [qw/ native cross both /],
+ # array: 2nd value is used as help-str, 1st val (still) default
+ help => [0, 'provides help and exits', 0],
+ testmode => [qw/ native cross both /],
- # fixup for VMS, cygwin, which dont have stderr b4 stdout
- # 2nd value is used as help-str, 1st val (still) default
+ # reporting mode for rendering errs
+ report => [qw/ diag fail print /],
+ errcont => [1, 'if 1, tests match even if report is fail', 0],
+ # fixup for VMS, cygwin, which dont have stderr b4 stdout
rxnoorder => [1, 'if 1, dont req match on -e lines, and -banner',0],
strip => [1, 'if 1, catch errs and remove from renderings',0],
stripv => 'if strip&&1, be verbose about it',
- errs => 'expected compile errs',
+ errs => 'expected compile errs, array if several',
);
# Not sure if this is too much cheating. Officially we say that
-# $Config::Config{usethreads} is true if some sort of threading is in use,
-# in which case we ought to be able to use it in place of the || below.
-# However, it is now possible to Configure perl with "threads" but neither
-# ithreads or 5005threads, which forces the re-entrant APIs, but no perl
-# user visible threading. This seems to have the side effect that most of perl
-# doesn't think that it's threaded, hence the ops aren't threaded either.
-# Not sure if this is actually a "supported" configuration, but given that
-# ponie uses it, it's going to be used by something official at least in the
-# interim. So it's nice for tests to all pass.
+# $Config::Config{usethreads} is true if some sort of threading is in
+# use, in which case we ought to be able to use it in place of the ||
+# below. However, it is now possible to Configure perl with "threads"
+# but neither ithreads or 5005threads, which forces the re-entrant
+# APIs, but no perl user visible threading.
+
+# This seems to have the side effect that most of perl doesn't think
+# that it's threaded, hence the ops aren't threaded either. Not sure
+# if this is actually a "supported" configuration, but given that
+# ponie uses it, it's going to be used by something official at least
+# in the interim. So it's nice for tests to all pass.
+
our $threaded = 1
if $Config::Config{useithreads} || $Config::Config{use5005threads};
our $platform = ($threaded) ? "threaded" : "plain";
our $thrstat = ($threaded) ? "threaded" : "nonthreaded";
-our ($MatchRetry,$MatchRetryDebug); # let mylike be generic
-# test.pl-ish hack
-*MatchRetry = \$gOpts{retry}; # but alias it into %gOpts
-*MatchRetryDebug = \$gOpts{retrydbg}; # but alias it into %gOpts
-
our %modes = (
both => [ 'expect', 'expect_nt'],
native => [ ($threaded) ? 'expect' : 'expect_nt'],
@@ -234,9 +355,9 @@ our %modes = (
our %msgs # announce cross-testing.
= (
# cross-platform
- 'expect_nt-threaded' => " (Non-threaded-ref on Threaded-build)",
- 'expect-nonthreaded' => " (Threaded-ref on Non-threaded-build)",
- # native - nothing to say
+ 'expect_nt-threaded' => " (nT on T) ",
+ 'expect-nonthreaded' => " (T on nT) ",
+ # native - nothing to say (must stay empty - used for $crosstesting)
'expect_nt-nonthreaded' => '',
'expect-threaded' => '',
);
@@ -247,7 +368,7 @@ sub getCmdLine { # import assistant
print(qq{\n$0 accepts args to update these state-vars:
turn on a flag by typing its name,
select a value from list by typing name=val.\n },
- Dumper \%gOpts)
+ mydumper(\%gOpts))
if grep /help/, @ARGV;
# replace values for each key !! MUST MARK UP %gOpts
@@ -278,197 +399,122 @@ sub getCmdLine { # import assistant
else { # handle scalars
# if 'opt' is present, true
- $gOpts{$opt} = (grep /$opt/, @ARGV) ? 1 : 0;
+ $gOpts{$opt} = (grep /^$opt/, @ARGV) ? 1 : 0;
# override with 'foo' if 'opt=foo' appears
grep s/$opt=(.*)/$gOpts{$opt}=$1/e, @ARGV;
}
}
- print("$0 heres current state:\n", Dumper \%gOpts)
+ print("$0 heres current state:\n", mydumper(\%gOpts))
if $gOpts{help} or $gOpts{dump};
exit if $gOpts{help};
}
# the above arg-handling cruft should be replaced by a Getopt call
-##################################
-# API
+##############################
+# the API (1 function)
sub checkOptree {
- my %in = @_;
- my ($in, $res) = (\%in,0); # set up privates.
+ my $tc = newTestCases(@_); # ctor
+ my ($rendering);
- print "checkOptree args: ",Dumper \%in if $in{dump};
+ print "checkOptree args: ",mydumper($tc) if $tc->{dump};
SKIP: {
- label(\%in);
- skip($in{name}, 1) if $in{skip};
-
- # cpy globals into each test
- foreach $k (keys %gOpts) {
- if ($gOpts{$k}) {
- $in{$k} = $gOpts{$k} unless $in{$k};
- }
- }
- #die "no reftext found for $want: $in->{name}" unless $str;
+ skip("$tc->{skip} $tc->{name}", 1) if $tc->{skip};
- return runSelftest(\%in) if $gOpts{selftest};
+ return runSelftest($tc) if $gOpts{selftest};
- my ($rendering,@errs) = getRendering(\%in); # get the actual output
+ $tc->getRendering(); # get the actual output
+ $tc->checkErrs();
- if ($in->{errs}) {
- if (@errs) {
- like ("@errs", qr/$in->{errs}\s*/, "$in->{name} - matched expected errs");
- next;
- }
- }
- fail("FORCED: $in{name}:\n$rendering") if $gOpts{fail}; # silly ?
-
- # Test rendering against ..
TODO:
foreach $want (@{$modes{$gOpts{testmode}}}) {
- local $TODO = $in{todo} if $in{todo};
-
- my ($rex,$txt,$rexstr) = mkCheckRex(\%in,$want);
- my $cross = $msgs{"$want-$thrstat"};
-
- # bad is anticipated failure on cross testing ONLY
- my $bad = (0 or ( $cross && $in{crossfail})
- or (!$cross && $in{fail})
- or 0); # no undefs! pedant
-
- # couldn't bear to pass \%in to likeyn
- $res = mylike ( # custom test mode stuff
- [ !$bad,
- $in{retry} || $gOpts{retry},
- $in{debug} || $gOpts{retrydbg},
- $rexstr,
- ],
- # remaining is std API
- $rendering, qr/$rex/ms, "$cross $in{name} $in{label}")
- || 0;
- printhelp(\%in, $rendering, $rex);
+ local $TODO = $tc->{todo} if $tc->{todo};
+
+ $tc->{cross} = $msgs{"$want-$thrstat"};
+
+ $tc->mkCheckRex($want);
+ $tc->mylike();
}
}
$res;
}
-#################
-# helpers
-
-sub label {
- # may help get/keep test output consistent
- my ($in) = @_;
- return if $in->{name};
+sub newTestCases {
+ # make test objects (currently 1) from args (passed to checkOptree)
+ my $tc = bless { @_ }, __PACKAGE__
+ or die "test cases are hashes";
- my $buf = (ref $in->{bcopts})
- ? join(',', @{$in->{bcopts}}) : $in->{bcopts};
-
- foreach (qw( note prog code )) {
- $buf .= " $_: $in->{$_}" if $in->{$_} and not ref $in->{$_};
- }
- return $in->{label} = $buf;
-}
+ $tc->label();
-sub testCombo {
- # generate a set of test-cases from the options
- my $in = @_;
- my @cases;
- foreach $want (@{$modes{$gOpts{testmode}}}) {
- push @cases, [ %in ]
+ # cpy globals into each test
+ foreach $k (keys %gOpts) {
+ if ($gOpts{$k}) {
+ $tc->{$k} = $gOpts{$k} unless defined $tc->{$k};
+ }
}
- return @cases;
-}
-
-sub runSelftest {
- # tests the test-cases offered (expect, expect_nt)
- # needs Unification with above.
- my ($in) = @_;
- my $ok;
- foreach $want (@{$modes{$gOpts{testmode}}}) {}
-
- for my $provenance (qw/ expect expect_nt /) {
- next unless $in->{$provenance};
- my ($rex,$gospel) = mkCheckRex($in, $provenance);
- return unless $gospel;
-
- my $cross = $msgs{"$provenance-$thrstat"};
- my $bad = (0 or ( $cross && $in->{crossfail})
- or (!$cross && $in->{fail})
- or 0);
- # couldn't bear to pass \%in to likeyn
- $res = mylike ( [ !$bad,
- $in->{retry} || $gOpts{retry},
- $in->{debug} || $gOpts{retrydbg},
- #label($in)
- ],
- $rendering, qr/$rex/ms, "$cross $in{name}")
- || 0;
+ # transform errs to self-hash for efficient set-math
+ if ($tc->{errs}) {
+ if (not ref $tc->{errs}) {
+ $tc->{errs} = { $tc->{errs} => 1};
+ }
+ elsif (ref $tc->{errs} eq 'ARRAY') {
+ my %errs;
+ @errs{@{$tc->{errs}}} = (1) x @{$tc->{errs}};
+ $tc->{errs} = \%errs;
+ }
+ elsif (ref $tc->{errs} eq 'Regexp') {
+ warn "regexp err matching not yet implemented";
+ }
}
- $ok;
+ return $tc;
}
-# use re;
-sub mylike {
- # note dependence on unlike()
- my ($control) = shift;
- my ($yes,$retry,$debug,$postmortem) = @$control; # or dies
- my ($got, $expected, $name, @mess) = @_; # pass thru mostly
-
- die "unintended usage, expecting Regex". Dumper \@_
- unless ref $_[1] eq 'Regexp';
-
- #ok($got=~/$expected/, "wow");
+sub label {
+ # may help get/keep test output consistent
+ my ($tc) = @_;
+ return $tc->{name} if $tc->{name};
- # same as A ^ B, but B has side effects
- my $ok = ( (!$yes and unlike($got, $expected, $name, @mess))
- or ($yes and like($got, $expected, $name, @mess)));
-
- if (not $ok and $postmortem) {
- # split rexstr into units that should eat leading lines.
- my @rexs = map qr/^$_/, split (/\n/,$postmortem);
- foreach my $rex (@rexs) {
- #$got =~ s/($rex)/ate: $1/msg; # noisy
- $got =~ s/($rex)\n//msg; # remove matches
- }
- print "these lines not matched:\n$got\n";
- }
+ my $buf = (ref $tc->{bcopts})
+ ? join(',', @{$tc->{bcopts}}) : $tc->{bcopts};
- if (not $ok and $retry) {
- # redo, perhaps with use re debug - NOT ROBUST
- eval "use re 'debug'" if $debug;
- $ok = (!$yes and unlike($got, $expected, "(RETRY) $name", @mess)
- or $yes and like($got, $expected, "(RETRY) $name", @mess));
-
- no re 'debug';
+ foreach (qw( note prog code )) {
+ $buf .= " $_: $tc->{$_}" if $tc->{$_} and not ref $tc->{$_};
}
- return $ok;
+ return $tc->{name} = $buf;
}
+#################
+# render and its helpers
+
sub getRendering {
- my ($in) = @_;
- die "getRendering: code or prog is required\n"
- unless $in->{code} or $in->{prog};
+ my $tc = shift;
+ fail("getRendering: code or prog is required")
+ unless $tc->{code} or $tc->{prog};
- my @opts = get_bcopts($in);
+ my @opts = get_bcopts($tc);
my $rendering = ''; # suppress "Use of uninitialized value in open"
my @errs; # collect errs via
- if ($in->{prog}) {
+ if ($tc->{prog}) {
$rendering = runperl( switches => ['-w',join(',',"-MO=Concise",@opts)],
- prog => $in->{prog}, stderr => 1,
+ prog => $tc->{prog}, stderr => 1,
); # verbose => 1);
} else {
- my $code = $in->{code};
+ my $code = $tc->{code};
unless (ref $code eq 'CODE') {
- # treat as source, and wrap
- $code = eval "sub { $code }";
+ # treat as source, and wrap into subref
+ # in caller's package ( to test arg-fixup, comment next line)
+ my $pkg = '{ package '.caller(1) .';';
+ $code = eval "$pkg sub { $code } }";
# return errors
- push @errs, $@ if $@;
+ if ($@) { chomp $@; push @errs, $@ }
}
# set walk-output b4 compiling, which writes 'announce' line
walk_output(\$rendering);
- if ($in->{fail}) {
+ if ($tc->{fail}) {
fail("forced failure: stdout follows");
walk_output(\*STDOUT);
}
@@ -477,51 +523,111 @@ sub getRendering {
B::Concise::reset_sequence();
$opwalker->();
+
+ # kludge error into rendering if its empty.
+ $rendering = $@ if $@ and ! $rendering;
}
- if ($in->{strip}) {
+ # separate banner, other stuff whose printing order isnt guaranteed
+ if ($tc->{strip}) {
$rendering =~ s/(B::Concise::compile.*?\n)//;
- print "stripped from rendering <$1>\n" if $1 and $in->{stripv};
+ print "stripped from rendering <$1>\n" if $1 and $tc->{stripv};
- while ($rendering =~ s/^(.*?-e line .*?\n)//g) {
- print "stripped <$1>\n" if $in->{stripv};
+ #while ($rendering =~ s/^(.*?(-e) line \d+\.)\n//g) {
+ while ($rendering =~ s/^(.*?(-e|\(eval \d+\).*?) line \d+\.)\n//g) {
+ print "stripped <$1> $2\n" if $tc->{stripv};
push @errs, $1;
}
$rendering =~ s/-e syntax OK\n//;
$rendering =~ s/-e had compilation errors\.\n//;
}
+ $tc->{got} = $rendering;
+ $tc->{goterrs} = \@errs if @errs;
return $rendering, @errs;
}
sub get_bcopts {
# collect concise passthru-options if any
- my ($in) = shift;
+ my ($tc) = shift;
my @opts = ();
- if ($in->{bcopts}) {
- @opts = (ref $in->{bcopts} eq 'ARRAY')
- ? @{$in->{bcopts}} : ($in->{bcopts});
+ if ($tc->{bcopts}) {
+ @opts = (ref $tc->{bcopts} eq 'ARRAY')
+ ? @{$tc->{bcopts}} : ($tc->{bcopts});
}
return @opts;
}
-=head1 mkCheckRex
+sub checkErrs {
+ # check rendering errs against expected errors, reduce and report
+ my $tc = shift;
+
+ # check for agreement, by hash (order less important)
+ my (%goterrs, @got);
+ @goterrs{@{$tc->{goterrs}}} = (1) x scalar @{$tc->{goterrs}};
+
+ foreach my $k (keys %{$tc->{errs}}) {
+ if (@got = grep /^$k$/, keys %goterrs) {
+ delete $tc->{errs}{$k};
+ delete $goterrs{$_} foreach @got;
+ }
+ }
+ $tc->{goterrs} = \%goterrs;
+
+ # relook at altered
+ if (%{$tc->{errs}} or %{$tc->{goterrs}}) {
+ $tc->diag_or_fail();
+ }
+ fail("FORCED: $tc->{name}:\n$rendering") if $gOpts{fail}; # silly ?
+}
+
+sub diag_or_fail {
+ # help checkErrs
+ my $tc = shift;
+
+ my @lines;
+ push @lines, "got unexpected:", sort keys %{$tc->{goterrs}} if %{$tc->{goterrs}};
+ push @lines, "missed expected:", sort keys %{$tc->{errs}} if %{$tc->{errs}};
+
+ if (@lines) {
+ unshift @lines, $tc->{name};
+ my $report = join("\n", @lines);
+
+ if ($gOpts{report} eq 'diag') { _diag ($report) }
+ elsif ($gOpts{report} eq 'fail') { fail ($report) }
+ else { print ($report) }
+ next unless $gOpts{errcont}; # skip block
+ }
+}
+
+=head1 mkCheckRex ($tc)
-mkCheckRex receives the full testcase object, and constructs a regex.
-1st, it selects a reftxt from either the expect or expect_nt items.
+It selects the correct golden-sample from the test-case object, and
+converts it into a Regexp which should match against the original
+golden-sample (used in selftest, see below), and on the renderings
+obtained by applying the code on the perl being tested.
+
+The selection is driven by platform mostly, but also by test-mode,
+which rather complicates the code. This is worsened by the potential
+need to make platform specific conversions on the reftext.
-Once selected, the reftext is massaged & converted into a Regex that
-accepts 'good' concise renderings, with appropriate input variations,
but is otherwise as strict as possible. For example, it should *not*
match when opcode flags change, or when optimizations convert an op to
an ex-op.
-selection is driven by platform mostly, but also by test-mode, which
-rather complicates the code. this is worsened by the potential need
-to make platform specific conversions on the reftext.
=head2 match criteria
+The selected golden-sample is massaged to eliminate various match
+irrelevancies. This is done so that the tests dont fail just because
+you added a line to the top of the test file. (Recall that the
+renderings contain the program's line numbers). Similar cleanups are
+done on "strings", hex-constants, etc.
+
+The need to massage is reflected in the 2 golden-sample approach of
+the test-cases; we want the match to be as rigorous as possible, and
+thats easier to achieve when matching against 1 input than 2.
+
Opcode arguments (text within braces) are disregarded for matching
-purposes. This loses some info in 'add[t5]', but greatly simplifys
+purposes. This loses some info in 'add[t5]', but greatly simplifies
matching 'nextstate(main 22 (eval 10):1)'. Besides, we are testing
for regressions, not for complete accuracy.
@@ -536,16 +642,25 @@ my $announce = 'B::Concise::compile\(CODE\(0x[0-9a-f]+\)\)';;
sub mkCheckRex {
# converts expected text into Regexp which should match against
# unaltered version. also adjusts threaded => non-threaded
- my ($in, $want) = @_;
+ my ($tc, $want) = @_;
eval "no re 'debug'";
- my $str = $in->{expect} || $in->{expect_nt}; # standard bias
- $str = $in->{$want} if $want; # stated pref
+ my $str = $tc->{expect} || $tc->{expect_nt}; # standard bias
+ $str = $tc->{$want} if $want && $tc->{$want}; # stated pref
- #fail("rex-str is empty, won't allow false positives") unless $str;
+ die("no '$want' golden-sample found: $tc->{name}") unless $str;
- $str =~ s/^\# //mg; # ease cut-paste testcase authoring
- my $reftxt = $str; # extra return val !!
+ $str =~ s/^\# //mg; # ease cut-paste testcase authoring
+
+ if ($] < 5.009) {
+ # add 5.8 private flags, which bleadperl (5.9.1) doesn't have/use/render
+ # works because it adds no wildcards, which are butchered below..
+ $str =~ s|(mapstart l?K\*?)|$1/2|mg;
+ $str =~ s|(grepstart l?K\*?)|$1/2|msg;
+ $str =~ s|(mapwhile.*? l?K)|$1/1|msg;
+ $str =~ s|(grepwhile.*? l?K)|$1/1|msg;
+ }
+ $tc->{wantstr} = $str;
# convert all (args) and [args] to temp forms wo bracing
$str =~ s/\[(.*?)\]/__CAPSQR$1__/msg;
@@ -560,7 +675,7 @@ sub mkCheckRex {
$str =~ s/__CAPRND(.*?)__\b/\\($1\\)/msg;
$str =~ s/__CAPRND(.*?)__\b/\\($1\\)/msg; # nested () in nextstate
- # no 'invisible' failures in debugger
+ # treat dbstate like nextstate (no in-debugger false reports)
$str =~ s/(?:next|db)state(\\\(.*?\\\))/(?:next|db)state(.*?)/msg;
# widened for -terse mode
$str =~ s/(?:next|db)state/(?:next|db)state/msg;
@@ -571,10 +686,16 @@ sub mkCheckRex {
$str =~ s/(0x[0-9A-Fa-f]+)/0x[0-9A-Fa-f]+/msg; # hexnum values
$str =~ s/".*?"/".*?"/msg; # quoted strings
- $str =~ s/(\d refs?)/\\d refs?/msg;
+ $str =~ s/(\d refs?)/\\d+ refs?/msg; # 1 ref, 2+ refs (plural)
$str =~ s/leavesub \[\d\]/leavesub [\\d]/msg; # for -terse
+ #$str =~ s/(\s*)\n/\n/msg; # trailing spaces
+
+ # these fix up pad-slot assignment args
+ if ($] < 5.009 or $tc->{cross}) {
+ $str =~ s/\[t\d+\\]/\[t\\d+\\]/msg; # pad slot assignments
+ }
- croak "no reftext found for $want: $in->{name}"
+ croak "no reftext found for $want: $tc->{name}"
unless $str =~ /\w+/; # fail unless a real test
# $str = '.*' if 1; # sanity test
@@ -582,33 +703,211 @@ sub mkCheckRex {
# allow -eval, banner at beginning of anchored matches
$str = "(-e .*?)?(B::Concise::compile.*?)?\n" . $str
- unless $in->{noanchors} or $in->{rxnoorder};
+ unless $tc->{noanchors} or $tc->{rxnoorder};
eval "use re 'debug'" if $debug;
- my $qr = ($in->{noanchors}) ? qr/$str/ms : qr/^$str$/ms ;
+ my $qr = ($tc->{noanchors}) ? qr/$str/ms : qr/^$str$/ms ;
no re 'debug';
- return ($qr, $reftxt, $str) if wantarray;
- return $qr;
+ $tc->{rex} = $qr;
+ $tc->{rexstr} = $str;
+ $tc;
}
+##############
+# compare and report
-sub printhelp {
- # crufty - may be still useful
- my ($in, $rendering, $rex) = @_;
- print "<$rendering>\nVS\n<$rex>\n" if $gOpts{vbasic};
+sub mylike {
+ # reworked mylike to use hash-obj
+ my $tc = shift;
+ my $got = $tc->{got};
+ my $want = $tc->{rex};
+ my $cmnt = $tc->{name};
+ my $cross = $tc->{cross};
+
+ my $msgs = $tc->{msgs};
+ my $retry = $tc->{retry}; # || $gopts{retry};
+ my $debug = $tc->{debug}; #|| $gopts{retrydbg};
+
+ # bad is anticipated failure
+ my $bad = (0 or ( $cross && $tc->{crossfail})
+ or (!$cross && $tc->{fail})
+ or 0); # no undefs !
+
+ # same as A ^ B, but B has side effects
+ my $ok = ( $bad && unlike ($got, $want, $cmnt, @$msgs)
+ or !$bad && like ($got, $want, $cmnt, @$msgs));
+
+ reduceDiffs ($tc) if not $ok;
+
+ if (not $ok and $retry) {
+ # redo, perhaps with use re debug - NOT ROBUST
+ eval "use re 'debug'" if $debug;
+ $ok = ( $bad && unlike ($got, $want, "(RETRY) $cmnt", @$msgs)
+ or !$bad && like ($got, $want, "(RETRY) $cmnt", @$msgs));
+ eval "no re 'debug'";
+ }
+ return $ok;
+}
- # save this output to afile, edit out 'ok's and 1..N
- # then perl -d afile, and add re 'debug' to suit.
- print("\$str = q%$rendering%;\n".
- "\$rex = qr%$rex%;\n\n".
- #"print \"\$str =~ m%\$rex%ms \";\n".
- "\$str =~ m{\$rex}ms or print \"doh\\n\";\n\n")
- if $in{rextract} or $gOpts{rextract};
+sub reduceDiffs {
+ # isolate the real diffs and report them.
+ # i.e. these kinds of errs:
+ # 1. missing or extra ops. this skews all following op-sequences
+ # 2. single op diff, the rest of the chain is unaltered
+ # in either case, std err report is inadequate;
+
+ my $tc = shift;
+ my $got = $tc->{got};
+ my @got = split(/\n/, $got);
+ my $want = $tc->{wantstr};
+ my @want = split(/\n/, $want);
+
+ # split rexstr into units that should eat leading lines.
+ my @rexs = map qr/$_/, split (/\n/, $tc->{rexstr});
+
+ foreach my $rex (@rexs) {
+ my $exp = shift @want;
+ my $line = shift @got;
+ # remove matches, and report
+ unless ($got =~ s/($rex\n)//msg) {
+ _diag("got:\t\t'$line'\nwant:\t $rex\n");
+ }
+ }
+ _diag("remainder:\n$got");
+ _diag("these lines not matched:\n$got\n");
}
+=head1 Global modes
+
+Unusually, this module also processes @ARGV for command-line arguments
+which set global modes. These 'options' change the way the tests run,
+essentially reusing the tests for different purposes.
-#########################
+
+
+Additionally, there's an experimental control-arg interface (i.e.
+subject to change) which allows the user to set global modes.
+
+
+=head1 Testing Method
+
+At 1st, optreeCheck used one reference-text, but the differences
+between Threaded and Non-threaded renderings meant that a single
+reference (sampled from say, threaded) would be tricky and iterative
+to convert for testing on a non-threaded build. Worse, this conflicts
+with making tests both strict and precise.
+
+We now use 2 reference texts, the right one is used based upon the
+build's threaded-ness. This has several benefits:
+
+ 1. native reference data allows closer/easier matching by regex.
+ 2. samples can be eyeballed to grok T-nT differences.
+ 3. data can help to validate mkCheckRex() operation.
+ 4. can develop regexes which accommodate T-nT differences.
+ 5. can test with both native and cross-converted regexes.
+
+Cross-testing (expect_nt on threaded, expect on non-threaded) exposes
+differences in B::Concise output, so mkCheckRex has code to do some
+cross-test manipulations. This area needs more work.
+
+=head1 Test Modes
+
+One consequence of a single-function API is difficulty controlling
+test-mode. I've chosen for now to use a package hash, %gOpts, to store
+test-state. These properties alter checkOptree() function, either
+short-circuiting to selftest, or running a loop that runs the testcase
+2^N times, varying conditions each time. (current N is 2 only).
+
+So Test-mode is controlled with cmdline args, also called options below.
+Run with 'help' to see the test-state, and how to change it.
+
+=head2 selftest
+
+This argument invokes runSelftest(), which tests a regex against the
+reference renderings that they're made from. Failure of a regex match
+its 'mold' is a strong indicator that mkCheckRex is buggy.
+
+That said, selftest mode currently runs a cross-test too, they're not
+completely orthogonal yet. See below.
+
+=head2 testmode=cross
+
+Cross-testing is purposely creating a T-NT mismatch, looking at the
+fallout, which helps to understand the T-NT differences.
+
+The tweaking appears contrary to the 2-refs philosophy, but the tweaks
+will be made in conversion-specific code, which (will) handles T->NT
+and NT->T separately. The tweaking is incomplete.
+
+A reasonable 1st step is to add tags to indicate when TonNT or NTonT
+is known to fail. This needs an option to force failure, so the
+test.pl reporting mechanics show results to aid the user.
+
+=head2 testmode=native
+
+This is normal mode. Other valid values are: native, cross, both.
+
+=head2 checkOptree Notes
+
+Accepts test code, renders its optree using B::Concise, and matches
+that rendering against a regex built from one of 2 reference
+renderings %tc data.
+
+The regex is built by mkCheckRex(\%tc), which scrubs %tc data to
+remove match-irrelevancies, such as (args) and [args]. For example,
+it strips leading '# ', making it easy to cut-paste new tests into
+your test-file, run it, and cut-paste actual results into place. You
+then retest and reedit until all 'errors' are gone. (now make sure you
+haven't 'enshrined' a bug).
+
+name: The test name. May be augmented by a label, which is built from
+important params, and which helps keep names in sync with whats being
+tested.
+
+=cut
+
+sub runSelftest {
+ # tests the regex produced by mkCheckRex()
+ # by using on the expect* text it was created with
+ # failures indicate a code bug,
+ # OR regexs plugged into the expect* text (which defeat conversions)
+ my $tc = shift;
+
+ for my $provenance (qw/ expect expect_nt /) {
+ #next unless $tc->{$provenance};
+
+ $tc->mkCheckRex($provenance);
+ $tc->{got} = $tc->{wantstr}; # fake the rendering
+ $tc->mylike();
+ }
+}
+
+my $dumploaded = 0;
+
+sub mydumper {
+
+ do { Dumper(@_); return } if $dumploaded;
+
+ eval "require Data::Dumper"
+ or do{
+ print "Sorry, Data::Dumper is not available\n";
+ print "half hearted attempt:\n";
+ foreach $it (@_) {
+ if (ref $it eq 'HASH') {
+ print " $_ => $it->{$_}\n" foreach sort keys %$it;
+ }
+ }
+ return;
+ };
+
+ Data::Dumper->import;
+ $Data::Dumper::Sortkeys = 1;
+ $dumploaded++;
+ Dumper(@_);
+}
+
+############################
# support for test writing
sub preamble {
@@ -643,8 +942,10 @@ checkOptree(note => q{$comment},
code => q{$code},
expect => <<EOT_EOT, expect_nt => <<EONT_EONT);
ThreadedRef
+ paste your 'golden-example' here, then retest
EOT_EOT
-NonThreadRef
+NonThreadedRef
+ paste your 'golden-example' here, then retest
EONT_EONT
};
@@ -665,12 +966,12 @@ sub OptreeCheck::gentest {
# extract the 'reftext' ie the got 'block'
if ($got =~ m/got \'.*?\n(.*)\n\# \'\n\# expected/s) {
- my $reftext = $1;
+ my $goldentxt = $1;
#and plug it into the test-src
if ($threaded) {
- $testcode =~ s/ThreadedRef/$reftext/;
+ $testcode =~ s/ThreadedRef/$goldentxt/;
} else {
- $testcode =~ s/NonThreadRef/$reftext/;
+ $testcode =~ s/NonThreadRef/$goldentxt/;
}
my $b4 = q{expect => <<EOT_EOT, expect_nt => <<EONT_EONT};
my $af = q{expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT'};
@@ -691,7 +992,9 @@ sub OptreeCheck::gentest {
sub OptreeCheck::processExamples {
my @files = @_;
- # gets array of paragraphs, which should be tests.
+
+ # gets array of paragraphs, which should be code-samples. Theyre
+ # turned into optreeCheck tests,
foreach my $file (@files) {
open (my $fh, $file) or die "cant open $file: $!\n";
@@ -738,7 +1041,8 @@ bugs. To that end, OptreeCheck has support for developing new tests,
according to the following model:
1. write a set of sample code into a single file, one per
- paragraph. f_map and f_sort in ext/B/t/ are examples.
+ paragraph. Add <=for gentest> blocks if you care to, or just look at
+ f_map and f_sort in ext/B/t/ for examples.
2. run OptreeCheck as a program on the file
@@ -755,19 +1059,6 @@ according to the following model:
the gots into the expects, easier than running step 2 on both
builds then trying to sdiff them together.
-=head1 TODO
-
-There's a considerable amount of cruft in the whole arg-handling setup.
-I'll replace / strip it before 5.10
-
-Treat %in as a test object, interwork better with Test::*
-
-Refactor mkCheckRex() and selfTest() to isolate the selftest,
-crosstest, etc selection mechanics.
-
-improve retry, retrydbg, esp. it's control of eval "use re debug".
-This seems to work part of the time, but isn't stable enough.
-
=head1 CAVEATS
This code is purely for testing core. While checkOptree feels flexible
diff --git a/gnu/usr.bin/perl/ext/B/t/b.t b/gnu/usr.bin/perl/ext/B/t/b.t
index 0d2e8bc350d..70f4f59064c 100644
--- a/gnu/usr.bin/perl/ext/B/t/b.t
+++ b/gnu/usr.bin/perl/ext/B/t/b.t
@@ -1,12 +1,16 @@
#!./perl
BEGIN {
- chdir 't' if -d 't';
- if ($^O eq 'MacOS') {
- @INC = qw(: ::lib ::macos:lib);
+ if ($ENV{PERL_CORE}){
+ chdir('t') if -d 't';
+ if ($^O eq 'MacOS') {
+ @INC = qw(: ::lib ::macos:lib);
+ } else {
+ @INC = '.';
+ push @INC, '../lib';
+ }
} else {
- @INC = '.';
- push @INC, '../lib';
+ unshift @INC, 't';
}
require Config;
if (($Config::Config{'extensions'} !~ /\bB\b/) ){
diff --git a/gnu/usr.bin/perl/ext/B/t/concise-xs.t b/gnu/usr.bin/perl/ext/B/t/concise-xs.t
new file mode 100755
index 00000000000..53e05e3fa1b
--- /dev/null
+++ b/gnu/usr.bin/perl/ext/B/t/concise-xs.t
@@ -0,0 +1,284 @@
+#!./perl
+
+# 2 purpose file: 1-test 2-demonstrate (via args, -v -a options)
+
+=head1 SYNOPSIS
+
+To verify that B::Concise properly reports whether functions are XS or
+perl, we test against 2 (currently) core packages which have lots of
+XS functions: B and Digest::MD5. They're listed in %$testpkgs, along
+with a list of functions that are (or are not) XS. For brevity, you
+can specify the shorter list; if they're non-xs routines, start list
+with a '!'. Data::Dumper is also tested, partly to prove the non-!
+usage.
+
+We demand-load each package, scan its stash for function names, and
+mark them as XS/not-XS according to the list given for each package.
+Then we test B::Concise's report on each.
+
+=head1 OPTIONS AND ARGUMENTS
+
+C<-v> and C<-V> trigger 2 levels of verbosity.
+
+C<-a> uses Module::CoreList to run all core packages through the test, which
+gives some interesting results.
+
+C<-c> causes the expected XS/non-XS results to be marked with
+corrections, which are then reported at program END, in a
+Data::Dumper statement
+
+C<< -r <file> >> reads a file, as written by C<-c>, and adjusts the expected
+results accordingly. The file is 'required', so @INC settings apply.
+
+If module-names are given as args, those packages are run through the
+test harness; this is handy for collecting further items to test, and
+may be useful otherwise (ie just to see).
+
+=head1 EXAMPLES
+
+All following examples avoid using PERL_CORE=1, since that changes @INC
+
+=over 4
+
+=item ./perl -Ilib -wS ext/B/t/concise-xs.t -c Storable
+
+Tests Storable.pm for XS/non-XS routines, writes findings (along with
+test results) to stdout. You could edit results to produce a test
+file, as in next example
+
+=item ./perl -Ilib -wS ext/B/t/concise-xs.t -r ./storable
+
+Loads file, and uses it to set expectations, and run tests
+
+=item ./perl -Ilib -wS ext/B/t/concise-xs.t -avc > ../foo-avc 2> ../foo-avc2
+
+Gets module list from Module::Corelist, and runs them all through the
+test. Since -c is used, this generates corrections, which are saved
+in a file, which is edited down to produce ../all-xs
+
+=item ./perl -Ilib -wS ext/B/t/concise-xs.t -cr ../all-xs > ../foo 2> ../foo2
+
+This runs the tests specified in the file created in previous example.
+-c is used again, and stdout verifies that all the expected results
+given by -r ../all-xs are now seen.
+
+Looking at ../foo2, you'll see 34 occurrences of the following error:
+
+# err: Can't use an undefined value as a SCALAR reference at
+# lib/B/Concise.pm line 634, <DATA> line 1.
+
+=back
+
+=cut
+
+BEGIN {
+ if ($ENV{PERL_CORE}) {
+ chdir('t') if -d 't';
+ @INC = ('.', '../lib');
+ } else {
+ unshift @INC, 't';
+ push @INC, "../../t";
+ }
+ require Config;
+ if (($Config::Config{'extensions'} !~ /\bB\b/) ){
+ print "1..0 # Skip -- Perl configured without B module\n";
+ exit 0;
+ }
+ unless ($Config::Config{useperlio}) {
+ print "1..0 # Skip -- Perl configured without perlio\n";
+ exit 0;
+ }
+}
+
+use Getopt::Std;
+use Carp;
+# One 5.009-only test to go when no 6; is integrated (25344)
+use Test::More tests => ( 1 * !!$Config::Config{useithreads}
+ + 1 * ($] > 5.009)
+ + 778);
+
+require_ok("B::Concise");
+
+my $testpkgs = {
+
+ Digest::MD5 => [qw/ ! import /],
+
+ B => [qw/ ! class clearsym compile_stats debug objsym parents
+ peekop savesym timing_info walkoptree_exec
+ walkoptree_slow walksymtable /],
+
+ Data::Dumper => [qw/ bootstrap Dumpxs /],
+
+ B::Deparse => [qw/ ASSIGN CVf_ASSERTION CVf_LOCKED CVf_LVALUE
+ CVf_METHOD LIST_CONTEXT OP_CONST OP_LIST OP_RV2SV
+ OP_STRINGIFY OPf_KIDS OPf_MOD OPf_REF OPf_SPECIAL
+ OPf_STACKED OPf_WANT OPf_WANT_LIST OPf_WANT_SCALAR
+ OPf_WANT_VOID OPpCONST_ARYBASE OPpCONST_BARE
+ OPpENTERSUB_AMPER OPpEXISTS_SUB OPpITER_REVERSED
+ OPpLVAL_INTRO OPpOUR_INTRO OPpSLICE OPpSORT_DESCEND
+ OPpSORT_INPLACE OPpSORT_INTEGER OPpSORT_NUMERIC
+ OPpSORT_REVERSE OPpTARGET_MY OPpTRANS_COMPLEMENT
+ OPpTRANS_DELETE OPpTRANS_SQUASH PMf_CONTINUE
+ PMf_EVAL PMf_EXTENDED PMf_FOLD PMf_GLOBAL PMf_KEEP
+ PMf_MULTILINE PMf_ONCE PMf_SINGLELINE PMf_SKIPWHITE
+ POSTFIX SVf_FAKE SVf_IOK SVf_NOK SVf_POK SVf_ROK
+ SVpad_OUR SVs_RMG SVs_SMG SWAP_CHILDREN main_cv
+ main_root main_start opnumber perlstring
+ svref_2object /],
+
+};
+
+############
+
+B::Concise::compile('-nobanner'); # set a silent default
+getopts('vaVcr:', \my %opts) or
+ die <<EODIE;
+
+usage: PERL_CORE=1 ./perl ext/B/t/concise-xs.t [-av] [module-list]
+ tests ability to discern XS funcs using Digest::MD5 package
+ -v : runs verbosely
+ -V : more verbosity
+ -a : runs all modules in CoreList
+ -c : writes test corrections as a Data::Dumper expression
+ -r <file> : reads file of tests, as written by -c
+ <args> : additional modules are loaded and tested
+ (will report failures, since no XS funcs are known aprior)
+
+EODIE
+ ;
+
+if (%opts) {
+ require Data::Dumper;
+ Data::Dumper->import('Dumper');
+ $Data::Dumper::Sortkeys = 1;
+}
+my @argpkgs = @ARGV;
+my %report;
+
+if ($opts{r}) {
+ my $refpkgs = require "$opts{r}";
+ $testpkgs->{$_} = $refpkgs->{$_} foreach keys %$refpkgs;
+}
+
+unless ($opts{a}) {
+ unless (@argpkgs) {
+ foreach $pkg (sort keys %$testpkgs) {
+ test_pkg($pkg, $testpkgs->{$pkg});
+ }
+ } else {
+ foreach $pkg (@argpkgs) {
+ test_pkg($pkg, $testpkgs->{$pkg});
+ }
+ }
+} else {
+ corecheck();
+}
+############
+
+sub test_pkg {
+ my ($pkg_name, $xslist) = @_;
+ require_ok($pkg_name);
+
+ unless (ref $xslist eq 'ARRAY') {
+ warn "no XS/non-XS function list given, assuming empty XS list";
+ $xslist = [''];
+ }
+
+ my $assumeXS = 0; # assume list enumerates XS funcs, not perl ones
+ $assumeXS = 1 if $xslist->[0] and $xslist->[0] eq '!';
+
+ # build %stash: keys are func-names, vals: 1 if XS, 0 if not
+ my (%stash) = map
+ ( ($_ => $assumeXS)
+ => ( grep exists &{"$pkg_name\::$_"} # grab CODE symbols
+ => grep !/__ANON__/ # but not anon subs
+ => keys %{$pkg_name.'::'} # from symbol table
+ ));
+
+ # now invert according to supplied list
+ $stash{$_} = int ! $assumeXS foreach @$xslist;
+
+ # and cleanup cruft (easier than preventing)
+ delete @stash{'!',''};
+
+ if ($opts{v}) {
+ diag("xslist: " => Dumper($xslist));
+ diag("$pkg_name stash: " => Dumper(\%stash));
+ }
+ my $err;
+ foreach $func_name (reverse sort keys %stash) {
+ my $res = checkXS("${pkg_name}::$func_name", $stash{$func_name});
+ if (!$res) {
+ $stash{$func_name} ^= 1;
+ print "$func_name ";
+ $err++;
+ }
+ }
+ $report{$pkg_name} = \%stash if $opts{c} and $err || $opts{v};
+}
+
+sub checkXS {
+ my ($func_name, $wantXS) = @_;
+
+ my ($buf, $err) = render($func_name);
+ if ($wantXS) {
+ like($buf, qr/\Q$func_name is XS code/,
+ "XS code:\t $func_name");
+ } else {
+ unlike($buf, qr/\Q$func_name is XS code/,
+ "perl code:\t $func_name");
+ }
+ #returns like or unlike, whichever was called
+}
+
+sub render {
+ my ($func_name) = @_;
+
+ B::Concise::reset_sequence();
+ B::Concise::walk_output(\my $buf);
+
+ my $walker = B::Concise::compile($func_name);
+ eval { $walker->() };
+ diag("err: $@ $buf") if $@;
+ diag("verbose: $buf") if $opts{V};
+
+ return ($buf, $@);
+}
+
+sub corecheck {
+
+ eval { require Module::CoreList };
+ if ($@) {
+ warn "Module::CoreList not available on $]\n";
+ return;
+ }
+ my $mods = $Module::CoreList::version{'5.009002'};
+ $mods = [ sort keys %$mods ];
+ print Dumper($mods);
+
+ foreach my $pkgnm (@$mods) {
+ test_pkg($pkgnm);
+ }
+}
+
+END {
+ if ($opts{c}) {
+ # print "Corrections: ", Dumper(\%report);
+ print "# Tested Package Subroutines, 1's are XS, 0's are perl\n";
+ print "\$VAR1 = {\n";
+
+ foreach my $pkg (sort keys %report) {
+ my (@xs, @perl);
+ my $stash = $report{$pkg};
+
+ @xs = sort grep $stash->{$_} == 1, keys %$stash;
+ @perl = sort grep $stash->{$_} == 0, keys %$stash;
+
+ my @list = (@xs > @perl) ? ( '!', @perl) : @xs;
+ print "\t$pkg => [qw/ @list /],\n";
+ }
+ print "};\n";
+ }
+}
+
+__END__
diff --git a/gnu/usr.bin/perl/ext/B/t/concise.t b/gnu/usr.bin/perl/ext/B/t/concise.t
index 16c56121807..0f573de0feb 100644
--- a/gnu/usr.bin/perl/ext/B/t/concise.t
+++ b/gnu/usr.bin/perl/ext/B/t/concise.t
@@ -1,17 +1,23 @@
#!./perl
BEGIN {
- chdir 't';
- @INC = '../lib';
+ if ($ENV{PERL_CORE}){
+ chdir('t') if -d 't';
+ @INC = ('.', '../lib');
+ } else {
+ unshift @INC, 't';
+ push @INC, "../../t";
+ }
require Config;
if (($Config::Config{'extensions'} !~ /\bB\b/) ){
print "1..0 # Skip -- Perl configured without B module\n";
exit 0;
}
- require './test.pl';
+ require 'test.pl'; # we use runperl from 'test.pl', so can't use Test::More
+ sub diag { print "# @_\n" } # but this is still handy
}
-plan tests => 142;
+plan tests => 149;
require_ok("B::Concise");
@@ -38,7 +44,7 @@ $out = runperl(
prog => q{$a=$b && print q/foo/},
stderr => 1,
);
-
+#diag($out);
like($out, qr/print/, "'-exec' option output has print opcode");
######## API tests v.60
@@ -115,15 +121,24 @@ is ($@, '', "set_style accepts 3 style-format args");
eval { set_style (@stylespec) };
like ($@, qr/expecting 3 style-format args/,
- "set_style rejects bad style-format args");
+ "set_style rejects bad style-format args");
#### for content with doc'd options
+our($a, $b);
my $func = sub{ $a = $b+42 }; # canonical example asub
+sub render {
+ walk_output(\my $out);
+ eval { B::Concise::compile(@_)->() };
+ # diag "rendering $@\n";
+ return ($out, $@) if wantarray;
+ return $out;
+}
+
SKIP: {
# tests output to GLOB, using perlio feature directly
- skip "no perlio on this build", 122
+ skip "no perlio on this build", 127
unless $Config::Config{useperlio};
set_style_standard('concise'); # MUST CALL before output needed
@@ -133,10 +148,7 @@ SKIP: {
-base10 -bigendian -littleendian
);
foreach $opt (@options) {
- walk_output(\my $out);
- my $treegen = B::Concise::compile($opt, $func);
- $treegen->();
- #print "foo:$out\n";
+ ($out) = render($opt, $func);
isnt($out, '', "got output with option $opt");
}
@@ -157,7 +169,7 @@ SKIP: {
$treegen->();
ok($buf, "walk_output to GLOB, output seen");
- ## Test B::Concise::compile error checking
+ ## test B::Concise::compile error checking
# call compile on non-CODE ref items
if (0) {
@@ -169,7 +181,7 @@ SKIP: {
eval { B::Concise::compile('-basic', $ref)->() };
like ($@, qr/^err: not a coderef: $typ/,
"compile detects $typ-ref where expecting subref");
- # is($out,'', "no output when errd"); # announcement prints
+ is($out,'', "no output when errd"); # announcement prints
}
}
@@ -177,16 +189,48 @@ SKIP: {
# in debugger, it should look like:
# 1 CODE(0x84840cc)
# -> &CODE(0x84840cc) in ???
- sub nosuchfunc;
- eval { B::Concise::compile('-basic', \&nosuchfunc)->() };
- like ($@, qr/^err: coderef has no START/,
- "compile detects CODE-ref w/o actual code");
-
- foreach my $opt (qw( -concise -exec )) {
- eval { B::Concise::compile($opt,'non_existent_function')->() };
- like ($@, qr/unknown function \(main::non_existent_function\)/,
- "'$opt' reports non-existent-function properly");
+
+ my ($res,$err);
+ TODO: {
+ #local $TODO = "\tdoes this handling make sense ?";
+
+ sub declared_only;
+ ($res,$err) = render('-basic', \&declared_only);
+ like ($res, qr/coderef CODE\(0x[0-9a-fA-F]+\) has no START/,
+ "'sub decl_only' seen as having no START");
+
+ sub defd_empty {};
+ ($res,$err) = render('-basic', \&defd_empty);
+ is(scalar split(/\n/, $res), 3,
+ "'sub defd_empty {}' seen as 3 liner");
+
+ is(1, $res =~ /leavesub/ && $res =~ /nextstate/,
+ "'sub defd_empty {}' seen as 2 ops: leavesub,nextstate");
+
+ ($res,$err) = render('-basic', \&not_even_declared);
+ like ($res, qr/coderef CODE\(0x[0-9a-fA-F]+\) has no START/,
+ "'\&not_even_declared' seen as having no START");
+
+ {
+ package Bar;
+ our $AUTOLOAD = 'garbage';
+ sub AUTOLOAD { print "# in AUTOLOAD body: $AUTOLOAD\n" }
+ }
+ ($res,$err) = render('-basic', Bar::auto_func);
+ like ($res, qr/unknown function \(Bar::auto_func\)/,
+ "Bar::auto_func seen as unknown function");
+
+ ($res,$err) = render('-basic', \&Bar::auto_func);
+ like ($res, qr/coderef CODE\(0x[0-9a-fA-F]+\) has no START/,
+ "'\&Bar::auto_func' seen as having no START");
+
+ ($res,$err) = render('-basic', \&Bar::AUTOLOAD);
+ like ($res, qr/in AUTOLOAD body: /, "found body of Bar::AUTOLOAD");
+
}
+ ($res,$err) = render('-basic', Foo::bar);
+ like ($res, qr/unknown function \(Foo::bar\)/,
+ "BC::compile detects fn-name as unknown function");
# v.62 tests
@@ -246,7 +290,7 @@ SKIP: {
}
my %save = %combos;
- my %combos; # outputs for $mode=any($order) and any($style)
+ %combos = (); # outputs for $mode=any($order) and any($style)
# add more samples with switching modes & sticky styles
for $style (@styles) {
@@ -292,7 +336,7 @@ SKIP: {
#now do double crosschecks: commutativity across stick / nostick
- my %combos = (%combos, %save);
+ %combos = (%combos, %save);
# test commutativity of flags, ie that AB == BA
for $mode (@modes) {
@@ -317,5 +361,30 @@ SKIP: {
}
}
+
+# test proper NULLING of pointer, derefd by CvSTART, when a coderef is
+# undefd. W/o this, the pointer can dangle into freed and reused
+# optree mem, which no longer points to opcodes.
+
+# Using B::Concise to render Config::AUTOLOAD's optree at BEGIN-time
+# triggers this obscure bug, cuz AUTOLOAD has a bootstrap version,
+# which is used at load-time then undeffed. It is normally
+# re-vivified later, but not in time for this (BEGIN/CHECK)-time
+# rendering.
+
+$out = runperl ( switches => ["-MO=Concise,Config::AUTOLOAD"],
+ prog => 'use Config; BEGIN { $Config{awk} }',
+ stderr => 1 );
+
+like($out, qr/Config::AUTOLOAD exists in stash, but has no START/,
+ "coderef properly undefined");
+
+$out = runperl ( switches => ["-MO=Concise,Config::AUTOLOAD"],
+ prog => 'use Config; CHECK { $Config{awk} }',
+ stderr => 1 );
+
+like($out, qr/Config::AUTOLOAD exists in stash, but has no START/,
+ "coderef properly undefined");
+
__END__
diff --git a/gnu/usr.bin/perl/ext/B/t/f_map.t b/gnu/usr.bin/perl/ext/B/t/f_map.t
index ff22dde8e3c..25bed73d2a9 100755
--- a/gnu/usr.bin/perl/ext/B/t/f_map.t
+++ b/gnu/usr.bin/perl/ext/B/t/f_map.t
@@ -1,8 +1,13 @@
#!perl
BEGIN {
- chdir q(t);
- @INC = qw(../lib ../ext/B/t);
+ if ($ENV{PERL_CORE}){
+ chdir('t') if -d 't';
+ @INC = ('.', '../lib', '../ext/B/t');
+ } else {
+ unshift @INC, 't';
+ push @INC, "../../t";
+ }
require Config;
if (($Config::Config{'extensions'} !~ /\bB\b/) ){
print "1..0 # Skip -- Perl configured without B module\n";
@@ -12,16 +17,24 @@ BEGIN {
print "1..0 # Skip -- need perlio to walk the optree\n";
exit 0;
}
- if ($] < 5.009) {
- print "1..0 # Skip -- TODO - provide golden result regexps for 5.8\n";
- exit 0;
- }
- require q(./test.pl);
+ # require q(test.pl); # now done by OptreeCheck
}
use OptreeCheck;
plan tests => 9;
+=head1 f_map.t
+
+Code test snippets here are adapted from `perldoc -f map`
+
+Due to a bleadperl optimization (Dave Mitchell, circa may 04), the
+(map|grep)(start|while) opcodes have different flags in 5.9, their
+private flags /1, /2 are gone in blead (for the cases covered)
+
+When the optree stuff was integrated into 5.8.6, these tests failed,
+and were todo'd. Theyre now done, by version-specific tweaking in
+mkCheckRex(), therefore the skip is removed too.
+
=for gentest
# chunk: #!perl
diff --git a/gnu/usr.bin/perl/ext/B/t/f_sort.t b/gnu/usr.bin/perl/ext/B/t/f_sort.t
index 26dfbe4c54e..fa1ece3b0e3 100755
--- a/gnu/usr.bin/perl/ext/B/t/f_sort.t
+++ b/gnu/usr.bin/perl/ext/B/t/f_sort.t
@@ -1,8 +1,13 @@
#!perl
BEGIN {
- chdir q(t);
- @INC = qw(../lib ../ext/B/t);
+ if ($ENV{PERL_CORE}){
+ chdir('t') if -d 't';
+ @INC = ('.', '../lib', '../ext/B/t');
+ } else {
+ unshift @INC, 't';
+ push @INC, "../../t";
+ }
require Config;
if (($Config::Config{'extensions'} !~ /\bB\b/) ){
print "1..0 # Skip -- Perl configured without B module\n";
@@ -12,15 +17,22 @@ BEGIN {
print "1..0 # Skip -- need perlio to walk the optree\n";
exit 0;
}
- if ($] < 5.009) {
- print "1..0 # Skip -- TODO - provide golden result regexps for 5.8\n";
- exit 0;
- }
- require q(./test.pl);
+ # require q(test.pl); # now done by OptreeCheck;
}
use OptreeCheck;
plan tests => 20;
+=head1 f_sort.t
+
+Code test snippets here are adapted from `perldoc -f map`
+
+Due to a bleadperl optimization (Dave Mitchell, circa apr 04), the
+(map|grep)(start|while) opcodes have different flags in 5.9, their
+private flags /1, /2 are gone in blead (for the cases covered)
+
+When the optree stuff was integrated into 5.8.6, these tests failed,
+and were todo'd. Theyre now done, by version-specific tweaking in
+mkCheckRex(), therefore the skip is removed too.
=head1 Test Notes
@@ -92,7 +104,7 @@ checkOptree(note => q{},
# 7 <0> pushmark s
# 8 <#> gv[*articles] s
# 9 <1> rv2av[t2] lKRM*/1
-# a <2> aassign[t5] KS
+# a <2> aassign[t3] KS
# b <1> leavesub[1 ref] K/REFC,1
EOT_EOT
# 1 <;> nextstate(main 546 (eval 15):1) v
@@ -166,7 +178,7 @@ checkOptree(note => q{},
# 7 <0> pushmark s
# 8 <#> gv[*articles] s
# 9 <1> rv2av[t2] lKRM*/1
-# a <2> aassign[t5] KS
+# a <2> aassign[t3] KS
# b <1> leavesub[1 ref] K/REFC,1
EOT_EOT
# 1 <;> nextstate(main 546 (eval 15):1) v
@@ -203,7 +215,7 @@ checkOptree(note => q{},
# 7 <0> pushmark s
# 8 <#> gv[*articles] s
# 9 <1> rv2av[t2] lKRM*/1
-# a <2> aassign[t5] KS
+# a <2> aassign[t3] KS
# b <1> leavesub[1 ref] K/REFC,1
EOT_EOT
# 1 <;> nextstate(main 546 (eval 15):1) v
@@ -240,7 +252,7 @@ checkOptree(note => q{},
# 7 <0> pushmark s
# 8 <#> gv[*articles] s
# 9 <1> rv2av[t2] lKRM*/1
-# a <2> aassign[t5] KS
+# a <2> aassign[t3] KS
# b <1> leavesub[1 ref] K/REFC,1
EOT_EOT
# 1 <;> nextstate(main 546 (eval 15):1) v
@@ -787,7 +799,7 @@ checkOptree(note => q{},
# d <0> pushmark s
# e <#> gv[*result] s
# f <1> rv2av[t2] lKRM*/1
-# g <2> aassign[t5] KS/COMMON
+# g <2> aassign[t3] KS/COMMON
# h <1> leavesub[1 ref] K/REFC,1
EOT_EOT
# 1 <;> nextstate(main 547 (eval 15):1) v
diff --git a/gnu/usr.bin/perl/ext/B/t/o.t b/gnu/usr.bin/perl/ext/B/t/o.t
index b8b4349bc24..2b84f39b29c 100644
--- a/gnu/usr.bin/perl/ext/B/t/o.t
+++ b/gnu/usr.bin/perl/ext/B/t/o.t
@@ -1,8 +1,13 @@
#!./perl -w
BEGIN {
- chdir 't' if -d 't';
- @INC = ('../lib', 'lib', '.');
+ if ($ENV{PERL_CORE}){
+ chdir('t') if -d 't';
+ @INC = ('.', 'lib', '../lib');
+ } else {
+ unshift @INC, 't';
+ push @INC, "../../t";
+ }
require Config;
if (($Config::Config{'extensions'} !~ /\bB\b/) ){
print "1..0 # Skip -- Perl configured without B module\n";
diff --git a/gnu/usr.bin/perl/ext/B/t/optree_check.t b/gnu/usr.bin/perl/ext/B/t/optree_check.t
index 2e2ef9cf3db..56300643f30 100755
--- a/gnu/usr.bin/perl/ext/B/t/optree_check.t
+++ b/gnu/usr.bin/perl/ext/B/t/optree_check.t
@@ -1,14 +1,19 @@
#!perl
BEGIN {
- chdir 't';
- @INC = ('../lib', '../ext/B/t');
+ if ($ENV{PERL_CORE}){
+ chdir('t') if -d 't';
+ @INC = ('.', '../lib', '../ext/B/t');
+ } else {
+ unshift @INC, 't';
+ push @INC, "../../t";
+ }
require Config;
if (($Config::Config{'extensions'} !~ /\bB\b/) ){
print "1..0 # Skip -- Perl configured without B module\n";
exit 0;
}
- require './test.pl';
+ # require 'test.pl'; # now done by OptreeCheck
}
use OptreeCheck;
@@ -24,11 +29,11 @@ cmdline args in 'standard' way across all clients of OptreeCheck.
=cut
-use Config;
-plan tests => 5 + 18 + 14 * $gOpts{selftest}; # fudged
+my $tests = 5 + 15 + 16 * $gOpts{selftest}; # pass()s + $#tests
+plan tests => $tests;
SKIP: {
- skip "no perlio in this build", 5 + 18 + 14 * $gOpts{selftest}
+ skip "no perlio in this build", $tests
unless $Config::Config{useperlio};
@@ -49,7 +54,7 @@ checkOptree ( name => "found print opcode",
expect_nt => 'leavesub');
checkOptree ( name => 'test skip itself',
- skip => 1,
+ skip => 'this is skip-reason',
bcopts => '-exec',
code => sub {print 1},
expect => 'dont-care, skipping',
@@ -66,11 +71,11 @@ checkOptree ( name => 'test todo itself. suppressed, remove skip to test',
code => sub {print 1},
noanchors => 1, # unanchored match
expect => 'print',
- expect_nt => 'print');
+ expect_nt => 'print') if 0;
checkOptree ( name => 'impossible match, remove skip to see failure',
todo => "see! it breaks!",
- skip => 1, # but skip it 1st
+ skip => 'skip the failure',
code => sub {print 1},
expect => 'look out ! Boy Wonder',
expect_nt => 'holy near earth asteroid Batman !');
@@ -80,16 +85,7 @@ pass ("TEST FATAL ERRS");
if (1) {
# test for fatal errors. Im unsettled on fail vs die.
# calling fail isnt good enough by itself.
- eval {
-
- checkOptree ( name => 'empty code or prog',
- todo => "your excuse here ;-)",
- code => '',
- prog => '',
- );
- };
- like($@, 'code or prog is required', 'empty code or prog prevented');
-
+
$@='';
eval {
checkOptree ( name => 'test against empty expectations',
@@ -98,7 +94,7 @@ if (1) {
expect => '',
expect_nt => '');
};
- like($@, 'no reftext found for', "empty expectations prevented");
+ like($@, /no '\w+' golden-sample found/, "empty expectations prevented");
$@='';
eval {
@@ -109,31 +105,37 @@ if (1) {
expect_nt => "\n",
expect => "\n");
};
- like($@, 'no reftext found for', "just whitespace expectations prevented");
+ like($@, /no '\w+' golden-sample found/,
+ "just whitespace expectations prevented");
}
-
+
pass ("TEST -e \$srcCode");
-checkOptree
- ( name => '-w errors seen',
- prog => 'sort our @a',
- errs => 'Useless use of sort in void context at -e line 1.',
- );
+checkOptree ( name => 'empty code or prog',
+ skip => 'or fails',
+ todo => "your excuse here ;-)",
+ code => '',
+ prog => '',
+ );
checkOptree
( name => "self strict, catch err",
prog => 'use strict; bogus',
errs => 'Bareword "bogus" not allowed while "strict subs" in use at -e line 1.',
+ expect => "nextstate", # simple expectations
+ expect_nt => "nextstate",
+ noanchors => 1, # allow them to work
);
-checkOptree ( name => "sort vK - flag specific search",
- prog => 'sort our @a',
+checkOptree ( name => "sort lK - flag specific search",
+ prog => 'our (@a,@b); @b = sort @a',
noanchors => 1,
- expect => '<@> sort vK ',
- expect_nt => '<@> sort vK ');
+ expect => '<@> sort lK ',
+ expect_nt => '<@> sort lK ');
-checkOptree ( name => "'prog' => 'sort our \@a'",
+checkOptree ( name => "sort vK - flag specific search",
prog => 'sort our @a',
+ errs => 'Useless use of sort in void context at -e line 1.',
noanchors => 1,
expect => '<@> sort vK',
expect_nt => '<@> sort vK');
@@ -205,13 +207,8 @@ EOT_EOT
# 5 <$> gvsv(*a) s ->6
EONT_EONT
-checkOptree ( name => 'canonical example w -exec',
+checkOptree ( code => '$a=$b+42',
bcopts => '-exec',
- code => sub{$a=$b+42},
- crossfail => 1,
- retry => 1,
- debug => 1,
- xtestfail => 1,
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
# 1 <;> nextstate(main 61 optree_concise.t:139) v
# 2 <#> gvsv[*b] s
@@ -230,9 +227,6 @@ EOT_EOT
# 7 <1> leavesub[1 ref] K/REFC,1
EONT_EONT
-checkOptree ( name => 'tree reftext is messy cut-paste',
- skip => 1);
-
} # skip
__END__
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 97140c1d0d0..b14af0da457 100755
--- a/gnu/usr.bin/perl/ext/B/t/optree_concise.t
+++ b/gnu/usr.bin/perl/ext/B/t/optree_concise.t
@@ -1,23 +1,29 @@
#!perl
BEGIN {
- chdir 't';
- @INC = ('../lib', '../ext/B/t');
+ if ($ENV{PERL_CORE}){
+ chdir('t') if -d 't';
+ @INC = ('.', '../lib', '../ext/B/t');
+ } else {
+ unshift @INC, 't';
+ push @INC, "../../t";
+ }
require Config;
if (($Config::Config{'extensions'} !~ /\bB\b/) ){
print "1..0 # Skip -- Perl configured without B module\n";
exit 0;
}
- require './test.pl';
+ # require 'test.pl'; # now done by OptreeCheck
}
# import checkOptree(), and %gOpts (containing test state)
use OptreeCheck; # ALSO DOES @ARGV HANDLING !!!!!!
use Config;
-plan tests => 24;
+my $tests = 23;
+plan tests => $tests;
SKIP: {
-skip "no perlio in this build", 24 unless $Config::Config{useperlio};
+skip "no perlio in this build", $tests unless $Config::Config{useperlio};
$SIG{__WARN__} = sub {
my $err = shift;
@@ -30,11 +36,11 @@ checkOptree ( name => 'canonical example w -basic',
bcopts => '-basic',
code => sub{$a=$b+42},
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
-# 7 <1> leavesub[\d+ refs?] K/REFC,1 ->(end)
+# 7 <1> leavesub[1 ref] K/REFC,1 ->(end)
# - <@> lineseq KP ->7
# 1 <;> nextstate(foo bar) v ->2
# 6 <2> sassign sKS/2 ->7
-# 4 <2> add[t\d+] sK/2 ->5
+# 4 <2> add[t3] sK/2 ->5
# - <1> ex-rv2sv sK/1 ->3
# 2 <#> gvsv[*b] s ->3
# 3 <$> const[IV 42] s ->4
@@ -202,8 +208,11 @@ EONT_EONT
pass("OPTIONS IN CMDLINE MODE");
-checkOptree ( name => 'cmdline invoke -basic works',
- prog => 'sort @a',
+checkOptree ( name => 'cmdline invoke -basic works',
+ prog => 'sort @a',
+ errs => [ 'Useless use of sort in void context at -e line 1.',
+ 'Name "main::a" used only once: possible typo at -e line 1.',
+ ],
#bcopts => '-basic', # default
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
# 7 <@> leave[1 ref] vKP/REFC ->(end)
@@ -223,10 +232,13 @@ EOT_EOT
# 4 <$> gv(*a) s ->5
EONT_EONT
-checkOptree ( name => 'cmdline invoke -exec works',
- prog => 'sort @a',
- bcopts => '-exec',
- expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
+checkOptree ( name => 'cmdline invoke -exec works',
+ prog => 'sort @a',
+ errs => [ 'Useless use of sort in void context at -e line 1.',
+ 'Name "main::a" used only once: possible typo at -e line 1.',
+ ],
+ bcopts => '-exec',
+ expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
1 <0> enter
2 <;> nextstate(main 1 -e:1) v
3 <0> pushmark s
@@ -245,33 +257,33 @@ EOT_EOT
EONT_EONT
;
-$DB::single=1;
+
checkOptree
( name => 'cmdline self-strict compile err using prog',
prog => 'use strict; sort @a',
bcopts => [qw/ -basic -concise -exec /],
- errs => 'Global symbol "@a" requires explicit package name at .*? line 1.',
+ errs => 'Global symbol "@a" requires explicit package name at -e line 1.',
+ expect => 'nextstate',
+ expect_nt => 'nextstate',
+ noanchors => 1, # allow simple expectations to work
);
checkOptree
( name => 'cmdline self-strict compile err using code',
code => 'use strict; sort @a',
bcopts => [qw/ -basic -concise -exec /],
- #noanchors => 1,
errs => 'Global symbol "@a" requires explicit package name at .*? line 1.',
- );
-
-checkOptree
- ( name => 'useless use of sort in void context',
- prog => 'our @a; sort @a',
- bcopts => [qw/ -basic -concise -exec /],
- errs => 'Useless use of sort in void context at -e line 1.',
+ note => 'this test relys on a kludge which copies $@ to rendering when empty',
+ expect => 'Global symbol',
+ expect_nt => 'Global symbol',
+ noanchors => 1, # allow simple expectations to work
);
checkOptree
( name => 'cmdline -basic -concise -exec works',
prog => 'our @a; sort @a',
bcopts => [qw/ -basic -concise -exec /],
+ errs => ['Useless use of sort in void context at -e line 1.'],
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
# 1 <0> enter
# 2 <;> nextstate(main 1 -e:1) v
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 c51eeaeb353..4f0d7827100 100755
--- a/gnu/usr.bin/perl/ext/B/t/optree_samples.t
+++ b/gnu/usr.bin/perl/ext/B/t/optree_samples.t
@@ -1,18 +1,19 @@
#!perl
BEGIN {
- chdir 't';
- @INC = ('../lib', '../ext/B/t');
+ if ($ENV{PERL_CORE}){
+ chdir('t') if -d 't';
+ @INC = ('.', '../lib', '../ext/B/t');
+ } else {
+ unshift @INC, 't';
+ push @INC, "../../t";
+ }
require Config;
if (($Config::Config{'extensions'} !~ /\bB\b/) ){
print "1..0 # Skip -- Perl configured without B module\n";
exit 0;
}
- if ($] < 5.009) {
- print "1..0 # Skip -- TODO - provide golden result regexps for 5.8\n";
- exit 0;
- }
- require './test.pl';
+ # require 'test.pl'; # now done by OptreeCheck
}
use OptreeCheck;
use Config;
@@ -606,7 +607,7 @@ checkOptree ( name => 'map $_+42, 10..20',
# 3 <$> const[AV ] s
# 4 <1> rv2av lKPM/1
# 5 <@> mapstart K
-# 6 <|> mapwhile(other->7)[t7] K
+# 6 <|> mapwhile(other->7)[t5] K
# 7 <#> gvsv[*_] s
# 8 <$> const[IV 42] s
# 9 <2> add[t2] sK/2
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 b7615d941fc..278ebd7b1dd 100755
--- a/gnu/usr.bin/perl/ext/B/t/optree_sort.t
+++ b/gnu/usr.bin/perl/ext/B/t/optree_sort.t
@@ -1,14 +1,19 @@
#!perl
BEGIN {
- chdir 't';
- @INC = ('../lib', '../ext/B/t');
+ if ($ENV{PERL_CORE}){
+ chdir('t') if -d 't';
+ @INC = ('.', '../lib', '../ext/B/t');
+ } else {
+ unshift @INC, 't';
+ push @INC, "../../t";
+ }
require Config;
if (($Config::Config{'extensions'} !~ /\bB\b/) ){
print "1..0 # Skip -- Perl configured without B module\n";
exit 0;
}
- require './test.pl';
+ # require 'test.pl'; # now done by OptreeCheck
}
use OptreeCheck;
use Config;
@@ -38,10 +43,13 @@ EOT_EOT
# 6 <1> leavesub[1 ref] K/REFC,1
EONT_EONT
-checkOptree ( name => 'sort @a',
- prog => 'sort @a',
- bcopts => '-exec',
- expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
+checkOptree ( name => 'sort @a',
+ prog => 'sort @a',
+ errs => [ 'Useless use of sort in void context at -e line 1.',
+ 'Name "main::a" used only once: possible typo at -e line 1.',
+ ],
+ bcopts => '-exec',
+ expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
1 <0> enter
2 <;> nextstate(main 1 -e:1) v
3 <0> pushmark s
@@ -72,7 +80,7 @@ checkOptree ( name => 'sub {@a = sort @a}',
7 <0> pushmark s
8 <#> gv[*a] s
9 <1> rv2av[t2] lKRM*/1
-a <2> aassign[t\d+] KS/COMMON
+a <2> aassign[t5] KS/COMMON
b <1> leavesub[1 ref] K/REFC,1
EOT_EOT
# 1 <;> nextstate(main 65 optree.t:311) v
@@ -144,6 +152,7 @@ EONT_EONT
checkOptree ( name => '@a = sort @a; reverse @a',
prog => '@a = sort @a; reverse @a',
+ errs => ['Useless use of reverse in void context at -e line 1.'],
bcopts => '-exec',
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
1 <0> enter
@@ -188,7 +197,7 @@ checkOptree ( name => 'sub {my @a; @a = sort @a}',
7 <@> sort lK
8 <0> pushmark s
9 <0> padav[@a:-437,-436] lRM*
-a <2> aassign[t\d+] KS/COMMON
+a <2> aassign[t2] KS/COMMON
b <1> leavesub[1 ref] K/REFC,1
EOT_EOT
# 1 <;> nextstate(main 427 optree_sort.t:172) v
diff --git a/gnu/usr.bin/perl/ext/B/t/optree_specials.t b/gnu/usr.bin/perl/ext/B/t/optree_specials.t
index 75d2a8ab1a0..fd504f6cb7e 100755
--- a/gnu/usr.bin/perl/ext/B/t/optree_specials.t
+++ b/gnu/usr.bin/perl/ext/B/t/optree_specials.t
@@ -1,21 +1,33 @@
#!./perl
+# This tests the B:: module(s) with CHECK, BEGIN, END and INIT blocks. The
+# text excerpts below marked with "# " in front are the expected output. They
+# are there twice, EOT for threading, and EONT for a non-threading Perl. The
+# output is matched losely. If the match fails even though the "got" and
+# "expected" output look exactly the same, then watch for trailing, invisible
+# spaces.
+
BEGIN {
- chdir 't';
- @INC = ('../lib', '../ext/B/t');
+ if ($ENV{PERL_CORE}){
+ chdir('t') if -d 't';
+ @INC = ('.', '../lib', '../ext/B/t');
+ } else {
+ unshift @INC, 't';
+ push @INC, "../../t";
+ }
require Config;
if (($Config::Config{'extensions'} !~ /\bB\b/) ){
print "1..0 # Skip -- Perl configured without B module\n";
exit 0;
}
- require './test.pl';
+ # require 'test.pl'; # now done by OptreeCheck
}
# import checkOptree(), and %gOpts (containing test state)
use OptreeCheck; # ALSO DOES @ARGV HANDLING !!!!!!
use Config;
-plan tests => 6;
+plan tests => 7;
require_ok("B::Concise");
@@ -29,82 +41,61 @@ my $out = runperl(
my $src = q[our ($beg, $chk, $init, $end) = qq{'foo'}; BEGIN { $beg++ } CHECK { $chk++ } INIT { $init++ } END { $end++ }];
+my @warnings_todo;
+@warnings_todo = (todo =>
+ "Change 23768 (Remove Carp from warnings.pm) alters expected output, not"
+ . "propagated to 5.8.x")
+ if $] < 5.009;
+
checkOptree ( name => 'BEGIN',
bcopts => 'BEGIN',
prog => $src,
+ @warnings_todo,
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
# BEGIN 1:
# b <1> leavesub[1 ref] K/REFC,1 ->(end)
# - <@> lineseq KP ->b
-# 1 <;> nextstate(B::Concise -242 Concise.pm:304) v/2 ->2
+# 1 <;> nextstate(B::Concise -234 Concise.pm:328) v/2 ->2
# 3 <1> require sK/1 ->4
-# 2 <$> const[PV "strict.pm"] s/BARE ->3
-# 4 <;> nextstate(B::Concise -242 Concise.pm:304) v/2 ->5
+# 2 <$> const[PV "warnings.pm"] s/BARE ->3
+# 4 <;> nextstate(B::Concise -234 Concise.pm:328) v/2 ->5
# - <@> lineseq K ->-
-# 5 <;> nextstate(B::Concise -242 Concise.pm:304) /2 ->6
+# 5 <;> nextstate(B::Concise -234 Concise.pm:328) /2 ->6
# a <1> entersub[t1] KS*/TARG,2 ->b
# 6 <0> pushmark s ->7
-# 7 <$> const[PV "strict"] sM ->8
-# 8 <$> const[PV "refs"] sM ->9
+# 7 <$> const[PV "warnings"] sM ->8
+# 8 <$> const[PV "qw"] sM ->9
# 9 <$> method_named[PVIV 1520340202] ->a
# BEGIN 2:
-# m <1> leavesub[1 ref] K/REFC,1 ->(end)
-# - <@> lineseq KP ->m
-# c <;> nextstate(B::Concise -227 Concise.pm:327) v/2 ->d
-# e <1> require sK/1 ->f
-# d <$> const[PV "warnings.pm"] s/BARE ->e
-# f <;> nextstate(B::Concise -227 Concise.pm:327) v/2 ->g
-# - <@> lineseq K ->-
-# g <;> nextstate(B::Concise -227 Concise.pm:327) /2 ->h
-# l <1> entersub[t1] KS*/TARG,2 ->m
-# h <0> pushmark s ->i
-# i <$> const[PV "warnings"] sM ->j
-# j <$> const[PV "qw"] sM ->k
-# k <$> method_named[PVIV 1520340202] ->l
-# BEGIN 3:
-# q <1> leavesub[1 ref] K/REFC,1 ->(end)
-# - <@> lineseq KP ->q
-# n <;> nextstate(main 2 -e:3) v ->o
-# p <1> postinc[t3] sK/1 ->q
-# - <1> ex-rv2sv sKRM/1 ->p
-# o <#> gvsv[*beg] s ->p
+# f <1> leavesub[1 ref] K/REFC,1 ->(end)
+# - <@> lineseq KP ->f
+# c <;> nextstate(main 2 -e:1) v ->d
+# e <1> postinc[t3] sK/1 ->f
+# - <1> ex-rv2sv sKRM/1 ->e
+# d <#> gvsv[*beg] s ->e
EOT_EOT
# BEGIN 1:
# b <1> leavesub[1 ref] K/REFC,1 ->(end)
# - <@> lineseq KP ->b
-# 1 <;> nextstate(B::Concise -242 Concise.pm:304) v/2 ->2
+# 1 <;> nextstate(B::Concise -234 Concise.pm:328) v/2 ->2
# 3 <1> require sK/1 ->4
-# 2 <$> const(PV "strict.pm") s/BARE ->3
-# 4 <;> nextstate(B::Concise -242 Concise.pm:304) v/2 ->5
+# 2 <$> const(PV "warnings.pm") s/BARE ->3
+# 4 <;> nextstate(B::Concise -234 Concise.pm:328) v/2 ->5
# - <@> lineseq K ->-
-# 5 <;> nextstate(B::Concise -242 Concise.pm:304) /2 ->6
+# 5 <;> nextstate(B::Concise -234 Concise.pm:328) /2 ->6
# a <1> entersub[t1] KS*/TARG,2 ->b
# 6 <0> pushmark s ->7
-# 7 <$> const(PV "strict") sM ->8
-# 8 <$> const(PV "refs") sM ->9
+# 7 <$> const(PV "warnings") sM ->8
+# 8 <$> const(PV "qw") sM ->9
# 9 <$> method_named(PVIV 1520340202) ->a
# BEGIN 2:
-# m <1> leavesub[1 ref] K/REFC,1 ->(end)
-# - <@> lineseq KP ->m
-# c <;> nextstate(B::Concise -227 Concise.pm:327) v/2 ->d
-# e <1> require sK/1 ->f
-# d <$> const(PV "warnings.pm") s/BARE ->e
-# f <;> nextstate(B::Concise -227 Concise.pm:327) v/2 ->g
-# - <@> lineseq K ->-
-# g <;> nextstate(B::Concise -227 Concise.pm:327) /2 ->h
-# l <1> entersub[t1] KS*/TARG,2 ->m
-# h <0> pushmark s ->i
-# i <$> const(PV "warnings") sM ->j
-# j <$> const(PV "qw") sM ->k
-# k <$> method_named(PVIV 1520340202) ->l
-# BEGIN 3:
-# q <1> leavesub[1 ref] K/REFC,1 ->(end)
-# - <@> lineseq KP ->q
-# n <;> nextstate(main 2 -e:3) v ->o
-# p <1> postinc[t2] sK/1 ->q
-# - <1> ex-rv2sv sKRM/1 ->p
-# o <$> gvsv(*beg) s ->p
+# f <1> leavesub[1 ref] K/REFC,1 ->(end)
+# - <@> lineseq KP ->f
+# c <;> nextstate(main 2 -e:1) v ->d
+# e <1> postinc[t2] sK/1 ->f
+# - <1> ex-rv2sv sKRM/1 ->e
+# d <$> gvsv(*beg) s ->e
EONT_EONT
@@ -177,96 +168,109 @@ EONT_EONT
checkOptree ( name => 'all of BEGIN END INIT CHECK -exec',
bcopts => [qw/ BEGIN END INIT CHECK -exec /],
- #todo => 'get working',
prog => $src,
+ @warnings_todo,
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
# BEGIN 1:
-# 1 <;> nextstate(B::Concise -242 Concise.pm:304) v/2
-# 2 <$> const[PV "strict.pm"] s/BARE
+# 1 <;> nextstate(B::Concise -234 Concise.pm:328) v/2
+# 2 <$> const[PV "warnings.pm"] s/BARE
# 3 <1> require sK/1
-# 4 <;> nextstate(B::Concise -242 Concise.pm:304) v/2
-# 5 <;> nextstate(B::Concise -242 Concise.pm:304) /2
+# 4 <;> nextstate(B::Concise -234 Concise.pm:328) v/2
+# 5 <;> nextstate(B::Concise -234 Concise.pm:328) /2
# 6 <0> pushmark s
-# 7 <$> const[PV "strict"] sM
-# 8 <$> const[PV "refs"] sM
+# 7 <$> const[PV "warnings"] sM
+# 8 <$> const[PV "qw"] sM
# 9 <$> method_named[PVIV 1520340202]
# a <1> entersub[t1] KS*/TARG,2
# b <1> leavesub[1 ref] K/REFC,1
# BEGIN 2:
-# c <;> nextstate(B::Concise -227 Concise.pm:327) v/2
-# d <$> const[PV "warnings.pm"] s/BARE
-# e <1> require sK/1
-# f <;> nextstate(B::Concise -227 Concise.pm:327) v/2
-# g <;> nextstate(B::Concise -227 Concise.pm:327) /2
-# h <0> pushmark s
-# i <$> const[PV "warnings"] sM
-# j <$> const[PV "qw"] sM
-# k <$> method_named[PVIV 1520340202]
-# l <1> entersub[t1] KS*/TARG,2
-# m <1> leavesub[1 ref] K/REFC,1
-# BEGIN 3:
-# n <;> nextstate(main 2 -e:3) v
-# o <#> gvsv[*beg] s
-# p <1> postinc[t3] sK/1
-# q <1> leavesub[1 ref] K/REFC,1
+# c <;> nextstate(main 2 -e:1) v
+# d <#> gvsv[*beg] s
+# e <1> postinc[t3] sK/1
+# f <1> leavesub[1 ref] K/REFC,1
# END 1:
-# r <;> nextstate(main 5 -e:6) v
-# s <#> gvsv[*end] s
-# t <1> postinc[t3] sK/1
-# u <1> leavesub[1 ref] K/REFC,1
+# g <;> nextstate(main 5 -e:1) v
+# h <#> gvsv[*end] s
+# i <1> postinc[t3] sK/1
+# j <1> leavesub[1 ref] K/REFC,1
# INIT 1:
-# v <;> nextstate(main 4 -e:5) v
-# w <#> gvsv[*init] s
-# x <1> postinc[t3] sK/1
-# y <1> leavesub[1 ref] K/REFC,1
+# k <;> nextstate(main 4 -e:1) v
+# l <#> gvsv[*init] s
+# m <1> postinc[t3] sK/1
+# n <1> leavesub[1 ref] K/REFC,1
# CHECK 1:
-# z <;> nextstate(main 3 -e:4) v
-# 10 <#> gvsv[*chk] s
-# 11 <1> postinc[t3] sK/1
-# 12 <1> leavesub[1 ref] K/REFC,1
+# o <;> nextstate(main 3 -e:1) v
+# p <#> gvsv[*chk] s
+# q <1> postinc[t3] sK/1
+# r <1> leavesub[1 ref] K/REFC,1
EOT_EOT
# BEGIN 1:
-# 1 <;> nextstate(B::Concise -242 Concise.pm:304) v/2
-# 2 <$> const(PV "strict.pm") s/BARE
+# 1 <;> nextstate(B::Concise -234 Concise.pm:328) v/2
+# 2 <$> const(PV "warnings.pm") s/BARE
# 3 <1> require sK/1
-# 4 <;> nextstate(B::Concise -242 Concise.pm:304) v/2
-# 5 <;> nextstate(B::Concise -242 Concise.pm:304) /2
+# 4 <;> nextstate(B::Concise -234 Concise.pm:328) v/2
+# 5 <;> nextstate(B::Concise -234 Concise.pm:328) /2
# 6 <0> pushmark s
-# 7 <$> const(PV "strict") sM
-# 8 <$> const(PV "refs") sM
+# 7 <$> const(PV "warnings") sM
+# 8 <$> const(PV "qw") sM
# 9 <$> method_named(PVIV 1520340202)
# a <1> entersub[t1] KS*/TARG,2
# b <1> leavesub[1 ref] K/REFC,1
# BEGIN 2:
-# c <;> nextstate(B::Concise -227 Concise.pm:327) v/2
-# d <$> const(PV "warnings.pm") s/BARE
-# e <1> require sK/1
-# f <;> nextstate(B::Concise -227 Concise.pm:327) v/2
-# g <;> nextstate(B::Concise -227 Concise.pm:327) /2
-# h <0> pushmark s
-# i <$> const(PV "warnings") sM
-# j <$> const(PV "qw") sM
-# k <$> method_named(PVIV 1520340202)
-# l <1> entersub[t1] KS*/TARG,2
-# m <1> leavesub[1 ref] K/REFC,1
-# BEGIN 3:
-# n <;> nextstate(main 2 -e:3) v
-# o <$> gvsv(*beg) s
-# p <1> postinc[t2] sK/1
-# q <1> leavesub[1 ref] K/REFC,1
+# c <;> nextstate(main 2 -e:1) v
+# d <$> gvsv(*beg) s
+# e <1> postinc[t2] sK/1
+# f <1> leavesub[1 ref] K/REFC,1
# END 1:
-# r <;> nextstate(main 5 -e:6) v
-# s <$> gvsv(*end) s
-# t <1> postinc[t2] sK/1
-# u <1> leavesub[1 ref] K/REFC,1
+# g <;> nextstate(main 5 -e:1) v
+# h <$> gvsv(*end) s
+# i <1> postinc[t2] sK/1
+# j <1> leavesub[1 ref] K/REFC,1
# INIT 1:
-# v <;> nextstate(main 4 -e:5) v
-# w <$> gvsv(*init) s
-# x <1> postinc[t2] sK/1
-# y <1> leavesub[1 ref] K/REFC,1
+# k <;> nextstate(main 4 -e:1) v
+# l <$> gvsv(*init) s
+# m <1> postinc[t2] sK/1
+# n <1> leavesub[1 ref] K/REFC,1
# CHECK 1:
-# z <;> nextstate(main 3 -e:4) v
-# 10 <$> gvsv(*chk) s
-# 11 <1> postinc[t2] sK/1
-# 12 <1> leavesub[1 ref] K/REFC,1
+# o <;> nextstate(main 3 -e:1) v
+# p <$> gvsv(*chk) s
+# q <1> postinc[t2] sK/1
+# r <1> leavesub[1 ref] K/REFC,1
+EONT_EONT
+
+
+# perl "-I../lib" -MO=Concise,BEGIN,CHECK,INIT,END,-exec -e '$a=$b && print q/foo/'
+
+
+
+checkOptree ( name => 'regression test for patch 25352',
+ bcopts => [qw/ BEGIN END INIT CHECK -exec /],
+ prog => 'print q/foo/',
+ @warnings_todo,
+ expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
+# BEGIN 1:
+# 1 <;> nextstate(B::Concise -234 Concise.pm:359) v/2
+# 2 <$> const[PV "warnings.pm"] s/BARE
+# 3 <1> require sK/1
+# 4 <;> nextstate(B::Concise -234 Concise.pm:359) v/2
+# 5 <;> nextstate(B::Concise -234 Concise.pm:359) /2
+# 6 <0> pushmark s
+# 7 <$> const[PV "warnings"] sM
+# 8 <$> const[PV "qw"] sM
+# 9 <$> method_named[PV "unimport"]
+# a <1> entersub[t1] KS*/TARG,2
+# b <1> leavesub[1 ref] K/REFC,1
+EOT_EOT
+# BEGIN 1:
+# 1 <;> nextstate(B::Concise -234 Concise.pm:359) v/2
+# 2 <$> const(PV "warnings.pm") s/BARE
+# 3 <1> require sK/1
+# 4 <;> nextstate(B::Concise -234 Concise.pm:359) v/2
+# 5 <;> nextstate(B::Concise -234 Concise.pm:359) /2
+# 6 <0> pushmark s
+# 7 <$> const(PV "warnings") sM
+# 8 <$> const(PV "qw") sM
+# 9 <$> method_named(PV "unimport")
+# a <1> entersub[t1] KS*/TARG,2
+# b <1> leavesub[1 ref] K/REFC,1
EONT_EONT
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 d58135bb231..844b6df64d8 100755
--- a/gnu/usr.bin/perl/ext/B/t/optree_varinit.t
+++ b/gnu/usr.bin/perl/ext/B/t/optree_varinit.t
@@ -1,14 +1,19 @@
#!perl
BEGIN {
- chdir 't';
- @INC = ('../lib', '../ext/B/t');
+ if ($ENV{PERL_CORE}){
+ chdir('t') if -d 't';
+ @INC = ('.', '../lib', '../ext/B/t');
+ } else {
+ unshift @INC, 't';
+ push @INC, "../../t";
+ }
require Config;
if (($Config::Config{'extensions'} !~ /\bB\b/) ){
print "1..0 # Skip -- Perl configured without B module\n";
exit 0;
}
- require './test.pl';
+ # require 'test.pl'; # now done by OptreeCheck
}
use OptreeCheck;
use Config;
@@ -104,6 +109,7 @@ EONT_EONT
checkOptree ( name => 'local $a',
prog => 'local $a',
+ errs => ['Name "main::a" used only once: possible typo at -e line 1.'],
bcopts => '-basic',
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
4 <@> leave[1 ref] vKP/REFC ->(end)
@@ -125,15 +131,19 @@ checkOptree ( name => 'sub {my $a=undef}',
code => sub {my $a=undef},
bcopts => '-basic',
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
-3 <1> leavesub[1 ref] K/REFC,1 ->(end)
-- <@> lineseq KP ->3
-1 <;> nextstate(main 24 optree.t:99) v ->2
-2 <0> padsv[$a:24,25] sRM*/LVINTRO ->3
+5 <1> leavesub[1 ref] K/REFC,1 ->(end)
+- <@> lineseq KP ->5
+1 <;> nextstate(main 641 optree_varinit.t:130) v ->2
+4 <2> sassign sKS/2 ->5
+2 <0> undef s ->3
+3 <0> padsv[$a:641,642] sRM*/LVINTRO ->4
EOT_EOT
-# 3 <1> leavesub[1 ref] K/REFC,1 ->(end)
-# - <@> lineseq KP ->3
-# 1 <;> nextstate(main 54 optree.t:149) v ->2
-# 2 <0> padsv[$a:54,55] sRM*/LVINTRO ->3
+# 5 <1> leavesub[1 ref] K/REFC,1 ->(end)
+# - <@> lineseq KP ->5
+# 1 <;> nextstate(main 641 optree_varinit.t:130) v ->2
+# 4 <2> sassign sKS/2 ->5
+# 2 <0> undef s ->3
+# 3 <0> padsv[$a:641,642] sRM*/LVINTRO ->4
EONT_EONT
checkOptree ( name => 'sub {our $a=undef}',
@@ -184,15 +194,19 @@ checkOptree ( name => 'my $a=undef',
prog => 'my $a=undef',
bcopts => '-basic',
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
-4 <@> leave[1 ref] vKP/REFC ->(end)
+6 <@> leave[1 ref] vKP/REFC ->(end)
1 <0> enter ->2
2 <;> nextstate(main 1 -e:1) v ->3
-3 <0> padsv[$a:1,2] vRM*/LVINTRO ->4
+5 <2> sassign vKS/2 ->6
+3 <0> undef s ->4
+4 <0> padsv[$a:1,2] sRM*/LVINTRO ->5
EOT_EOT
-# 4 <@> leave[1 ref] vKP/REFC ->(end)
+# 6 <@> leave[1 ref] vKP/REFC ->(end)
# 1 <0> enter ->2
# 2 <;> nextstate(main 1 -e:1) v ->3
-# 3 <0> padsv[$a:1,2] vRM*/LVINTRO ->4
+# 5 <2> sassign vKS/2 ->6
+# 3 <0> undef s ->4
+# 4 <0> padsv[$a:1,2] sRM*/LVINTRO ->5
EONT_EONT
checkOptree ( name => 'our $a=undef',
@@ -219,6 +233,7 @@ EONT_EONT
checkOptree ( name => 'local $a=undef',
prog => 'local $a=undef',
+ errs => ['Name "main::a" used only once: possible typo at -e line 1.'],
note => 'locals are rare, probly not worth doing',
bcopts => '-basic',
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
@@ -333,6 +348,7 @@ EONT_EONT
checkOptree ( name => 'local $a=()',
prog => 'local $a=()',
+ errs => ['Name "main::a" used only once: possible typo at -e line 1.'],
#todo => 'probly not worth doing',
bcopts => '-exec',
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
diff --git a/gnu/usr.bin/perl/ext/B/t/showlex.t b/gnu/usr.bin/perl/ext/B/t/showlex.t
index 9ac528818e1..3cb28da0b39 100644
--- a/gnu/usr.bin/perl/ext/B/t/showlex.t
+++ b/gnu/usr.bin/perl/ext/B/t/showlex.t
@@ -1,18 +1,24 @@
#!./perl
BEGIN {
- chdir 't' if -d 't';
- if ($^O eq 'MacOS') {
- @INC = qw(: ::lib ::macos:lib);
+ if ($ENV{PERL_CORE}){
+ chdir('t') if -d 't';
+ if ($^O eq 'MacOS') {
+ @INC = qw(: ::lib ::macos:lib);
+ } else {
+ @INC = '.';
+ push @INC, '../lib';
+ }
} else {
- @INC = '../lib';
+ unshift @INC, 't';
+ push @INC, "../../t";
}
require Config;
if (($Config::Config{'extensions'} !~ /\bB\b/) ){
print "1..0 # Skip -- Perl configured without B module\n";
exit 0;
}
- require './test.pl';
+ require 'test.pl';
}
$| = 1;
diff --git a/gnu/usr.bin/perl/ext/B/t/terse.t b/gnu/usr.bin/perl/ext/B/t/terse.t
index d8d052994dd..2df8eee9b20 100644
--- a/gnu/usr.bin/perl/ext/B/t/terse.t
+++ b/gnu/usr.bin/perl/ext/B/t/terse.t
@@ -1,8 +1,12 @@
#!./perl
BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
+ if ($ENV{PERL_CORE}){
+ chdir('t') if -d 't';
+ @INC = ('.', '../lib');
+ } else {
+ unshift @INC, 't';
+ }
require Config;
if (($Config::Config{'extensions'} !~ /\bB\b/) ){
print "1..0 # Skip -- Perl configured without B module\n";
@@ -50,8 +54,8 @@ foreach (@lines) {
my $op = $1;
next unless exists $ops{$op};
like( $_, $ops{$op}, "$op " );
- delete $ops{$op};
s/$ops{$op}//;
+ delete $ops{$op};
redo if $_;
}
}
@@ -76,7 +80,7 @@ sub bar {
$a = 1.234;
# this is awful, but it gives a PMOP
- my $boo = split('', $foo);
+ our @ary = split('', $foo);
# PVOP, LOOP
LOOP: for (1 .. 10) {
diff --git a/gnu/usr.bin/perl/ext/B/t/xref.t b/gnu/usr.bin/perl/ext/B/t/xref.t
index ade0154d59c..450582bb494 100644
--- a/gnu/usr.bin/perl/ext/B/t/xref.t
+++ b/gnu/usr.bin/perl/ext/B/t/xref.t
@@ -1,8 +1,12 @@
#!./perl
BEGIN {
- chdir 't' if -d 't';
- @INC = qw(../lib);
+ if ($ENV{PERL_CORE}){
+ chdir('t') if -d 't';
+ @INC = ('.', '../lib');
+ } else {
+ unshift @INC, 't';
+ }
require Config;
if (($Config::Config{'extensions'} !~ /\bB\b/) ){
print "1..0 # Skip -- Perl configured without B module\n";
diff --git a/gnu/usr.bin/perl/ext/Cwd/ppport.h b/gnu/usr.bin/perl/ext/Cwd/ppport.h
new file mode 100644
index 00000000000..be16d863726
--- /dev/null
+++ b/gnu/usr.bin/perl/ext/Cwd/ppport.h
@@ -0,0 +1,4896 @@
+#if 0
+<<'SKIP';
+#endif
+/*
+----------------------------------------------------------------------
+
+ ppport.h -- Perl/Pollution/Portability Version 3.06
+
+ Automatically created by Devel::PPPort running under
+ perl 5.009003 on Fri May 20 22:14:30 2005.
+
+ Do NOT edit this file directly! -- Edit PPPort_pm.PL and the
+ includes in parts/inc/ instead.
+
+ Use 'perldoc ppport.h' to view the documentation below.
+
+----------------------------------------------------------------------
+
+SKIP
+
+=pod
+
+=head1 NAME
+
+ppport.h - Perl/Pollution/Portability version 3.06
+
+=head1 SYNOPSIS
+
+ perl ppport.h [options] [files]
+
+ --help show short help
+
+ --patch=file write one patch file with changes
+ --copy=suffix write changed copies with suffix
+ --diff=program use diff program and options
+
+ --compat-version=version provide compatibility with Perl version
+ --cplusplus accept C++ comments
+
+ --quiet don't output anything except fatal errors
+ --nodiag don't show diagnostics
+ --nohints don't show hints
+ --nochanges don't suggest changes
+
+ --list-provided list provided API
+ --list-unsupported list unsupported API
+ --api-info=name show Perl API portability information
+
+=head1 COMPATIBILITY
+
+This version of F<ppport.h> is designed to support operation with Perl
+installations back to 5.003, and has been tested up to 5.9.2.
+
+=head1 OPTIONS
+
+=head2 --help
+
+Display a brief usage summary.
+
+=head2 --patch=I<file>
+
+If this option is given, a single patch file will be created if
+any changes are suggested. This requires a working diff program
+to be installed on your system.
+
+=head2 --copy=I<suffix>
+
+If this option is given, a copy of each file will be saved with
+the given suffix that contains the suggested changes. This does
+not require any external programs.
+
+If neither C<--patch> or C<--copy> are given, the default is to
+simply print the diffs for each file. This requires either
+C<Text::Diff> or a C<diff> program to be installed.
+
+=head2 --diff=I<program>
+
+Manually set the diff program and options to use. The default
+is to use C<Text::Diff>, when installed, and output unified
+context diffs.
+
+=head2 --compat-version=I<version>
+
+Tell F<ppport.h> to check for compatibility with the given
+Perl version. The default is to check for compatibility with Perl
+version 5.003. You can use this option to reduce the output
+of F<ppport.h> if you intend to be backward compatible only
+up to a certain Perl version.
+
+=head2 --cplusplus
+
+Usually, F<ppport.h> will detect C++ style comments and
+replace them with C style comments for portability reasons.
+Using this option instructs F<ppport.h> to leave C++
+comments untouched.
+
+=head2 --quiet
+
+Be quiet. Don't print anything except fatal errors.
+
+=head2 --nodiag
+
+Don't output any diagnostic messages. Only portability
+alerts will be printed.
+
+=head2 --nohints
+
+Don't output any hints. Hints often contain useful portability
+notes.
+
+=head2 --nochanges
+
+Don't suggest any changes. Only give diagnostic output and hints
+unless these are also deactivated.
+
+=head2 --list-provided
+
+Lists the API elements for which compatibility is provided by
+F<ppport.h>. Also lists if it must be explicitly requested,
+if it has dependencies, and if there are hints for it.
+
+=head2 --list-unsupported
+
+Lists the API elements that are known not to be supported by
+F<ppport.h> and below which version of Perl they probably
+won't be available or work.
+
+=head2 --api-info=I<name>
+
+Show portability information for API elements matching I<name>.
+If I<name> is surrounded by slashes, it is interpreted as a regular
+expression.
+
+=head1 DESCRIPTION
+
+In order for a Perl extension (XS) module to be as portable as possible
+across differing versions of Perl itself, certain steps need to be taken.
+
+=over 4
+
+=item *
+
+Including this header is the first major one. This alone will give you
+access to a large part of the Perl API that hasn't been available in
+earlier Perl releases. Use
+
+ perl ppport.h --list-provided
+
+to see which API elements are provided by ppport.h.
+
+=item *
+
+You should avoid using deprecated parts of the API. For example, using
+global Perl variables without the C<PL_> prefix is deprecated. Also,
+some API functions used to have a C<perl_> prefix. Using this form is
+also deprecated. You can safely use the supported API, as F<ppport.h>
+will provide wrappers for older Perl versions.
+
+=item *
+
+If you use one of a few functions that were not present in earlier
+versions of Perl, and that can't be provided using a macro, you have
+to explicitly request support for these functions by adding one or
+more C<#define>s in your source code before the inclusion of F<ppport.h>.
+
+These functions will be marked C<explicit> in the list shown by
+C<--list-provided>.
+
+Depending on whether you module has a single or multiple files that
+use such functions, you want either C<static> or global variants.
+
+For a C<static> function, use:
+
+ #define NEED_function
+
+For a global function, use:
+
+ #define NEED_function_GLOBAL
+
+Note that you mustn't have more than one global request for one
+function in your project.
+
+ Function Static Request Global Request
+ -----------------------------------------------------------------------------------------
+ eval_pv() NEED_eval_pv NEED_eval_pv_GLOBAL
+ grok_bin() NEED_grok_bin NEED_grok_bin_GLOBAL
+ grok_hex() NEED_grok_hex NEED_grok_hex_GLOBAL
+ grok_number() NEED_grok_number NEED_grok_number_GLOBAL
+ grok_numeric_radix() NEED_grok_numeric_radix NEED_grok_numeric_radix_GLOBAL
+ grok_oct() NEED_grok_oct NEED_grok_oct_GLOBAL
+ newCONSTSUB() NEED_newCONSTSUB NEED_newCONSTSUB_GLOBAL
+ newRV_noinc() NEED_newRV_noinc NEED_newRV_noinc_GLOBAL
+ sv_2pv_nolen() NEED_sv_2pv_nolen NEED_sv_2pv_nolen_GLOBAL
+ sv_2pvbyte() NEED_sv_2pvbyte NEED_sv_2pvbyte_GLOBAL
+ sv_catpvf_mg() NEED_sv_catpvf_mg NEED_sv_catpvf_mg_GLOBAL
+ sv_catpvf_mg_nocontext() NEED_sv_catpvf_mg_nocontext NEED_sv_catpvf_mg_nocontext_GLOBAL
+ sv_setpvf_mg() NEED_sv_setpvf_mg NEED_sv_setpvf_mg_GLOBAL
+ sv_setpvf_mg_nocontext() NEED_sv_setpvf_mg_nocontext NEED_sv_setpvf_mg_nocontext_GLOBAL
+ vnewSVpvf() NEED_vnewSVpvf NEED_vnewSVpvf_GLOBAL
+
+To avoid namespace conflicts, you can change the namespace of the
+explicitly exported functions using the C<DPPP_NAMESPACE> macro.
+Just C<#define> the macro before including C<ppport.h>:
+
+ #define DPPP_NAMESPACE MyOwnNamespace_
+ #include "ppport.h"
+
+The default namespace is C<DPPP_>.
+
+=back
+
+The good thing is that most of the above can be checked by running
+F<ppport.h> on your source code. See the next section for
+details.
+
+=head1 EXAMPLES
+
+To verify whether F<ppport.h> is needed for your module, whether you
+should make any changes to your code, and whether any special defines
+should be used, F<ppport.h> can be run as a Perl script to check your
+source code. Simply say:
+
+ perl ppport.h
+
+The result will usually be a list of patches suggesting changes
+that should at least be acceptable, if not necessarily the most
+efficient solution, or a fix for all possible problems.
+
+If you know that your XS module uses features only available in
+newer Perl releases, if you're aware that it uses C++ comments,
+and if you want all suggestions as a single patch file, you could
+use something like this:
+
+ perl ppport.h --compat-version=5.6.0 --cplusplus --patch=test.diff
+
+If you only want your code to be scanned without any suggestions
+for changes, use:
+
+ perl ppport.h --nochanges
+
+You can specify a different C<diff> program or options, using
+the C<--diff> option:
+
+ perl ppport.h --diff='diff -C 10'
+
+This would output context diffs with 10 lines of context.
+
+To display portability information for the C<newSVpvn> function,
+use:
+
+ perl ppport.h --api-info=newSVpvn
+
+Since the argument to C<--api-info> can be a regular expression,
+you can use
+
+ perl ppport.h --api-info=/_nomg$/
+
+to display portability information for all C<_nomg> functions or
+
+ perl ppport.h --api-info=/./
+
+to display information for all known API elements.
+
+=head1 BUGS
+
+If this version of F<ppport.h> is causing failure during
+the compilation of this module, please check if newer versions
+of either this module or C<Devel::PPPort> are available on CPAN
+before sending a bug report.
+
+If F<ppport.h> was generated using the latest version of
+C<Devel::PPPort> and is causing failure of this module, please
+file a bug report using the CPAN Request Tracker at L<http://rt.cpan.org/>.
+
+Please include the following information:
+
+=over 4
+
+=item 1.
+
+The complete output from running "perl -V"
+
+=item 2.
+
+This file.
+
+=item 3.
+
+The name and version of the module you were trying to build.
+
+=item 4.
+
+A full log of the build that failed.
+
+=item 5.
+
+Any other information that you think could be relevant.
+
+=back
+
+For the latest version of this code, please get the C<Devel::PPPort>
+module from CPAN.
+
+=head1 COPYRIGHT
+
+Version 3.x, Copyright (c) 2004-2005, 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.
+
+=head1 SEE ALSO
+
+See L<Devel::PPPort>.
+
+=cut
+
+use strict;
+
+my %opt = (
+ quiet => 0,
+ diag => 1,
+ hints => 1,
+ changes => 1,
+ cplusplus => 0,
+);
+
+my($ppport) = $0 =~ /([\w.]+)$/;
+my $LF = '(?:\r\n|[\r\n])'; # line feed
+my $HS = "[ \t]"; # horizontal whitespace
+
+eval {
+ require Getopt::Long;
+ Getopt::Long::GetOptions(\%opt, qw(
+ help quiet diag! hints! changes! cplusplus
+ patch=s copy=s diff=s compat-version=s
+ list-provided list-unsupported api-info=s
+ )) or usage();
+};
+
+if ($@ and grep /^-/, @ARGV) {
+ usage() if "@ARGV" =~ /^--?h(?:elp)?$/;
+ die "Getopt::Long not found. Please don't use any options.\n";
+}
+
+usage() if $opt{help};
+
+if (exists $opt{'compat-version'}) {
+ my($r,$v,$s) = eval { parse_version($opt{'compat-version'}) };
+ if ($@) {
+ die "Invalid version number format: '$opt{'compat-version'}'\n";
+ }
+ die "Only Perl 5 is supported\n" if $r != 5;
+ die "Invalid version number: $opt{'compat-version'}\n" if $v >= 1000 || $v >= 1000;
+ $opt{'compat-version'} = sprintf "%d.%03d%03d", $r, $v, $s;
+}
+else {
+ $opt{'compat-version'} = 5;
+}
+
+# Never use C comments in this file!!!!!
+my $ccs = '/'.'*';
+my $cce = '*'.'/';
+my $rccs = quotemeta $ccs;
+my $rcce = quotemeta $cce;
+
+my @files;
+
+if (@ARGV) {
+ @files = map { glob $_ } @ARGV;
+}
+else {
+ eval {
+ require File::Find;
+ File::Find::find(sub {
+ $File::Find::name =~ /\.(xs|c|h|cc)$/i
+ and push @files, $File::Find::name;
+ }, '.');
+ };
+ if ($@) {
+ @files = map { glob $_ } qw(*.xs *.c *.h *.cc);
+ }
+ my %filter = map { /(.*)\.xs$/ ? ("$1.c" => 1) : () } @files;
+ @files = grep { !/\b\Q$ppport\E$/i && !exists $filter{$_} } @files;
+}
+
+unless (@files) {
+ die "No input files given!\n";
+}
+
+my %API = map { /^(\w+)\|([^|]*)\|([^|]*)\|(\w*)$/
+ ? ( $1 => {
+ ($2 ? ( base => $2 ) : ()),
+ ($3 ? ( todo => $3 ) : ()),
+ (index($4, 'v') >= 0 ? ( varargs => 1 ) : ()),
+ (index($4, 'p') >= 0 ? ( provided => 1 ) : ()),
+ (index($4, 'n') >= 0 ? ( nothxarg => 1 ) : ()),
+ } )
+ : die "invalid spec: $_" } qw(
+AvFILLp|5.004050||p
+AvFILL|||
+CLASS|||n
+CX_CURPAD_SAVE|||
+CX_CURPAD_SV|||
+CopFILEAV|5.006000||p
+CopFILEGV_set|5.006000||p
+CopFILEGV|5.006000||p
+CopFILESV|5.006000||p
+CopFILE_set|5.006000||p
+CopFILE|5.006000||p
+CopSTASHPV_set|5.006000||p
+CopSTASHPV|5.006000||p
+CopSTASH_eq|5.006000||p
+CopSTASH_set|5.006000||p
+CopSTASH|5.006000||p
+CopyD|5.009002||p
+Copy|||
+CvPADLIST|||
+CvSTASH|||
+CvWEAKOUTSIDE|||
+DEFSV|5.004050||p
+END_EXTERN_C|5.005000||p
+ENTER|||
+ERRSV|5.004050||p
+EXTEND|||
+EXTERN_C|5.005000||p
+FREETMPS|||
+GIMME_V||5.004000|n
+GIMME|||n
+GROK_NUMERIC_RADIX|5.007002||p
+G_ARRAY|||
+G_DISCARD|||
+G_EVAL|||
+G_NOARGS|||
+G_SCALAR|||
+G_VOID||5.004000|
+GetVars|||
+GvSV|||
+Gv_AMupdate|||
+HEf_SVKEY||5.004000|
+HeHASH||5.004000|
+HeKEY||5.004000|
+HeKLEN||5.004000|
+HePV||5.004000|
+HeSVKEY_force||5.004000|
+HeSVKEY_set||5.004000|
+HeSVKEY||5.004000|
+HeVAL||5.004000|
+HvNAME|||
+INT2PTR|5.006000||p
+IN_LOCALE_COMPILETIME|5.007002||p
+IN_LOCALE_RUNTIME|5.007002||p
+IN_LOCALE|5.007002||p
+IN_PERL_COMPILETIME|5.008001||p
+IS_NUMBER_GREATER_THAN_UV_MAX|5.007002||p
+IS_NUMBER_INFINITY|5.007002||p
+IS_NUMBER_IN_UV|5.007002||p
+IS_NUMBER_NAN|5.007003||p
+IS_NUMBER_NEG|5.007002||p
+IS_NUMBER_NOT_INT|5.007002||p
+IVSIZE|5.006000||p
+IVTYPE|5.006000||p
+IVdf|5.006000||p
+LEAVE|||
+LVRET|||
+MARK|||
+MY_CXT_CLONE|5.009002||p
+MY_CXT_INIT|5.007003||p
+MY_CXT|5.007003||p
+MoveD|5.009002||p
+Move|||
+NEWSV|||
+NOOP|5.005000||p
+NUM2PTR|5.006000||p
+NVTYPE|5.006000||p
+NVef|5.006001||p
+NVff|5.006001||p
+NVgf|5.006001||p
+Newc|||
+Newz|||
+New|||
+Nullav|||
+Nullch|||
+Nullcv|||
+Nullhv|||
+Nullsv|||
+ORIGMARK|||
+PAD_BASE_SV|||
+PAD_CLONE_VARS|||
+PAD_COMPNAME_FLAGS|||
+PAD_COMPNAME_GEN|||
+PAD_COMPNAME_OURSTASH|||
+PAD_COMPNAME_PV|||
+PAD_COMPNAME_TYPE|||
+PAD_RESTORE_LOCAL|||
+PAD_SAVE_LOCAL|||
+PAD_SAVE_SETNULLPAD|||
+PAD_SETSV|||
+PAD_SET_CUR_NOSAVE|||
+PAD_SET_CUR|||
+PAD_SVl|||
+PAD_SV|||
+PERL_BCDVERSION|5.009002||p
+PERL_GCC_BRACE_GROUPS_FORBIDDEN|5.008001||p
+PERL_INT_MAX|5.004000||p
+PERL_INT_MIN|5.004000||p
+PERL_LONG_MAX|5.004000||p
+PERL_LONG_MIN|5.004000||p
+PERL_MAGIC_arylen|5.007002||p
+PERL_MAGIC_backref|5.007002||p
+PERL_MAGIC_bm|5.007002||p
+PERL_MAGIC_collxfrm|5.007002||p
+PERL_MAGIC_dbfile|5.007002||p
+PERL_MAGIC_dbline|5.007002||p
+PERL_MAGIC_defelem|5.007002||p
+PERL_MAGIC_envelem|5.007002||p
+PERL_MAGIC_env|5.007002||p
+PERL_MAGIC_ext|5.007002||p
+PERL_MAGIC_fm|5.007002||p
+PERL_MAGIC_glob|5.007002||p
+PERL_MAGIC_isaelem|5.007002||p
+PERL_MAGIC_isa|5.007002||p
+PERL_MAGIC_mutex|5.007002||p
+PERL_MAGIC_nkeys|5.007002||p
+PERL_MAGIC_overload_elem|5.007002||p
+PERL_MAGIC_overload_table|5.007002||p
+PERL_MAGIC_overload|5.007002||p
+PERL_MAGIC_pos|5.007002||p
+PERL_MAGIC_qr|5.007002||p
+PERL_MAGIC_regdata|5.007002||p
+PERL_MAGIC_regdatum|5.007002||p
+PERL_MAGIC_regex_global|5.007002||p
+PERL_MAGIC_shared_scalar|5.007003||p
+PERL_MAGIC_shared|5.007003||p
+PERL_MAGIC_sigelem|5.007002||p
+PERL_MAGIC_sig|5.007002||p
+PERL_MAGIC_substr|5.007002||p
+PERL_MAGIC_sv|5.007002||p
+PERL_MAGIC_taint|5.007002||p
+PERL_MAGIC_tiedelem|5.007002||p
+PERL_MAGIC_tiedscalar|5.007002||p
+PERL_MAGIC_tied|5.007002||p
+PERL_MAGIC_utf8|5.008001||p
+PERL_MAGIC_uvar_elem|5.007003||p
+PERL_MAGIC_uvar|5.007002||p
+PERL_MAGIC_vec|5.007002||p
+PERL_MAGIC_vstring|5.008001||p
+PERL_QUAD_MAX|5.004000||p
+PERL_QUAD_MIN|5.004000||p
+PERL_REVISION|5.006000||p
+PERL_SCAN_ALLOW_UNDERSCORES|5.007003||p
+PERL_SCAN_DISALLOW_PREFIX|5.007003||p
+PERL_SCAN_GREATER_THAN_UV_MAX|5.007003||p
+PERL_SCAN_SILENT_ILLDIGIT|5.008001||p
+PERL_SHORT_MAX|5.004000||p
+PERL_SHORT_MIN|5.004000||p
+PERL_SUBVERSION|5.006000||p
+PERL_UCHAR_MAX|5.004000||p
+PERL_UCHAR_MIN|5.004000||p
+PERL_UINT_MAX|5.004000||p
+PERL_UINT_MIN|5.004000||p
+PERL_ULONG_MAX|5.004000||p
+PERL_ULONG_MIN|5.004000||p
+PERL_UNUSED_DECL|5.007002||p
+PERL_UQUAD_MAX|5.004000||p
+PERL_UQUAD_MIN|5.004000||p
+PERL_USHORT_MAX|5.004000||p
+PERL_USHORT_MIN|5.004000||p
+PERL_VERSION|5.006000||p
+PL_DBsingle|||pn
+PL_DBsub|||pn
+PL_DBtrace|||n
+PL_Sv|5.005000||p
+PL_compiling|5.004050||p
+PL_copline|5.005000||p
+PL_curcop|5.004050||p
+PL_curstash|5.004050||p
+PL_debstash|5.004050||p
+PL_defgv|5.004050||p
+PL_diehook|5.004050||p
+PL_dirty|5.004050||p
+PL_dowarn|||pn
+PL_errgv|5.004050||p
+PL_hexdigit|5.005000||p
+PL_hints|5.005000||p
+PL_last_in_gv|||n
+PL_modglobal||5.005000|n
+PL_na|5.004050||pn
+PL_no_modify|5.006000||p
+PL_ofs_sv|||n
+PL_perl_destruct_level|5.004050||p
+PL_perldb|5.004050||p
+PL_ppaddr|5.006000||p
+PL_rsfp_filters|5.004050||p
+PL_rsfp|5.004050||p
+PL_rs|||n
+PL_stack_base|5.004050||p
+PL_stack_sp|5.004050||p
+PL_stdingv|5.004050||p
+PL_sv_arenaroot|5.004050||p
+PL_sv_no|5.004050||pn
+PL_sv_undef|5.004050||pn
+PL_sv_yes|5.004050||pn
+PL_tainted|5.004050||p
+PL_tainting|5.004050||p
+POPi|||n
+POPl|||n
+POPn|||n
+POPpbytex||5.007001|n
+POPpx||5.005030|n
+POPp|||n
+POPs|||n
+PTR2IV|5.006000||p
+PTR2NV|5.006000||p
+PTR2UV|5.006000||p
+PTR2ul|5.007001||p
+PTRV|5.006000||p
+PUSHMARK|||
+PUSHi|||
+PUSHmortal|5.009002||p
+PUSHn|||
+PUSHp|||
+PUSHs|||
+PUSHu|5.004000||p
+PUTBACK|||
+PerlIO_clearerr||5.007003|
+PerlIO_close||5.007003|
+PerlIO_eof||5.007003|
+PerlIO_error||5.007003|
+PerlIO_fileno||5.007003|
+PerlIO_fill||5.007003|
+PerlIO_flush||5.007003|
+PerlIO_get_base||5.007003|
+PerlIO_get_bufsiz||5.007003|
+PerlIO_get_cnt||5.007003|
+PerlIO_get_ptr||5.007003|
+PerlIO_read||5.007003|
+PerlIO_seek||5.007003|
+PerlIO_set_cnt||5.007003|
+PerlIO_set_ptrcnt||5.007003|
+PerlIO_setlinebuf||5.007003|
+PerlIO_stderr||5.007003|
+PerlIO_stdin||5.007003|
+PerlIO_stdout||5.007003|
+PerlIO_tell||5.007003|
+PerlIO_unread||5.007003|
+PerlIO_write||5.007003|
+Poison|5.008000||p
+RETVAL|||n
+Renewc|||
+Renew|||
+SAVECLEARSV|||
+SAVECOMPPAD|||
+SAVEPADSV|||
+SAVETMPS|||
+SAVE_DEFSV|5.004050||p
+SPAGAIN|||
+SP|||
+START_EXTERN_C|5.005000||p
+START_MY_CXT|5.007003||p
+STMT_END|||p
+STMT_START|||p
+ST|||
+SVt_IV|||
+SVt_NV|||
+SVt_PVAV|||
+SVt_PVCV|||
+SVt_PVHV|||
+SVt_PVMG|||
+SVt_PV|||
+Safefree|||
+Slab_Alloc|||
+Slab_Free|||
+StructCopy|||
+SvCUR_set|||
+SvCUR|||
+SvEND|||
+SvGETMAGIC|5.004050||p
+SvGROW|||
+SvIOK_UV||5.006000|
+SvIOK_notUV||5.006000|
+SvIOK_off|||
+SvIOK_only_UV||5.006000|
+SvIOK_only|||
+SvIOK_on|||
+SvIOKp|||
+SvIOK|||
+SvIVX|||
+SvIV_nomg|5.009001||p
+SvIVx|||
+SvIV|||
+SvIsCOW_shared_hash||5.008003|
+SvIsCOW||5.008003|
+SvLEN|||
+SvLOCK||5.007003|
+SvNIOK_off|||
+SvNIOKp|||
+SvNIOK|||
+SvNOK_off|||
+SvNOK_only|||
+SvNOK_on|||
+SvNOKp|||
+SvNOK|||
+SvNVX|||
+SvNVx|||
+SvNV|||
+SvOK|||
+SvOOK|||
+SvPOK_off|||
+SvPOK_only_UTF8||5.006000|
+SvPOK_only|||
+SvPOK_on|||
+SvPOKp|||
+SvPOK|||
+SvPVX|||
+SvPV_force_nomg|5.007002||p
+SvPV_force|||
+SvPV_nolen|5.006000||p
+SvPV_nomg|5.007002||p
+SvPVbyte_force||5.009002|
+SvPVbyte_nolen||5.006000|
+SvPVbytex_force||5.006000|
+SvPVbytex||5.006000|
+SvPVbyte|5.006000||p
+SvPVutf8_force||5.006000|
+SvPVutf8_nolen||5.006000|
+SvPVutf8x_force||5.006000|
+SvPVutf8x||5.006000|
+SvPVutf8||5.006000|
+SvPVx|||
+SvPV|||
+SvREFCNT_dec|||
+SvREFCNT_inc|||
+SvREFCNT|||
+SvROK_off|||
+SvROK_on|||
+SvROK|||
+SvRV|||
+SvSETMAGIC|||
+SvSHARE||5.007003|
+SvSTASH|||
+SvSetMagicSV_nosteal||5.004000|
+SvSetMagicSV||5.004000|
+SvSetSV_nosteal||5.004000|
+SvSetSV|||
+SvTAINTED_off||5.004000|
+SvTAINTED_on||5.004000|
+SvTAINTED||5.004000|
+SvTAINT|||
+SvTRUE|||
+SvTYPE|||
+SvUNLOCK||5.007003|
+SvUOK||5.007001|
+SvUPGRADE|||
+SvUTF8_off||5.006000|
+SvUTF8_on||5.006000|
+SvUTF8||5.006000|
+SvUVXx|5.004000||p
+SvUVX|5.004000||p
+SvUV_nomg|5.009001||p
+SvUVx|5.004000||p
+SvUV|5.004000||p
+SvVOK||5.008001|
+THIS|||n
+UNDERBAR|5.009002||p
+UVSIZE|5.006000||p
+UVTYPE|5.006000||p
+UVXf|5.007001||p
+UVof|5.006000||p
+UVuf|5.006000||p
+UVxf|5.006000||p
+XCPT_CATCH|5.009002||p
+XCPT_RETHROW|5.009002||p
+XCPT_TRY_END|5.009002||p
+XCPT_TRY_START|5.009002||p
+XPUSHi|||
+XPUSHmortal|5.009002||p
+XPUSHn|||
+XPUSHp|||
+XPUSHs|||
+XPUSHu|5.004000||p
+XSRETURN_EMPTY|||
+XSRETURN_IV|||
+XSRETURN_NO|||
+XSRETURN_NV|||
+XSRETURN_PV|||
+XSRETURN_UNDEF|||
+XSRETURN_UV|5.008001||p
+XSRETURN_YES|||
+XSRETURN|||
+XST_mIV|||
+XST_mNO|||
+XST_mNV|||
+XST_mPV|||
+XST_mUNDEF|||
+XST_mUV|5.008001||p
+XST_mYES|||
+XS_VERSION_BOOTCHECK|||
+XS_VERSION|||
+XS|||
+ZeroD|5.009002||p
+Zero|||
+_aMY_CXT|5.007003||p
+_pMY_CXT|5.007003||p
+aMY_CXT_|5.007003||p
+aMY_CXT|5.007003||p
+aTHX_|5.006000||p
+aTHX|5.006000||p
+add_data|||
+allocmy|||
+amagic_call|||
+any_dup|||
+ao|||
+append_elem|||
+append_list|||
+apply_attrs_my|||
+apply_attrs_string||5.006001|
+apply_attrs|||
+apply|||
+asIV|||
+asUV|||
+atfork_lock||5.007003|n
+atfork_unlock||5.007003|n
+av_clear|||
+av_delete||5.006000|
+av_exists||5.006000|
+av_extend|||
+av_fake|||
+av_fetch|||
+av_fill|||
+av_len|||
+av_make|||
+av_pop|||
+av_push|||
+av_reify|||
+av_shift|||
+av_store|||
+av_undef|||
+av_unshift|||
+ax|||n
+bad_type|||
+bind_match|||
+block_end|||
+block_gimme||5.004000|
+block_start|||
+boolSV|5.004000||p
+boot_core_PerlIO|||
+boot_core_UNIVERSAL|||
+boot_core_xsutils|||
+bytes_from_utf8||5.007001|
+bytes_to_utf8||5.006001|
+cache_re|||
+call_argv|5.006000||p
+call_atexit||5.006000|
+call_body|||
+call_list_body|||
+call_list||5.004000|
+call_method|5.006000||p
+call_pv|5.006000||p
+call_sv|5.006000||p
+calloc||5.007002|n
+cando|||
+cast_i32||5.006000|
+cast_iv||5.006000|
+cast_ulong||5.006000|
+cast_uv||5.006000|
+check_uni|||
+checkcomma|||
+checkposixcc|||
+cl_and|||
+cl_anything|||
+cl_init_zero|||
+cl_init|||
+cl_is_anything|||
+cl_or|||
+closest_cop|||
+convert|||
+cop_free|||
+cr_textfilter|||
+croak_nocontext|||vn
+croak|||v
+csighandler||5.007001|n
+custom_op_desc||5.007003|
+custom_op_name||5.007003|
+cv_ckproto|||
+cv_clone|||
+cv_const_sv||5.004000|
+cv_dump|||
+cv_undef|||
+cx_dump||5.005000|
+cx_dup|||
+cxinc|||
+dAX|5.007002||p
+dITEMS|5.007002||p
+dMARK|||
+dMY_CXT_SV|5.007003||p
+dMY_CXT|5.007003||p
+dNOOP|5.006000||p
+dORIGMARK|||
+dSP|||
+dTHR|5.004050||p
+dTHXa|5.006000||p
+dTHXoa|5.006000||p
+dTHX|5.006000||p
+dUNDERBAR|5.009002||p
+dXCPT|5.009002||p
+dXSARGS|||
+dXSI32|||
+dXSTARG|5.006000||p
+deb_curcv|||
+deb_nocontext|||vn
+deb_stack_all|||
+deb_stack_n|||
+debop||5.005000|
+debprofdump||5.005000|
+debprof|||
+debstackptrs||5.007003|
+debstack||5.007003|
+deb||5.007003|v
+del_he|||
+del_sv|||
+del_xiv|||
+del_xnv|||
+del_xpvav|||
+del_xpvbm|||
+del_xpvcv|||
+del_xpvhv|||
+del_xpviv|||
+del_xpvlv|||
+del_xpvmg|||
+del_xpvnv|||
+del_xpv|||
+del_xrv|||
+delimcpy||5.004000|
+depcom|||
+deprecate_old|||
+deprecate|||
+despatch_signals||5.007001|
+die_nocontext|||vn
+die_where|||
+die|||v
+dirp_dup|||
+div128|||
+djSP|||
+do_aexec5|||
+do_aexec|||
+do_aspawn|||
+do_binmode||5.004050|
+do_chomp|||
+do_chop|||
+do_close|||
+do_dump_pad|||
+do_eof|||
+do_exec3|||
+do_execfree|||
+do_exec|||
+do_gv_dump||5.006000|
+do_gvgv_dump||5.006000|
+do_hv_dump||5.006000|
+do_ipcctl|||
+do_ipcget|||
+do_join|||
+do_kv|||
+do_magic_dump||5.006000|
+do_msgrcv|||
+do_msgsnd|||
+do_oddball|||
+do_op_dump||5.006000|
+do_open9||5.006000|
+do_openn||5.007001|
+do_open||5.004000|
+do_pipe|||
+do_pmop_dump||5.006000|
+do_print|||
+do_readline|||
+do_seek|||
+do_semop|||
+do_shmio|||
+do_spawn_nowait|||
+do_spawn|||
+do_sprintf|||
+do_sv_dump||5.006000|
+do_sysseek|||
+do_tell|||
+do_trans_complex_utf8|||
+do_trans_complex|||
+do_trans_count_utf8|||
+do_trans_count|||
+do_trans_simple_utf8|||
+do_trans_simple|||
+do_trans|||
+do_vecget|||
+do_vecset|||
+do_vop|||
+docatch_body|||
+docatch|||
+doencodes|||
+doeval|||
+dofile|||
+dofindlabel|||
+doform|||
+doing_taint||5.008001|n
+dooneliner|||
+doopen_pm|||
+doparseform|||
+dopoptoeval|||
+dopoptolabel|||
+dopoptoloop|||
+dopoptosub_at|||
+dopoptosub|||
+dounwind|||
+dowantarray|||
+dump_all||5.006000|
+dump_eval||5.006000|
+dump_fds|||
+dump_form||5.006000|
+dump_indent||5.006000|v
+dump_mstats|||
+dump_packsubs||5.006000|
+dump_sub||5.006000|
+dump_vindent||5.006000|
+dumpuntil|||
+dup_attrlist|||
+emulate_eaccess|||
+eval_pv|5.006000||p
+eval_sv|5.006000||p
+expect_number|||
+fbm_compile||5.005000|
+fbm_instr||5.005000|
+fd_on_nosuid_fs|||
+filter_add|||
+filter_del|||
+filter_gets|||
+filter_read|||
+find_beginning|||
+find_byclass|||
+find_in_my_stash|||
+find_runcv|||
+find_rundefsvoffset||5.009002|
+find_script|||
+find_uninit_var|||
+fold_constants|||
+forbid_setid|||
+force_ident|||
+force_list|||
+force_next|||
+force_version|||
+force_word|||
+form_nocontext|||vn
+form||5.004000|v
+fp_dup|||
+fprintf_nocontext|||vn
+free_tied_hv_pool|||
+free_tmps|||
+gen_constant_list|||
+get_av|5.006000||p
+get_context||5.006000|n
+get_cv|5.006000||p
+get_db_sub|||
+get_debug_opts|||
+get_hash_seed|||
+get_hv|5.006000||p
+get_mstats|||
+get_no_modify|||
+get_num|||
+get_op_descs||5.005000|
+get_op_names||5.005000|
+get_opargs|||
+get_ppaddr||5.006000|
+get_sv|5.006000||p
+get_vtbl||5.005030|
+getcwd_sv||5.007002|
+getenv_len|||
+gp_dup|||
+gp_free|||
+gp_ref|||
+grok_bin|5.007003||p
+grok_hex|5.007003||p
+grok_number|5.007002||p
+grok_numeric_radix|5.007002||p
+grok_oct|5.007003||p
+group_end|||
+gv_AVadd|||
+gv_HVadd|||
+gv_IOadd|||
+gv_autoload4||5.004000|
+gv_check|||
+gv_dump||5.006000|
+gv_efullname3||5.004000|
+gv_efullname4||5.006001|
+gv_efullname|||
+gv_ename|||
+gv_fetchfile|||
+gv_fetchmeth_autoload||5.007003|
+gv_fetchmethod_autoload||5.004000|
+gv_fetchmethod|||
+gv_fetchmeth|||
+gv_fetchpvn_flags||5.009002|
+gv_fetchpv|||
+gv_fetchsv||5.009002|
+gv_fullname3||5.004000|
+gv_fullname4||5.006001|
+gv_fullname|||
+gv_handler||5.007001|
+gv_init_sv|||
+gv_init|||
+gv_share|||
+gv_stashpvn|5.006000||p
+gv_stashpv|||
+gv_stashsv|||
+he_dup|||
+hfreeentries|||
+hsplit|||
+hv_assert||5.009001|
+hv_clear_placeholders||5.009001|
+hv_clear|||
+hv_delayfree_ent||5.004000|
+hv_delete_common|||
+hv_delete_ent||5.004000|
+hv_delete|||
+hv_exists_ent||5.004000|
+hv_exists|||
+hv_fetch_common|||
+hv_fetch_ent||5.004000|
+hv_fetch|||
+hv_free_ent||5.004000|
+hv_iterinit|||
+hv_iterkeysv||5.004000|
+hv_iterkey|||
+hv_iternext_flags||5.008000|
+hv_iternextsv|||
+hv_iternext|||
+hv_iterval|||
+hv_ksplit||5.004000|
+hv_magic_check|||
+hv_magic|||
+hv_notallowed|||
+hv_scalar||5.009001|
+hv_store_ent||5.004000|
+hv_store_flags||5.008000|
+hv_store|||
+hv_undef|||
+ibcmp_locale||5.004000|
+ibcmp_utf8||5.007003|
+ibcmp|||
+incl_perldb|||
+incline|||
+incpush|||
+ingroup|||
+init_argv_symbols|||
+init_debugger|||
+init_i18nl10n||5.006000|
+init_i18nl14n||5.006000|
+init_ids|||
+init_interp|||
+init_lexer|||
+init_main_stash|||
+init_perllib|||
+init_postdump_symbols|||
+init_predump_symbols|||
+init_stacks||5.005000|
+init_tm||5.007002|
+instr|||
+intro_my|||
+intuit_method|||
+intuit_more|||
+invert|||
+io_close|||
+isALNUM|||
+isALPHA|||
+isDIGIT|||
+isLOWER|||
+isSPACE|||
+isUPPER|||
+is_an_int|||
+is_gv_magical_sv|||
+is_gv_magical|||
+is_handle_constructor|||
+is_lvalue_sub||5.007001|
+is_uni_alnum_lc||5.006000|
+is_uni_alnumc_lc||5.006000|
+is_uni_alnumc||5.006000|
+is_uni_alnum||5.006000|
+is_uni_alpha_lc||5.006000|
+is_uni_alpha||5.006000|
+is_uni_ascii_lc||5.006000|
+is_uni_ascii||5.006000|
+is_uni_cntrl_lc||5.006000|
+is_uni_cntrl||5.006000|
+is_uni_digit_lc||5.006000|
+is_uni_digit||5.006000|
+is_uni_graph_lc||5.006000|
+is_uni_graph||5.006000|
+is_uni_idfirst_lc||5.006000|
+is_uni_idfirst||5.006000|
+is_uni_lower_lc||5.006000|
+is_uni_lower||5.006000|
+is_uni_print_lc||5.006000|
+is_uni_print||5.006000|
+is_uni_punct_lc||5.006000|
+is_uni_punct||5.006000|
+is_uni_space_lc||5.006000|
+is_uni_space||5.006000|
+is_uni_upper_lc||5.006000|
+is_uni_upper||5.006000|
+is_uni_xdigit_lc||5.006000|
+is_uni_xdigit||5.006000|
+is_utf8_alnumc||5.006000|
+is_utf8_alnum||5.006000|
+is_utf8_alpha||5.006000|
+is_utf8_ascii||5.006000|
+is_utf8_char||5.006000|
+is_utf8_cntrl||5.006000|
+is_utf8_digit||5.006000|
+is_utf8_graph||5.006000|
+is_utf8_idcont||5.008000|
+is_utf8_idfirst||5.006000|
+is_utf8_lower||5.006000|
+is_utf8_mark||5.006000|
+is_utf8_print||5.006000|
+is_utf8_punct||5.006000|
+is_utf8_space||5.006000|
+is_utf8_string_loc||5.008001|
+is_utf8_string||5.006001|
+is_utf8_upper||5.006000|
+is_utf8_xdigit||5.006000|
+isa_lookup|||
+items|||n
+ix|||n
+jmaybe|||
+keyword|||
+leave_scope|||
+lex_end|||
+lex_start|||
+linklist|||
+list_assignment|||
+listkids|||
+list|||
+load_module_nocontext|||vn
+load_module||5.006000|v
+localize|||
+looks_like_number|||
+lop|||
+mPUSHi|5.009002||p
+mPUSHn|5.009002||p
+mPUSHp|5.009002||p
+mPUSHu|5.009002||p
+mXPUSHi|5.009002||p
+mXPUSHn|5.009002||p
+mXPUSHp|5.009002||p
+mXPUSHu|5.009002||p
+magic_clear_all_env|||
+magic_clearenv|||
+magic_clearpack|||
+magic_clearsig|||
+magic_dump||5.006000|
+magic_existspack|||
+magic_freeovrld|||
+magic_freeregexp|||
+magic_getarylen|||
+magic_getdefelem|||
+magic_getglob|||
+magic_getnkeys|||
+magic_getpack|||
+magic_getpos|||
+magic_getsig|||
+magic_getsubstr|||
+magic_gettaint|||
+magic_getuvar|||
+magic_getvec|||
+magic_get|||
+magic_killbackrefs|||
+magic_len|||
+magic_methcall|||
+magic_methpack|||
+magic_nextpack|||
+magic_regdata_cnt|||
+magic_regdatum_get|||
+magic_regdatum_set|||
+magic_scalarpack|||
+magic_set_all_env|||
+magic_setamagic|||
+magic_setarylen|||
+magic_setbm|||
+magic_setcollxfrm|||
+magic_setdbline|||
+magic_setdefelem|||
+magic_setenv|||
+magic_setfm|||
+magic_setglob|||
+magic_setisa|||
+magic_setmglob|||
+magic_setnkeys|||
+magic_setpack|||
+magic_setpos|||
+magic_setregexp|||
+magic_setsig|||
+magic_setsubstr|||
+magic_settaint|||
+magic_setutf8|||
+magic_setuvar|||
+magic_setvec|||
+magic_set|||
+magic_sizepack|||
+magic_wipepack|||
+magicname|||
+malloced_size|||n
+malloc||5.007002|n
+markstack_grow|||
+measure_struct|||
+memEQ|5.004000||p
+memNE|5.004000||p
+mem_collxfrm|||
+mess_alloc|||
+mess_nocontext|||vn
+mess||5.006000|v
+method_common|||
+mfree||5.007002|n
+mg_clear|||
+mg_copy|||
+mg_dup|||
+mg_find|||
+mg_free|||
+mg_get|||
+mg_length||5.005000|
+mg_magical|||
+mg_set|||
+mg_size||5.005000|
+mini_mktime||5.007002|
+missingterm|||
+mode_from_discipline|||
+modkids|||
+mod|||
+more_he|||
+more_sv|||
+more_xiv|||
+more_xnv|||
+more_xpvav|||
+more_xpvbm|||
+more_xpvcv|||
+more_xpvhv|||
+more_xpviv|||
+more_xpvlv|||
+more_xpvmg|||
+more_xpvnv|||
+more_xpv|||
+more_xrv|||
+moreswitches|||
+mul128|||
+mulexp10|||n
+my_atof2||5.007002|
+my_atof||5.006000|
+my_attrs|||
+my_bcopy|||n
+my_betoh16|||n
+my_betoh32|||n
+my_betoh64|||n
+my_betohi|||n
+my_betohl|||n
+my_betohs|||n
+my_bzero|||n
+my_chsize|||
+my_exit_jump|||
+my_exit|||
+my_failure_exit||5.004000|
+my_fflush_all||5.006000|
+my_fork||5.007003|n
+my_htobe16|||n
+my_htobe32|||n
+my_htobe64|||n
+my_htobei|||n
+my_htobel|||n
+my_htobes|||n
+my_htole16|||n
+my_htole32|||n
+my_htole64|||n
+my_htolei|||n
+my_htolel|||n
+my_htoles|||n
+my_htonl|||
+my_kid|||
+my_letoh16|||n
+my_letoh32|||n
+my_letoh64|||n
+my_letohi|||n
+my_letohl|||n
+my_letohs|||n
+my_lstat|||
+my_memcmp||5.004000|n
+my_memset|||n
+my_ntohl|||
+my_pclose||5.004000|
+my_popen_list||5.007001|
+my_popen||5.004000|
+my_setenv|||
+my_socketpair||5.007003|n
+my_stat|||
+my_strftime||5.007002|
+my_swabn|||n
+my_swap|||
+my_unexec|||
+my|||
+newANONATTRSUB||5.006000|
+newANONHASH|||
+newANONLIST|||
+newANONSUB|||
+newASSIGNOP|||
+newATTRSUB||5.006000|
+newAVREF|||
+newAV|||
+newBINOP|||
+newCONDOP|||
+newCONSTSUB|5.006000||p
+newCVREF|||
+newDEFSVOP|||
+newFORM|||
+newFOROP|||
+newGVOP|||
+newGVREF|||
+newGVgen|||
+newHVREF|||
+newHVhv||5.005000|
+newHV|||
+newIO|||
+newLISTOP|||
+newLOGOP|||
+newLOOPEX|||
+newLOOPOP|||
+newMYSUB||5.006000|
+newNULLLIST|||
+newOP|||
+newPADOP||5.006000|
+newPMOP|||
+newPROG|||
+newPVOP|||
+newRANGE|||
+newRV_inc|5.004000||p
+newRV_noinc|5.006000||p
+newRV|||
+newSLICEOP|||
+newSTATEOP|||
+newSUB|||
+newSVOP|||
+newSVREF|||
+newSViv|||
+newSVnv|||
+newSVpvf_nocontext|||vn
+newSVpvf||5.004000|v
+newSVpvn_share||5.007001|
+newSVpvn|5.006000||p
+newSVpv|||
+newSVrv|||
+newSVsv|||
+newSVuv|5.006000||p
+newSV|||
+newUNOP|||
+newWHILEOP||5.004040|
+newXSproto||5.006000|
+newXS||5.006000|
+new_collate||5.006000|
+new_constant|||
+new_ctype||5.006000|
+new_he|||
+new_logop|||
+new_numeric||5.006000|
+new_stackinfo||5.005000|
+new_version||5.009000|
+new_xiv|||
+new_xnv|||
+new_xpvav|||
+new_xpvbm|||
+new_xpvcv|||
+new_xpvhv|||
+new_xpviv|||
+new_xpvlv|||
+new_xpvmg|||
+new_xpvnv|||
+new_xpv|||
+new_xrv|||
+next_symbol|||
+nextargv|||
+nextchar|||
+ninstr|||
+no_bareword_allowed|||
+no_fh_allowed|||
+no_op|||
+not_a_number|||
+nothreadhook||5.008000|
+nuke_stacks|||
+num_overflow|||n
+oopsAV|||
+oopsCV|||
+oopsHV|||
+op_clear|||
+op_const_sv|||
+op_dump||5.006000|
+op_free|||
+op_null||5.007002|
+op_refcnt_lock||5.009002|
+op_refcnt_unlock||5.009002|
+open_script|||
+pMY_CXT_|5.007003||p
+pMY_CXT|5.007003||p
+pTHX_|5.006000||p
+pTHX|5.006000||p
+pack_cat||5.007003|
+pack_rec|||
+package|||
+packlist||5.008001|
+pad_add_anon|||
+pad_add_name|||
+pad_alloc|||
+pad_block_start|||
+pad_check_dup|||
+pad_findlex|||
+pad_findmy|||
+pad_fixup_inner_anons|||
+pad_free|||
+pad_leavemy|||
+pad_new|||
+pad_push|||
+pad_reset|||
+pad_setsv|||
+pad_sv|||
+pad_swipe|||
+pad_tidy|||
+pad_undef|||
+parse_body|||
+parse_unicode_opts|||
+path_is_absolute|||
+peep|||
+pending_ident|||
+perl_alloc_using|||n
+perl_alloc|||n
+perl_clone_using|||n
+perl_clone|||n
+perl_construct|||n
+perl_destruct||5.007003|n
+perl_free|||n
+perl_parse||5.006000|n
+perl_run|||n
+pidgone|||
+pmflag|||
+pmop_dump||5.006000|
+pmruntime|||
+pmtrans|||
+pop_scope|||
+pregcomp|||
+pregexec|||
+pregfree|||
+prepend_elem|||
+printf_nocontext|||vn
+ptr_table_clear|||
+ptr_table_fetch|||
+ptr_table_free|||
+ptr_table_new|||
+ptr_table_split|||
+ptr_table_store|||
+push_scope|||
+put_byte|||
+pv_display||5.006000|
+pv_uni_display||5.007003|
+qerror|||
+re_croak2|||
+re_dup|||
+re_intuit_start||5.006000|
+re_intuit_string||5.006000|
+realloc||5.007002|n
+reentrant_free|||
+reentrant_init|||
+reentrant_retry|||vn
+reentrant_size|||
+refkids|||
+refto|||
+ref|||
+reg_node|||
+reganode|||
+regatom|||
+regbranch|||
+regclass_swash||5.007003|
+regclass|||
+regcp_set_to|||
+regcppop|||
+regcppush|||
+regcurly|||
+regdump||5.005000|
+regexec_flags||5.005000|
+reghop3|||
+reghopmaybe3|||
+reghopmaybe|||
+reghop|||
+reginclass|||
+reginitcolors||5.006000|
+reginsert|||
+regmatch|||
+regnext||5.005000|
+regoptail|||
+regpiece|||
+regpposixcc|||
+regprop|||
+regrepeat_hard|||
+regrepeat|||
+regtail|||
+regtry|||
+reguni|||
+regwhite|||
+reg|||
+repeatcpy|||
+report_evil_fh|||
+report_uninit|||
+require_errno|||
+require_pv||5.006000|
+rninstr|||
+rsignal_restore|||
+rsignal_save|||
+rsignal_state||5.004000|
+rsignal||5.004000|
+run_body|||
+runops_debug||5.005000|
+runops_standard||5.005000|
+rxres_free|||
+rxres_restore|||
+rxres_save|||
+safesyscalloc||5.006000|n
+safesysfree||5.006000|n
+safesysmalloc||5.006000|n
+safesysrealloc||5.006000|n
+same_dirent|||
+save_I16||5.004000|
+save_I32|||
+save_I8||5.006000|
+save_aelem||5.004050|
+save_alloc||5.006000|
+save_aptr|||
+save_ary|||
+save_bool||5.008001|
+save_clearsv|||
+save_delete|||
+save_destructor_x||5.006000|
+save_destructor||5.006000|
+save_freeop|||
+save_freepv|||
+save_freesv|||
+save_generic_pvref||5.006001|
+save_generic_svref||5.005030|
+save_gp||5.004000|
+save_hash|||
+save_hek_flags|||
+save_helem||5.004050|
+save_hints||5.005000|
+save_hptr|||
+save_int|||
+save_item|||
+save_iv||5.005000|
+save_lines|||
+save_list|||
+save_long|||
+save_magic|||
+save_mortalizesv||5.007001|
+save_nogv|||
+save_op|||
+save_padsv||5.007001|
+save_pptr|||
+save_re_context||5.006000|
+save_scalar_at|||
+save_scalar|||
+save_set_svflags||5.009000|
+save_shared_pvref||5.007003|
+save_sptr|||
+save_svref|||
+save_threadsv||5.005000|
+save_vptr||5.006000|
+savepvn|||
+savepv|||
+savesharedpv||5.007003|
+savestack_grow_cnt||5.008001|
+savestack_grow|||
+savesvpv||5.009002|
+sawparens|||
+scalar_mod_type|||
+scalarboolean|||
+scalarkids|||
+scalarseq|||
+scalarvoid|||
+scalar|||
+scan_bin||5.006000|
+scan_commit|||
+scan_const|||
+scan_formline|||
+scan_heredoc|||
+scan_hex|||
+scan_ident|||
+scan_inputsymbol|||
+scan_num||5.007001|
+scan_oct|||
+scan_pat|||
+scan_str|||
+scan_subst|||
+scan_trans|||
+scan_version||5.009001|
+scan_vstring||5.008001|
+scan_word|||
+scope|||
+screaminstr||5.005000|
+seed|||
+set_context||5.006000|n
+set_csh|||
+set_numeric_local||5.006000|
+set_numeric_radix||5.006000|
+set_numeric_standard||5.006000|
+setdefout|||
+setenv_getix|||
+share_hek_flags|||
+share_hek|||
+si_dup|||
+sighandler|||n
+simplify_sort|||
+skipspace|||
+sortsv||5.007003|
+ss_dup|||
+stack_grow|||
+start_glob|||
+start_subparse||5.004000|
+stdize_locale|||
+strEQ|||
+strGE|||
+strGT|||
+strLE|||
+strLT|||
+strNE|||
+str_to_version||5.006000|
+strnEQ|||
+strnNE|||
+study_chunk|||
+sub_crush_depth|||
+sublex_done|||
+sublex_push|||
+sublex_start|||
+sv_2bool|||
+sv_2cv|||
+sv_2io|||
+sv_2iuv_non_preserve|||
+sv_2iv_flags||5.009001|
+sv_2iv|||
+sv_2mortal|||
+sv_2nv|||
+sv_2pv_flags||5.007002|
+sv_2pv_nolen|5.006000||p
+sv_2pvbyte_nolen|||
+sv_2pvbyte|5.006000||p
+sv_2pvutf8_nolen||5.006000|
+sv_2pvutf8||5.006000|
+sv_2pv|||
+sv_2uv_flags||5.009001|
+sv_2uv|5.004000||p
+sv_add_arena|||
+sv_add_backref|||
+sv_backoff|||
+sv_bless|||
+sv_cat_decode||5.008001|
+sv_catpv_mg|5.006000||p
+sv_catpvf_mg_nocontext|||pvn
+sv_catpvf_mg|5.006000|5.004000|pv
+sv_catpvf_nocontext|||vn
+sv_catpvf||5.004000|v
+sv_catpvn_flags||5.007002|
+sv_catpvn_mg|5.006000||p
+sv_catpvn_nomg|5.007002||p
+sv_catpvn|||
+sv_catpv|||
+sv_catsv_flags||5.007002|
+sv_catsv_mg|5.006000||p
+sv_catsv_nomg|5.007002||p
+sv_catsv|||
+sv_chop|||
+sv_clean_all|||
+sv_clean_objs|||
+sv_clear|||
+sv_cmp_locale||5.004000|
+sv_cmp|||
+sv_collxfrm|||
+sv_compile_2op||5.008001|
+sv_copypv||5.007003|
+sv_dec|||
+sv_del_backref|||
+sv_derived_from||5.004000|
+sv_dump|||
+sv_dup|||
+sv_eq|||
+sv_force_normal_flags||5.007001|
+sv_force_normal||5.006000|
+sv_free2|||
+sv_free_arenas|||
+sv_free|||
+sv_gets||5.004000|
+sv_grow|||
+sv_inc|||
+sv_insert|||
+sv_isa|||
+sv_isobject|||
+sv_iv||5.005000|
+sv_len_utf8||5.006000|
+sv_len|||
+sv_magicext||5.007003|
+sv_magic|||
+sv_mortalcopy|||
+sv_newmortal|||
+sv_newref|||
+sv_nolocking||5.007003|
+sv_nosharing||5.007003|
+sv_nounlocking||5.007003|
+sv_nv||5.005000|
+sv_peek||5.005000|
+sv_pos_b2u||5.006000|
+sv_pos_u2b||5.006000|
+sv_pvbyten_force||5.006000|
+sv_pvbyten||5.006000|
+sv_pvbyte||5.006000|
+sv_pvn_force_flags||5.007002|
+sv_pvn_force|||p
+sv_pvn_nomg|5.007003||p
+sv_pvn|5.006000||p
+sv_pvutf8n_force||5.006000|
+sv_pvutf8n||5.006000|
+sv_pvutf8||5.006000|
+sv_pv||5.006000|
+sv_recode_to_utf8||5.007003|
+sv_reftype|||
+sv_release_COW|||
+sv_release_IVX|||
+sv_replace|||
+sv_report_used|||
+sv_reset|||
+sv_rvweaken||5.006000|
+sv_setiv_mg|5.006000||p
+sv_setiv|||
+sv_setnv_mg|5.006000||p
+sv_setnv|||
+sv_setpv_mg|5.006000||p
+sv_setpvf_mg_nocontext|||pvn
+sv_setpvf_mg|5.006000|5.004000|pv
+sv_setpvf_nocontext|||vn
+sv_setpvf||5.004000|v
+sv_setpviv_mg||5.008001|
+sv_setpviv||5.008001|
+sv_setpvn_mg|5.006000||p
+sv_setpvn|||
+sv_setpv|||
+sv_setref_iv|||
+sv_setref_nv|||
+sv_setref_pvn|||
+sv_setref_pv|||
+sv_setref_uv||5.007001|
+sv_setsv_cow|||
+sv_setsv_flags||5.007002|
+sv_setsv_mg|5.006000||p
+sv_setsv_nomg|5.007002||p
+sv_setsv|||
+sv_setuv_mg|5.006000||p
+sv_setuv|5.006000||p
+sv_tainted||5.004000|
+sv_taint||5.004000|
+sv_true||5.005000|
+sv_unglob|||
+sv_uni_display||5.007003|
+sv_unmagic|||
+sv_unref_flags||5.007001|
+sv_unref|||
+sv_untaint||5.004000|
+sv_upgrade|||
+sv_usepvn_mg|5.006000||p
+sv_usepvn|||
+sv_utf8_decode||5.006000|
+sv_utf8_downgrade||5.006000|
+sv_utf8_encode||5.006000|
+sv_utf8_upgrade_flags||5.007002|
+sv_utf8_upgrade||5.007001|
+sv_uv|5.006000||p
+sv_vcatpvf_mg|5.006000|5.004000|p
+sv_vcatpvfn||5.004000|
+sv_vcatpvf|5.006000|5.004000|p
+sv_vsetpvf_mg|5.006000|5.004000|p
+sv_vsetpvfn||5.004000|
+sv_vsetpvf|5.006000|5.004000|p
+svtype|||
+swallow_bom|||
+swash_fetch||5.007002|
+swash_init||5.006000|
+sys_intern_clear|||
+sys_intern_dup|||
+sys_intern_init|||
+taint_env|||
+taint_proper|||
+tmps_grow||5.006000|
+toLOWER|||
+toUPPER|||
+to_byte_substr|||
+to_uni_fold||5.007003|
+to_uni_lower_lc||5.006000|
+to_uni_lower||5.007003|
+to_uni_title_lc||5.006000|
+to_uni_title||5.007003|
+to_uni_upper_lc||5.006000|
+to_uni_upper||5.007003|
+to_utf8_case||5.007003|
+to_utf8_fold||5.007003|
+to_utf8_lower||5.007003|
+to_utf8_substr|||
+to_utf8_title||5.007003|
+to_utf8_upper||5.007003|
+tokeq|||
+tokereport|||
+too_few_arguments|||
+too_many_arguments|||
+unlnk|||
+unpack_rec|||
+unpack_str||5.007003|
+unpackstring||5.008001|
+unshare_hek_or_pvn|||
+unshare_hek|||
+unsharepvn||5.004000|
+upg_version||5.009000|
+usage|||
+utf16_textfilter|||
+utf16_to_utf8_reversed||5.006001|
+utf16_to_utf8||5.006001|
+utf16rev_textfilter|||
+utf8_distance||5.006000|
+utf8_hop||5.006000|
+utf8_length||5.007001|
+utf8_mg_pos_init|||
+utf8_mg_pos|||
+utf8_to_bytes||5.006001|
+utf8_to_uvchr||5.007001|
+utf8_to_uvuni||5.007001|
+utf8n_to_uvchr||5.007001|
+utf8n_to_uvuni||5.007001|
+utilize|||
+uvchr_to_utf8_flags||5.007003|
+uvchr_to_utf8||5.007001|
+uvuni_to_utf8_flags||5.007003|
+uvuni_to_utf8||5.007001|
+validate_suid|||
+vcmp||5.009000|
+vcroak||5.006000|
+vdeb||5.007003|
+vdie|||
+vform||5.006000|
+visit|||
+vivify_defelem|||
+vivify_ref|||
+vload_module||5.006000|
+vmess||5.006000|
+vnewSVpvf|5.006000|5.004000|p
+vnormal||5.009002|
+vnumify||5.009000|
+vstringify||5.009000|
+vwarner||5.006000|
+vwarn||5.006000|
+wait4pid|||
+warn_nocontext|||vn
+warner_nocontext|||vn
+warner||5.006000|v
+warn|||v
+watch|||
+whichsig|||
+write_to_stderr|||
+yyerror|||
+yylex|||
+yyparse|||
+yywarn|||
+);
+
+if (exists $opt{'list-unsupported'}) {
+ my $f;
+ for $f (sort { lc $a cmp lc $b } keys %API) {
+ next unless $API{$f}{todo};
+ print "$f ", '.'x(40-length($f)), " ", format_version($API{$f}{todo}), "\n";
+ }
+ exit 0;
+}
+
+# Scan for possible replacement candidates
+
+my(%replace, %need, %hints, %depends);
+my $replace = 0;
+my $hint = '';
+
+while (<DATA>) {
+ if ($hint) {
+ if (m{^\s*\*\s(.*?)\s*$}) {
+ $hints{$hint} ||= ''; # suppress warning with older perls
+ $hints{$hint} .= "$1\n";
+ }
+ else {
+ $hint = '';
+ }
+ }
+ $hint = $1 if m{^\s*$rccs\sHint:\s+(\w+)\s*$};
+
+ $replace = $1 if m{^\s*$rccs\s+Replace:\s+(\d+)\s+$rcce\s*$};
+ $replace{$2} = $1 if $replace and m{^\s*#\s*define\s+(\w+)(?:\([^)]*\))?\s+(\w+)};
+ $replace{$2} = $1 if m{^\s*#\s*define\s+(\w+)(?:\([^)]*\))?\s+(\w+).*$rccs\s+Replace\s+$rcce};
+ $replace{$1} = $2 if m{^\s*$rccs\s+Replace (\w+) with (\w+)\s+$rcce\s*$};
+
+ if (m{^\s*$rccs\s+(\w+)\s+depends\s+on\s+(\w+(\s*,\s*\w+)*)\s+$rcce\s*$}) {
+ push @{$depends{$1}}, map { s/\s+//g; $_ } split /,/, $2;
+ }
+
+ $need{$1} = 1 if m{^#if\s+defined\(NEED_(\w+)(?:_GLOBAL)?\)};
+}
+
+if (exists $opt{'api-info'}) {
+ my $f;
+ my $count = 0;
+ my $match = $opt{'api-info'} =~ m!^/(.*)/$! ? $1 : "^\Q$opt{'api-info'}\E\$";
+ for $f (sort { lc $a cmp lc $b } keys %API) {
+ next unless $f =~ /$match/;
+ print "\n=== $f ===\n\n";
+ my $info = 0;
+ if ($API{$f}{base} || $API{$f}{todo}) {
+ my $base = format_version($API{$f}{base} || $API{$f}{todo});
+ print "Supported at least starting from perl-$base.\n";
+ $info++;
+ }
+ if ($API{$f}{provided}) {
+ my $todo = $API{$f}{todo} ? format_version($API{$f}{todo}) : "5.003";
+ print "Support by $ppport provided back to perl-$todo.\n";
+ print "Support needs to be explicitly requested by NEED_$f.\n" if exists $need{$f};
+ print "Depends on: ", join(', ', @{$depends{$f}}), ".\n" if exists $depends{$f};
+ print "$hints{$f}" if exists $hints{$f};
+ $info++;
+ }
+ unless ($info) {
+ print "No portability information available.\n";
+ }
+ $count++;
+ }
+ if ($count > 0) {
+ print "\n";
+ }
+ else {
+ print "Found no API matching '$opt{'api-info'}'.\n";
+ }
+ exit 0;
+}
+
+if (exists $opt{'list-provided'}) {
+ my $f;
+ for $f (sort { lc $a cmp lc $b } keys %API) {
+ next unless $API{$f}{provided};
+ my @flags;
+ push @flags, 'explicit' if exists $need{$f};
+ push @flags, 'depend' if exists $depends{$f};
+ push @flags, 'hint' if exists $hints{$f};
+ my $flags = @flags ? ' ['.join(', ', @flags).']' : '';
+ print "$f$flags\n";
+ }
+ exit 0;
+}
+
+my(%files, %global, %revreplace);
+%revreplace = reverse %replace;
+my $filename;
+my $patch_opened = 0;
+
+for $filename (@files) {
+ unless (open IN, "<$filename") {
+ warn "Unable to read from $filename: $!\n";
+ next;
+ }
+
+ info("Scanning $filename ...");
+
+ my $c = do { local $/; <IN> };
+ close IN;
+
+ my %file = (orig => $c, changes => 0);
+
+ # temporarily remove C comments from the code
+ my @ccom;
+ $c =~ s{
+ (
+ [^"'/]+
+ |
+ (?:"[^"\\]*(?:\\.[^"\\]*)*" [^"'/]*)+
+ |
+ (?:'[^'\\]*(?:\\.[^'\\]*)*' [^"'/]*)+
+ )
+ |
+ (/ (?:
+ \*[^*]*\*+(?:[^$ccs][^*]*\*+)* /
+ |
+ /[^\r\n]*
+ ))
+ }{
+ defined $2 and push @ccom, $2;
+ defined $1 ? $1 : "$ccs$#ccom$cce";
+ }egsx;
+
+ $file{ccom} = \@ccom;
+ $file{code} = $c;
+ $file{has_inc_ppport} = ($c =~ /#.*include.*\Q$ppport\E/);
+
+ my $func;
+
+ for $func (keys %API) {
+ my $match = $func;
+ $match .= "|$revreplace{$func}" if exists $revreplace{$func};
+ if ($c =~ /\b(?:Perl_)?($match)\b/) {
+ $file{uses_replace}{$1}++ if exists $revreplace{$func} && $1 eq $revreplace{$func};
+ $file{uses_Perl}{$func}++ if $c =~ /\bPerl_$func\b/;
+ if (exists $API{$func}{provided}) {
+ if (!exists $API{$func}{base} || $API{$func}{base} > $opt{'compat-version'}) {
+ $file{uses}{$func}++;
+ my @deps = rec_depend($func);
+ if (@deps) {
+ $file{uses_deps}{$func} = \@deps;
+ for (@deps) {
+ $file{uses}{$_} = 0 unless exists $file{uses}{$_};
+ }
+ }
+ for ($func, @deps) {
+ if (exists $need{$_}) {
+ $file{needs}{$_} = 'static';
+ }
+ }
+ }
+ }
+ if (exists $API{$func}{todo} && $API{$func}{todo} > $opt{'compat-version'}) {
+ if ($c =~ /\b$func\b/) {
+ $file{uses_todo}{$func}++;
+ }
+ }
+ }
+ }
+
+ while ($c =~ /^$HS*#$HS*define$HS+(NEED_(\w+?)(_GLOBAL)?)\b/mg) {
+ if (exists $need{$2}) {
+ $file{defined $3 ? 'needed_global' : 'needed_static'}{$2}++;
+ }
+ else {
+ warning("Possibly wrong #define $1 in $filename");
+ }
+ }
+
+ for (qw(uses needs uses_todo needed_global needed_static)) {
+ for $func (keys %{$file{$_}}) {
+ push @{$global{$_}{$func}}, $filename;
+ }
+ }
+
+ $files{$filename} = \%file;
+}
+
+# Globally resolve NEED_'s
+my $need;
+for $need (keys %{$global{needs}}) {
+ if (@{$global{needs}{$need}} > 1) {
+ my @targets = @{$global{needs}{$need}};
+ my @t = grep $files{$_}{needed_global}{$need}, @targets;
+ @targets = @t if @t;
+ @t = grep /\.xs$/i, @targets;
+ @targets = @t if @t;
+ my $target = shift @targets;
+ $files{$target}{needs}{$need} = 'global';
+ for (@{$global{needs}{$need}}) {
+ $files{$_}{needs}{$need} = 'extern' if $_ ne $target;
+ }
+ }
+}
+
+for $filename (@files) {
+ exists $files{$filename} or next;
+
+ info("=== Analyzing $filename ===");
+
+ my %file = %{$files{$filename}};
+ my $func;
+ my $c = $file{code};
+
+ for $func (sort keys %{$file{uses_Perl}}) {
+ if ($API{$func}{varargs}) {
+ my $changes = ($c =~ s{\b(Perl_$func\s*\(\s*)(?!aTHX_?)(\)|[^\s)]*\))}
+ { $1 . ($2 eq ')' ? 'aTHX' : 'aTHX_ ') . $2 }ge);
+ if ($changes) {
+ warning("Doesn't pass interpreter argument aTHX to Perl_$func");
+ $file{changes} += $changes;
+ }
+ }
+ else {
+ warning("Uses Perl_$func instead of $func");
+ $file{changes} += ($c =~ s{\bPerl_$func(\s*)\((\s*aTHX_?)?\s*}
+ {$func$1(}g);
+ }
+ }
+
+ for $func (sort keys %{$file{uses_replace}}) {
+ warning("Uses $func instead of $replace{$func}");
+ $file{changes} += ($c =~ s/\b$func\b/$replace{$func}/g);
+ }
+
+ for $func (sort keys %{$file{uses}}) {
+ next unless $file{uses}{$func}; # if it's only a dependency
+ if (exists $file{uses_deps}{$func}) {
+ diag("Uses $func, which depends on ", join(', ', @{$file{uses_deps}{$func}}));
+ }
+ elsif (exists $replace{$func}) {
+ warning("Uses $func instead of $replace{$func}");
+ $file{changes} += ($c =~ s/\b$func\b/$replace{$func}/g);
+ }
+ else {
+ diag("Uses $func");
+ }
+ hint($func);
+ }
+
+ for $func (sort keys %{$file{uses_todo}}) {
+ warning("Uses $func, which may not be portable below perl ",
+ format_version($API{$func}{todo}));
+ }
+
+ for $func (sort keys %{$file{needed_static}}) {
+ my $message = '';
+ if (not exists $file{uses}{$func}) {
+ $message = "No need to define NEED_$func if $func is never used";
+ }
+ elsif (exists $file{needs}{$func} && $file{needs}{$func} ne 'static') {
+ $message = "No need to define NEED_$func when already needed globally";
+ }
+ if ($message) {
+ diag($message);
+ $file{changes} += ($c =~ s/^$HS*#$HS*define$HS+NEED_$func\b.*$LF//mg);
+ }
+ }
+
+ for $func (sort keys %{$file{needed_global}}) {
+ my $message = '';
+ if (not exists $global{uses}{$func}) {
+ $message = "No need to define NEED_${func}_GLOBAL if $func is never used";
+ }
+ elsif (exists $file{needs}{$func}) {
+ if ($file{needs}{$func} eq 'extern') {
+ $message = "No need to define NEED_${func}_GLOBAL when already needed globally";
+ }
+ elsif ($file{needs}{$func} eq 'static') {
+ $message = "No need to define NEED_${func}_GLOBAL when only used in this file";
+ }
+ }
+ if ($message) {
+ diag($message);
+ $file{changes} += ($c =~ s/^$HS*#$HS*define$HS+NEED_${func}_GLOBAL\b.*$LF//mg);
+ }
+ }
+
+ $file{needs_inc_ppport} = keys %{$file{uses}};
+
+ if ($file{needs_inc_ppport}) {
+ my $pp = '';
+
+ for $func (sort keys %{$file{needs}}) {
+ my $type = $file{needs}{$func};
+ next if $type eq 'extern';
+ my $suffix = $type eq 'global' ? '_GLOBAL' : '';
+ unless (exists $file{"needed_$type"}{$func}) {
+ if ($type eq 'global') {
+ diag("Files [@{$global{needs}{$func}}] need $func, adding global request");
+ }
+ else {
+ diag("File needs $func, adding static request");
+ }
+ $pp .= "#define NEED_$func$suffix\n";
+ }
+ }
+
+ if ($pp && ($c =~ s/^(?=$HS*#$HS*define$HS+NEED_\w+)/$pp/m)) {
+ $pp = '';
+ $file{changes}++;
+ }
+
+ unless ($file{has_inc_ppport}) {
+ diag("Needs to include '$ppport'");
+ $pp .= qq(#include "$ppport"\n)
+ }
+
+ if ($pp) {
+ $file{changes} += ($c =~ s/^($HS*#$HS*define$HS+NEED_\w+.*?)^/$1$pp/ms)
+ || ($c =~ s/^(?=$HS*#$HS*include.*\Q$ppport\E)/$pp/m)
+ || ($c =~ s/^($HS*#$HS*include.*XSUB.*\s*?)^/$1$pp/m)
+ || ($c =~ s/^/$pp/);
+ }
+ }
+ else {
+ if ($file{has_inc_ppport}) {
+ diag("No need to include '$ppport'");
+ $file{changes} += ($c =~ s/^$HS*?#$HS*include.*\Q$ppport\E.*?$LF//m);
+ }
+ }
+
+ # put back in our C comments
+ my $ix;
+ my $cppc = 0;
+ my @ccom = @{$file{ccom}};
+ for $ix (0 .. $#ccom) {
+ if (!$opt{cplusplus} && $ccom[$ix] =~ s!^//!!) {
+ $cppc++;
+ $file{changes} += $c =~ s/$rccs$ix$rcce/$ccs$ccom[$ix] $cce/;
+ }
+ else {
+ $c =~ s/$rccs$ix$rcce/$ccom[$ix]/;
+ }
+ }
+
+ if ($cppc) {
+ my $s = $cppc != 1 ? 's' : '';
+ warning("Uses $cppc C++ style comment$s, which is not portable");
+ }
+
+ if ($file{changes}) {
+ if (exists $opt{copy}) {
+ my $newfile = "$filename$opt{copy}";
+ if (-e $newfile) {
+ error("'$newfile' already exists, refusing to write copy of '$filename'");
+ }
+ else {
+ local *F;
+ if (open F, ">$newfile") {
+ info("Writing copy of '$filename' with changes to '$newfile'");
+ print F $c;
+ close F;
+ }
+ else {
+ error("Cannot open '$newfile' for writing: $!");
+ }
+ }
+ }
+ elsif (exists $opt{patch} || $opt{changes}) {
+ if (exists $opt{patch}) {
+ unless ($patch_opened) {
+ if (open PATCH, ">$opt{patch}") {
+ $patch_opened = 1;
+ }
+ else {
+ error("Cannot open '$opt{patch}' for writing: $!");
+ delete $opt{patch};
+ $opt{changes} = 1;
+ goto fallback;
+ }
+ }
+ mydiff(\*PATCH, $filename, $c);
+ }
+ else {
+fallback:
+ info("Suggested changes:");
+ mydiff(\*STDOUT, $filename, $c);
+ }
+ }
+ else {
+ my $s = $file{changes} == 1 ? '' : 's';
+ info("$file{changes} potentially required change$s detected");
+ }
+ }
+ else {
+ info("Looks good");
+ }
+}
+
+close PATCH if $patch_opened;
+
+exit 0;
+
+
+sub mydiff
+{
+ local *F = shift;
+ my($file, $str) = @_;
+ my $diff;
+
+ if (exists $opt{diff}) {
+ $diff = run_diff($opt{diff}, $file, $str);
+ }
+
+ if (!defined $diff and can_use('Text::Diff')) {
+ $diff = Text::Diff::diff($file, \$str, { STYLE => 'Unified' });
+ $diff = <<HEADER . $diff;
+--- $file
++++ $file.patched
+HEADER
+ }
+
+ if (!defined $diff) {
+ $diff = run_diff('diff -u', $file, $str);
+ }
+
+ if (!defined $diff) {
+ $diff = run_diff('diff', $file, $str);
+ }
+
+ if (!defined $diff) {
+ error("Cannot generate a diff. Please install Text::Diff or use --copy.");
+ return;
+ }
+
+ print F $diff;
+
+}
+
+sub run_diff
+{
+ my($prog, $file, $str) = @_;
+ my $tmp = 'dppptemp';
+ my $suf = 'aaa';
+ my $diff = '';
+ local *F;
+
+ while (-e "$tmp.$suf") { $suf++ }
+ $tmp = "$tmp.$suf";
+
+ if (open F, ">$tmp") {
+ print F $str;
+ close F;
+
+ if (open F, "$prog $file $tmp |") {
+ while (<F>) {
+ s/\Q$tmp\E/$file.patched/;
+ $diff .= $_;
+ }
+ close F;
+ unlink $tmp;
+ return $diff;
+ }
+
+ unlink $tmp;
+ }
+ else {
+ error("Cannot open '$tmp' for writing: $!");
+ }
+
+ return undef;
+}
+
+sub can_use
+{
+ eval "use @_;";
+ return $@ eq '';
+}
+
+sub rec_depend
+{
+ my $func = shift;
+ my %seen;
+ return () unless exists $depends{$func};
+ grep !$seen{$_}++, map { ($_, rec_depend($_)) } @{$depends{$func}};
+}
+
+sub parse_version
+{
+ my $ver = shift;
+
+ if ($ver =~ /^(\d+)\.(\d+)\.(\d+)$/) {
+ return ($1, $2, $3);
+ }
+ elsif ($ver !~ /^\d+\.[\d_]+$/) {
+ die "cannot parse version '$ver'\n";
+ }
+
+ $ver =~ s/_//g;
+ $ver =~ s/$/000000/;
+
+ my($r,$v,$s) = $ver =~ /(\d+)\.(\d{3})(\d{3})/;
+
+ $v = int $v;
+ $s = int $s;
+
+ if ($r < 5 || ($r == 5 && $v < 6)) {
+ if ($s % 10) {
+ die "cannot parse version '$ver'\n";
+ }
+ }
+
+ return ($r, $v, $s);
+}
+
+sub format_version
+{
+ my $ver = shift;
+
+ $ver =~ s/$/000000/;
+ my($r,$v,$s) = $ver =~ /(\d+)\.(\d{3})(\d{3})/;
+
+ $v = int $v;
+ $s = int $s;
+
+ if ($r < 5 || ($r == 5 && $v < 6)) {
+ if ($s % 10) {
+ die "invalid version '$ver'\n";
+ }
+ $s /= 10;
+
+ $ver = sprintf "%d.%03d", $r, $v;
+ $s > 0 and $ver .= sprintf "_%02d", $s;
+
+ return $ver;
+ }
+
+ return sprintf "%d.%d.%d", $r, $v, $s;
+}
+
+sub info
+{
+ $opt{quiet} and return;
+ print @_, "\n";
+}
+
+sub diag
+{
+ $opt{quiet} and return;
+ $opt{diag} and print @_, "\n";
+}
+
+sub warning
+{
+ $opt{quiet} and return;
+ print "*** ", @_, "\n";
+}
+
+sub error
+{
+ print "*** ERROR: ", @_, "\n";
+}
+
+my %given_hints;
+sub hint
+{
+ $opt{quiet} and return;
+ $opt{hints} or return;
+ my $func = shift;
+ exists $hints{$func} or return;
+ $given_hints{$func}++ and return;
+ my $hint = $hints{$func};
+ $hint =~ s/^/ /mg;
+ print " --- hint for $func ---\n", $hint;
+}
+
+sub usage
+{
+ my($usage) = do { local(@ARGV,$/)=($0); <> } =~ /^=head\d$HS+SYNOPSIS\s*^(.*?)\s*^=/ms;
+ my %M = ( 'I' => '*' );
+ $usage =~ s/^\s*perl\s+\S+/$^X $0/;
+ $usage =~ s/([A-Z])<([^>]+)>/$M{$1}$2$M{$1}/g;
+
+ print <<ENDUSAGE;
+
+Usage: $usage
+
+See perldoc $0 for details.
+
+ENDUSAGE
+
+ exit 2;
+}
+
+__DATA__
+*/
+
+#ifndef _P_P_PORTABILITY_H_
+#define _P_P_PORTABILITY_H_
+
+#ifndef DPPP_NAMESPACE
+# define DPPP_NAMESPACE DPPP_
+#endif
+
+#define DPPP_CAT2(x,y) CAT2(x,y)
+#define DPPP_(name) DPPP_CAT2(DPPP_NAMESPACE, name)
+
+#ifndef PERL_REVISION
+# if !defined(__PATCHLEVEL_H_INCLUDED__) && !(defined(PATCHLEVEL) && defined(SUBVERSION))
+# define PERL_PATCHLEVEL_H_IMPLICIT
+# include <patchlevel.h>
+# endif
+# if !(defined(PERL_VERSION) || (defined(SUBVERSION) && defined(PATCHLEVEL)))
+# include <could_not_find_Perl_patchlevel.h>
+# endif
+# ifndef PERL_REVISION
+# define PERL_REVISION (5)
+ /* Replace: 1 */
+# define PERL_VERSION PATCHLEVEL
+# define PERL_SUBVERSION SUBVERSION
+ /* Replace PERL_PATCHLEVEL with PERL_VERSION */
+ /* Replace: 0 */
+# endif
+#endif
+
+#define PERL_BCDVERSION ((PERL_REVISION * 0x1000000L) + (PERL_VERSION * 0x1000L) + PERL_SUBVERSION)
+
+/* It is very unlikely that anyone will try to use this with Perl 6
+ (or greater), but who knows.
+ */
+#if PERL_REVISION != 5
+# error ppport.h only works with Perl version 5
+#endif /* PERL_REVISION != 5 */
+
+#ifdef I_LIMITS
+# include <limits.h>
+#endif
+
+#ifndef PERL_UCHAR_MIN
+# define PERL_UCHAR_MIN ((unsigned char)0)
+#endif
+
+#ifndef PERL_UCHAR_MAX
+# ifdef UCHAR_MAX
+# define PERL_UCHAR_MAX ((unsigned char)UCHAR_MAX)
+# else
+# ifdef MAXUCHAR
+# define PERL_UCHAR_MAX ((unsigned char)MAXUCHAR)
+# else
+# define PERL_UCHAR_MAX ((unsigned char)~(unsigned)0)
+# endif
+# endif
+#endif
+
+#ifndef PERL_USHORT_MIN
+# define PERL_USHORT_MIN ((unsigned short)0)
+#endif
+
+#ifndef PERL_USHORT_MAX
+# ifdef USHORT_MAX
+# define PERL_USHORT_MAX ((unsigned short)USHORT_MAX)
+# else
+# ifdef MAXUSHORT
+# define PERL_USHORT_MAX ((unsigned short)MAXUSHORT)
+# else
+# ifdef USHRT_MAX
+# define PERL_USHORT_MAX ((unsigned short)USHRT_MAX)
+# else
+# define PERL_USHORT_MAX ((unsigned short)~(unsigned)0)
+# endif
+# endif
+# endif
+#endif
+
+#ifndef PERL_SHORT_MAX
+# ifdef SHORT_MAX
+# define PERL_SHORT_MAX ((short)SHORT_MAX)
+# else
+# ifdef MAXSHORT /* Often used in <values.h> */
+# define PERL_SHORT_MAX ((short)MAXSHORT)
+# else
+# ifdef SHRT_MAX
+# define PERL_SHORT_MAX ((short)SHRT_MAX)
+# else
+# define PERL_SHORT_MAX ((short) (PERL_USHORT_MAX >> 1))
+# endif
+# endif
+# endif
+#endif
+
+#ifndef PERL_SHORT_MIN
+# ifdef SHORT_MIN
+# define PERL_SHORT_MIN ((short)SHORT_MIN)
+# else
+# ifdef MINSHORT
+# define PERL_SHORT_MIN ((short)MINSHORT)
+# else
+# ifdef SHRT_MIN
+# define PERL_SHORT_MIN ((short)SHRT_MIN)
+# else
+# define PERL_SHORT_MIN (-PERL_SHORT_MAX - ((3 & -1) == 3))
+# endif
+# endif
+# endif
+#endif
+
+#ifndef PERL_UINT_MAX
+# ifdef UINT_MAX
+# define PERL_UINT_MAX ((unsigned int)UINT_MAX)
+# else
+# ifdef MAXUINT
+# define PERL_UINT_MAX ((unsigned int)MAXUINT)
+# else
+# define PERL_UINT_MAX (~(unsigned int)0)
+# endif
+# endif
+#endif
+
+#ifndef PERL_UINT_MIN
+# define PERL_UINT_MIN ((unsigned int)0)
+#endif
+
+#ifndef PERL_INT_MAX
+# ifdef INT_MAX
+# define PERL_INT_MAX ((int)INT_MAX)
+# else
+# ifdef MAXINT /* Often used in <values.h> */
+# define PERL_INT_MAX ((int)MAXINT)
+# else
+# define PERL_INT_MAX ((int)(PERL_UINT_MAX >> 1))
+# endif
+# endif
+#endif
+
+#ifndef PERL_INT_MIN
+# ifdef INT_MIN
+# define PERL_INT_MIN ((int)INT_MIN)
+# else
+# ifdef MININT
+# define PERL_INT_MIN ((int)MININT)
+# else
+# define PERL_INT_MIN (-PERL_INT_MAX - ((3 & -1) == 3))
+# endif
+# endif
+#endif
+
+#ifndef PERL_ULONG_MAX
+# ifdef ULONG_MAX
+# define PERL_ULONG_MAX ((unsigned long)ULONG_MAX)
+# else
+# ifdef MAXULONG
+# define PERL_ULONG_MAX ((unsigned long)MAXULONG)
+# else
+# define PERL_ULONG_MAX (~(unsigned long)0)
+# endif
+# endif
+#endif
+
+#ifndef PERL_ULONG_MIN
+# define PERL_ULONG_MIN ((unsigned long)0L)
+#endif
+
+#ifndef PERL_LONG_MAX
+# ifdef LONG_MAX
+# define PERL_LONG_MAX ((long)LONG_MAX)
+# else
+# ifdef MAXLONG
+# define PERL_LONG_MAX ((long)MAXLONG)
+# else
+# define PERL_LONG_MAX ((long) (PERL_ULONG_MAX >> 1))
+# endif
+# endif
+#endif
+
+#ifndef PERL_LONG_MIN
+# ifdef LONG_MIN
+# define PERL_LONG_MIN ((long)LONG_MIN)
+# else
+# ifdef MINLONG
+# define PERL_LONG_MIN ((long)MINLONG)
+# else
+# define PERL_LONG_MIN (-PERL_LONG_MAX - ((3 & -1) == 3))
+# endif
+# endif
+#endif
+
+#if defined(HAS_QUAD) && (defined(convex) || defined(uts))
+# ifndef PERL_UQUAD_MAX
+# ifdef ULONGLONG_MAX
+# define PERL_UQUAD_MAX ((unsigned long long)ULONGLONG_MAX)
+# else
+# ifdef MAXULONGLONG
+# define PERL_UQUAD_MAX ((unsigned long long)MAXULONGLONG)
+# else
+# define PERL_UQUAD_MAX (~(unsigned long long)0)
+# endif
+# endif
+# endif
+
+# ifndef PERL_UQUAD_MIN
+# define PERL_UQUAD_MIN ((unsigned long long)0L)
+# endif
+
+# ifndef PERL_QUAD_MAX
+# ifdef LONGLONG_MAX
+# define PERL_QUAD_MAX ((long long)LONGLONG_MAX)
+# else
+# ifdef MAXLONGLONG
+# define PERL_QUAD_MAX ((long long)MAXLONGLONG)
+# else
+# define PERL_QUAD_MAX ((long long) (PERL_UQUAD_MAX >> 1))
+# endif
+# endif
+# endif
+
+# ifndef PERL_QUAD_MIN
+# ifdef LONGLONG_MIN
+# define PERL_QUAD_MIN ((long long)LONGLONG_MIN)
+# else
+# ifdef MINLONGLONG
+# define PERL_QUAD_MIN ((long long)MINLONGLONG)
+# else
+# define PERL_QUAD_MIN (-PERL_QUAD_MAX - ((3 & -1) == 3))
+# endif
+# endif
+# endif
+#endif
+
+/* This is based on code from 5.003 perl.h */
+#ifdef HAS_QUAD
+# ifdef cray
+#ifndef IVTYPE
+# define IVTYPE int
+#endif
+
+#ifndef IV_MIN
+# define IV_MIN PERL_INT_MIN
+#endif
+
+#ifndef IV_MAX
+# define IV_MAX PERL_INT_MAX
+#endif
+
+#ifndef UV_MIN
+# define UV_MIN PERL_UINT_MIN
+#endif
+
+#ifndef UV_MAX
+# define UV_MAX PERL_UINT_MAX
+#endif
+
+# ifdef INTSIZE
+#ifndef IVSIZE
+# define IVSIZE INTSIZE
+#endif
+
+# endif
+# else
+# if defined(convex) || defined(uts)
+#ifndef IVTYPE
+# define IVTYPE long long
+#endif
+
+#ifndef IV_MIN
+# define IV_MIN PERL_QUAD_MIN
+#endif
+
+#ifndef IV_MAX
+# define IV_MAX PERL_QUAD_MAX
+#endif
+
+#ifndef UV_MIN
+# define UV_MIN PERL_UQUAD_MIN
+#endif
+
+#ifndef UV_MAX
+# define UV_MAX PERL_UQUAD_MAX
+#endif
+
+# ifdef LONGLONGSIZE
+#ifndef IVSIZE
+# define IVSIZE LONGLONGSIZE
+#endif
+
+# endif
+# else
+#ifndef IVTYPE
+# define IVTYPE long
+#endif
+
+#ifndef IV_MIN
+# define IV_MIN PERL_LONG_MIN
+#endif
+
+#ifndef IV_MAX
+# define IV_MAX PERL_LONG_MAX
+#endif
+
+#ifndef UV_MIN
+# define UV_MIN PERL_ULONG_MIN
+#endif
+
+#ifndef UV_MAX
+# define UV_MAX PERL_ULONG_MAX
+#endif
+
+# ifdef LONGSIZE
+#ifndef IVSIZE
+# define IVSIZE LONGSIZE
+#endif
+
+# endif
+# endif
+# endif
+#ifndef IVSIZE
+# define IVSIZE 8
+#endif
+
+#ifndef PERL_QUAD_MIN
+# define PERL_QUAD_MIN IV_MIN
+#endif
+
+#ifndef PERL_QUAD_MAX
+# define PERL_QUAD_MAX IV_MAX
+#endif
+
+#ifndef PERL_UQUAD_MIN
+# define PERL_UQUAD_MIN UV_MIN
+#endif
+
+#ifndef PERL_UQUAD_MAX
+# define PERL_UQUAD_MAX UV_MAX
+#endif
+
+#else
+#ifndef IVTYPE
+# define IVTYPE long
+#endif
+
+#ifndef IV_MIN
+# define IV_MIN PERL_LONG_MIN
+#endif
+
+#ifndef IV_MAX
+# define IV_MAX PERL_LONG_MAX
+#endif
+
+#ifndef UV_MIN
+# define UV_MIN PERL_ULONG_MIN
+#endif
+
+#ifndef UV_MAX
+# define UV_MAX PERL_ULONG_MAX
+#endif
+
+#endif
+
+#ifndef IVSIZE
+# ifdef LONGSIZE
+# define IVSIZE LONGSIZE
+# else
+# define IVSIZE 4 /* A bold guess, but the best we can make. */
+# endif
+#endif
+#ifndef UVTYPE
+# define UVTYPE unsigned IVTYPE
+#endif
+
+#ifndef UVSIZE
+# define UVSIZE IVSIZE
+#endif
+
+#ifndef sv_setuv
+# define sv_setuv(sv, uv) \
+ STMT_START { \
+ UV TeMpUv = uv; \
+ if (TeMpUv <= IV_MAX) \
+ sv_setiv(sv, TeMpUv); \
+ else \
+ sv_setnv(sv, (double)TeMpUv); \
+ } STMT_END
+#endif
+
+#ifndef newSVuv
+# define newSVuv(uv) ((uv) <= IV_MAX ? newSViv((IV)uv) : newSVnv((NV)uv))
+#endif
+#ifndef sv_2uv
+# define sv_2uv(sv) ((PL_Sv = (sv)), (UV) (SvNOK(PL_Sv) ? SvNV(PL_Sv) : sv_2nv(PL_Sv)))
+#endif
+
+#ifndef SvUVX
+# define SvUVX(sv) ((UV)SvIVX(sv))
+#endif
+
+#ifndef SvUVXx
+# define SvUVXx(sv) SvUVX(sv)
+#endif
+
+#ifndef SvUV
+# define SvUV(sv) (SvIOK(sv) ? SvUVX(sv) : sv_2uv(sv))
+#endif
+
+#ifndef SvUVx
+# define SvUVx(sv) ((PL_Sv = (sv)), SvUV(PL_Sv))
+#endif
+
+/* Hint: sv_uv
+ * Always use the SvUVx() macro instead of sv_uv().
+ */
+#ifndef sv_uv
+# define sv_uv(sv) SvUVx(sv)
+#endif
+#ifndef XST_mUV
+# define XST_mUV(i,v) (ST(i) = sv_2mortal(newSVuv(v)) )
+#endif
+
+#ifndef XSRETURN_UV
+# define XSRETURN_UV(v) STMT_START { XST_mUV(0,v); XSRETURN(1); } STMT_END
+#endif
+#ifndef PUSHu
+# define PUSHu(u) STMT_START { sv_setuv(TARG, (UV)(u)); PUSHTARG; } STMT_END
+#endif
+
+#ifndef XPUSHu
+# define XPUSHu(u) STMT_START { sv_setuv(TARG, (UV)(u)); XPUSHTARG; } STMT_END
+#endif
+
+#if (PERL_VERSION < 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION <= 5))
+/* Replace: 1 */
+# define PL_DBsingle DBsingle
+# define PL_DBsub DBsub
+# define PL_Sv Sv
+# define PL_compiling compiling
+# define PL_copline copline
+# define PL_curcop curcop
+# define PL_curstash curstash
+# define PL_debstash debstash
+# define PL_defgv defgv
+# define PL_diehook diehook
+# define PL_dirty dirty
+# define PL_dowarn dowarn
+# define PL_errgv errgv
+# define PL_hexdigit hexdigit
+# define PL_hints hints
+# define PL_na na
+# define PL_no_modify no_modify
+# define PL_perl_destruct_level perl_destruct_level
+# define PL_perldb perldb
+# define PL_ppaddr ppaddr
+# define PL_rsfp_filters rsfp_filters
+# define PL_rsfp rsfp
+# define PL_stack_base stack_base
+# define PL_stack_sp stack_sp
+# define PL_stdingv stdingv
+# define PL_sv_arenaroot sv_arenaroot
+# define PL_sv_no sv_no
+# define PL_sv_undef sv_undef
+# define PL_sv_yes sv_yes
+# define PL_tainted tainted
+# define PL_tainting tainting
+/* Replace: 0 */
+#endif
+
+#ifndef PERL_UNUSED_DECL
+# ifdef HASATTRIBUTE
+# if (defined(__GNUC__) && defined(__cplusplus)) || defined(__INTEL_COMPILER)
+# define PERL_UNUSED_DECL
+# else
+# define PERL_UNUSED_DECL __attribute__((unused))
+# endif
+# else
+# define PERL_UNUSED_DECL
+# endif
+#endif
+#ifndef NOOP
+# define NOOP (void)0
+#endif
+
+#ifndef dNOOP
+# define dNOOP extern int Perl___notused PERL_UNUSED_DECL
+#endif
+
+#ifndef NVTYPE
+# if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE)
+# define NVTYPE long double
+# else
+# define NVTYPE double
+# endif
+typedef NVTYPE NV;
+#endif
+
+#ifndef INT2PTR
+
+# if (IVSIZE == PTRSIZE) && (UVSIZE == PTRSIZE)
+# define PTRV UV
+# define INT2PTR(any,d) (any)(d)
+# else
+# if PTRSIZE == LONGSIZE
+# define PTRV unsigned long
+# else
+# define PTRV unsigned
+# endif
+# define INT2PTR(any,d) (any)(PTRV)(d)
+# endif
+
+# define NUM2PTR(any,d) (any)(PTRV)(d)
+# define PTR2IV(p) INT2PTR(IV,p)
+# define PTR2UV(p) INT2PTR(UV,p)
+# define PTR2NV(p) NUM2PTR(NV,p)
+
+# if PTRSIZE == LONGSIZE
+# define PTR2ul(p) (unsigned long)(p)
+# else
+# define PTR2ul(p) INT2PTR(unsigned long,p)
+# endif
+
+#endif /* !INT2PTR */
+
+#undef START_EXTERN_C
+#undef END_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 extern
+#endif
+
+#ifndef PERL_GCC_BRACE_GROUPS_FORBIDDEN
+# if defined(__STRICT_ANSI__) && defined(PERL_GCC_PEDANTIC)
+# define PERL_GCC_BRACE_GROUPS_FORBIDDEN
+# endif
+#endif
+
+#undef STMT_START
+#undef STMT_END
+#if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN) && !defined(__cplusplus)
+# define STMT_START (void)( /* gcc supports ``({ STATEMENTS; })'' */
+# define STMT_END )
+#else
+# if defined(VOIDFLAGS) && (VOIDFLAGS) && (defined(sun) || defined(__sun__)) && !defined(__GNUC__)
+# define STMT_START if (1)
+# define STMT_END else (void)0
+# else
+# define STMT_START do
+# define STMT_END while (0)
+# endif
+#endif
+#ifndef boolSV
+# define boolSV(b) ((b) ? &PL_sv_yes : &PL_sv_no)
+#endif
+
+/* DEFSV appears first in 5.004_56 */
+#ifndef DEFSV
+# define DEFSV GvSV(PL_defgv)
+#endif
+
+#ifndef SAVE_DEFSV
+# define SAVE_DEFSV SAVESPTR(GvSV(PL_defgv))
+#endif
+
+/* Older perls (<=5.003) lack AvFILLp */
+#ifndef AvFILLp
+# define AvFILLp AvFILL
+#endif
+#ifndef ERRSV
+# define ERRSV get_sv("@",FALSE)
+#endif
+#ifndef newSVpvn
+# define newSVpvn(data,len) ((data) \
+ ? ((len) ? newSVpv((data), (len)) : newSVpv("", 0)) \
+ : newSV(0))
+#endif
+
+/* Hint: gv_stashpvn
+ * This function's backport doesn't support the length parameter, but
+ * rather ignores it. Portability can only be ensured if the length
+ * parameter is used for speed reasons, but the length can always be
+ * correctly computed from the string argument.
+ */
+#ifndef gv_stashpvn
+# define gv_stashpvn(str,len,create) gv_stashpv(str,create)
+#endif
+
+/* Replace: 1 */
+#ifndef get_cv
+# define get_cv perl_get_cv
+#endif
+
+#ifndef get_sv
+# define get_sv perl_get_sv
+#endif
+
+#ifndef get_av
+# define get_av perl_get_av
+#endif
+
+#ifndef get_hv
+# define get_hv perl_get_hv
+#endif
+
+/* Replace: 0 */
+
+#ifdef HAS_MEMCMP
+#ifndef memNE
+# define memNE(s1,s2,l) (memcmp(s1,s2,l))
+#endif
+
+#ifndef memEQ
+# define memEQ(s1,s2,l) (!memcmp(s1,s2,l))
+#endif
+
+#else
+#ifndef memNE
+# define memNE(s1,s2,l) (bcmp(s1,s2,l))
+#endif
+
+#ifndef memEQ
+# define memEQ(s1,s2,l) (!bcmp(s1,s2,l))
+#endif
+
+#endif
+#ifndef MoveD
+# define MoveD(s,d,n,t) memmove((char*)(d),(char*)(s), (n) * sizeof(t))
+#endif
+
+#ifndef CopyD
+# define CopyD(s,d,n,t) memcpy((char*)(d),(char*)(s), (n) * sizeof(t))
+#endif
+
+#ifdef HAS_MEMSET
+#ifndef ZeroD
+# define ZeroD(d,n,t) memzero((char*)(d), (n) * sizeof(t))
+#endif
+
+#else
+#ifndef ZeroD
+# define ZeroD(d,n,t) ((void)memzero((char*)(d), (n) * sizeof(t)),d)
+#endif
+
+#endif
+#ifndef Poison
+# define Poison(d,n,t) (void)memset((char*)(d), 0xAB, (n) * sizeof(t))
+#endif
+#ifndef dUNDERBAR
+# define dUNDERBAR dNOOP
+#endif
+
+#ifndef UNDERBAR
+# define UNDERBAR DEFSV
+#endif
+#ifndef dAX
+# define dAX I32 ax = MARK - PL_stack_base + 1
+#endif
+
+#ifndef dITEMS
+# define dITEMS I32 items = SP - MARK
+#endif
+#ifndef dXSTARG
+# define dXSTARG SV * targ = sv_newmortal()
+#endif
+#ifndef dTHR
+# define dTHR dNOOP
+#endif
+#ifndef dTHX
+# define dTHX dNOOP
+#endif
+
+#ifndef dTHXa
+# define dTHXa(x) dNOOP
+#endif
+#ifndef pTHX
+# define pTHX void
+#endif
+
+#ifndef pTHX_
+# define pTHX_
+#endif
+
+#ifndef aTHX
+# define aTHX
+#endif
+
+#ifndef aTHX_
+# define aTHX_
+#endif
+#ifndef dTHXoa
+# define dTHXoa(x) dTHXa(x)
+#endif
+#ifndef PUSHmortal
+# define PUSHmortal PUSHs(sv_newmortal())
+#endif
+
+#ifndef mPUSHp
+# define mPUSHp(p,l) sv_setpvn_mg(PUSHmortal, (p), (l))
+#endif
+
+#ifndef mPUSHn
+# define mPUSHn(n) sv_setnv_mg(PUSHmortal, (NV)(n))
+#endif
+
+#ifndef mPUSHi
+# define mPUSHi(i) sv_setiv_mg(PUSHmortal, (IV)(i))
+#endif
+
+#ifndef mPUSHu
+# define mPUSHu(u) sv_setuv_mg(PUSHmortal, (UV)(u))
+#endif
+#ifndef XPUSHmortal
+# define XPUSHmortal XPUSHs(sv_newmortal())
+#endif
+
+#ifndef mXPUSHp
+# define mXPUSHp(p,l) STMT_START { EXTEND(sp,1); sv_setpvn_mg(PUSHmortal, (p), (l)); } STMT_END
+#endif
+
+#ifndef mXPUSHn
+# define mXPUSHn(n) STMT_START { EXTEND(sp,1); sv_setnv_mg(PUSHmortal, (NV)(n)); } STMT_END
+#endif
+
+#ifndef mXPUSHi
+# define mXPUSHi(i) STMT_START { EXTEND(sp,1); sv_setiv_mg(PUSHmortal, (IV)(i)); } STMT_END
+#endif
+
+#ifndef mXPUSHu
+# define mXPUSHu(u) STMT_START { EXTEND(sp,1); sv_setuv_mg(PUSHmortal, (UV)(u)); } STMT_END
+#endif
+
+/* Replace: 1 */
+#ifndef call_sv
+# define call_sv perl_call_sv
+#endif
+
+#ifndef call_pv
+# define call_pv perl_call_pv
+#endif
+
+#ifndef call_argv
+# define call_argv perl_call_argv
+#endif
+
+#ifndef call_method
+# define call_method perl_call_method
+#endif
+#ifndef eval_sv
+# define eval_sv perl_eval_sv
+#endif
+
+/* Replace: 0 */
+
+/* Replace perl_eval_pv with eval_pv */
+/* eval_pv depends on eval_sv */
+
+#ifndef eval_pv
+#if defined(NEED_eval_pv)
+static SV* DPPP_(my_eval_pv)(char *p, I32 croak_on_error);
+static
+#else
+extern SV* DPPP_(my_eval_pv)(char *p, I32 croak_on_error);
+#endif
+
+#ifdef eval_pv
+# undef eval_pv
+#endif
+#define eval_pv(a,b) DPPP_(my_eval_pv)(aTHX_ a,b)
+#define Perl_eval_pv DPPP_(my_eval_pv)
+
+#if defined(NEED_eval_pv) || defined(NEED_eval_pv_GLOBAL)
+
+SV*
+DPPP_(my_eval_pv)(char *p, I32 croak_on_error)
+{
+ dSP;
+ SV* sv = newSVpv(p, 0);
+
+ PUSHMARK(sp);
+ eval_sv(sv, G_SCALAR);
+ SvREFCNT_dec(sv);
+
+ SPAGAIN;
+ sv = POPs;
+ PUTBACK;
+
+ if (croak_on_error && SvTRUE(GvSV(errgv)))
+ croak(SvPVx(GvSV(errgv), na));
+
+ return sv;
+}
+
+#endif
+#endif
+#ifndef newRV_inc
+# define newRV_inc(sv) newRV(sv) /* Replace */
+#endif
+
+#ifndef newRV_noinc
+#if defined(NEED_newRV_noinc)
+static SV * DPPP_(my_newRV_noinc)(SV *sv);
+static
+#else
+extern SV * DPPP_(my_newRV_noinc)(SV *sv);
+#endif
+
+#ifdef newRV_noinc
+# undef newRV_noinc
+#endif
+#define newRV_noinc(a) DPPP_(my_newRV_noinc)(aTHX_ a)
+#define Perl_newRV_noinc DPPP_(my_newRV_noinc)
+
+#if defined(NEED_newRV_noinc) || defined(NEED_newRV_noinc_GLOBAL)
+SV *
+DPPP_(my_newRV_noinc)(SV *sv)
+{
+ SV *rv = (SV *)newRV(sv);
+ SvREFCNT_dec(sv);
+ return rv;
+}
+#endif
+#endif
+
+/* Hint: newCONSTSUB
+ * Returns a CV* as of perl-5.7.1. This return value is not supported
+ * by Devel::PPPort.
+ */
+
+/* newCONSTSUB from IO.xs is in the core starting with 5.004_63 */
+#if ((PERL_VERSION < 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION < 63))) && ((PERL_VERSION != 4) || (PERL_SUBVERSION != 5))
+#if defined(NEED_newCONSTSUB)
+static void DPPP_(my_newCONSTSUB)(HV *stash, char *name, SV *sv);
+static
+#else
+extern void DPPP_(my_newCONSTSUB)(HV *stash, char *name, SV *sv);
+#endif
+
+#ifdef newCONSTSUB
+# undef newCONSTSUB
+#endif
+#define newCONSTSUB(a,b,c) DPPP_(my_newCONSTSUB)(aTHX_ a,b,c)
+#define Perl_newCONSTSUB DPPP_(my_newCONSTSUB)
+
+#if defined(NEED_newCONSTSUB) || defined(NEED_newCONSTSUB_GLOBAL)
+
+void
+DPPP_(my_newCONSTSUB)(HV *stash, char *name, SV *sv)
+{
+ U32 oldhints = PL_hints;
+ HV *old_cop_stash = PL_curcop->cop_stash;
+ HV *old_curstash = PL_curstash;
+ line_t oldline = PL_curcop->cop_line;
+ PL_curcop->cop_line = PL_copline;
+
+ PL_hints &= ~HINT_BLOCK_SCOPE;
+ if (stash)
+ PL_curstash = PL_curcop->cop_stash = stash;
+
+ newSUB(
+
+#if ((PERL_VERSION < 3) || ((PERL_VERSION == 3) && (PERL_SUBVERSION < 22)))
+ start_subparse(),
+#elif ((PERL_VERSION == 3) && (PERL_SUBVERSION == 22))
+ start_subparse(0),
+#else /* 5.003_23 onwards */
+ start_subparse(FALSE, 0),
+#endif
+
+ newSVOP(OP_CONST, 0, newSVpv(name,0)),
+ newSVOP(OP_CONST, 0, &PL_sv_no), /* SvPV(&PL_sv_no) == "" -- GMB */
+ newSTATEOP(0, Nullch, newSVOP(OP_CONST, 0, sv))
+ );
+
+ PL_hints = oldhints;
+ PL_curcop->cop_stash = old_cop_stash;
+ PL_curstash = old_curstash;
+ PL_curcop->cop_line = oldline;
+}
+#endif
+#endif
+
+/*
+ * Boilerplate macros for initializing and accessing interpreter-local
+ * data from C. All statics in extensions should be reworked to use
+ * this, if you want to make the extension thread-safe. See ext/re/re.xs
+ * for an example of the use of these macros.
+ *
+ * Code that uses these macros is responsible for the following:
+ * 1. #define MY_CXT_KEY to a unique string, e.g. "DynaLoader_guts"
+ * 2. Declare a typedef named my_cxt_t that is a structure that contains
+ * all the data that needs to be interpreter-local.
+ * 3. Use the START_MY_CXT macro after the declaration of my_cxt_t.
+ * 4. Use the MY_CXT_INIT macro such that it is called exactly once
+ * (typically put in the BOOT: section).
+ * 5. Use the members of the my_cxt_t structure everywhere as
+ * MY_CXT.member.
+ * 6. Use the dMY_CXT macro (a declaration) in all the functions that
+ * access MY_CXT.
+ */
+
+#if defined(MULTIPLICITY) || defined(PERL_OBJECT) || \
+ defined(PERL_CAPI) || defined(PERL_IMPLICIT_CONTEXT)
+
+#ifndef START_MY_CXT
+
+/* This must appear in all extensions that define a my_cxt_t structure,
+ * right after the definition (i.e. at file scope). The non-threads
+ * case below uses it to declare the data as static. */
+#define START_MY_CXT
+
+#if (PERL_VERSION < 4 || (PERL_VERSION == 4 && PERL_SUBVERSION < 68 ))
+/* Fetches the SV that keeps the per-interpreter data. */
+#define dMY_CXT_SV \
+ SV *my_cxt_sv = get_sv(MY_CXT_KEY, FALSE)
+#else /* >= perl5.004_68 */
+#define dMY_CXT_SV \
+ SV *my_cxt_sv = *hv_fetch(PL_modglobal, MY_CXT_KEY, \
+ sizeof(MY_CXT_KEY)-1, TRUE)
+#endif /* < perl5.004_68 */
+
+/* This declaration should be used within all functions that use the
+ * interpreter-local data. */
+#define dMY_CXT \
+ dMY_CXT_SV; \
+ my_cxt_t *my_cxtp = INT2PTR(my_cxt_t*,SvUV(my_cxt_sv))
+
+/* Creates and zeroes the per-interpreter data.
+ * (We allocate my_cxtp in a Perl SV so that it will be released when
+ * the interpreter goes away.) */
+#define MY_CXT_INIT \
+ dMY_CXT_SV; \
+ /* newSV() allocates one more than needed */ \
+ my_cxt_t *my_cxtp = (my_cxt_t*)SvPVX(newSV(sizeof(my_cxt_t)-1));\
+ Zero(my_cxtp, 1, my_cxt_t); \
+ sv_setuv(my_cxt_sv, PTR2UV(my_cxtp))
+
+/* This macro must be used to access members of the my_cxt_t structure.
+ * e.g. MYCXT.some_data */
+#define MY_CXT (*my_cxtp)
+
+/* Judicious use of these macros can reduce the number of times dMY_CXT
+ * is used. Use is similar to pTHX, aTHX etc. */
+#define pMY_CXT my_cxt_t *my_cxtp
+#define pMY_CXT_ pMY_CXT,
+#define _pMY_CXT ,pMY_CXT
+#define aMY_CXT my_cxtp
+#define aMY_CXT_ aMY_CXT,
+#define _aMY_CXT ,aMY_CXT
+
+#endif /* START_MY_CXT */
+
+#ifndef MY_CXT_CLONE
+/* Clones the per-interpreter data. */
+#define MY_CXT_CLONE \
+ dMY_CXT_SV; \
+ my_cxt_t *my_cxtp = (my_cxt_t*)SvPVX(newSV(sizeof(my_cxt_t)-1));\
+ Copy(INT2PTR(my_cxt_t*, SvUV(my_cxt_sv)), my_cxtp, 1, my_cxt_t);\
+ sv_setuv(my_cxt_sv, PTR2UV(my_cxtp))
+#endif
+
+#else /* single interpreter */
+
+#ifndef START_MY_CXT
+
+#define START_MY_CXT static my_cxt_t my_cxt;
+#define dMY_CXT_SV dNOOP
+#define dMY_CXT dNOOP
+#define MY_CXT_INIT NOOP
+#define MY_CXT my_cxt
+
+#define pMY_CXT void
+#define pMY_CXT_
+#define _pMY_CXT
+#define aMY_CXT
+#define aMY_CXT_
+#define _aMY_CXT
+
+#endif /* START_MY_CXT */
+
+#ifndef MY_CXT_CLONE
+#define MY_CXT_CLONE NOOP
+#endif
+
+#endif
+
+#ifndef IVdf
+# if IVSIZE == LONGSIZE
+# define IVdf "ld"
+# define UVuf "lu"
+# define UVof "lo"
+# define UVxf "lx"
+# define UVXf "lX"
+# else
+# if IVSIZE == INTSIZE
+# define IVdf "d"
+# define UVuf "u"
+# define UVof "o"
+# define UVxf "x"
+# define UVXf "X"
+# endif
+# endif
+#endif
+
+#ifndef NVef
+# if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE) && \
+ defined(PERL_PRIfldbl) /* Not very likely, but let's try anyway. */
+# define NVef PERL_PRIeldbl
+# define NVff PERL_PRIfldbl
+# define NVgf PERL_PRIgldbl
+# else
+# define NVef "e"
+# define NVff "f"
+# define NVgf "g"
+# endif
+#endif
+
+#ifndef SvPV_nolen
+
+#if defined(NEED_sv_2pv_nolen)
+static char * DPPP_(my_sv_2pv_nolen)(pTHX_ register SV *sv);
+static
+#else
+extern char * DPPP_(my_sv_2pv_nolen)(pTHX_ register SV *sv);
+#endif
+
+#ifdef sv_2pv_nolen
+# undef sv_2pv_nolen
+#endif
+#define sv_2pv_nolen(a) DPPP_(my_sv_2pv_nolen)(aTHX_ a)
+#define Perl_sv_2pv_nolen DPPP_(my_sv_2pv_nolen)
+
+#if defined(NEED_sv_2pv_nolen) || defined(NEED_sv_2pv_nolen_GLOBAL)
+
+char *
+DPPP_(my_sv_2pv_nolen)(pTHX_ register SV *sv)
+{
+ STRLEN n_a;
+ return sv_2pv(sv, &n_a);
+}
+
+#endif
+
+/* Hint: sv_2pv_nolen
+ * Use the SvPV_nolen() macro instead of sv_2pv_nolen().
+ */
+
+/* SvPV_nolen depends on sv_2pv_nolen */
+#define SvPV_nolen(sv) \
+ ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \
+ ? SvPVX(sv) : sv_2pv_nolen(sv))
+
+#endif
+
+#ifdef SvPVbyte
+
+/* Hint: SvPVbyte
+ * Does not work in perl-5.6.1, ppport.h implements a version
+ * borrowed from perl-5.7.3.
+ */
+
+#if ((PERL_VERSION < 7) || ((PERL_VERSION == 7) && (PERL_SUBVERSION < 0)))
+
+#if defined(NEED_sv_2pvbyte)
+static char * DPPP_(my_sv_2pvbyte)(pTHX_ register SV *sv, STRLEN *lp);
+static
+#else
+extern char * DPPP_(my_sv_2pvbyte)(pTHX_ register SV *sv, STRLEN *lp);
+#endif
+
+#ifdef sv_2pvbyte
+# undef sv_2pvbyte
+#endif
+#define sv_2pvbyte(a,b) DPPP_(my_sv_2pvbyte)(aTHX_ a,b)
+#define Perl_sv_2pvbyte DPPP_(my_sv_2pvbyte)
+
+#if defined(NEED_sv_2pvbyte) || defined(NEED_sv_2pvbyte_GLOBAL)
+
+char *
+DPPP_(my_sv_2pvbyte)(pTHX_ register SV *sv, STRLEN *lp)
+{
+ sv_utf8_downgrade(sv,0);
+ return SvPV(sv,*lp);
+}
+
+#endif
+
+/* Hint: sv_2pvbyte
+ * Use the SvPVbyte() macro instead of sv_2pvbyte().
+ */
+
+#undef SvPVbyte
+
+/* SvPVbyte depends on sv_2pvbyte */
+#define SvPVbyte(sv, lp) \
+ ((SvFLAGS(sv) & (SVf_POK|SVf_UTF8)) == (SVf_POK) \
+ ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_2pvbyte(sv, &lp))
+
+#endif
+
+#else
+
+# define SvPVbyte SvPV
+# define sv_2pvbyte sv_2pv
+
+#endif
+
+/* sv_2pvbyte_nolen depends on sv_2pv_nolen */
+#ifndef sv_2pvbyte_nolen
+# define sv_2pvbyte_nolen sv_2pv_nolen
+#endif
+
+/* Hint: sv_pvn
+ * Always use the SvPV() macro instead of sv_pvn().
+ */
+#ifndef sv_pvn
+# define sv_pvn(sv, len) SvPV(sv, len)
+#endif
+
+/* Hint: sv_pvn_force
+ * Always use the SvPV_force() macro instead of sv_pvn_force().
+ */
+#ifndef sv_pvn_force
+# define sv_pvn_force(sv, len) SvPV_force(sv, len)
+#endif
+
+#if ((PERL_VERSION > 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION >= 0))) && !defined(vnewSVpvf)
+#if defined(NEED_vnewSVpvf)
+static SV * DPPP_(my_vnewSVpvf)(pTHX_ const char * pat, va_list * args);
+static
+#else
+extern SV * DPPP_(my_vnewSVpvf)(pTHX_ const char * pat, va_list * args);
+#endif
+
+#ifdef vnewSVpvf
+# undef vnewSVpvf
+#endif
+#define vnewSVpvf(a,b) DPPP_(my_vnewSVpvf)(aTHX_ a,b)
+#define Perl_vnewSVpvf DPPP_(my_vnewSVpvf)
+
+#if defined(NEED_vnewSVpvf) || defined(NEED_vnewSVpvf_GLOBAL)
+
+SV *
+DPPP_(my_vnewSVpvf)(pTHX_ const char *pat, va_list *args)
+{
+ register SV *sv = newSV(0);
+ sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
+ return sv;
+}
+
+#endif
+#endif
+
+/* sv_vcatpvf depends on sv_vcatpvfn */
+#if ((PERL_VERSION > 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION >= 0))) && !defined(sv_vcatpvf)
+# define sv_vcatpvf(sv, pat, args) sv_vcatpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*))
+#endif
+
+/* sv_vsetpvf depends on sv_vsetpvfn */
+#if ((PERL_VERSION > 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION >= 0))) && !defined(sv_vsetpvf)
+# define sv_vsetpvf(sv, pat, args) sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*))
+#endif
+
+/* sv_catpvf_mg depends on sv_vcatpvfn, sv_catpvf_mg_nocontext */
+#if ((PERL_VERSION > 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION >= 0))) && !defined(sv_catpvf_mg)
+#if defined(NEED_sv_catpvf_mg)
+static void DPPP_(my_sv_catpvf_mg)(pTHX_ SV * sv, const char * pat, ...);
+static
+#else
+extern void DPPP_(my_sv_catpvf_mg)(pTHX_ SV * sv, const char * pat, ...);
+#endif
+
+#define Perl_sv_catpvf_mg DPPP_(my_sv_catpvf_mg)
+
+#if defined(NEED_sv_catpvf_mg) || defined(NEED_sv_catpvf_mg_GLOBAL)
+
+void
+DPPP_(my_sv_catpvf_mg)(pTHX_ SV *sv, const char *pat, ...)
+{
+ va_list args;
+ va_start(args, pat);
+ sv_vcatpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*));
+ SvSETMAGIC(sv);
+ va_end(args);
+}
+
+#endif
+#endif
+
+/* sv_catpvf_mg_nocontext depends on sv_vcatpvfn */
+#ifdef PERL_IMPLICIT_CONTEXT
+#if ((PERL_VERSION > 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION >= 0))) && !defined(sv_catpvf_mg_nocontext)
+#if defined(NEED_sv_catpvf_mg_nocontext)
+static void DPPP_(my_sv_catpvf_mg_nocontext)(SV * sv, const char * pat, ...);
+static
+#else
+extern void DPPP_(my_sv_catpvf_mg_nocontext)(SV * sv, const char * pat, ...);
+#endif
+
+#define sv_catpvf_mg_nocontext DPPP_(my_sv_catpvf_mg_nocontext)
+#define Perl_sv_catpvf_mg_nocontext DPPP_(my_sv_catpvf_mg_nocontext)
+
+#if defined(NEED_sv_catpvf_mg_nocontext) || defined(NEED_sv_catpvf_mg_nocontext_GLOBAL)
+
+void
+DPPP_(my_sv_catpvf_mg_nocontext)(SV *sv, const char *pat, ...)
+{
+ dTHX;
+ va_list args;
+ va_start(args, pat);
+ sv_vcatpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*));
+ SvSETMAGIC(sv);
+ va_end(args);
+}
+
+#endif
+#endif
+#endif
+
+#ifndef sv_catpvf_mg
+# ifdef PERL_IMPLICIT_CONTEXT
+# define sv_catpvf_mg Perl_sv_catpvf_mg_nocontext
+# else
+# define sv_catpvf_mg Perl_sv_catpvf_mg
+# endif
+#endif
+
+/* sv_vcatpvf_mg depends on sv_vcatpvfn */
+#if ((PERL_VERSION > 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION >= 0))) && !defined(sv_vcatpvf_mg)
+# define sv_vcatpvf_mg(sv, pat, args) \
+ STMT_START { \
+ sv_vcatpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*)); \
+ SvSETMAGIC(sv); \
+ } STMT_END
+#endif
+
+/* sv_setpvf_mg depends on sv_vsetpvfn, sv_setpvf_mg_nocontext */
+#if ((PERL_VERSION > 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION >= 0))) && !defined(sv_setpvf_mg)
+#if defined(NEED_sv_setpvf_mg)
+static void DPPP_(my_sv_setpvf_mg)(pTHX_ SV * sv, const char * pat, ...);
+static
+#else
+extern void DPPP_(my_sv_setpvf_mg)(pTHX_ SV * sv, const char * pat, ...);
+#endif
+
+#define Perl_sv_setpvf_mg DPPP_(my_sv_setpvf_mg)
+
+#if defined(NEED_sv_setpvf_mg) || defined(NEED_sv_setpvf_mg_GLOBAL)
+
+void
+DPPP_(my_sv_setpvf_mg)(pTHX_ SV *sv, const char *pat, ...)
+{
+ va_list args;
+ va_start(args, pat);
+ sv_vsetpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*));
+ SvSETMAGIC(sv);
+ va_end(args);
+}
+
+#endif
+#endif
+
+/* sv_setpvf_mg_nocontext depends on sv_vsetpvfn */
+#ifdef PERL_IMPLICIT_CONTEXT
+#if ((PERL_VERSION > 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION >= 0))) && !defined(sv_setpvf_mg_nocontext)
+#if defined(NEED_sv_setpvf_mg_nocontext)
+static void DPPP_(my_sv_setpvf_mg_nocontext)(SV * sv, const char * pat, ...);
+static
+#else
+extern void DPPP_(my_sv_setpvf_mg_nocontext)(SV * sv, const char * pat, ...);
+#endif
+
+#define sv_setpvf_mg_nocontext DPPP_(my_sv_setpvf_mg_nocontext)
+#define Perl_sv_setpvf_mg_nocontext DPPP_(my_sv_setpvf_mg_nocontext)
+
+#if defined(NEED_sv_setpvf_mg_nocontext) || defined(NEED_sv_setpvf_mg_nocontext_GLOBAL)
+
+void
+DPPP_(my_sv_setpvf_mg_nocontext)(SV *sv, const char *pat, ...)
+{
+ dTHX;
+ va_list args;
+ va_start(args, pat);
+ sv_vsetpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*));
+ SvSETMAGIC(sv);
+ va_end(args);
+}
+
+#endif
+#endif
+#endif
+
+#ifndef sv_setpvf_mg
+# ifdef PERL_IMPLICIT_CONTEXT
+# define sv_setpvf_mg Perl_sv_setpvf_mg_nocontext
+# else
+# define sv_setpvf_mg Perl_sv_setpvf_mg
+# endif
+#endif
+
+/* sv_vsetpvf_mg depends on sv_vsetpvfn */
+#if ((PERL_VERSION > 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION >= 0))) && !defined(sv_vsetpvf_mg)
+# define sv_vsetpvf_mg(sv, pat, args) \
+ STMT_START { \
+ sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*)); \
+ SvSETMAGIC(sv); \
+ } STMT_END
+#endif
+#ifndef SvGETMAGIC
+# define SvGETMAGIC(x) STMT_START { if (SvGMAGICAL(x)) mg_get(x); } STMT_END
+#endif
+#ifndef PERL_MAGIC_sv
+# define PERL_MAGIC_sv '\0'
+#endif
+
+#ifndef PERL_MAGIC_overload
+# define PERL_MAGIC_overload 'A'
+#endif
+
+#ifndef PERL_MAGIC_overload_elem
+# define PERL_MAGIC_overload_elem 'a'
+#endif
+
+#ifndef PERL_MAGIC_overload_table
+# define PERL_MAGIC_overload_table 'c'
+#endif
+
+#ifndef PERL_MAGIC_bm
+# define PERL_MAGIC_bm 'B'
+#endif
+
+#ifndef PERL_MAGIC_regdata
+# define PERL_MAGIC_regdata 'D'
+#endif
+
+#ifndef PERL_MAGIC_regdatum
+# define PERL_MAGIC_regdatum 'd'
+#endif
+
+#ifndef PERL_MAGIC_env
+# define PERL_MAGIC_env 'E'
+#endif
+
+#ifndef PERL_MAGIC_envelem
+# define PERL_MAGIC_envelem 'e'
+#endif
+
+#ifndef PERL_MAGIC_fm
+# define PERL_MAGIC_fm 'f'
+#endif
+
+#ifndef PERL_MAGIC_regex_global
+# define PERL_MAGIC_regex_global 'g'
+#endif
+
+#ifndef PERL_MAGIC_isa
+# define PERL_MAGIC_isa 'I'
+#endif
+
+#ifndef PERL_MAGIC_isaelem
+# define PERL_MAGIC_isaelem 'i'
+#endif
+
+#ifndef PERL_MAGIC_nkeys
+# define PERL_MAGIC_nkeys 'k'
+#endif
+
+#ifndef PERL_MAGIC_dbfile
+# define PERL_MAGIC_dbfile 'L'
+#endif
+
+#ifndef PERL_MAGIC_dbline
+# define PERL_MAGIC_dbline 'l'
+#endif
+
+#ifndef PERL_MAGIC_mutex
+# define PERL_MAGIC_mutex 'm'
+#endif
+
+#ifndef PERL_MAGIC_shared
+# define PERL_MAGIC_shared 'N'
+#endif
+
+#ifndef PERL_MAGIC_shared_scalar
+# define PERL_MAGIC_shared_scalar 'n'
+#endif
+
+#ifndef PERL_MAGIC_collxfrm
+# define PERL_MAGIC_collxfrm 'o'
+#endif
+
+#ifndef PERL_MAGIC_tied
+# define PERL_MAGIC_tied 'P'
+#endif
+
+#ifndef PERL_MAGIC_tiedelem
+# define PERL_MAGIC_tiedelem 'p'
+#endif
+
+#ifndef PERL_MAGIC_tiedscalar
+# define PERL_MAGIC_tiedscalar 'q'
+#endif
+
+#ifndef PERL_MAGIC_qr
+# define PERL_MAGIC_qr 'r'
+#endif
+
+#ifndef PERL_MAGIC_sig
+# define PERL_MAGIC_sig 'S'
+#endif
+
+#ifndef PERL_MAGIC_sigelem
+# define PERL_MAGIC_sigelem 's'
+#endif
+
+#ifndef PERL_MAGIC_taint
+# define PERL_MAGIC_taint 't'
+#endif
+
+#ifndef PERL_MAGIC_uvar
+# define PERL_MAGIC_uvar 'U'
+#endif
+
+#ifndef PERL_MAGIC_uvar_elem
+# define PERL_MAGIC_uvar_elem 'u'
+#endif
+
+#ifndef PERL_MAGIC_vstring
+# define PERL_MAGIC_vstring 'V'
+#endif
+
+#ifndef PERL_MAGIC_vec
+# define PERL_MAGIC_vec 'v'
+#endif
+
+#ifndef PERL_MAGIC_utf8
+# define PERL_MAGIC_utf8 'w'
+#endif
+
+#ifndef PERL_MAGIC_substr
+# define PERL_MAGIC_substr 'x'
+#endif
+
+#ifndef PERL_MAGIC_defelem
+# define PERL_MAGIC_defelem 'y'
+#endif
+
+#ifndef PERL_MAGIC_glob
+# define PERL_MAGIC_glob '*'
+#endif
+
+#ifndef PERL_MAGIC_arylen
+# define PERL_MAGIC_arylen '#'
+#endif
+
+#ifndef PERL_MAGIC_pos
+# define PERL_MAGIC_pos '.'
+#endif
+
+#ifndef PERL_MAGIC_backref
+# define PERL_MAGIC_backref '<'
+#endif
+
+#ifndef PERL_MAGIC_ext
+# define PERL_MAGIC_ext '~'
+#endif
+
+/* That's the best we can do... */
+#ifndef SvPV_force_nomg
+# define SvPV_force_nomg SvPV_force
+#endif
+
+#ifndef SvPV_nomg
+# define SvPV_nomg SvPV
+#endif
+
+#ifndef sv_catpvn_nomg
+# define sv_catpvn_nomg sv_catpvn
+#endif
+
+#ifndef sv_catsv_nomg
+# define sv_catsv_nomg sv_catsv
+#endif
+
+#ifndef sv_setsv_nomg
+# define sv_setsv_nomg sv_setsv
+#endif
+
+#ifndef sv_pvn_nomg
+# define sv_pvn_nomg sv_pvn
+#endif
+
+#ifndef SvIV_nomg
+# define SvIV_nomg SvIV
+#endif
+
+#ifndef SvUV_nomg
+# define SvUV_nomg SvUV
+#endif
+
+#ifndef sv_catpv_mg
+# define sv_catpv_mg(sv, ptr) \
+ STMT_START { \
+ SV *TeMpSv = sv; \
+ sv_catpv(TeMpSv,ptr); \
+ SvSETMAGIC(TeMpSv); \
+ } STMT_END
+#endif
+
+#ifndef sv_catpvn_mg
+# define sv_catpvn_mg(sv, ptr, len) \
+ STMT_START { \
+ SV *TeMpSv = sv; \
+ sv_catpvn(TeMpSv,ptr,len); \
+ SvSETMAGIC(TeMpSv); \
+ } STMT_END
+#endif
+
+#ifndef sv_catsv_mg
+# define sv_catsv_mg(dsv, ssv) \
+ STMT_START { \
+ SV *TeMpSv = dsv; \
+ sv_catsv(TeMpSv,ssv); \
+ SvSETMAGIC(TeMpSv); \
+ } STMT_END
+#endif
+
+#ifndef sv_setiv_mg
+# define sv_setiv_mg(sv, i) \
+ STMT_START { \
+ SV *TeMpSv = sv; \
+ sv_setiv(TeMpSv,i); \
+ SvSETMAGIC(TeMpSv); \
+ } STMT_END
+#endif
+
+#ifndef sv_setnv_mg
+# define sv_setnv_mg(sv, num) \
+ STMT_START { \
+ SV *TeMpSv = sv; \
+ sv_setnv(TeMpSv,num); \
+ SvSETMAGIC(TeMpSv); \
+ } STMT_END
+#endif
+
+#ifndef sv_setpv_mg
+# define sv_setpv_mg(sv, ptr) \
+ STMT_START { \
+ SV *TeMpSv = sv; \
+ sv_setpv(TeMpSv,ptr); \
+ SvSETMAGIC(TeMpSv); \
+ } STMT_END
+#endif
+
+#ifndef sv_setpvn_mg
+# define sv_setpvn_mg(sv, ptr, len) \
+ STMT_START { \
+ SV *TeMpSv = sv; \
+ sv_setpvn(TeMpSv,ptr,len); \
+ SvSETMAGIC(TeMpSv); \
+ } STMT_END
+#endif
+
+#ifndef sv_setsv_mg
+# define sv_setsv_mg(dsv, ssv) \
+ STMT_START { \
+ SV *TeMpSv = dsv; \
+ sv_setsv(TeMpSv,ssv); \
+ SvSETMAGIC(TeMpSv); \
+ } STMT_END
+#endif
+
+#ifndef sv_setuv_mg
+# define sv_setuv_mg(sv, i) \
+ STMT_START { \
+ SV *TeMpSv = sv; \
+ sv_setuv(TeMpSv,i); \
+ SvSETMAGIC(TeMpSv); \
+ } STMT_END
+#endif
+
+#ifndef sv_usepvn_mg
+# define sv_usepvn_mg(sv, ptr, len) \
+ STMT_START { \
+ SV *TeMpSv = sv; \
+ sv_usepvn(TeMpSv,ptr,len); \
+ SvSETMAGIC(TeMpSv); \
+ } STMT_END
+#endif
+
+#ifdef USE_ITHREADS
+#ifndef CopFILE
+# define CopFILE(c) ((c)->cop_file)
+#endif
+
+#ifndef CopFILEGV
+# define CopFILEGV(c) (CopFILE(c) ? gv_fetchfile(CopFILE(c)) : Nullgv)
+#endif
+
+#ifndef CopFILE_set
+# define CopFILE_set(c,pv) ((c)->cop_file = savepv(pv))
+#endif
+
+#ifndef CopFILESV
+# define CopFILESV(c) (CopFILE(c) ? GvSV(gv_fetchfile(CopFILE(c))) : Nullsv)
+#endif
+
+#ifndef CopFILEAV
+# define CopFILEAV(c) (CopFILE(c) ? GvAV(gv_fetchfile(CopFILE(c))) : Nullav)
+#endif
+
+#ifndef CopSTASHPV
+# define CopSTASHPV(c) ((c)->cop_stashpv)
+#endif
+
+#ifndef CopSTASHPV_set
+# define CopSTASHPV_set(c,pv) ((c)->cop_stashpv = ((pv) ? savepv(pv) : Nullch))
+#endif
+
+#ifndef CopSTASH
+# define CopSTASH(c) (CopSTASHPV(c) ? gv_stashpv(CopSTASHPV(c),GV_ADD) : Nullhv)
+#endif
+
+#ifndef CopSTASH_set
+# define CopSTASH_set(c,hv) CopSTASHPV_set(c, (hv) ? HvNAME(hv) : Nullch)
+#endif
+
+#ifndef CopSTASH_eq
+# define CopSTASH_eq(c,hv) ((hv) && (CopSTASHPV(c) == HvNAME(hv) \
+ || (CopSTASHPV(c) && HvNAME(hv) \
+ && strEQ(CopSTASHPV(c), HvNAME(hv)))))
+#endif
+
+#else
+#ifndef CopFILEGV
+# define CopFILEGV(c) ((c)->cop_filegv)
+#endif
+
+#ifndef CopFILEGV_set
+# define CopFILEGV_set(c,gv) ((c)->cop_filegv = (GV*)SvREFCNT_inc(gv))
+#endif
+
+#ifndef CopFILE_set
+# define CopFILE_set(c,pv) CopFILEGV_set((c), gv_fetchfile(pv))
+#endif
+
+#ifndef CopFILESV
+# define CopFILESV(c) (CopFILEGV(c) ? GvSV(CopFILEGV(c)) : Nullsv)
+#endif
+
+#ifndef CopFILEAV
+# define CopFILEAV(c) (CopFILEGV(c) ? GvAV(CopFILEGV(c)) : Nullav)
+#endif
+
+#ifndef CopFILE
+# define CopFILE(c) (CopFILESV(c) ? SvPVX(CopFILESV(c)) : Nullch)
+#endif
+
+#ifndef CopSTASH
+# define CopSTASH(c) ((c)->cop_stash)
+#endif
+
+#ifndef CopSTASH_set
+# define CopSTASH_set(c,hv) ((c)->cop_stash = (hv))
+#endif
+
+#ifndef CopSTASHPV
+# define CopSTASHPV(c) (CopSTASH(c) ? HvNAME(CopSTASH(c)) : Nullch)
+#endif
+
+#ifndef CopSTASHPV_set
+# define CopSTASHPV_set(c,pv) CopSTASH_set((c), gv_stashpv(pv,GV_ADD))
+#endif
+
+#ifndef CopSTASH_eq
+# define CopSTASH_eq(c,hv) (CopSTASH(c) == (hv))
+#endif
+
+#endif /* USE_ITHREADS */
+#ifndef IN_PERL_COMPILETIME
+# define IN_PERL_COMPILETIME (PL_curcop == &PL_compiling)
+#endif
+
+#ifndef IN_LOCALE_RUNTIME
+# define IN_LOCALE_RUNTIME (PL_curcop->op_private & HINT_LOCALE)
+#endif
+
+#ifndef IN_LOCALE_COMPILETIME
+# define IN_LOCALE_COMPILETIME (PL_hints & HINT_LOCALE)
+#endif
+
+#ifndef IN_LOCALE
+# define IN_LOCALE (IN_PERL_COMPILETIME ? IN_LOCALE_COMPILETIME : IN_LOCALE_RUNTIME)
+#endif
+#ifndef IS_NUMBER_IN_UV
+# define IS_NUMBER_IN_UV 0x01
+#endif
+
+#ifndef IS_NUMBER_GREATER_THAN_UV_MAX
+# define IS_NUMBER_GREATER_THAN_UV_MAX 0x02
+#endif
+
+#ifndef IS_NUMBER_NOT_INT
+# define IS_NUMBER_NOT_INT 0x04
+#endif
+
+#ifndef IS_NUMBER_NEG
+# define IS_NUMBER_NEG 0x08
+#endif
+
+#ifndef IS_NUMBER_INFINITY
+# define IS_NUMBER_INFINITY 0x10
+#endif
+
+#ifndef IS_NUMBER_NAN
+# define IS_NUMBER_NAN 0x20
+#endif
+
+/* GROK_NUMERIC_RADIX depends on grok_numeric_radix */
+#ifndef GROK_NUMERIC_RADIX
+# define GROK_NUMERIC_RADIX(sp, send) grok_numeric_radix(sp, send)
+#endif
+#ifndef PERL_SCAN_GREATER_THAN_UV_MAX
+# define PERL_SCAN_GREATER_THAN_UV_MAX 0x02
+#endif
+
+#ifndef PERL_SCAN_SILENT_ILLDIGIT
+# define PERL_SCAN_SILENT_ILLDIGIT 0x04
+#endif
+
+#ifndef PERL_SCAN_ALLOW_UNDERSCORES
+# define PERL_SCAN_ALLOW_UNDERSCORES 0x01
+#endif
+
+#ifndef PERL_SCAN_DISALLOW_PREFIX
+# define PERL_SCAN_DISALLOW_PREFIX 0x02
+#endif
+
+#ifndef grok_numeric_radix
+#if defined(NEED_grok_numeric_radix)
+static bool DPPP_(my_grok_numeric_radix)(pTHX_ const char ** sp, const char * send);
+static
+#else
+extern bool DPPP_(my_grok_numeric_radix)(pTHX_ const char ** sp, const char * send);
+#endif
+
+#ifdef grok_numeric_radix
+# undef grok_numeric_radix
+#endif
+#define grok_numeric_radix(a,b) DPPP_(my_grok_numeric_radix)(aTHX_ a,b)
+#define Perl_grok_numeric_radix DPPP_(my_grok_numeric_radix)
+
+#if defined(NEED_grok_numeric_radix) || defined(NEED_grok_numeric_radix_GLOBAL)
+bool
+DPPP_(my_grok_numeric_radix)(pTHX_ const char **sp, const char *send)
+{
+#ifdef USE_LOCALE_NUMERIC
+#ifdef PL_numeric_radix_sv
+ if (PL_numeric_radix_sv && IN_LOCALE) {
+ STRLEN len;
+ char* radix = SvPV(PL_numeric_radix_sv, len);
+ if (*sp + len <= send && memEQ(*sp, radix, len)) {
+ *sp += len;
+ return TRUE;
+ }
+ }
+#else
+ /* older perls don't have PL_numeric_radix_sv so the radix
+ * must manually be requested from locale.h
+ */
+#include <locale.h>
+ dTHR; /* needed for older threaded perls */
+ struct lconv *lc = localeconv();
+ char *radix = lc->decimal_point;
+ if (radix && IN_LOCALE) {
+ STRLEN len = strlen(radix);
+ if (*sp + len <= send && memEQ(*sp, radix, len)) {
+ *sp += len;
+ return TRUE;
+ }
+ }
+#endif /* PERL_VERSION */
+#endif /* USE_LOCALE_NUMERIC */
+ /* always try "." if numeric radix didn't match because
+ * we may have data from different locales mixed */
+ if (*sp < send && **sp == '.') {
+ ++*sp;
+ return TRUE;
+ }
+ return FALSE;
+}
+#endif
+#endif
+
+/* grok_number depends on grok_numeric_radix */
+
+#ifndef grok_number
+#if defined(NEED_grok_number)
+static int DPPP_(my_grok_number)(pTHX_ const char * pv, STRLEN len, UV * valuep);
+static
+#else
+extern int DPPP_(my_grok_number)(pTHX_ const char * pv, STRLEN len, UV * valuep);
+#endif
+
+#ifdef grok_number
+# undef grok_number
+#endif
+#define grok_number(a,b,c) DPPP_(my_grok_number)(aTHX_ a,b,c)
+#define Perl_grok_number DPPP_(my_grok_number)
+
+#if defined(NEED_grok_number) || defined(NEED_grok_number_GLOBAL)
+int
+DPPP_(my_grok_number)(pTHX_ const char *pv, STRLEN len, UV *valuep)
+{
+ const char *s = pv;
+ const char *send = pv + len;
+ const UV max_div_10 = UV_MAX / 10;
+ const char max_mod_10 = UV_MAX % 10;
+ int numtype = 0;
+ int sawinf = 0;
+ int sawnan = 0;
+
+ while (s < send && isSPACE(*s))
+ s++;
+ if (s == send) {
+ return 0;
+ } else if (*s == '-') {
+ s++;
+ numtype = IS_NUMBER_NEG;
+ }
+ else if (*s == '+')
+ s++;
+
+ if (s == send)
+ return 0;
+
+ /* next must be digit or the radix separator or beginning of infinity */
+ if (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 (digit >= 0 && digit <= 9) {
+ value = value * 10 + digit;
+ if (++s < send) {
+ digit = *s - '0';
+ if (digit >= 0 && digit <= 9) {
+ value = value * 10 + digit;
+ if (++s < send) {
+ digit = *s - '0';
+ if (digit >= 0 && digit <= 9) {
+ value = value * 10 + digit;
+ if (++s < send) {
+ digit = *s - '0';
+ if (digit >= 0 && digit <= 9) {
+ value = value * 10 + digit;
+ if (++s < send) {
+ digit = *s - '0';
+ if (digit >= 0 && digit <= 9) {
+ value = value * 10 + digit;
+ if (++s < send) {
+ digit = *s - '0';
+ if (digit >= 0 && digit <= 9) {
+ value = value * 10 + digit;
+ if (++s < send) {
+ digit = *s - '0';
+ if (digit >= 0 && digit <= 9) {
+ value = value * 10 + digit;
+ if (++s < send) {
+ digit = *s - '0';
+ if (digit >= 0 && digit <= 9) {
+ value = value * 10 + digit;
+ if (++s < send) {
+ /* Now got 9 digits, so need to check
+ each time for overflow. */
+ digit = *s - '0';
+ while (digit >= 0 && digit <= 9
+ && (value < max_div_10
+ || (value == max_div_10
+ && digit <= max_mod_10))) {
+ value = value * 10 + digit;
+ if (++s < send)
+ digit = *s - '0';
+ else
+ break;
+ }
+ if (digit >= 0 && digit <= 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;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ numtype |= IS_NUMBER_IN_UV;
+ if (valuep)
+ *valuep = value;
+
+ skip_value:
+ if (GROK_NUMERIC_RADIX(&s, send)) {
+ numtype |= IS_NUMBER_NOT_INT;
+ while (s < send && isDIGIT(*s)) /* optional digits after the radix */
+ s++;
+ }
+ }
+ 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 */
+ if (s < send && isDIGIT(*s)) {
+ do {
+ s++;
+ } while (s < send && isDIGIT(*s));
+ if (valuep) {
+ /* integer approximation is valid - it's 0. */
+ *valuep = 0;
+ }
+ }
+ else
+ return 0;
+ } else if (*s == 'I' || *s == 'i') {
+ s++; if (s == send || (*s != 'N' && *s != 'n')) return 0;
+ s++; if (s == send || (*s != 'F' && *s != 'f')) return 0;
+ s++; if (s < send && (*s == 'I' || *s == 'i')) {
+ s++; if (s == send || (*s != 'N' && *s != 'n')) return 0;
+ s++; if (s == send || (*s != 'I' && *s != 'i')) return 0;
+ s++; if (s == send || (*s != 'T' && *s != 't')) return 0;
+ s++; if (s == send || (*s != 'Y' && *s != 'y')) return 0;
+ s++;
+ }
+ sawinf = 1;
+ } else if (*s == 'N' || *s == 'n') {
+ /* XXX TODO: There are signaling NaNs and quiet NaNs. */
+ s++; if (s == send || (*s != 'A' && *s != 'a')) return 0;
+ s++; if (s == send || (*s != 'N' && *s != 'n')) return 0;
+ s++;
+ sawnan = 1;
+ } else
+ return 0;
+
+ if (sawinf) {
+ numtype &= IS_NUMBER_NEG; /* Keep track of sign */
+ numtype |= IS_NUMBER_INFINITY | IS_NUMBER_NOT_INT;
+ } else if (sawnan) {
+ numtype &= IS_NUMBER_NEG; /* Keep track of sign */
+ numtype |= IS_NUMBER_NAN | IS_NUMBER_NOT_INT;
+ } else if (s < send) {
+ /* we can have an optional exponent part */
+ if (*s == 'e' || *s == 'E') {
+ /* The only flag we keep is sign. Blow away any "it's UV" */
+ numtype &= IS_NUMBER_NEG;
+ numtype |= IS_NUMBER_NOT_INT;
+ s++;
+ if (s < send && (*s == '-' || *s == '+'))
+ s++;
+ if (s < send && isDIGIT(*s)) {
+ do {
+ s++;
+ } while (s < send && isDIGIT(*s));
+ }
+ else
+ return 0;
+ }
+ }
+ while (s < send && isSPACE(*s))
+ s++;
+ if (s >= send)
+ return numtype;
+ if (len == 10 && memEQ(pv, "0 but true", 10)) {
+ if (valuep)
+ *valuep = 0;
+ return IS_NUMBER_IN_UV;
+ }
+ return 0;
+}
+#endif
+#endif
+
+/*
+ * The grok_* routines have been modified to use warn() instead of
+ * Perl_warner(). Also, 'hexdigit' was the former name of PL_hexdigit,
+ * which is why the stack variable has been renamed to 'xdigit'.
+ */
+
+#ifndef grok_bin
+#if defined(NEED_grok_bin)
+static UV DPPP_(my_grok_bin)(pTHX_ char *start, STRLEN *len_p, I32 *flags, NV *result);
+static
+#else
+extern UV DPPP_(my_grok_bin)(pTHX_ char *start, STRLEN *len_p, I32 *flags, NV *result);
+#endif
+
+#ifdef grok_bin
+# undef grok_bin
+#endif
+#define grok_bin(a,b,c,d) DPPP_(my_grok_bin)(aTHX_ a,b,c,d)
+#define Perl_grok_bin DPPP_(my_grok_bin)
+
+#if defined(NEED_grok_bin) || defined(NEED_grok_bin_GLOBAL)
+UV
+DPPP_(my_grok_bin)(pTHX_ 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;
+ bool allow_underscores = *flags & PERL_SCAN_ALLOW_UNDERSCORES;
+ bool overflowed = FALSE;
+
+ 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 (s[0] == 'b') {
+ s++;
+ len--;
+ }
+ else if (len >= 2 && s[0] == '0' && s[1] == 'b') {
+ s+=2;
+ len-=2;
+ }
+ }
+ }
+
+ for (; len-- && *s; s++) {
+ char bit = *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. */
+ warn("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))
+ warn("Illegal binary digit '%c' ignored", *s);
+ break;
+ }
+
+ if ( ( overflowed && value_nv > 4294967295.0)
+#if UVSIZE > 4
+ || (!overflowed && value > 0xffffffff )
+#endif
+ ) {
+ warn("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;
+}
+#endif
+#endif
+
+#ifndef grok_hex
+#if defined(NEED_grok_hex)
+static UV DPPP_(my_grok_hex)(pTHX_ char *start, STRLEN *len_p, I32 *flags, NV *result);
+static
+#else
+extern UV DPPP_(my_grok_hex)(pTHX_ char *start, STRLEN *len_p, I32 *flags, NV *result);
+#endif
+
+#ifdef grok_hex
+# undef grok_hex
+#endif
+#define grok_hex(a,b,c,d) DPPP_(my_grok_hex)(aTHX_ a,b,c,d)
+#define Perl_grok_hex DPPP_(my_grok_hex)
+
+#if defined(NEED_grok_hex) || defined(NEED_grok_hex_GLOBAL)
+UV
+DPPP_(my_grok_hex)(pTHX_ 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;
+ bool allow_underscores = *flags & PERL_SCAN_ALLOW_UNDERSCORES;
+ bool overflowed = FALSE;
+ const char *xdigit;
+
+ 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 (s[0] == 'x') {
+ s++;
+ len--;
+ }
+ else if (len >= 2 && s[0] == '0' && s[1] == 'x') {
+ s+=2;
+ len-=2;
+ }
+ }
+ }
+
+ for (; len-- && *s; s++) {
+ xdigit = strchr((char *) PL_hexdigit, *s);
+ if (xdigit) {
+ /* 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 - PL_hexdigit) & 15);
+ continue;
+ }
+ warn("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 - PL_hexdigit) & 15);
+ continue;
+ }
+ if (*s == '_' && len && allow_underscores && s[1]
+ && (xdigit = strchr((char *) PL_hexdigit, s[1])))
+ {
+ --len;
+ ++s;
+ goto redo;
+ }
+ if (!(*flags & PERL_SCAN_SILENT_ILLDIGIT))
+ warn("Illegal hexadecimal digit '%c' ignored", *s);
+ break;
+ }
+
+ if ( ( overflowed && value_nv > 4294967295.0)
+#if UVSIZE > 4
+ || (!overflowed && value > 0xffffffff )
+#endif
+ ) {
+ warn("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;
+}
+#endif
+#endif
+
+#ifndef grok_oct
+#if defined(NEED_grok_oct)
+static UV DPPP_(my_grok_oct)(pTHX_ char *start, STRLEN *len_p, I32 *flags, NV *result);
+static
+#else
+extern UV DPPP_(my_grok_oct)(pTHX_ char *start, STRLEN *len_p, I32 *flags, NV *result);
+#endif
+
+#ifdef grok_oct
+# undef grok_oct
+#endif
+#define grok_oct(a,b,c,d) DPPP_(my_grok_oct)(aTHX_ a,b,c,d)
+#define Perl_grok_oct DPPP_(my_grok_oct)
+
+#if defined(NEED_grok_oct) || defined(NEED_grok_oct_GLOBAL)
+UV
+DPPP_(my_grok_oct)(pTHX_ 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_8 = UV_MAX / 8;
+ bool allow_underscores = *flags & PERL_SCAN_ALLOW_UNDERSCORES;
+ bool overflowed = FALSE;
+
+ for (; len-- && *s; s++) {
+ /* gcc 2.95 optimiser not smart enough to figure that this subtraction
+ out front allows slicker code. */
+ int digit = *s - '0';
+ if (digit >= 0 && digit <= 7) {
+ /* 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.
+ */
+ redo:
+ if (!overflowed) {
+ if (value <= max_div_8) {
+ value = (value << 3) | digit;
+ continue;
+ }
+ /* Bah. We're just overflowed. */
+ warn("Integer overflow in octal number");
+ overflowed = TRUE;
+ value_nv = (NV) value;
+ }
+ 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)digit;
+ continue;
+ }
+ if (digit == ('_' - '0') && len && allow_underscores
+ && (digit = s[1] - '0') && (digit >= 0 && digit <= 7))
+ {
+ --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 iff
+ * someone seems to want to use the digits eight and nine). */
+ if (digit == 8 || digit == 9) {
+ if (!(*flags & PERL_SCAN_SILENT_ILLDIGIT))
+ warn("Illegal octal digit '%c' ignored", *s);
+ }
+ break;
+ }
+
+ if ( ( overflowed && value_nv > 4294967295.0)
+#if UVSIZE > 4
+ || (!overflowed && value > 0xffffffff )
+#endif
+ ) {
+ warn("Octal number > 037777777777 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;
+}
+#endif
+#endif
+
+#ifdef NO_XSLOCKS
+# ifdef dJMPENV
+# define dXCPT dJMPENV; int rEtV = 0
+# define XCPT_TRY_START JMPENV_PUSH(rEtV); if (rEtV == 0)
+# define XCPT_TRY_END JMPENV_POP;
+# define XCPT_CATCH if (rEtV != 0)
+# define XCPT_RETHROW JMPENV_JUMP(rEtV)
+# else
+# define dXCPT Sigjmp_buf oldTOP; int rEtV = 0
+# define XCPT_TRY_START Copy(top_env, oldTOP, 1, Sigjmp_buf); rEtV = Sigsetjmp(top_env, 1); if (rEtV == 0)
+# define XCPT_TRY_END Copy(oldTOP, top_env, 1, Sigjmp_buf);
+# define XCPT_CATCH if (rEtV != 0)
+# define XCPT_RETHROW Siglongjmp(top_env, rEtV)
+# endif
+#endif
+
+#endif /* _P_P_PORTABILITY_H_ */
+
+/* End of File ppport.h */
diff --git a/gnu/usr.bin/perl/ext/Data/Dumper/t/bugs.t b/gnu/usr.bin/perl/ext/Data/Dumper/t/bugs.t
new file mode 100755
index 00000000000..faa78dee369
--- /dev/null
+++ b/gnu/usr.bin/perl/ext/Data/Dumper/t/bugs.t
@@ -0,0 +1,35 @@
+#!perl
+#
+# regression tests for old bugs that don't fit other categories
+
+BEGIN {
+ if ($ENV{PERL_CORE}){
+ chdir 't' if -d 't';
+ unshift @INC, '../lib';
+ require Config; import Config;
+ no warnings 'once';
+ if ($Config{'extensions'} !~ /\bData\/Dumper\b/) {
+ print "1..0 # Skip: Data::Dumper was not built\n";
+ exit 0;
+ }
+ }
+}
+
+use strict;
+use Test::More tests => 1;
+use Data::Dumper;
+
+{
+ sub iterate_hash {
+ my ($h) = @_;
+ my $count = 0;
+ $count++ while each %$h;
+ return $count;
+ }
+
+ my $dumper = Data::Dumper->new( [\%ENV], ['ENV'] )->Sortkeys(1);
+ my $orig_count = iterate_hash(\%ENV);
+ $dumper->Dump;
+ my $new_count = iterate_hash(\%ENV);
+ is($new_count, $orig_count, 'correctly resets hash iterators');
+}
diff --git a/gnu/usr.bin/perl/ext/Data/Dumper/t/freezer.t b/gnu/usr.bin/perl/ext/Data/Dumper/t/freezer.t
new file mode 100755
index 00000000000..06ff9c921c5
--- /dev/null
+++ b/gnu/usr.bin/perl/ext/Data/Dumper/t/freezer.t
@@ -0,0 +1,97 @@
+#!./perl -w
+#
+# test a few problems with the Freezer option, not a complete Freezer
+# test suite yet
+
+BEGIN {
+ if ($ENV{PERL_CORE}){
+ chdir 't' if -d 't';
+ unshift @INC, '../lib';
+ require Config; import Config;
+ no warnings 'once';
+ if ($Config{'extensions'} !~ /\bData\/Dumper\b/) {
+ print "1..0 # Skip: Data::Dumper was not built\n";
+ exit 0;
+ }
+ }
+}
+
+use strict;
+use Test::More qw(no_plan);
+use Data::Dumper;
+$Data::Dumper::Freezer = 'freeze';
+
+# test for seg-fault bug when freeze() returns a non-ref
+my $foo = Test1->new("foo");
+my $dumped_foo = Dumper($foo);
+ok($dumped_foo,
+ "Use of freezer sub which returns non-ref worked.");
+like($dumped_foo, qr/frozed/,
+ "Dumped string has the key added by Freezer.");
+
+# run the same tests with useperl. this always worked
+{
+ local $Data::Dumper::Useperl = 1;
+ my $foo = Test1->new("foo");
+ my $dumped_foo = Dumper($foo);
+ ok($dumped_foo,
+ "Use of freezer sub which returns non-ref worked with useperl");
+ like($dumped_foo, qr/frozed/,
+ "Dumped string has the key added by Freezer with useperl.");
+}
+
+# test for warning when an object doesn't have a freeze()
+{
+ my $warned = 0;
+ local $SIG{__WARN__} = sub { $warned++ };
+ my $bar = Test2->new("bar");
+ my $dumped_bar = Dumper($bar);
+ is($warned, 0, "A missing freeze() shouldn't warn.");
+}
+
+
+# run the same test with useperl, which always worked
+{
+ local $Data::Dumper::Useperl = 1;
+ my $warned = 0;
+ local $SIG{__WARN__} = sub { $warned++ };
+ my $bar = Test2->new("bar");
+ my $dumped_bar = Dumper($bar);
+ is($warned, 0, "A missing freeze() shouldn't warn with useperl");
+}
+
+# a freeze() which die()s should still trigger the warning
+{
+ my $warned = 0;
+ local $SIG{__WARN__} = sub { $warned++; };
+ my $bar = Test3->new("bar");
+ my $dumped_bar = Dumper($bar);
+ is($warned, 1, "A freeze() which die()s should warn.");
+}
+
+# the same should work in useperl
+{
+ local $Data::Dumper::Useperl = 1;
+ my $warned = 0;
+ local $SIG{__WARN__} = sub { $warned++; };
+ my $bar = Test3->new("bar");
+ my $dumped_bar = Dumper($bar);
+ is($warned, 1, "A freeze() which die()s should warn with useperl.");
+}
+
+# a package with a freeze() which returns a non-ref
+package Test1;
+sub new { bless({name => $_[1]}, $_[0]) }
+sub freeze {
+ my $self = shift;
+ $self->{frozed} = 1;
+}
+
+# a package without a freeze()
+package Test2;
+sub new { bless({name => $_[1]}, $_[0]) }
+
+# a package with a freeze() which dies
+package Test3;
+sub new { bless({name => $_[1]}, $_[0]) }
+sub freeze { die "freeze() is broked" }
diff --git a/gnu/usr.bin/perl/ext/Devel/PPPort/parts/base/5008006 b/gnu/usr.bin/perl/ext/Devel/PPPort/parts/base/5008006
new file mode 100644
index 00000000000..ba5cad07ed0
--- /dev/null
+++ b/gnu/usr.bin/perl/ext/Devel/PPPort/parts/base/5008006
@@ -0,0 +1 @@
+5.008006
diff --git a/gnu/usr.bin/perl/ext/Devel/PPPort/parts/inc/exception b/gnu/usr.bin/perl/ext/Devel/PPPort/parts/inc/exception
new file mode 100644
index 00000000000..a0a930dedb8
--- /dev/null
+++ b/gnu/usr.bin/perl/ext/Devel/PPPort/parts/inc/exception
@@ -0,0 +1,74 @@
+################################################################################
+##
+## $Revision: 1.1 $
+## $Author: millert $
+## $Date: 2006/03/28 18:47:59 $
+##
+################################################################################
+##
+## Version 3.x, Copyright (C) 2004-2005, 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.
+##
+################################################################################
+
+=provides
+
+dXCPT
+XCPT_TRY_START
+XCPT_TRY_END
+XCPT_CATCH
+XCPT_RETHROW
+
+=implementation
+
+#ifdef NO_XSLOCKS
+# ifdef dJMPENV
+# define dXCPT dJMPENV; int rEtV = 0
+# define XCPT_TRY_START JMPENV_PUSH(rEtV); if (rEtV == 0)
+# define XCPT_TRY_END JMPENV_POP;
+# define XCPT_CATCH if (rEtV != 0)
+# define XCPT_RETHROW JMPENV_JUMP(rEtV)
+# else
+# define dXCPT Sigjmp_buf oldTOP; int rEtV = 0
+# define XCPT_TRY_START Copy(top_env, oldTOP, 1, Sigjmp_buf); rEtV = Sigsetjmp(top_env, 1); if (rEtV == 0)
+# define XCPT_TRY_END Copy(oldTOP, top_env, 1, Sigjmp_buf);
+# define XCPT_CATCH if (rEtV != 0)
+# define XCPT_RETHROW Siglongjmp(top_env, rEtV)
+# endif
+#endif
+
+=xsmisc
+
+/* defined in module3.c */
+int exception(int throw_e);
+
+=xsubs
+
+int
+exception(throw_e)
+ int throw_e
+ OUTPUT:
+ RETVAL
+
+=tests plan => 7
+
+my $rv;
+
+$Devel::PPPort::exception_caught = undef;
+
+$rv = eval { &Devel::PPPort::exception(0) };
+ok($@, '');
+ok(defined $rv);
+ok($rv, 42);
+ok($Devel::PPPort::exception_caught, 0);
+
+$Devel::PPPort::exception_caught = undef;
+
+$rv = eval { &Devel::PPPort::exception(1) };
+ok($@, "boo\n");
+ok(not defined $rv);
+ok($Devel::PPPort::exception_caught, 1);
diff --git a/gnu/usr.bin/perl/ext/Devel/PPPort/parts/todo/5008006 b/gnu/usr.bin/perl/ext/Devel/PPPort/parts/todo/5008006
new file mode 100644
index 00000000000..ba5cad07ed0
--- /dev/null
+++ b/gnu/usr.bin/perl/ext/Devel/PPPort/parts/todo/5008006
@@ -0,0 +1 @@
+5.008006
diff --git a/gnu/usr.bin/perl/ext/Devel/PPPort/t/exception.t b/gnu/usr.bin/perl/ext/Devel/PPPort/t/exception.t
new file mode 100755
index 00000000000..b66f146f82d
--- /dev/null
+++ b/gnu/usr.bin/perl/ext/Devel/PPPort/t/exception.t
@@ -0,0 +1,54 @@
+################################################################################
+#
+# !!!!! Do NOT edit this file directly! !!!!!
+#
+# Edit mktests.PL and/or parts/inc/exception instead.
+#
+################################################################################
+
+BEGIN {
+ if ($ENV{'PERL_CORE'}) {
+ chdir 't' if -d 't';
+ @INC = ('../lib', '../ext/Devel/PPPort/t') if -d '../lib' && -d '../ext';
+ require Config; import Config;
+ use vars '%Config';
+ if (" $Config{'extensions'} " !~ m[ Devel/PPPort ]) {
+ print "1..0 # Skip -- Perl configured without Devel::PPPort module\n";
+ exit 0;
+ }
+ }
+ else {
+ unshift @INC, 't';
+ }
+
+ eval "use Test";
+ if ($@) {
+ require 'testutil.pl';
+ print "1..7\n";
+ }
+ else {
+ plan(tests => 7);
+ }
+}
+
+use Devel::PPPort;
+use strict;
+$^W = 1;
+
+my $rv;
+
+$Devel::PPPort::exception_caught = undef;
+
+$rv = eval { &Devel::PPPort::exception(0) };
+ok($@, '');
+ok(defined $rv);
+ok($rv, 42);
+ok($Devel::PPPort::exception_caught, 0);
+
+$Devel::PPPort::exception_caught = undef;
+
+$rv = eval { &Devel::PPPort::exception(1) };
+ok($@, "boo\n");
+ok(not defined $rv);
+ok($Devel::PPPort::exception_caught, 1);
+
diff --git a/gnu/usr.bin/perl/ext/DynaLoader/dl_dyld.xs b/gnu/usr.bin/perl/ext/DynaLoader/dl_dyld.xs
index 2ac2baaabcd..ef96b48ffd8 100644
--- a/gnu/usr.bin/perl/ext/DynaLoader/dl_dyld.xs
+++ b/gnu/usr.bin/perl/ext/DynaLoader/dl_dyld.xs
@@ -54,8 +54,7 @@ static char *dlerror()
return dl_last_error;
}
-static int dlclose(handle) /* stub only */
-void *handle;
+static int dlclose(void *handle) /* stub only */
{
return 0;
}
@@ -98,8 +97,7 @@ static void TranslateError
path, number, type);
break;
}
- safefree(dl_last_error);
- dl_last_error = savepv(error);
+ sv_setpv(MY_CXT.x_dl_last_error, error);
}
static char *dlopen(char *path, int mode /* mode is ignored */)
@@ -113,7 +111,7 @@ static char *dlopen(char *path, int mode /* mode is ignored */)
TranslateError(path, OFImage, dyld_result);
else
{
- // NSLinkModule will cause the run to abort on any link error's
+ // NSLinkModule will cause the run to abort on any link errors
// not very friendly but the error recovery functionality is limited.
handle = NSLinkModule(ofile, path, TRUE);
NSDestroyObjectFileImage(ofile);
@@ -123,9 +121,7 @@ static char *dlopen(char *path, int mode /* mode is ignored */)
}
static void *
-dlsym(handle, symbol)
-void *handle;
-char *symbol;
+dlsym(void *handle, char *symbol)
{
void *addr;
diff --git a/gnu/usr.bin/perl/ext/DynaLoader/hints/gnukfreebsd.pl b/gnu/usr.bin/perl/ext/DynaLoader/hints/gnukfreebsd.pl
new file mode 100644
index 00000000000..6e37b40270f
--- /dev/null
+++ b/gnu/usr.bin/perl/ext/DynaLoader/hints/gnukfreebsd.pl
@@ -0,0 +1 @@
+do './hints/linux.pl';
diff --git a/gnu/usr.bin/perl/ext/DynaLoader/hints/gnuknetbsd.pl b/gnu/usr.bin/perl/ext/DynaLoader/hints/gnuknetbsd.pl
new file mode 100644
index 00000000000..6e37b40270f
--- /dev/null
+++ b/gnu/usr.bin/perl/ext/DynaLoader/hints/gnuknetbsd.pl
@@ -0,0 +1 @@
+do './hints/linux.pl';
diff --git a/gnu/usr.bin/perl/ext/Encode/lib/Encode/MIME/Header/ISO_2022_JP.pm b/gnu/usr.bin/perl/ext/Encode/lib/Encode/MIME/Header/ISO_2022_JP.pm
new file mode 100644
index 00000000000..5f637a32472
--- /dev/null
+++ b/gnu/usr.bin/perl/ext/Encode/lib/Encode/MIME/Header/ISO_2022_JP.pm
@@ -0,0 +1,127 @@
+package Encode::MIME::Header::ISO_2022_JP;
+
+use strict;
+use base qw(Encode::MIME::Header);
+
+$Encode::Encoding{'MIME-Header-ISO_2022_JP'}
+ = bless {encode => 'B', bpl => 76, Name => 'MIME-Header-ISO_2022_JP'}
+ => __PACKAGE__;
+
+use constant HEAD => '=?ISO-2022-JP?B?';
+use constant TAIL => '?=';
+
+use Encode::CJKConstants qw(%RE);
+
+our $VERSION = do { my @r = (q$Revision: 1.1 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r };
+
+
+# I owe the below codes totally to
+# Jcode by Dan Kogai & http://www.din.or.jp/~ohzaki/perl.htm#JP_Base64
+
+sub encode {
+ my $self = shift;
+ my $str = shift;
+
+ utf8::encode($str) if( Encode::is_utf8($str) );
+ Encode::from_to($str, 'utf8', 'euc-jp');
+
+ my($trailing_crlf) = ($str =~ /(\n|\r|\x0d\x0a)$/o);
+
+ $str = _mime_unstructured_header($str, $self->{bpl});
+
+ not $trailing_crlf and $str =~ s/(\n|\r|\x0d\x0a)$//o;
+
+ return $str;
+}
+
+
+sub _mime_unstructured_header {
+ my ($oldheader, $bpl) = @_;
+ my $crlf = $oldheader =~ /\n$/;
+ my($header, @words, @wordstmp, $i) = ('');
+
+ $oldheader =~ s/\s+$//;
+
+ @wordstmp = split /\s+/, $oldheader;
+
+ for ($i = 0; $i < $#wordstmp; $i++){
+ if( $wordstmp[$i] !~ /^[\x21-\x7E]+$/ and $wordstmp[$i + 1] !~ /^[\x21-\x7E]+$/){
+ $wordstmp[$i + 1] = "$wordstmp[$i] $wordstmp[$i + 1]";
+ }
+ else{
+ push(@words, $wordstmp[$i]);
+ }
+ }
+
+ push(@words, $wordstmp[-1]);
+
+ for my $word (@words){
+ if ($word =~ /^[\x21-\x7E]+$/) {
+ $header =~ /(?:.*\n)*(.*)/;
+ if (length($1) + length($word) > $bpl) {
+ $header .= "\n $word";
+ }
+ else{
+ $header .= $word;
+ }
+ }
+ else{
+ $header = _add_encoded_word($word, $header, $bpl);
+ }
+
+ $header =~ /(?:.*\n)*(.*)/;
+
+ if(length($1) == $bpl){
+ $header .= "\n ";
+ }
+ else {
+ $header .= ' ';
+ }
+ }
+
+ $header =~ s/\n? $//mg;
+
+ $crlf ? "$header\n" : $header;
+}
+
+
+sub _add_encoded_word {
+ my($str, $line, $bpl) = @_;
+ my $result = '';
+
+ while( length($str) ){
+ my $target = $str;
+ $str = '';
+
+ if(length($line) + 22 + ($target =~ /^(?:$RE{EUC_0212}|$RE{EUC_C})/o) * 8 > $bpl){
+ $line =~ s/[ \t\n\r]*$/\n/;
+ $result .= $line;
+ $line = ' ';
+ }
+
+ while(1){
+ my $iso_2022_jp = $target;
+ Encode::from_to($iso_2022_jp, 'euc-jp', 'iso-2022-jp');
+
+ my $encoded
+ = HEAD . MIME::Base64::encode_base64($iso_2022_jp, '') . TAIL;
+
+ if(length($encoded) + length($line) > $bpl){
+ $target =~ s/($RE{EUC_0212}|$RE{EUC_KANA}|$RE{EUC_C}|$RE{ASCII})$//o;
+ $str = $1 . $str;
+ }
+ else{
+ $line .= $encoded;
+ last;
+ }
+ }
+
+ }
+
+ $result . $line;
+}
+
+
+1;
+__END__
+
diff --git a/gnu/usr.bin/perl/ext/Encode/t/mime_header_iso2022jp.t b/gnu/usr.bin/perl/ext/Encode/t/mime_header_iso2022jp.t
new file mode 100755
index 00000000000..ffc77e07c56
--- /dev/null
+++ b/gnu/usr.bin/perl/ext/Encode/t/mime_header_iso2022jp.t
@@ -0,0 +1,40 @@
+
+use Test::More tests => 14;
+
+use strict;
+use Encode;
+
+BEGIN{
+ use_ok('Encode::MIME::Header::ISO_2022_JP');
+}
+
+require_ok('Encode::MIME::Header::ISO_2022_JP');
+
+# below codes are from mime.t in Jcode
+
+my %mime = (
+ "´Á»ú¡¢¥«¥¿¥«¥Ê¡¢¤Ò¤é¤¬¤Ê"
+ => "=?ISO-2022-JP?B?GyRCNEE7eiEiJSslPyUrJUohIiRSJGkkLCRKGyhC?=",
+ "foo bar"
+ => "foo bar",
+ "´Á»ú¡¢¥«¥¿¥«¥Ê¡¢¤Ò¤é¤¬¤Ê¤Îº®¤¸¤Ã¤¿Subject Header."
+ => "=?ISO-2022-JP?B?GyRCNEE7eiEiJSslPyUrJUohIiRSJGkkLCRKJE46LiQ4JEMkPxsoQlN1?=\n =?ISO-2022-JP?B?YmplY3Q=?= Header.",
+);
+
+
+for my $k (keys %mime){
+ $mime{"$k\n"} = $mime{$k} . "\n";
+}
+
+
+for my $decoded (sort keys %mime){
+ my $encoded = $mime{$decoded};
+
+ my $header = Encode::encode('MIME-Header-ISO_2022_JP', decode('euc-jp', $decoded));
+ my $utf8 = Encode::decode('MIME-Header', $header);
+
+ is(encode('euc-jp', $utf8), $decoded);
+ is($header, $encoded);
+}
+
+__END__
diff --git a/gnu/usr.bin/perl/ext/Encode/t/utf8strict.t b/gnu/usr.bin/perl/ext/Encode/t/utf8strict.t
new file mode 100755
index 00000000000..dac5d6f5ff5
--- /dev/null
+++ b/gnu/usr.bin/perl/ext/Encode/t/utf8strict.t
@@ -0,0 +1,78 @@
+#!../perl
+our $DEBUG = @ARGV;
+our (%ORD, %SEQ, $NTESTS);
+BEGIN {
+ if ($ENV{'PERL_CORE'}){
+ chdir 't';
+ unshift @INC, '../lib';
+ }
+ require Config; import Config;
+ if ($Config{'extensions'} !~ /\bEncode\b/) {
+ print "1..0 # Skip: Encode was not built\n";
+ exit 0;
+ }
+ if ($] <= 5.008 and !$Config{perl_patchlevel}){
+ print "1..0 # Skip: Perl 5.8.1 or later required\n";
+ exit 0;
+ }
+ # http://smontagu.damowmow.com/utf8test.html
+ %ORD = (
+ 0x00000080 => 0, # 2.1.2
+ 0x00000800 => 0, # 2.1.3
+ 0x00010000 => 0, # 2.1.4
+ 0x00200000 => 1, # 2.1.5
+ 0x00400000 => 1, # 2.1.6
+ 0x0000007F => 0, # 2.2.1 -- unmapped okay
+ 0x000007FF => 0, # 2.2.2
+ 0x0000FFFF => 1, # 2.2.3
+ 0x001FFFFF => 1, # 2.2.4
+ 0x03FFFFFF => 1, # 2.2.5
+ 0x7FFFFFFF => 1, # 2.2.6
+ 0x0000D800 => 1, # 5.1.1
+ 0x0000DB7F => 1, # 5.1.2
+ 0x0000D880 => 1, # 5.1.3
+ 0x0000DBFF => 1, # 5.1.4
+ 0x0000DC00 => 1, # 5.1.5
+ 0x0000DF80 => 1, # 5.1.6
+ 0x0000DFFF => 1, # 5.1.7
+ # 5.2 "Paird UTF-16 surrogates skipped
+ # because utf-8-strict raises exception at the first one
+ 0x0000FFFF => 1, # 5.3.1
+ );
+ $NTESTS += scalar keys %ORD;
+ %SEQ = (
+ qq/ed 9f bf/ => 0, # 2.3.1
+ qq/ee 80 80/ => 0, # 2.3.2
+ qq/f4 8f bf bf/ => 0, # 2.3.3
+ qq/f4 90 80 80/ => 1, # 2.3.4 -- out of range so NG
+ # "3 Malformed sequences" are checked by perl.
+ # "4 Overlong sequences" are checked by perl.
+ );
+ $NTESTS += scalar keys %SEQ;
+}
+use strict;
+use Encode;
+use utf8;
+use Test::More tests => $NTESTS;
+
+local($SIG{__WARN__}) = sub { $DEBUG and $@ and print STDERR $@ };
+
+my $d = find_encoding("utf-8-strict");
+for my $u (sort keys %ORD){
+ my $c = chr($u);
+ eval { $d->encode($c,1) };
+ $DEBUG and $@ and warn $@;
+ my $t = $@ ? 1 : 0;
+ is($t, $ORD{$u}, sprintf "U+%04X", $u);
+}
+for my $s (sort keys %SEQ){
+ my $o = pack "C*" => map {hex} split /\s+/, $s;
+ eval { $d->decode($o,1) };
+ $DEBUG and $@ and warn $@;
+ my $t = $@ ? 1 : 0;
+ is($t, $SEQ{$s}, $s);
+}
+
+__END__
+
+
diff --git a/gnu/usr.bin/perl/ext/Errno/Errno_pm.PL b/gnu/usr.bin/perl/ext/Errno/Errno_pm.PL
index a795cfc822d..d8a0ab3e8dc 100644
--- a/gnu/usr.bin/perl/ext/Errno/Errno_pm.PL
+++ b/gnu/usr.bin/perl/ext/Errno/Errno_pm.PL
@@ -2,7 +2,7 @@ use ExtUtils::MakeMaker;
use Config;
use strict;
-our $VERSION = "1.09_00";
+our $VERSION = "1.09_01";
my %err = ();
my %wsa = ();
@@ -11,8 +11,26 @@ unlink "Errno.pm" if -f "Errno.pm";
open OUT, ">Errno.pm" or die "Cannot open Errno.pm: $!";
select OUT;
my $file;
-foreach $file (get_files()) {
- process_file($file);
+my @files = get_files();
+if ($Config{gccversion} ne '' && $^O eq 'MSWin32') {
+ # MinGW complains "warning: #pragma system_header ignored outside include
+ # file" if the header files are processed individually, so include them
+ # all in .c file and process that instead.
+ open INCS, '>includes.c' or
+ die "Cannot open includes.c";
+ foreach $file (@files) {
+ next if $file eq 'errno.c';
+ next unless -f $file;
+ print INCS qq[#include "$file"\n];
+ }
+ close INCS;
+ process_file('includes.c');
+ unlink 'includes.c';
+}
+else {
+ foreach $file (@files) {
+ process_file($file);
+ }
}
write_errno_pm();
unlink "errno.c" if -f "errno.c";
@@ -20,6 +38,12 @@ unlink "errno.c" if -f "errno.c";
sub process_file {
my($file) = @_;
+ # for win32 perl under cygwin, we need to get a windows pathname
+ if ($^O eq 'MSWin32' && $Config{cc} =~ /\B-mno-cygwin\b/ &&
+ defined($file) && !-f $file) {
+ chomp($file = `cygpath -w "$file"`);
+ }
+
return unless defined $file and -f $file;
# warn "Processing $file\n";
@@ -208,7 +232,7 @@ sub write_errno_pm {
close(CPPI);
- unless ($^O eq 'MacOS') { # trust what we have
+ unless ($^O eq 'MacOS' || $^O eq 'beos') { # trust what we have / get later
# invoke CPP and read the output
if ($^O eq 'VMS') {
@@ -231,7 +255,7 @@ sub write_errno_pm {
my($name,$expr);
next unless ($name, $expr) = /"(.*?)"\s*\[\s*\[\s*(.*?)\s*\]\s*\]/;
next if $name eq $expr;
- $expr =~ s/\(?\(\w+\)([^\)]*)\)?/$1/; # ((type)0xcafebabe) at alia
+ $expr =~ s/\(?\([a-z_]\w*\)([^\)]*)\)?/$1/i; # ((type)0xcafebabe) at alia
$expr =~ s/((?:0x)?[0-9a-fA-F]+)[LU]+\b/$1/g; # 2147483647L et alia
next if $expr =~ m/^[a-zA-Z]+$/; # skip some Win32 functions
if($expr =~ m/^0[xX]/) {
@@ -248,17 +272,19 @@ sub write_errno_pm {
# Many of the E constants (including ENOENT, which is being
# used in the Perl test suite a lot), are available only as
# enums in BeOS, so compiling and executing some code is about
- # only way to find out what the numeric Evalues are.
+ # only way to find out what the numeric Evalues are. In fact above, we
+ # didn't even bother to get the values of the ones that have numeric
+ # values, since we can get all of them here, anyway.
if ($^O eq 'beos') {
if (open(C, ">errno.c")) {
- my @zero = grep { !$err{$_} } keys %err;
+ my @allerrs = keys %err;
print C <<EOF;
#include <errno.h>
#include <stdio.h>
int main() {
EOF
- for (@zero) {
+ for (@allerrs) {
print C qq[printf("$_ %d\n", $_);]
}
print C "}\n";
diff --git a/gnu/usr.bin/perl/ext/GDBM_File/GDBM_File.xs b/gnu/usr.bin/perl/ext/GDBM_File/GDBM_File.xs
index 34acd795365..5f88223eb7a 100644
--- a/gnu/usr.bin/perl/ext/GDBM_File/GDBM_File.xs
+++ b/gnu/usr.bin/perl/ext/GDBM_File/GDBM_File.xs
@@ -39,12 +39,8 @@ not_here(char *s)
static void
output_datum(pTHX_ SV *arg, char *str, int size)
{
-#if (!defined(MYMALLOC) || (defined(MYMALLOC) && defined(PERL_POLLUTE_MALLOC)))
- sv_usepvn(arg, str, size);
-#else
sv_setpvn(arg, str, size);
- safesysfree(str);
-#endif
+ free(str);
}
/* Versions of gdbm prior to 1.7x might not have the gdbm_sync,
diff --git a/gnu/usr.bin/perl/ext/IO/t/io_file.t b/gnu/usr.bin/perl/ext/IO/t/io_file.t
new file mode 100755
index 00000000000..546c611f462
--- /dev/null
+++ b/gnu/usr.bin/perl/ext/IO/t/io_file.t
@@ -0,0 +1,55 @@
+#!./perl -w
+
+BEGIN {
+ unless(grep /blib/, @INC) {
+ chdir 't' if -d 't';
+ @INC = '../lib';
+ }
+}
+
+use strict;
+require($ENV{PERL_CORE} ? "./test.pl" : "./t/test.pl");
+plan(tests => ($^O =~ /MSWin32/ ? 9 : 6));
+
+my $Class = 'IO::File';
+my $All_Chars = join '', "\r\n", map( chr, 1..255 ), "zzz\n\r";
+my $File = 'bin.'.$$;
+my $Expect = quotemeta $All_Chars;
+
+use_ok( $Class );
+can_ok( $Class, "binmode" );
+
+### file the file with binary data;
+### use standard open to make sure we can compare binmodes
+### on both.
+{ my $tmp;
+ open $tmp, ">$File" or die "Could not open '$File': $!";
+ binmode $tmp;
+ print $tmp $All_Chars;
+ close $tmp;
+}
+
+### now read in the file, once without binmode, once with.
+### without binmode should fail at least on win32...
+if( $^O =~ /MSWin32/ ) {
+ my $fh = $Class->new;
+
+ isa_ok( $fh, $Class );
+ ok( $fh->open($File), " Opened '$File'" );
+
+ my $cont = do { local $/; <$fh> };
+ unlike( $cont, qr/$Expect/, " Content match fails without binmode" );
+}
+
+### now with binmode, it must pass
+{ my $fh = $Class->new;
+
+ isa_ok( $fh, $Class );
+ ok( $fh->open($File), " Opened '$File' $!" );
+ ok( $fh->binmode, " binmode enabled" );
+
+ my $cont = do { local $/; <$fh> };
+ like( $cont, qr/$Expect/, " Content match passes with binmode" );
+}
+
+unlink $File;
diff --git a/gnu/usr.bin/perl/ext/List/Util/multicall.h b/gnu/usr.bin/perl/ext/List/Util/multicall.h
new file mode 100644
index 00000000000..935d7ed96a4
--- /dev/null
+++ b/gnu/usr.bin/perl/ext/List/Util/multicall.h
@@ -0,0 +1,165 @@
+/* multicall.h (version 1.0)
+ *
+ * Implements a poor-man's MULTICALL interface for old versions
+ * of perl that don't offer a proper one. Intended to be compatible
+ * with 5.6.0 and later.
+ *
+ */
+
+#ifdef dMULTICALL
+#define REAL_MULTICALL
+#else
+#undef REAL_MULTICALL
+
+/* In versions of perl where MULTICALL is not defined (i.e. prior
+ * to 5.9.4), Perl_pad_push is not exported either. It also has
+ * an extra argument in older versions; certainly in the 5.8 series.
+ * So we redefine it here.
+ */
+
+#ifndef AVf_REIFY
+# ifdef SVpav_REIFY
+# define AVf_REIFY SVpav_REIFY
+# else
+# error Neither AVf_REIFY nor SVpav_REIFY is defined
+# endif
+#endif
+
+#ifndef AvFLAGS
+# define AvFLAGS SvFLAGS
+#endif
+
+static void
+multicall_pad_push(pTHX_ AV *padlist, int depth)
+{
+ if (depth <= AvFILLp(padlist))
+ return;
+
+ {
+ SV** const svp = AvARRAY(padlist);
+ AV* const newpad = newAV();
+ SV** const oldpad = AvARRAY(svp[depth-1]);
+ I32 ix = AvFILLp((AV*)svp[1]);
+ const I32 names_fill = AvFILLp((AV*)svp[0]);
+ SV** const names = AvARRAY(svp[0]);
+ AV *av;
+
+ for ( ;ix > 0; ix--) {
+ if (names_fill >= ix && names[ix] != &PL_sv_undef) {
+ const char sigil = SvPVX(names[ix])[0];
+ if ((SvFLAGS(names[ix]) & SVf_FAKE) || sigil == '&') {
+ /* outer lexical or anon code */
+ av_store(newpad, ix, SvREFCNT_inc(oldpad[ix]));
+ }
+ else { /* our own lexical */
+ SV *sv;
+ if (sigil == '@')
+ sv = (SV*)newAV();
+ else if (sigil == '%')
+ sv = (SV*)newHV();
+ else
+ sv = NEWSV(0, 0);
+ av_store(newpad, ix, sv);
+ SvPADMY_on(sv);
+ }
+ }
+ else if (IS_PADGV(oldpad[ix]) || IS_PADCONST(oldpad[ix])) {
+ av_store(newpad, ix, SvREFCNT_inc(oldpad[ix]));
+ }
+ else {
+ /* save temporaries on recursion? */
+ SV * const sv = NEWSV(0, 0);
+ av_store(newpad, ix, sv);
+ SvPADTMP_on(sv);
+ }
+ }
+ av = newAV();
+ av_extend(av, 0);
+ av_store(newpad, 0, (SV*)av);
+ AvFLAGS(av) = AVf_REIFY;
+
+ av_store(padlist, depth, (SV*)newpad);
+ AvFILLp(padlist) = depth;
+ }
+}
+
+#define dMULTICALL \
+ SV **newsp; /* set by POPBLOCK */ \
+ PERL_CONTEXT *cx; \
+ CV *multicall_cv; \
+ OP *multicall_cop; \
+ bool multicall_oldcatch; \
+ U8 hasargs = 0
+
+/* Between 5.9.1 and 5.9.2 the retstack was removed, and the
+ return op is now stored on the cxstack. */
+#define HAS_RETSTACK (\
+ PERL_REVISION < 5 || \
+ (PERL_REVISION == 5 && PERL_VERSION < 9) || \
+ (PERL_REVISION == 5 && PERL_VERSION == 9 && PERL_SUBVERSION < 2) \
+)
+
+
+/* PUSHSUB is defined so differently on different versions of perl
+ * that it's easier to define our own version than code for all the
+ * different possibilities.
+ */
+#if HAS_RETSTACK
+# define PUSHSUB_RETSTACK(cx)
+#else
+# define PUSHSUB_RETSTACK(cx) cx->blk_sub.retop = Nullop;
+#endif
+#define MULTICALL_PUSHSUB(cx, the_cv) \
+ cx->blk_sub.cv = the_cv; \
+ cx->blk_sub.olddepth = CvDEPTH(the_cv); \
+ cx->blk_sub.hasargs = hasargs; \
+ cx->blk_sub.lval = PL_op->op_private & \
+ (OPpLVAL_INTRO|OPpENTERSUB_INARGS); \
+ PUSHSUB_RETSTACK(cx) \
+ if (!CvDEPTH(the_cv)) { \
+ (void)SvREFCNT_inc(the_cv); \
+ (void)SvREFCNT_inc(the_cv); \
+ SAVEFREESV(the_cv); \
+ }
+
+#define PUSH_MULTICALL(the_cv) \
+ STMT_START { \
+ CV *_nOnclAshIngNamE_ = the_cv; \
+ AV* padlist = CvPADLIST(_nOnclAshIngNamE_); \
+ multicall_cv = _nOnclAshIngNamE_; \
+ ENTER; \
+ multicall_oldcatch = CATCH_GET; \
+ SAVESPTR(CvROOT(multicall_cv)->op_ppaddr); \
+ CvROOT(multicall_cv)->op_ppaddr = PL_ppaddr[OP_NULL]; \
+ SAVETMPS; SAVEVPTR(PL_op); \
+ CATCH_SET(TRUE); \
+ PUSHSTACKi(PERLSI_SORT); \
+ PUSHBLOCK(cx, CXt_SUB, PL_stack_sp); \
+ MULTICALL_PUSHSUB(cx, multicall_cv); \
+ if (++CvDEPTH(multicall_cv) >= 2) { \
+ PERL_STACK_OVERFLOW_CHECK(); \
+ multicall_pad_push(aTHX_ padlist, CvDEPTH(multicall_cv)); \
+ } \
+ SAVECOMPPAD(); \
+ PL_comppad = (AV*) (AvARRAY(padlist)[CvDEPTH(multicall_cv)]); \
+ PL_curpad = AvARRAY(PL_comppad); \
+ multicall_cop = CvSTART(multicall_cv); \
+ } STMT_END
+
+#define MULTICALL \
+ STMT_START { \
+ PL_op = multicall_cop; \
+ CALLRUNOPS(aTHX); \
+ } STMT_END
+
+#define POP_MULTICALL \
+ STMT_START { \
+ CvDEPTH(multicall_cv)--; \
+ LEAVESUB(multicall_cv); \
+ POPBLOCK(cx,PL_curpm); \
+ POPSTACK; \
+ CATCH_SET(multicall_oldcatch); \
+ LEAVE; \
+ } STMT_END
+
+#endif
diff --git a/gnu/usr.bin/perl/ext/List/Util/t/00version.t b/gnu/usr.bin/perl/ext/List/Util/t/00version.t
new file mode 100755
index 00000000000..fad6e0f3809
--- /dev/null
+++ b/gnu/usr.bin/perl/ext/List/Util/t/00version.t
@@ -0,0 +1,22 @@
+#!./perl
+
+BEGIN {
+ unless (-d 'blib') {
+ chdir 't' if -d 't';
+ @INC = '../lib';
+ require Config; import Config;
+ keys %Config; # Silence warning
+ if ($Config{extensions} !~ /\bList\/Util\b/) {
+ print "1..0 # Skip: List::Util was not built\n";
+ exit 0;
+ }
+ }
+}
+
+use Scalar::Util ();
+use List::Util ();
+use Test::More tests => 1;
+
+is( $Scalar::Util::VERSION, $List::Util::VERSION, "VERSION mismatch");
+
+
diff --git a/gnu/usr.bin/perl/ext/List/Util/t/p_blessed.t b/gnu/usr.bin/perl/ext/List/Util/t/p_blessed.t
new file mode 100755
index 00000000000..d594ac517cb
--- /dev/null
+++ b/gnu/usr.bin/perl/ext/List/Util/t/p_blessed.t
@@ -0,0 +1,7 @@
+#!./perl
+
+# force perl-only version to be tested
+$List::Util::TESTING_PERL_ONLY = $List::Util::TESTING_PERL_ONLY = 1;
+
+(my $f = __FILE__) =~ s/p_//;
+do $f;
diff --git a/gnu/usr.bin/perl/ext/List/Util/t/p_first.t b/gnu/usr.bin/perl/ext/List/Util/t/p_first.t
new file mode 100755
index 00000000000..676d96712e8
--- /dev/null
+++ b/gnu/usr.bin/perl/ext/List/Util/t/p_first.t
@@ -0,0 +1,8 @@
+#!./perl
+
+# force perl-only version to be tested
+$List::Util::TESTING_PERL_ONLY = $List::Util::TESTING_PERL_ONLY = 1;
+
+(my $f = __FILE__) =~ s/p_//;
+$::PERL_ONLY = $::PERL_ONLY = 1; # Mustn't use it only once!
+do $f;
diff --git a/gnu/usr.bin/perl/ext/List/Util/t/p_lln.t b/gnu/usr.bin/perl/ext/List/Util/t/p_lln.t
new file mode 100755
index 00000000000..d594ac517cb
--- /dev/null
+++ b/gnu/usr.bin/perl/ext/List/Util/t/p_lln.t
@@ -0,0 +1,7 @@
+#!./perl
+
+# force perl-only version to be tested
+$List::Util::TESTING_PERL_ONLY = $List::Util::TESTING_PERL_ONLY = 1;
+
+(my $f = __FILE__) =~ s/p_//;
+do $f;
diff --git a/gnu/usr.bin/perl/ext/List/Util/t/p_max.t b/gnu/usr.bin/perl/ext/List/Util/t/p_max.t
new file mode 100755
index 00000000000..d594ac517cb
--- /dev/null
+++ b/gnu/usr.bin/perl/ext/List/Util/t/p_max.t
@@ -0,0 +1,7 @@
+#!./perl
+
+# force perl-only version to be tested
+$List::Util::TESTING_PERL_ONLY = $List::Util::TESTING_PERL_ONLY = 1;
+
+(my $f = __FILE__) =~ s/p_//;
+do $f;
diff --git a/gnu/usr.bin/perl/ext/List/Util/t/p_maxstr.t b/gnu/usr.bin/perl/ext/List/Util/t/p_maxstr.t
new file mode 100755
index 00000000000..d594ac517cb
--- /dev/null
+++ b/gnu/usr.bin/perl/ext/List/Util/t/p_maxstr.t
@@ -0,0 +1,7 @@
+#!./perl
+
+# force perl-only version to be tested
+$List::Util::TESTING_PERL_ONLY = $List::Util::TESTING_PERL_ONLY = 1;
+
+(my $f = __FILE__) =~ s/p_//;
+do $f;
diff --git a/gnu/usr.bin/perl/ext/List/Util/t/p_min.t b/gnu/usr.bin/perl/ext/List/Util/t/p_min.t
new file mode 100755
index 00000000000..d594ac517cb
--- /dev/null
+++ b/gnu/usr.bin/perl/ext/List/Util/t/p_min.t
@@ -0,0 +1,7 @@
+#!./perl
+
+# force perl-only version to be tested
+$List::Util::TESTING_PERL_ONLY = $List::Util::TESTING_PERL_ONLY = 1;
+
+(my $f = __FILE__) =~ s/p_//;
+do $f;
diff --git a/gnu/usr.bin/perl/ext/List/Util/t/p_minstr.t b/gnu/usr.bin/perl/ext/List/Util/t/p_minstr.t
new file mode 100755
index 00000000000..d594ac517cb
--- /dev/null
+++ b/gnu/usr.bin/perl/ext/List/Util/t/p_minstr.t
@@ -0,0 +1,7 @@
+#!./perl
+
+# force perl-only version to be tested
+$List::Util::TESTING_PERL_ONLY = $List::Util::TESTING_PERL_ONLY = 1;
+
+(my $f = __FILE__) =~ s/p_//;
+do $f;
diff --git a/gnu/usr.bin/perl/ext/List/Util/t/p_openhan.t b/gnu/usr.bin/perl/ext/List/Util/t/p_openhan.t
new file mode 100755
index 00000000000..d594ac517cb
--- /dev/null
+++ b/gnu/usr.bin/perl/ext/List/Util/t/p_openhan.t
@@ -0,0 +1,7 @@
+#!./perl
+
+# force perl-only version to be tested
+$List::Util::TESTING_PERL_ONLY = $List::Util::TESTING_PERL_ONLY = 1;
+
+(my $f = __FILE__) =~ s/p_//;
+do $f;
diff --git a/gnu/usr.bin/perl/ext/List/Util/t/p_readonly.t b/gnu/usr.bin/perl/ext/List/Util/t/p_readonly.t
new file mode 100755
index 00000000000..d594ac517cb
--- /dev/null
+++ b/gnu/usr.bin/perl/ext/List/Util/t/p_readonly.t
@@ -0,0 +1,7 @@
+#!./perl
+
+# force perl-only version to be tested
+$List::Util::TESTING_PERL_ONLY = $List::Util::TESTING_PERL_ONLY = 1;
+
+(my $f = __FILE__) =~ s/p_//;
+do $f;
diff --git a/gnu/usr.bin/perl/ext/List/Util/t/p_reduce.t b/gnu/usr.bin/perl/ext/List/Util/t/p_reduce.t
new file mode 100755
index 00000000000..676d96712e8
--- /dev/null
+++ b/gnu/usr.bin/perl/ext/List/Util/t/p_reduce.t
@@ -0,0 +1,8 @@
+#!./perl
+
+# force perl-only version to be tested
+$List::Util::TESTING_PERL_ONLY = $List::Util::TESTING_PERL_ONLY = 1;
+
+(my $f = __FILE__) =~ s/p_//;
+$::PERL_ONLY = $::PERL_ONLY = 1; # Mustn't use it only once!
+do $f;
diff --git a/gnu/usr.bin/perl/ext/List/Util/t/p_refaddr.t b/gnu/usr.bin/perl/ext/List/Util/t/p_refaddr.t
new file mode 100755
index 00000000000..d594ac517cb
--- /dev/null
+++ b/gnu/usr.bin/perl/ext/List/Util/t/p_refaddr.t
@@ -0,0 +1,7 @@
+#!./perl
+
+# force perl-only version to be tested
+$List::Util::TESTING_PERL_ONLY = $List::Util::TESTING_PERL_ONLY = 1;
+
+(my $f = __FILE__) =~ s/p_//;
+do $f;
diff --git a/gnu/usr.bin/perl/ext/List/Util/t/p_reftype.t b/gnu/usr.bin/perl/ext/List/Util/t/p_reftype.t
new file mode 100755
index 00000000000..d594ac517cb
--- /dev/null
+++ b/gnu/usr.bin/perl/ext/List/Util/t/p_reftype.t
@@ -0,0 +1,7 @@
+#!./perl
+
+# force perl-only version to be tested
+$List::Util::TESTING_PERL_ONLY = $List::Util::TESTING_PERL_ONLY = 1;
+
+(my $f = __FILE__) =~ s/p_//;
+do $f;
diff --git a/gnu/usr.bin/perl/ext/List/Util/t/p_shuffle.t b/gnu/usr.bin/perl/ext/List/Util/t/p_shuffle.t
new file mode 100755
index 00000000000..d594ac517cb
--- /dev/null
+++ b/gnu/usr.bin/perl/ext/List/Util/t/p_shuffle.t
@@ -0,0 +1,7 @@
+#!./perl
+
+# force perl-only version to be tested
+$List::Util::TESTING_PERL_ONLY = $List::Util::TESTING_PERL_ONLY = 1;
+
+(my $f = __FILE__) =~ s/p_//;
+do $f;
diff --git a/gnu/usr.bin/perl/ext/List/Util/t/p_sum.t b/gnu/usr.bin/perl/ext/List/Util/t/p_sum.t
new file mode 100755
index 00000000000..d594ac517cb
--- /dev/null
+++ b/gnu/usr.bin/perl/ext/List/Util/t/p_sum.t
@@ -0,0 +1,7 @@
+#!./perl
+
+# force perl-only version to be tested
+$List::Util::TESTING_PERL_ONLY = $List::Util::TESTING_PERL_ONLY = 1;
+
+(my $f = __FILE__) =~ s/p_//;
+do $f;
diff --git a/gnu/usr.bin/perl/ext/List/Util/t/p_tainted.t b/gnu/usr.bin/perl/ext/List/Util/t/p_tainted.t
new file mode 100755
index 00000000000..90275fdad42
--- /dev/null
+++ b/gnu/usr.bin/perl/ext/List/Util/t/p_tainted.t
@@ -0,0 +1,7 @@
+#!./perl -T
+
+# force perl-only version to be tested
+$List::Util::TESTING_PERL_ONLY = $List::Util::TESTING_PERL_ONLY = 1;
+
+(my $f = __FILE__) =~ s/p_//;
+do "./$f";
diff --git a/gnu/usr.bin/perl/ext/MIME/Base64/README b/gnu/usr.bin/perl/ext/MIME/Base64/README
new file mode 100644
index 00000000000..fbd3d54cda8
--- /dev/null
+++ b/gnu/usr.bin/perl/ext/MIME/Base64/README
@@ -0,0 +1,27 @@
+This package contains a base64 encoder/decoder and a quoted-printable
+encoder/decoder. These encoding methods are specified in RFC 2045 -
+MIME (Multipurpose Internet Mail Extensions).
+
+The base64 encoding is designed to represent arbitrary sequences of
+octets in a form that need not be humanly readable. A 65-character
+subset ([A-Za-z0-9+/=]) of US-ASCII is used, enabling 6 bits to be
+represented per printable character.
+
+The quoted-printable encoding is intended to represent data that
+largely consists of bytes that correspond to printable characters in
+the ASCII character set. Each non-printable character is represented by
+a triplet consisting of the character "=" followed by two hexadecimal
+digits.
+
+In order to install and use this package you will need Perl version
+5.6 or better. Installation as usual:
+
+ perl Makefile.PL
+ make
+ make test
+ make install
+
+Copyright 1995-1999,2001-2004 Gisle Aas <gisle@ActiveState.com>
+
+This library 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/ext/NDBM_File/hints/gnukfreebsd.pl b/gnu/usr.bin/perl/ext/NDBM_File/hints/gnukfreebsd.pl
new file mode 100644
index 00000000000..6e37b40270f
--- /dev/null
+++ b/gnu/usr.bin/perl/ext/NDBM_File/hints/gnukfreebsd.pl
@@ -0,0 +1 @@
+do './hints/linux.pl';
diff --git a/gnu/usr.bin/perl/ext/NDBM_File/hints/gnuknetbsd.pl b/gnu/usr.bin/perl/ext/NDBM_File/hints/gnuknetbsd.pl
new file mode 100644
index 00000000000..6e37b40270f
--- /dev/null
+++ b/gnu/usr.bin/perl/ext/NDBM_File/hints/gnuknetbsd.pl
@@ -0,0 +1 @@
+do './hints/linux.pl';
diff --git a/gnu/usr.bin/perl/ext/ODBM_File/hints/gnukfreebsd.pl b/gnu/usr.bin/perl/ext/ODBM_File/hints/gnukfreebsd.pl
new file mode 100644
index 00000000000..6e37b40270f
--- /dev/null
+++ b/gnu/usr.bin/perl/ext/ODBM_File/hints/gnukfreebsd.pl
@@ -0,0 +1 @@
+do './hints/linux.pl';
diff --git a/gnu/usr.bin/perl/ext/ODBM_File/hints/gnuknetbsd.pl b/gnu/usr.bin/perl/ext/ODBM_File/hints/gnuknetbsd.pl
new file mode 100644
index 00000000000..6e37b40270f
--- /dev/null
+++ b/gnu/usr.bin/perl/ext/ODBM_File/hints/gnuknetbsd.pl
@@ -0,0 +1 @@
+do './hints/linux.pl';
diff --git a/gnu/usr.bin/perl/ext/POSIX/Makefile.PL b/gnu/usr.bin/perl/ext/POSIX/Makefile.PL
index ae00b047352..9cd24b040e9 100644
--- a/gnu/usr.bin/perl/ext/POSIX/Makefile.PL
+++ b/gnu/usr.bin/perl/ext/POSIX/Makefile.PL
@@ -1,3 +1,7 @@
+# Explicitly avoid including '.' in @INC; autoloader gets confused since it
+# can find POSIX.pm, but can't find autosplit.ix.
+BEGIN { @INC = '../../lib';}
+#
use ExtUtils::MakeMaker;
use ExtUtils::Constant 0.11 'WriteConstants';
use Config;
diff --git a/gnu/usr.bin/perl/ext/POSIX/hints/gnukfreebsd.pl b/gnu/usr.bin/perl/ext/POSIX/hints/gnukfreebsd.pl
new file mode 100644
index 00000000000..6e37b40270f
--- /dev/null
+++ b/gnu/usr.bin/perl/ext/POSIX/hints/gnukfreebsd.pl
@@ -0,0 +1 @@
+do './hints/linux.pl';
diff --git a/gnu/usr.bin/perl/ext/POSIX/hints/gnuknetbsd.pl b/gnu/usr.bin/perl/ext/POSIX/hints/gnuknetbsd.pl
new file mode 100644
index 00000000000..6e37b40270f
--- /dev/null
+++ b/gnu/usr.bin/perl/ext/POSIX/hints/gnuknetbsd.pl
@@ -0,0 +1 @@
+do './hints/linux.pl';
diff --git a/gnu/usr.bin/perl/ext/SDBM_File/SDBM_File.xs b/gnu/usr.bin/perl/ext/SDBM_File/SDBM_File.xs
index 3bf3c2baf95..24b2b833e5f 100644
--- a/gnu/usr.bin/perl/ext/SDBM_File/SDBM_File.xs
+++ b/gnu/usr.bin/perl/ext/SDBM_File/SDBM_File.xs
@@ -101,7 +101,7 @@ sdbm_FIRSTKEY(db)
datum_key
sdbm_NEXTKEY(db, key)
SDBM_File db
- datum_key key = key; /* never used - silence picky compilers. */
+ datum_key key;
int
sdbm_error(db)
diff --git a/gnu/usr.bin/perl/ext/Storable/hints/gnukfreebsd.pl b/gnu/usr.bin/perl/ext/Storable/hints/gnukfreebsd.pl
new file mode 100644
index 00000000000..6e37b40270f
--- /dev/null
+++ b/gnu/usr.bin/perl/ext/Storable/hints/gnukfreebsd.pl
@@ -0,0 +1 @@
+do './hints/linux.pl';
diff --git a/gnu/usr.bin/perl/ext/Storable/hints/gnuknetbsd.pl b/gnu/usr.bin/perl/ext/Storable/hints/gnuknetbsd.pl
new file mode 100644
index 00000000000..6e37b40270f
--- /dev/null
+++ b/gnu/usr.bin/perl/ext/Storable/hints/gnuknetbsd.pl
@@ -0,0 +1 @@
+do './hints/linux.pl';
diff --git a/gnu/usr.bin/perl/ext/Storable/t/HAS_ATTACH.pm b/gnu/usr.bin/perl/ext/Storable/t/HAS_ATTACH.pm
new file mode 100644
index 00000000000..72855aa101a
--- /dev/null
+++ b/gnu/usr.bin/perl/ext/Storable/t/HAS_ATTACH.pm
@@ -0,0 +1,10 @@
+package HAS_ATTACH;
+
+sub STORABLE_attach {
+ ++$attached_count;
+ return bless [], 'HAS_ATTACH';
+}
+
+++$loaded_count;
+
+1;
diff --git a/gnu/usr.bin/perl/ext/Storable/t/attach_errors.t b/gnu/usr.bin/perl/ext/Storable/t/attach_errors.t
new file mode 100755
index 00000000000..85971db72e6
--- /dev/null
+++ b/gnu/usr.bin/perl/ext/Storable/t/attach_errors.t
@@ -0,0 +1,269 @@
+#!./perl -w
+#
+# Copyright 2005, Adam Kennedy.
+#
+# You may redistribute only under the same terms as Perl 5, as specified
+# in the README file that comes with the distribution.
+#
+
+# Man, blessed.t scared the hell out of me. For a second there I thought
+# I'd lose Test::More...
+
+# This file tests several known-error cases relating to STORABLE_attach, in
+# which Storable should (correctly) throw errors.
+
+sub BEGIN {
+ if ($ENV{PERL_CORE}){
+ chdir('t') if -d 't';
+ @INC = ('.', '../lib');
+ } else {
+ unshift @INC, 't';
+ }
+ require Config; import Config;
+ if ($ENV{PERL_CORE} and $Config{'extensions'} !~ /\bStorable\b/) {
+ print "1..0 # Skip: Storable was not built\n";
+ exit 0;
+ }
+}
+
+use Test::More tests => 35;
+use Storable ();
+
+
+
+
+
+#####################################################################
+# Error 1
+#
+# Classes that implement STORABLE_thaw _cannot_ have references
+# returned by their STORABLE_freeze method. When they do, Storable
+# should throw an exception
+
+
+
+# Good Case - should not die
+{
+ my $goodfreeze = bless {}, 'My::GoodFreeze';
+ my $frozen = undef;
+ eval {
+ $frozen = Storable::freeze( $goodfreeze );
+ };
+ ok( ! $@, 'Storable does not die when STORABLE_freeze does not return references' );
+ ok( $frozen, 'Storable freezes to a string successfully' );
+
+ package My::GoodFreeze;
+
+ sub STORABLE_freeze {
+ my ($self, $clone) = @_;
+
+ # Illegally include a reference in this return
+ return ('');
+ }
+
+ sub STORABLE_attach {
+ my ($class, $clone, $string) = @_;
+ return bless { }, 'My::GoodFreeze';
+ }
+}
+
+
+
+# Error Case - should die on freeze
+{
+ my $badfreeze = bless {}, 'My::BadFreeze';
+ eval {
+ Storable::freeze( $badfreeze );
+ };
+ ok( $@, 'Storable dies correctly when STORABLE_freeze returns a referece' );
+ # Check for a unique substring of the error message
+ ok( $@ =~ /cannot return references/, 'Storable dies with the expected error' );
+
+ package My::BadFreeze;
+
+ sub STORABLE_freeze {
+ my ($self, $clone) = @_;
+
+ # Illegally include a reference in this return
+ return ('', []);
+ }
+
+ sub STORABLE_attach {
+ my ($class, $clone, $string) = @_;
+ return bless { }, 'My::BadFreeze';
+ }
+}
+
+
+
+
+
+#####################################################################
+# 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.
+
+
+
+# Good Case - should not die
+{
+ my $goodthaw = bless {}, 'My::GoodThaw';
+ my $frozen = undef;
+ eval {
+ $frozen = Storable::freeze( $goodthaw );
+ };
+ ok( $frozen, 'Storable freezes to a string as expected' );
+ my $thawed = eval {
+ Storable::thaw( $frozen );
+ };
+ isa_ok( $thawed, 'My::GoodThaw' );
+ is( $thawed->{foo}, 'bar', 'My::GoodThaw thawed correctly as expected' );
+
+ package My::GoodThaw;
+
+ sub STORABLE_freeze {
+ my ($self, $clone) = @_;
+
+ return ('');
+ }
+
+ sub STORABLE_attach {
+ my ($class, $clone, $string) = @_;
+ return bless { 'foo' => 'bar' }, 'My::GoodThaw';
+ }
+}
+
+
+
+# Bad Case - should die on thaw
+{
+ # Create the frozen string normally
+ my $badthaw = bless { }, 'My::BadThaw';
+ my $frozen = undef;
+ eval {
+ $frozen = Storable::freeze( $badthaw );
+ };
+ ok( $frozen, 'BadThaw was frozen with references correctly' );
+
+ # Set up the error condition by deleting the normal STORABLE_thaw,
+ # and creating a STORABLE_attach.
+ *My::BadThaw::STORABLE_attach = *My::BadThaw::STORABLE_thaw;
+ *My::BadThaw::STORABLE_attach = *My::BadThaw::STORABLE_thaw; # Suppress a warning
+ delete ${'My::BadThaw::'}{STORABLE_thaw};
+
+ # Trigger the error condition
+ my $thawed = undef;
+ eval {
+ $thawed = Storable::thaw( $frozen );
+ };
+ ok( $@, 'My::BadThaw object dies when thawing as expected' );
+ # Check for a snippet from the error message
+ ok( $@ =~ /unexpected references/, 'Dies with the expected error message' );
+
+ package My::BadThaw;
+
+ sub STORABLE_freeze {
+ my ($self, $clone) = @_;
+
+ return ('', []);
+ }
+
+ # Start with no STORABLE_attach method so we can get a
+ # frozen object-containing-a-reference into the freeze string.
+ sub STORABLE_thaw {
+ my ($class, $clone, $string) = @_;
+ return bless { 'foo' => 'bar' }, 'My::BadThaw';
+ }
+}
+
+
+
+
+#####################################################################
+# Error 3
+#
+# Die if what is returned by STORABLE_attach is not something of that class
+
+
+
+# Good Case - should not die
+{
+ my $goodattach = bless { }, 'My::GoodAttach';
+ my $frozen = Storable::freeze( $goodattach );
+ ok( $frozen, 'My::GoodAttach return as expected' );
+ my $thawed = eval {
+ Storable::thaw( $frozen );
+ };
+ isa_ok( $thawed, 'My::GoodAttach' );
+ is( ref($thawed), 'My::GoodAttach::Subclass',
+ 'The slightly-tricky good "returns a subclass" case returns as expected' );
+
+ package My::GoodAttach;
+
+ sub STORABLE_freeze {
+ my ($self, $cloning) = @_;
+ return ('');
+ }
+
+ sub STORABLE_attach {
+ my ($class, $cloning, $string) = @_;
+
+ return bless { }, 'My::GoodAttach::Subclass';
+ }
+
+ package My::GoodAttach::Subclass;
+
+ BEGIN {
+ @ISA = 'My::GoodAttach';
+ }
+}
+
+
+
+# Bad Cases - die on thaw
+{
+ my $returnvalue = undef;
+
+ # Create and freeze the object
+ my $badattach = bless { }, 'My::BadAttach';
+ my $frozen = Storable::freeze( $badattach );
+ ok( $frozen, 'BadAttach freezes as expected' );
+
+ # Try a number of different return values, all of which
+ # should cause Storable to die.
+ my @badthings = (
+ undef,
+ '',
+ 1,
+ [],
+ {},
+ \"foo",
+ (bless { }, 'Foo'),
+ );
+ foreach ( @badthings ) {
+ $returnvalue = $_;
+
+ my $thawed = undef;
+ eval {
+ $thawed = Storable::thaw( $frozen );
+ };
+ ok( $@, 'BadAttach dies on thaw' );
+ ok( $@ =~ /STORABLE_attach did not return a My::BadAttach object/,
+ 'BadAttach dies on thaw with the expected error message' );
+ is( $thawed, undef, 'Double checking $thawed was not set' );
+ }
+
+ package My::BadAttach;
+
+ sub STORABLE_freeze {
+ my ($self, $cloning) = @_;
+ return ('');
+ }
+
+ sub STORABLE_attach {
+ my ($class, $cloning, $string) = @_;
+
+ return $returnvalue;
+ }
+}
diff --git a/gnu/usr.bin/perl/ext/Storable/t/attach_singleton.t b/gnu/usr.bin/perl/ext/Storable/t/attach_singleton.t
new file mode 100755
index 00000000000..475204f0b57
--- /dev/null
+++ b/gnu/usr.bin/perl/ext/Storable/t/attach_singleton.t
@@ -0,0 +1,89 @@
+#!./perl -w
+#
+# Copyright 2005, Adam Kennedy.
+#
+# You may redistribute only under the same terms as Perl 5, as specified
+# in the README file that comes with the distribution.
+#
+
+# Tests freezing/thawing structures containing Singleton objects,
+# which should see both structs pointing to the same object.
+
+sub BEGIN {
+ if ($ENV{PERL_CORE}){
+ chdir('t') if -d 't';
+ @INC = ('.', '../lib');
+ } else {
+ unshift @INC, 't';
+ }
+ require Config; import Config;
+ if ($ENV{PERL_CORE} and $Config{'extensions'} !~ /\bStorable\b/) {
+ print "1..0 # Skip: Storable was not built\n";
+ exit 0;
+ }
+}
+
+use Test::More tests => 11;
+use Storable ();
+
+# Get the singleton
+my $object = My::Singleton->new;
+isa_ok( $object, 'My::Singleton' );
+
+# Confirm (for the record) that the class is actually a Singleton
+my $object2 = My::Singleton->new;
+isa_ok( $object2, 'My::Singleton' );
+is( "$object", "$object2", 'Class is a singleton' );
+
+############
+# Main Tests
+
+my $struct = [ 1, $object, 3 ];
+
+# Freeze the struct
+my $frozen = Storable::freeze( $struct );
+ok( (defined($frozen) and ! ref($frozen) and length($frozen)), 'freeze returns a string' );
+
+# Thaw the struct
+my $thawed = Storable::thaw( $frozen );
+
+# Now it should look exactly like the original
+is_deeply( $struct, $thawed, 'Struct superficially looks like the original' );
+
+# ... EXCEPT that the Singleton should be the same instance of the object
+is( "$struct->[1]", "$thawed->[1]", 'Singleton thaws correctly' );
+
+# We can also test this empirically
+$struct->[1]->{value} = 'Goodbye cruel world!';
+is_deeply( $struct, $thawed, 'Empiric testing corfirms correct behaviour' );
+
+# End Tests
+###########
+
+package My::Singleton;
+
+my $SINGLETON = undef;
+
+sub new {
+ $SINGLETON or
+ $SINGLETON = bless { value => 'Hello World!' }, $_[0];
+}
+
+sub STORABLE_freeze {
+ my $self = shift;
+
+ # We don't actually need to return anything, but provide a null string
+ # to avoid the null-list-return behaviour.
+ return ('foo');
+}
+
+sub STORABLE_attach {
+ my ($class, $clone, $string) = @_;
+ Test::More::ok( ! ref $class, 'STORABLE_attach passed class, and not an object' );
+ Test::More::is( $class, 'My::Singleton', 'STORABLE_attach is passed the correct class name' );
+ Test::More::is( $clone, 0, 'We are not in a dclone' );
+ Test::More::is( $string, 'foo', 'STORABLE_attach gets the string back' );
+
+ # Get the Singleton object and return it
+ return $class->new;
+}
diff --git a/gnu/usr.bin/perl/ext/Storable/t/circular_hook.t b/gnu/usr.bin/perl/ext/Storable/t/circular_hook.t
new file mode 100755
index 00000000000..782b3d345d0
--- /dev/null
+++ b/gnu/usr.bin/perl/ext/Storable/t/circular_hook.t
@@ -0,0 +1,91 @@
+#!./perl -w
+#
+# Copyright 2005, Adam Kennedy.
+#
+# You may redistribute only under the same terms as Perl 5, as specified
+# in the README file that comes with the distribution.
+#
+
+# Man, blessed.t scared the hell out of me. For a second there I thought
+# I'd lose Test::More...
+
+# This file tests several known-error cases relating to STORABLE_attach, in
+# which Storable should (correctly) throw errors.
+
+sub BEGIN {
+ if ($ENV{PERL_CORE}){
+ chdir('t') if -d 't';
+ @INC = ('.', '../lib');
+ } else {
+ unshift @INC, 't';
+ }
+ require Config; import Config;
+ if ($ENV{PERL_CORE} and $Config{'extensions'} !~ /\bStorable\b/) {
+ print "1..0 # Skip: Storable was not built\n";
+ exit 0;
+ }
+}
+
+use Storable ();
+use Test::More tests => 9;
+
+my $ddd = bless { }, 'Foo';
+my $eee = bless { Bar => $ddd }, 'Bar';
+$ddd->{Foo} = $eee;
+
+my $array = [ $ddd ];
+
+my $string = Storable::freeze( $array );
+my $thawed = Storable::thaw( $string );
+
+# is_deeply infinite loops in ciculars, so do it manually
+# is_deeply( $array, $thawed, 'Circular hooked objects work' );
+is( ref($thawed), 'ARRAY', 'Top level ARRAY' );
+is( scalar(@$thawed), 1, 'ARRAY contains one element' );
+isa_ok( $thawed->[0], 'Foo' );
+is( scalar(keys %{$thawed->[0]}), 1, 'Foo contains one element' );
+isa_ok( $thawed->[0]->{Foo}, 'Bar' );
+is( scalar(keys %{$thawed->[0]->{Foo}}), 1, 'Bar contains one element' );
+isa_ok( $thawed->[0]->{Foo}->{Bar}, 'Foo' );
+is( $thawed->[0], $thawed->[0]->{Foo}->{Bar}, 'Circular is... well... circular' );
+
+# Make sure the thawing went the way we expected
+is_deeply( \@Foo::order, [ 'Bar', 'Foo' ], 'thaw order is correct (depth first)' );
+
+
+
+
+
+package Foo;
+
+@order = ();
+
+sub STORABLE_freeze {
+ my ($self, $clone) = @_;
+ my $class = ref $self;
+
+ # print "# Freezing $class\n";
+
+ return ($class, $self->{$class});
+}
+
+sub STORABLE_thaw {
+ my ($self, $clone, $string, @refs) = @_;
+ my $class = ref $self;
+
+ # print "# Thawing $class\n";
+
+ $self->{$class} = shift @refs;
+
+ push @order, $class;
+
+ return;
+}
+
+package Bar;
+
+BEGIN {
+@ISA = 'Foo';
+}
+
+1;
diff --git a/gnu/usr.bin/perl/ext/Storable/t/sig_die.t b/gnu/usr.bin/perl/ext/Storable/t/sig_die.t
new file mode 100755
index 00000000000..035075213fc
--- /dev/null
+++ b/gnu/usr.bin/perl/ext/Storable/t/sig_die.t
@@ -0,0 +1,44 @@
+#!./perl
+#
+# Copyright (c) 2002 Slaven Rezic
+#
+# You may redistribute only under the same terms as Perl 5, as specified
+# in the README file that comes with the distribution.
+#
+
+sub BEGIN {
+ if ($ENV{PERL_CORE}){
+ chdir('t') if -d 't';
+ @INC = ('.', '../lib');
+ } else {
+ unshift @INC, 't';
+ }
+ require Config; import Config;
+ if ($ENV{PERL_CORE} and $Config{'extensions'} !~ /\bStorable\b/) {
+ print "1..0 # Skip: Storable was not built\n";
+ exit 0;
+ }
+}
+
+use strict;
+BEGIN {
+ if (!eval q{
+ use Test::More;
+ 1;
+ }) {
+ print "1..0 # skip: tests only work with Test::More\n";
+ exit;
+ }
+}
+
+BEGIN { plan tests => 1 }
+
+my @warns;
+$SIG{__WARN__} = sub { push @warns, shift };
+$SIG{__DIE__} = sub { require Carp; warn Carp::longmess(); warn "Evil die!" };
+
+require Storable;
+
+Storable::dclone({foo => "bar"});
+
+is(join("", @warns), "", "__DIE__ is not evil here");
diff --git a/gnu/usr.bin/perl/ext/Storable/t/testlib.pl b/gnu/usr.bin/perl/ext/Storable/t/testlib.pl
new file mode 100644
index 00000000000..6d885d7f686
--- /dev/null
+++ b/gnu/usr.bin/perl/ext/Storable/t/testlib.pl
@@ -0,0 +1,38 @@
+#!perl -w
+use strict;
+use vars '$file';
+
+$file = "storable-testfile.$$";
+die "Temporary file '$file' already exists" if -e $file;
+
+END { while (-f $file) {unlink $file or die "Can't unlink '$file': $!" }}
+
+use Storable qw (store retrieve freeze thaw nstore nfreeze);
+
+sub slurp {
+ my $file = shift;
+ local (*FH, $/);
+ open FH, "<$file" or die "Can't open '$file': $!";
+ binmode FH;
+ my $contents = <FH>;
+ die "Can't read $file: $!" unless defined $contents;
+ return $contents;
+}
+
+sub store_and_retrieve {
+ my $data = shift;
+ unlink $file or die "Can't unlink '$file': $!";
+ open FH, ">$file" or die "Can't open '$file': $!";
+ binmode FH;
+ print FH $data or die "Can't print to '$file': $!";
+ close FH or die "Can't close '$file': $!";
+
+ return eval {retrieve $file};
+}
+
+sub freeze_and_thaw {
+ my $data = shift;
+ return eval {thaw $data};
+}
+
+$file;
diff --git a/gnu/usr.bin/perl/ext/Storable/t/weak.t b/gnu/usr.bin/perl/ext/Storable/t/weak.t
new file mode 100755
index 00000000000..a8b708b1b31
--- /dev/null
+++ b/gnu/usr.bin/perl/ext/Storable/t/weak.t
@@ -0,0 +1,147 @@
+#!./perl -w
+#
+# Copyright 2004, Larry Wall.
+#
+# You may redistribute only under the same terms as Perl 5, as specified
+# in the README file that comes with the distribution.
+#
+
+sub BEGIN {
+ if ($ENV{PERL_CORE}){
+ chdir('t') if -d 't';
+ @INC = ('.', '../lib', '../ext/Storable/t');
+ } else {
+ # This lets us distribute Test::More in t/
+ unshift @INC, 't';
+ }
+ require Config; import Config;
+ if ($ENV{PERL_CORE} and $Config{'extensions'} !~ /\bStorable\b/) {
+ print "1..0 # Skip: Storable was not built\n";
+ exit 0;
+ }
+ if ($Config{extensions} !~ /\bList\/Util\b/) {
+ print "1..0 # Skip: List::Util was not built\n";
+ exit 0;
+ }
+
+ require Scalar::Util;
+ Scalar::Util->import(qw(weaken isweak));
+ if (grep { /weaken/ } @Scalar::Util::EXPORT_FAIL) {
+ print("1..0 # Skip: No support for weaken in Scalar::Util\n");
+ exit 0;
+ }
+}
+
+use Test::More 'no_plan';
+use Storable qw (store retrieve freeze thaw nstore nfreeze);
+require 'testlib.pl';
+use vars '$file';
+use strict;
+
+sub tester {
+ my ($contents, $sub, $testersub, $what) = @_;
+ # Test that if we re-write it, everything still works:
+ my $clone = &$sub ($contents);
+ is ($@, "", "There should be no error extracting for $what");
+ &$testersub ($clone, $what);
+}
+
+my $r = {};
+my $s1 = [$r, $r];
+weaken $s1->[1];
+ok (isweak($s1->[1]), "element 1 is a weak reference");
+
+my $s0 = [$r, $r];
+weaken $s0->[0];
+ok (isweak($s0->[0]), "element 0 is a weak reference");
+
+my $w = [$r];
+weaken $w->[0];
+ok (isweak($w->[0]), "element 0 is a weak reference");
+
+package OVERLOADED;
+
+use overload
+ '""' => sub { $_[0][0] };
+
+package main;
+
+$a = bless [77], 'OVERLOADED';
+
+my $o = [$a, $a];
+weaken $o->[0];
+ok (isweak($o->[0]), "element 0 is a weak reference");
+
+my @tests = (
+[$s1,
+ sub {
+ my ($clone, $what) = @_;
+ isa_ok($clone,'ARRAY');
+ isa_ok($clone->[0],'HASH');
+ isa_ok($clone->[1],'HASH');
+ ok(!isweak $clone->[0], "Element 0 isn't weak");
+ ok(isweak $clone->[1], "Element 1 is weak");
+}
+],
+# The weak reference needs to hang around long enough for other stuff to
+# be able to make references to it. So try it second.
+[$s0,
+ sub {
+ my ($clone, $what) = @_;
+ isa_ok($clone,'ARRAY');
+ isa_ok($clone->[0],'HASH');
+ isa_ok($clone->[1],'HASH');
+ ok(isweak $clone->[0], "Element 0 is weak");
+ ok(!isweak $clone->[1], "Element 1 isn't weak");
+}
+],
+[$w,
+ sub {
+ my ($clone, $what) = @_;
+ isa_ok($clone,'ARRAY');
+ if ($what eq 'nothing') {
+ # We're the original, so we're still a weakref to a hash
+ isa_ok($clone->[0],'HASH');
+ ok(isweak $clone->[0], "Element 0 is weak");
+ } else {
+ is($clone->[0],undef);
+ }
+}
+],
+[$o,
+sub {
+ my ($clone, $what) = @_;
+ isa_ok($clone,'ARRAY');
+ isa_ok($clone->[0],'OVERLOADED');
+ isa_ok($clone->[1],'OVERLOADED');
+ ok(isweak $clone->[0], "Element 0 is weak");
+ ok(!isweak $clone->[1], "Element 1 isn't weak");
+ is ("$clone->[0]", 77, "Element 0 stringifies to 77");
+ is ("$clone->[1]", 77, "Element 1 stringifies to 77");
+}
+],
+);
+
+foreach (@tests) {
+ my ($input, $testsub) = @$_;
+
+ tester($input, sub {return shift}, $testsub, 'nothing');
+
+ ok (defined store($input, $file));
+
+ # Read the contents into memory:
+ my $contents = slurp ($file);
+
+ tester($contents, \&store_and_retrieve, $testsub, 'file');
+
+ # And now try almost everything again with a Storable string
+ my $stored = freeze $input;
+ tester($stored, \&freeze_and_thaw, $testsub, 'string');
+
+ ok (defined nstore($input, $file));
+
+ tester($contents, \&store_and_retrieve, $testsub, 'network file');
+
+ $stored = nfreeze $input;
+ tester($stored, \&freeze_and_thaw, $testsub, 'network string');
+}
diff --git a/gnu/usr.bin/perl/ext/Sys/Syslog/Changes b/gnu/usr.bin/perl/ext/Sys/Syslog/Changes
new file mode 100644
index 00000000000..0a0e15e1478
--- /dev/null
+++ b/gnu/usr.bin/perl/ext/Sys/Syslog/Changes
@@ -0,0 +1,50 @@
+Revision history for Sys-Syslog
+
+0.13 2006.01.11
+ [CODE] Merged blead@26768: If getservbyname fails tell what service
+ the lookup attempt tried to use.
+ [CODE] Merged blead@26769: suppress Sys::Hostname usage and directly
+ use INADDR_LOOPBACK.
+ [CODE] Merged blead@26772: $host needs to stay in case the user sets it.
+ [CODE] Merged blead@26773: check that $syslog_path is a socket.
+ [TESTS] RT#16980 (Alan Burlison): Sys::Syslog blows up rather
+ spectacularly on Solaris. Corrected by previous patches.
+ [TESTS] Applied Gisle Aas patch for a better handling of error messages,
+ then optimized it.
+ [TESTS] RT#16974: Failed test in t/podspell. This test is now skipped.
+
+0.12 2006.01.07
+ [CODE] Merged some modifications from bleadperl.
+ [DOC] Added a link to an article about Sys::Syslog.
+ [TESTS] Removed optional dependency on Test::Exception.
+ [TESTS] Improved t/constant.t
+ [TESTS] Rewrote t/constants.t because future versions of
+ ExtUtils::Constant will prevent the constant() function from
+ being directly called.
+
+0.11 2005.12.28
+ [BUGFIX] setlogmask() now behaves like its C counterpart.
+ [CODE] Can now export and use the macros.
+ [CODE] Support for three Exporter tags.
+ [CODE] XSLoader is now optional.
+ [CODE] No longer "use"s Sys::Hostname as it was "require"d where needed.
+ [CODE] RT#16604: Use local timestamp.
+ [DIST] Merged change from blead@26343
+ [DOC] Improved documentation.
+ [TESTS] Added more tests to t/syslog.t in order to increase code coverage.
+
+0.10 2005.12.08
+ [DOC] Improved documentation.
+ [TESTS] Added -T to t/syslog.t
+ [TESTS] Added t/constants.t to check the macros.
+ [TESTS] Added t/distchk.t, t/podspell.t, t/podcover.t, t/portfs.t
+
+0.09 2005.12.06
+ [CODE] Now setlogsock() really croak(), as documented.
+ [DIST] CPANized from blead@26281.
+ [DIST] Modified Makefile.PL so that ExtUtils::Constant is conditionaly
+ used, with a fallback in the case it's not available.
+ [DIST] Bumped version to 0.09
+ [DOC] Added support and license information.
+ [TESTS] Rewrote and ported t/syslog.t to Test::More
+
diff --git a/gnu/usr.bin/perl/ext/Sys/Syslog/README b/gnu/usr.bin/perl/ext/Sys/Syslog/README
new file mode 100644
index 00000000000..0d468645ee5
--- /dev/null
+++ b/gnu/usr.bin/perl/ext/Sys/Syslog/README
@@ -0,0 +1,70 @@
+NAME
+
+ Sys::Syslog - Perl interface to the UNIX syslog(3) calls
+
+
+DESCRIPTION
+
+ Sys::Syslog is an interface to the UNIX syslog(3) program.
+ Call syslog() with a string priority and a list of printf() args
+ just like syslog(3).
+
+
+INSTALLATION
+
+ To install this module, run the following commands:
+
+ $ perl Makefile.PL
+ $ make
+ $ make test
+ $ make install
+
+ A ANSI-compliant compiler is required to compile the extension.
+
+ Sys::Syslog has been tested by the author on the following systems,
+ but is likely to run on many more:
+
+ - Linux 2.6, gcc 3.4.1
+ - FreeBSD 4.7, gcc 2.95.4
+ - Mac OS X 10.4, gcc 4.0.1
+
+ Sys::Syslog should on any Perl since 5.6.0. This module has been
+ tested by the author to check that it works with the following
+ versions ot Perl:
+
+ - Perl 5.6.2 i686-linux (custom build)
+ - Perl 5.8.5 i386-linux-thread-multi (vendor build)
+ - Perl 5.6.1 i386-freebsd (custom build)
+ - Perl 5.8.7 i386-freebsd (custom build)
+ - Perl 5.8.6 darwin-thread-multi-2level (vendor build)
+
+ See also the corresponding CPAN Testers page:
+ http://testers.cpan.org/show/Sys-Syslog.html
+
+
+SUPPORT AND DOCUMENTATION
+
+ After installing, you can find documentation for this module
+ with the perldoc command.
+
+ perldoc Sys::Syslog
+
+ You can also look for information at:
+
+ Search CPAN
+ http://search.cpan.org/dist/Sys-Syslog
+
+ CPAN Request Tracker:
+ http://rt.cpan.org/NoAuth/Bugs.html?Dist=Sys-Syslog
+
+ AnnoCPAN, annotated CPAN documentation:
+ http://annocpan.org/dist/Sys-Syslog
+
+ CPAN Ratings:
+ http://cpanratings.perl.org/d/Sys-Syslog
+
+
+COPYRIGHT AND LICENCE
+
+ 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/ext/Sys/Syslog/fallback/const-c.inc b/gnu/usr.bin/perl/ext/Sys/Syslog/fallback/const-c.inc
new file mode 100644
index 00000000000..b0a08bdfa4e
--- /dev/null
+++ b/gnu/usr.bin/perl/ext/Sys/Syslog/fallback/const-c.inc
@@ -0,0 +1,559 @@
+#define PERL_constant_NOTFOUND 1
+#define PERL_constant_NOTDEF 2
+#define PERL_constant_ISIV 3
+#define PERL_constant_ISNO 4
+#define PERL_constant_ISNV 5
+#define PERL_constant_ISPV 6
+#define PERL_constant_ISPVN 7
+#define PERL_constant_ISSV 8
+#define PERL_constant_ISUNDEF 9
+#define PERL_constant_ISUV 10
+#define PERL_constant_ISYES 11
+
+#ifndef NVTYPE
+typedef double NV; /* 5.6 and later define NVTYPE, and typedef NV to it. */
+#endif
+#ifndef aTHX_
+#define aTHX_ /* 5.6 or later define this for threading support. */
+#endif
+#ifndef pTHX_
+#define pTHX_ /* 5.6 or later define this for threading support. */
+#endif
+
+static int
+constant_7 (pTHX_ const char *name, IV *iv_return) {
+ /* When generated this function returned values for the list of names given
+ here. However, subsequent manual editing may have added or removed some.
+ LOG_ERR LOG_FTP LOG_LPR LOG_PID */
+ /* Offset 4 gives the best switch position. */
+ switch (name[4]) {
+ case 'E':
+ if (memEQ(name, "LOG_ERR", 7)) {
+ /* ^ */
+#ifdef LOG_ERR
+ *iv_return = LOG_ERR;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
+ break;
+ case 'F':
+ if (memEQ(name, "LOG_FTP", 7)) {
+ /* ^ */
+#ifdef LOG_FTP
+ *iv_return = LOG_FTP;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
+ break;
+ case 'L':
+ if (memEQ(name, "LOG_LPR", 7)) {
+ /* ^ */
+#ifdef LOG_LPR
+ *iv_return = LOG_LPR;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
+ break;
+ case 'P':
+ if (memEQ(name, "LOG_PID", 7)) {
+ /* ^ */
+#ifdef LOG_PID
+ *iv_return = LOG_PID;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
+ break;
+ }
+ return PERL_constant_NOTFOUND;
+}
+
+static int
+constant_8 (pTHX_ const char *name, IV *iv_return) {
+ /* When generated this function returned values for the list of names given
+ here. However, subsequent manual editing may have added or removed some.
+ LOG_AUTH LOG_CONS LOG_CRIT LOG_CRON LOG_INFO LOG_KERN LOG_LFMT LOG_MAIL
+ LOG_NEWS LOG_USER LOG_UUCP */
+ /* Offset 6 gives the best switch position. */
+ switch (name[6]) {
+ case 'C':
+ if (memEQ(name, "LOG_UUCP", 8)) {
+ /* ^ */
+#ifdef LOG_UUCP
+ *iv_return = LOG_UUCP;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
+ break;
+ case 'E':
+ if (memEQ(name, "LOG_USER", 8)) {
+ /* ^ */
+#ifdef LOG_USER
+ *iv_return = LOG_USER;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
+ break;
+ case 'F':
+ if (memEQ(name, "LOG_INFO", 8)) {
+ /* ^ */
+#ifdef LOG_INFO
+ *iv_return = LOG_INFO;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
+ break;
+ case 'I':
+ if (memEQ(name, "LOG_CRIT", 8)) {
+ /* ^ */
+#ifdef LOG_CRIT
+ *iv_return = LOG_CRIT;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
+ if (memEQ(name, "LOG_MAIL", 8)) {
+ /* ^ */
+#ifdef LOG_MAIL
+ *iv_return = LOG_MAIL;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
+ break;
+ case 'M':
+ if (memEQ(name, "LOG_LFMT", 8)) {
+ /* ^ */
+#ifdef LOG_LFMT
+ *iv_return = LOG_LFMT;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
+ break;
+ case 'N':
+ if (memEQ(name, "LOG_CONS", 8)) {
+ /* ^ */
+#ifdef LOG_CONS
+ *iv_return = LOG_CONS;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
+ break;
+ case 'O':
+ if (memEQ(name, "LOG_CRON", 8)) {
+ /* ^ */
+#ifdef LOG_CRON
+ *iv_return = LOG_CRON;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
+ break;
+ case 'R':
+ if (memEQ(name, "LOG_KERN", 8)) {
+ /* ^ */
+#ifdef LOG_KERN
+ *iv_return = LOG_KERN;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
+ break;
+ case 'T':
+ if (memEQ(name, "LOG_AUTH", 8)) {
+ /* ^ */
+#ifdef LOG_AUTH
+ *iv_return = LOG_AUTH;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
+ break;
+ case 'W':
+ if (memEQ(name, "LOG_NEWS", 8)) {
+ /* ^ */
+#ifdef LOG_NEWS
+ *iv_return = LOG_NEWS;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
+ break;
+ }
+ return PERL_constant_NOTFOUND;
+}
+
+static int
+constant_9 (pTHX_ const char *name, IV *iv_return, const char **pv_return) {
+ /* When generated this function returned values for the list of names given
+ here. However, subsequent manual editing may have added or removed some.
+ LOG_ALERT LOG_DEBUG LOG_EMERG _PATH_LOG */
+ /* Offset 4 gives the best switch position. */
+ switch (name[4]) {
+ case 'A':
+ if (memEQ(name, "LOG_ALERT", 9)) {
+ /* ^ */
+#ifdef LOG_ALERT
+ *iv_return = LOG_ALERT;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
+ break;
+ case 'D':
+ if (memEQ(name, "LOG_DEBUG", 9)) {
+ /* ^ */
+#ifdef LOG_DEBUG
+ *iv_return = LOG_DEBUG;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
+ break;
+ case 'E':
+ if (memEQ(name, "LOG_EMERG", 9)) {
+ /* ^ */
+#ifdef LOG_EMERG
+ *iv_return = LOG_EMERG;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
+ break;
+ case 'H':
+ if (memEQ(name, "_PATH_LOG", 9)) {
+ /* ^ */
+#ifdef _PATH_LOG
+ *pv_return = _PATH_LOG;
+ return PERL_constant_ISPV;
+#else
+ *pv_return = "/dev/log";
+ return PERL_constant_ISPV;
+#endif
+ }
+ break;
+ }
+ return PERL_constant_NOTFOUND;
+}
+
+static int
+constant_10 (pTHX_ const char *name, IV *iv_return) {
+ /* When generated this function returned values for the list of names given
+ here. However, subsequent manual editing may have added or removed some.
+ LOG_DAEMON LOG_LOCAL0 LOG_LOCAL1 LOG_LOCAL2 LOG_LOCAL3 LOG_LOCAL4
+ LOG_LOCAL5 LOG_LOCAL6 LOG_LOCAL7 LOG_NDELAY LOG_NOTICE LOG_NOWAIT
+ LOG_ODELAY LOG_PERROR LOG_SYSLOG */
+ /* Offset 9 gives the best switch position. */
+ switch (name[9]) {
+ case '0':
+ if (memEQ(name, "LOG_LOCAL", 9)) {
+ /* 0 */
+#ifdef LOG_LOCAL0
+ *iv_return = LOG_LOCAL0;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
+ break;
+ case '1':
+ if (memEQ(name, "LOG_LOCAL", 9)) {
+ /* 1 */
+#ifdef LOG_LOCAL1
+ *iv_return = LOG_LOCAL1;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
+ break;
+ case '2':
+ if (memEQ(name, "LOG_LOCAL", 9)) {
+ /* 2 */
+#ifdef LOG_LOCAL2
+ *iv_return = LOG_LOCAL2;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
+ break;
+ case '3':
+ if (memEQ(name, "LOG_LOCAL", 9)) {
+ /* 3 */
+#ifdef LOG_LOCAL3
+ *iv_return = LOG_LOCAL3;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
+ break;
+ case '4':
+ if (memEQ(name, "LOG_LOCAL", 9)) {
+ /* 4 */
+#ifdef LOG_LOCAL4
+ *iv_return = LOG_LOCAL4;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
+ break;
+ case '5':
+ if (memEQ(name, "LOG_LOCAL", 9)) {
+ /* 5 */
+#ifdef LOG_LOCAL5
+ *iv_return = LOG_LOCAL5;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
+ break;
+ case '6':
+ if (memEQ(name, "LOG_LOCAL", 9)) {
+ /* 6 */
+#ifdef LOG_LOCAL6
+ *iv_return = LOG_LOCAL6;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
+ break;
+ case '7':
+ if (memEQ(name, "LOG_LOCAL", 9)) {
+ /* 7 */
+#ifdef LOG_LOCAL7
+ *iv_return = LOG_LOCAL7;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
+ break;
+ case 'E':
+ if (memEQ(name, "LOG_NOTIC", 9)) {
+ /* E */
+#ifdef LOG_NOTICE
+ *iv_return = LOG_NOTICE;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
+ break;
+ case 'G':
+ if (memEQ(name, "LOG_SYSLO", 9)) {
+ /* G */
+#ifdef LOG_SYSLOG
+ *iv_return = LOG_SYSLOG;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
+ break;
+ case 'N':
+ if (memEQ(name, "LOG_DAEMO", 9)) {
+ /* N */
+#ifdef LOG_DAEMON
+ *iv_return = LOG_DAEMON;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
+ break;
+ case 'R':
+ if (memEQ(name, "LOG_PERRO", 9)) {
+ /* R */
+#ifdef LOG_PERROR
+ *iv_return = LOG_PERROR;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
+ break;
+ case 'T':
+ if (memEQ(name, "LOG_NOWAI", 9)) {
+ /* T */
+#ifdef LOG_NOWAIT
+ *iv_return = LOG_NOWAIT;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
+ break;
+ case 'Y':
+ if (memEQ(name, "LOG_NDELA", 9)) {
+ /* Y */
+#ifdef LOG_NDELAY
+ *iv_return = LOG_NDELAY;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
+ if (memEQ(name, "LOG_ODELA", 9)) {
+ /* Y */
+#ifdef LOG_ODELAY
+ *iv_return = LOG_ODELAY;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
+ break;
+ }
+ return PERL_constant_NOTFOUND;
+}
+
+static int
+constant_11 (pTHX_ const char *name, IV *iv_return) {
+ /* When generated this function returned values for the list of names given
+ here. However, subsequent manual editing may have added or removed some.
+ LOG_FACMASK LOG_PRIMASK LOG_WARNING */
+ /* Offset 6 gives the best switch position. */
+ switch (name[6]) {
+ case 'C':
+ if (memEQ(name, "LOG_FACMASK", 11)) {
+ /* ^ */
+#ifdef LOG_FACMASK
+ *iv_return = LOG_FACMASK;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
+ break;
+ case 'I':
+ if (memEQ(name, "LOG_PRIMASK", 11)) {
+ /* ^ */
+#ifdef LOG_PRIMASK
+ *iv_return = LOG_PRIMASK;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
+ break;
+ case 'R':
+ if (memEQ(name, "LOG_WARNING", 11)) {
+ /* ^ */
+#ifdef LOG_WARNING
+ *iv_return = LOG_WARNING;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
+ break;
+ }
+ return PERL_constant_NOTFOUND;
+}
+
+static int
+constant (pTHX_ const char *name, STRLEN len, IV *iv_return, const char **pv_return) {
+ /* Initially switch on the length of the name. */
+ /* When generated this function returned values for the list of names given
+ in this section of perl code. Rather than manually editing these functions
+ to add or remove constants, which would result in this comment and section
+ of code becoming inaccurate, we recommend that you edit this section of
+ code, and use it to regenerate a new set of constant functions which you
+ then use to replace the originals.
+
+ Regenerate these constant functions by feeding this entire source file to
+ perl -x
+
+#!/usr/bin/perl5.8.5 -w
+use ExtUtils::Constant qw (constant_types C_constant XS_constant);
+
+my $types = {map {($_, 1)} qw(IV PV)};
+my @names = (qw(LOG_ALERT LOG_AUTH LOG_AUTHPRIV LOG_CONS LOG_CRIT LOG_CRON
+ LOG_DAEMON LOG_DEBUG LOG_EMERG LOG_ERR LOG_FACMASK LOG_FTP
+ LOG_INFO LOG_KERN LOG_LFMT LOG_LOCAL0 LOG_LOCAL1 LOG_LOCAL2
+ LOG_LOCAL3 LOG_LOCAL4 LOG_LOCAL5 LOG_LOCAL6 LOG_LOCAL7 LOG_LPR
+ LOG_MAIL LOG_NDELAY LOG_NEWS LOG_NFACILITIES LOG_NOTICE
+ LOG_NOWAIT LOG_ODELAY LOG_PERROR LOG_PID LOG_PRIMASK LOG_SYSLOG
+ LOG_USER LOG_UUCP LOG_WARNING),
+ {name=>"_PATH_LOG", type=>"PV", default=>["PV", "\"/dev/log\""]});
+
+print constant_types(); # macro defs
+foreach (C_constant ("Sys::Syslog", 'constant', 'IV', $types, undef, 3, @names) ) {
+ print $_, "\n"; # C constant subs
+}
+print "#### XS Section:\n";
+print XS_constant ("Sys::Syslog", $types);
+__END__
+ */
+
+ switch (len) {
+ case 7:
+ return constant_7 (aTHX_ name, iv_return);
+ break;
+ case 8:
+ return constant_8 (aTHX_ name, iv_return);
+ break;
+ case 9:
+ return constant_9 (aTHX_ name, iv_return, pv_return);
+ break;
+ case 10:
+ return constant_10 (aTHX_ name, iv_return);
+ break;
+ case 11:
+ return constant_11 (aTHX_ name, iv_return);
+ break;
+ case 12:
+ if (memEQ(name, "LOG_AUTHPRIV", 12)) {
+#ifdef LOG_AUTHPRIV
+ *iv_return = LOG_AUTHPRIV;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
+ break;
+ case 15:
+ if (memEQ(name, "LOG_NFACILITIES", 15)) {
+#ifdef LOG_NFACILITIES
+ *iv_return = LOG_NFACILITIES;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
+ break;
+ }
+ return PERL_constant_NOTFOUND;
+}
+
diff --git a/gnu/usr.bin/perl/ext/Sys/Syslog/fallback/const-xs.inc b/gnu/usr.bin/perl/ext/Sys/Syslog/fallback/const-xs.inc
new file mode 100644
index 00000000000..4da6b668050
--- /dev/null
+++ b/gnu/usr.bin/perl/ext/Sys/Syslog/fallback/const-xs.inc
@@ -0,0 +1,87 @@
+void
+constant(sv)
+ PREINIT:
+#ifdef dXSTARG
+ dXSTARG; /* Faster if we have it. */
+#else
+ dTARGET;
+#endif
+ STRLEN len;
+ int type;
+ IV iv;
+ /* NV nv; Uncomment this if you need to return NVs */
+ const char *pv;
+ INPUT:
+ SV * sv;
+ const char * s = SvPV(sv, len);
+ PPCODE:
+ /* Change this to constant(aTHX_ s, len, &iv, &nv);
+ if you need to return both NVs and IVs */
+ type = constant(aTHX_ s, len, &iv, &pv);
+ /* Return 1 or 2 items. First is error message, or undef if no error.
+ Second, if present, is found value */
+ switch (type) {
+ case PERL_constant_NOTFOUND:
+ sv = sv_2mortal(newSVpvf("%s is not a valid Sys::Syslog macro", s));
+ PUSHs(sv);
+ break;
+ case PERL_constant_NOTDEF:
+ sv = sv_2mortal(newSVpvf(
+ "Your vendor has not defined Sys::Syslog macro %s, used", s));
+ PUSHs(sv);
+ break;
+ case PERL_constant_ISIV:
+ EXTEND(SP, 1);
+ PUSHs(&PL_sv_undef);
+ PUSHi(iv);
+ break;
+ /* Uncomment this if you need to return NOs
+ case PERL_constant_ISNO:
+ EXTEND(SP, 1);
+ PUSHs(&PL_sv_undef);
+ PUSHs(&PL_sv_no);
+ break; */
+ /* Uncomment this if you need to return NVs
+ case PERL_constant_ISNV:
+ EXTEND(SP, 1);
+ PUSHs(&PL_sv_undef);
+ PUSHn(nv);
+ break; */
+ case PERL_constant_ISPV:
+ EXTEND(SP, 1);
+ PUSHs(&PL_sv_undef);
+ PUSHp(pv, strlen(pv));
+ break;
+ /* Uncomment this if you need to return PVNs
+ case PERL_constant_ISPVN:
+ EXTEND(SP, 1);
+ PUSHs(&PL_sv_undef);
+ PUSHp(pv, iv);
+ break; */
+ /* Uncomment this if you need to return SVs
+ case PERL_constant_ISSV:
+ EXTEND(SP, 1);
+ PUSHs(&PL_sv_undef);
+ PUSHs(sv);
+ break; */
+ /* Uncomment this if you need to return UNDEFs
+ case PERL_constant_ISUNDEF:
+ break; */
+ /* Uncomment this if you need to return UVs
+ case PERL_constant_ISUV:
+ EXTEND(SP, 1);
+ PUSHs(&PL_sv_undef);
+ PUSHu((UV)iv);
+ break; */
+ /* Uncomment this if you need to return YESs
+ case PERL_constant_ISYES:
+ EXTEND(SP, 1);
+ PUSHs(&PL_sv_undef);
+ PUSHs(&PL_sv_yes);
+ break; */
+ default:
+ sv = sv_2mortal(newSVpvf(
+ "Unexpected return type %d while processing Sys::Syslog macro %s, used",
+ type, s));
+ PUSHs(sv);
+ }
diff --git a/gnu/usr.bin/perl/ext/Sys/Syslog/t/00-load.t b/gnu/usr.bin/perl/ext/Sys/Syslog/t/00-load.t
new file mode 100755
index 00000000000..35d90426801
--- /dev/null
+++ b/gnu/usr.bin/perl/ext/Sys/Syslog/t/00-load.t
@@ -0,0 +1,9 @@
+#!perl -T
+
+use Test::More tests => 1;
+
+BEGIN {
+ use_ok( 'Sys::Syslog' );
+}
+
+#diag( "Testing Sys::Syslog $Sys::Syslog::VERSION, Perl $], $^X" );
diff --git a/gnu/usr.bin/perl/ext/Sys/Syslog/t/constants.t b/gnu/usr.bin/perl/ext/Sys/Syslog/t/constants.t
new file mode 100755
index 00000000000..d7c7b0c7dfe
--- /dev/null
+++ b/gnu/usr.bin/perl/ext/Sys/Syslog/t/constants.t
@@ -0,0 +1,41 @@
+#!/usr/bin/perl -T
+use strict;
+use File::Spec;
+use Test::More;
+
+my $macrosall = $ENV{PERL_CORE} ? File::Spec->catfile(qw(.. ext Sys Syslog macros.all))
+ : 'macros.all';
+open(MACROS, $macrosall) or plan skip_all => "can't read '$macrosall': $!";
+my @names = map {chomp;$_} <MACROS>;
+close(MACROS);
+plan tests => @names * 2 + 2;
+
+my $callpack = my $testpack = 'Sys::Syslog';
+eval "use $callpack";
+
+eval "${callpack}::This()";
+like( $@, "/^This is not a valid $testpack macro/", "trying a non-existing macro");
+
+eval "${callpack}::NOSUCHNAME()";
+like( $@, "/^NOSUCHNAME is not a valid $testpack macro/", "trying a non-existing macro");
+
+# Testing all macros
+if(@names) {
+ for my $name (@names) {
+ SKIP: {
+ $name =~ /^(\w+)$/ or skip "invalid name '$name'", 2;
+ $name = $1;
+ my $v = eval "${callpack}::$name()";
+
+ if(defined($v) && $v =~ /^\d+$/) {
+ is( $@, '', "calling the constant $name as a function" );
+ like( $v, '/^\d+$/', "checking that $name is a number ($v)" );
+
+ } else {
+ like( $@, "/^Your vendor has not defined $testpack macro $name/",
+ "calling the constant via its name" );
+ skip "irrelevant test in this case", 1
+ }
+ }
+ }
+}
diff --git a/gnu/usr.bin/perl/ext/re/re.pm b/gnu/usr.bin/perl/ext/re/re.pm
index bf26fd21235..6e9d1218ef0 100644
--- a/gnu/usr.bin/perl/ext/re/re.pm
+++ b/gnu/usr.bin/perl/ext/re/re.pm
@@ -1,6 +1,6 @@
package re;
-our $VERSION = 0.04;
+our $VERSION = 0.05;
=head1 NAME
@@ -45,7 +45,7 @@ C<(?{ ... })> zero-width assertions even if regular expression contains
variable interpolation. That is normally disallowed, since it is a
potential security risk. Note that this pragma is ignored when the regular
expression is obtained from tainted data, i.e. evaluation is always
-disallowed with tainted regular expresssions. See L<perlre/(?{ code })>.
+disallowed with tainted regular expressions. See L<perlre/(?{ code })>.
For the purpose of this pragma, interpolation of precompiled regular
expressions (i.e., the result of C<qr//>) is I<not> considered variable
diff --git a/gnu/usr.bin/perl/ext/threads/hints/linux.pl b/gnu/usr.bin/perl/ext/threads/hints/linux.pl
new file mode 100644
index 00000000000..020f56d2f7e
--- /dev/null
+++ b/gnu/usr.bin/perl/ext/threads/hints/linux.pl
@@ -0,0 +1,3 @@
+# https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=101767
+# explicit linking is required to ensure the use of versioned symbols
+$self->{LIBS} = ['-lpthread'] if $Config{libs} =~ /-lpthread/;
diff --git a/gnu/usr.bin/perl/ext/threads/shared/hints/linux.pl b/gnu/usr.bin/perl/ext/threads/shared/hints/linux.pl
new file mode 100644
index 00000000000..020f56d2f7e
--- /dev/null
+++ b/gnu/usr.bin/perl/ext/threads/shared/hints/linux.pl
@@ -0,0 +1,3 @@
+# https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=101767
+# explicit linking is required to ensure the use of versioned symbols
+$self->{LIBS} = ['-lpthread'] if $Config{libs} =~ /-lpthread/;
diff --git a/gnu/usr.bin/perl/ext/threads/shared/t/blessed.t b/gnu/usr.bin/perl/ext/threads/shared/t/blessed.t
new file mode 100755
index 00000000000..78e68c13bcb
--- /dev/null
+++ b/gnu/usr.bin/perl/ext/threads/shared/t/blessed.t
@@ -0,0 +1,134 @@
+use warnings;
+
+BEGIN {
+# chdir 't' if -d 't';
+# push @INC ,'../lib';
+ require Config; import Config;
+ unless ($Config{'useithreads'}) {
+ print "1..0 # Skip: no useithreads\n";
+ exit 0;
+ }
+}
+
+
+sub ok {
+ my ($id, $ok, $name) = @_;
+
+ $name = '' unless defined $name;
+ # You have to do it this way or VMS will get confused.
+ print $ok ? "ok $id - $name\n" : "not ok $id - $name\n";
+
+ printf "# Failed test at line %d\n", (caller)[2] unless $ok;
+
+ return $ok;
+}
+
+sub skip {
+ my ($id, $ok, $name) = @_;
+ print "ok $id # skip _thrcnt - $name \n";
+}
+
+use ExtUtils::testlib;
+use strict;
+BEGIN { print "1..36\n" };
+use threads;
+use threads::shared;
+
+my ($hobj, $aobj, $sobj) : shared;
+
+$hobj = &share({});
+$aobj = &share([]);
+my $sref = \do{ my $x };
+share($sref);
+$sobj = $sref;
+
+threads->new(sub {
+ # Bless objects
+ bless $hobj, 'foo';
+ bless $aobj, 'bar';
+ bless $sobj, 'baz';
+
+ # Add data to objects
+ $$aobj[0] = bless(&share({}), 'yin');
+ $$aobj[1] = bless(&share([]), 'yang');
+ $$aobj[2] = $sobj;
+
+ $$hobj{'hash'} = bless(&share({}), 'yin');
+ $$hobj{'array'} = bless(&share([]), 'yang');
+ $$hobj{'scalar'} = $sobj;
+
+ $$sobj = 3;
+
+ # Test objects in child thread
+ ok(1, ref($hobj) eq 'foo', "hash blessing does work");
+ ok(2, ref($aobj) eq 'bar', "array blessing does work");
+ ok(3, ref($sobj) eq 'baz', "scalar blessing does work");
+ ok(4, $$sobj eq '3', "scalar contents okay");
+
+ ok(5, ref($$aobj[0]) eq 'yin', "blessed hash in array");
+ ok(6, ref($$aobj[1]) eq 'yang', "blessed array in array");
+ ok(7, ref($$aobj[2]) eq 'baz', "blessed scalar in array");
+ ok(8, ${$$aobj[2]} eq '3', "blessed scalar in array contents");
+
+ ok(9, ref($$hobj{'hash'}) eq 'yin', "blessed hash in hash");
+ ok(10, ref($$hobj{'array'}) eq 'yang', "blessed array in hash");
+ ok(11, ref($$hobj{'scalar'}) eq 'baz', "blessed scalar in hash");
+ ok(12, ${$$hobj{'scalar'}} eq '3', "blessed scalar in hash contents");
+
+ })->join;
+
+# Test objects in parent thread
+ok(13, ref($hobj) eq 'foo', "hash blessing does work");
+ok(14, ref($aobj) eq 'bar', "array blessing does work");
+ok(15, ref($sobj) eq 'baz', "scalar blessing does work");
+ok(16, $$sobj eq '3', "scalar contents okay");
+
+ok(17, ref($$aobj[0]) eq 'yin', "blessed hash in array");
+ok(18, ref($$aobj[1]) eq 'yang', "blessed array in array");
+ok(19, ref($$aobj[2]) eq 'baz', "blessed scalar in array");
+ok(20, ${$$aobj[2]} eq '3', "blessed scalar in array contents");
+
+ok(21, ref($$hobj{'hash'}) eq 'yin', "blessed hash in hash");
+ok(22, ref($$hobj{'array'}) eq 'yang', "blessed array in hash");
+ok(23, ref($$hobj{'scalar'}) eq 'baz', "blessed scalar in hash");
+ok(24, ${$$hobj{'scalar'}} eq '3', "blessed scalar in hash contents");
+
+threads->new(sub {
+ # Rebless objects
+ bless $hobj, 'oof';
+ bless $aobj, 'rab';
+ bless $sobj, 'zab';
+
+ my $data = $$aobj[0];
+ bless $data, 'niy';
+ $$aobj[0] = $data;
+ $data = $$aobj[1];
+ bless $data, 'gnay';
+ $$aobj[1] = $data;
+
+ $data = $$hobj{'hash'};
+ bless $data, 'niy';
+ $$hobj{'hash'} = $data;
+ $data = $$hobj{'array'};
+ bless $data, 'gnay';
+ $$hobj{'array'} = $data;
+
+ $$sobj = 'test';
+ })->join;
+
+# Test reblessing
+ok(25, ref($hobj) eq 'oof', "hash reblessing does work");
+ok(26, ref($aobj) eq 'rab', "array reblessing does work");
+ok(27, ref($sobj) eq 'zab', "scalar reblessing does work");
+ok(28, $$sobj eq 'test', "scalar contents okay");
+
+ok(29, ref($$aobj[0]) eq 'niy', "reblessed hash in array");
+ok(30, ref($$aobj[1]) eq 'gnay', "reblessed array in array");
+ok(31, ref($$aobj[2]) eq 'zab', "reblessed scalar in array");
+ok(32, ${$$aobj[2]} eq 'test', "reblessed scalar in array contents");
+
+ok(33, ref($$hobj{'hash'}) eq 'niy', "reblessed hash in hash");
+ok(34, ref($$hobj{'array'}) eq 'gnay', "reblessed array in hash");
+ok(35, ref($$hobj{'scalar'}) eq 'zab', "reblessed scalar in hash");
+ok(36, ${$$hobj{'scalar'}} eq 'test', "reblessed scalar in hash contents");
+
diff --git a/gnu/usr.bin/perl/genpacksizetables.pl b/gnu/usr.bin/perl/genpacksizetables.pl
new file mode 100644
index 00000000000..2987499b95a
--- /dev/null
+++ b/gnu/usr.bin/perl/genpacksizetables.pl
@@ -0,0 +1,136 @@
+#!/usr/bin/perl -w
+# I'm assuming that you're running this on some kind of ASCII system, but
+# it will generate EDCDIC too. (TODO)
+use strict;
+use Encode;
+
+my @lines = grep {!/^#/} <DATA>;
+
+sub addline {
+ my ($arrays, $chrmap, $letter, $arrayname, $spare, $nocsum, $size,
+ $condition) = @_;
+ my $line = "/* $letter */ $size";
+ $line .= " | PACK_SIZE_SPARE" if $spare;
+ $line .= " | PACK_SIZE_CANNOT_CSUM" if $nocsum;
+ $line .= ",";
+ # And then the hack
+ $line = [$condition, $line] if $condition;
+ $arrays->{$arrayname}->[ord $chrmap->{$letter}] = $line;
+ # print ord $chrmap->{$letter}, " $line\n";
+}
+
+sub output_tables {
+ my %arrays;
+
+ my $chrmap = shift;
+ foreach (@_) {
+ my ($letter, $shriek, $spare, $nocsum, $size, $condition)
+ = /^([A-Za-z])(!?)\t(\S*)\t(\S*)\t([^\t\n]+)(?:\t+(.*))?$/;
+ die "Can't parse '$_'" unless $size;
+
+ if (defined $condition) {
+ $condition = join " && ", map {"defined($_)"} split ' ', $condition;
+ }
+ unless ($size =~ s/^=//) {
+ $size = "sizeof($size)";
+ }
+
+ addline (\%arrays, $chrmap, $letter, $shriek ? 'shrieking' : 'normal',
+ $spare, $nocsum, $size, $condition);
+ }
+
+ my %earliest;
+ foreach my $arrayname (sort keys %arrays) {
+ my $array = $arrays{$arrayname};
+ die "No defined entries in $arrayname" unless $array->[$#$array];
+ # Find the first used entry
+ my $earliest = 0;
+ $earliest++ while (!$array->[$earliest]);
+ # Remove all the empty elements.
+ splice @$array, 0, $earliest;
+ print "unsigned char size_${arrayname}[", scalar @$array, "] = {\n";
+ my @lines;
+ foreach (@$array) {
+ # Remove the assumption here that the last entry isn't conditonal
+ if (ref $_) {
+ push @lines,
+ ["#if $_->[0]", " $_->[1]", "#else", " 0,", "#endif"];
+ } else {
+ push @lines, $_ ? " $_" : " 0,";
+ }
+ }
+ # remove the last, annoying, comma
+ my $last = $lines[$#lines];
+ my $got;
+ foreach (ref $last ? @$last : $last) {
+ $got += s/,$//;
+ }
+ die "Last entry had no commas" unless $got;
+ print map {"$_\n"} ref $_ ? @$_ : $_ foreach @lines;
+ print "};\n";
+ $earliest{$arrayname} = $earliest;
+ }
+
+ print "struct packsize_t packsize[2] = {\n";
+
+ my @lines;
+ foreach (qw(normal shrieking)) {
+ my $array = $arrays{$_};
+ push @lines, " {size_$_, $earliest{$_}, " . (scalar @$array) . "},";
+ }
+ # remove the last, annoying, comma
+ chop $lines[$#lines];
+ print "$_\n" foreach @lines;
+ print "};\n";
+}
+
+my %asciimap = (map {chr $_, chr $_} 0..255);
+my %ebcdicmap = (map {chr $_, Encode::encode ("posix-bc", chr $_)} 0..255);
+
+print <<'EOC';
+#if 'J'-'I' == 1
+/* ASCII */
+EOC
+output_tables (\%asciimap, @lines);
+print <<'EOC';
+#else
+/* EBCDIC (or bust) */
+EOC
+output_tables (\%ebcdicmap, @lines);
+print "#endif\n";
+
+__DATA__
+#Symbol spare nocsum size
+c char
+C unsigned char
+U char
+s! short
+s =SIZE16
+S! unsigned short
+v =SIZE16
+n =SIZE16
+S =SIZE16
+v! =SIZE16 PERL_PACK_CAN_SHRIEKSIGN
+n! =SIZE16 PERL_PACK_CAN_SHRIEKSIGN
+i int
+i! int
+I unsigned int
+I! unsigned int
+j =IVSIZE
+J =UVSIZE
+l! long
+l =SIZE32
+L! unsigned long
+V =SIZE32
+N =SIZE32
+V! =SIZE32 PERL_PACK_CAN_SHRIEKSIGN
+N! =SIZE32 PERL_PACK_CAN_SHRIEKSIGN
+L =SIZE32
+p * char *
+w * char
+q Quad_t HAS_QUAD
+Q Uquad_t HAS_QUAD
+f float
+d double
+F =NVSIZE
+D =LONG_DOUBLESIZE HAS_LONG_DOUBLE USE_LONG_DOUBLE
diff --git a/gnu/usr.bin/perl/globals.c b/gnu/usr.bin/perl/globals.c
index 994ca8da957..afb3f25158c 100644
--- a/gnu/usr.bin/perl/globals.c
+++ b/gnu/usr.bin/perl/globals.c
@@ -53,3 +53,13 @@ Perl_printf_nocontext(const char *format, ...)
}
#include "perlapi.h" /* bring in PL_force_link_funcs */
+
+/*
+ * Local variables:
+ * c-indentation-style: bsd
+ * c-basic-offset: 4
+ * indent-tabs-mode: t
+ * End:
+ *
+ * ex: set ts=8 sts=4 sw=4 noet:
+ */
diff --git a/gnu/usr.bin/perl/hints/darwin.sh b/gnu/usr.bin/perl/hints/darwin.sh
index 71940f9afeb..c3113c23fdc 100644
--- a/gnu/usr.bin/perl/hints/darwin.sh
+++ b/gnu/usr.bin/perl/hints/darwin.sh
@@ -137,8 +137,27 @@ esac
ld='cc';
so='dylib';
dlext='bundle';
-dlsrc='dl_dyld.xs'; usedl='define';
-cccdlflags=' '; # space, not empty, because otherwise we get -fpic
+usedl='define';
+
+# 10.4 can use dlopen.
+# 10.4 broke poll().
+case "$osvers" in
+[1-7].*)
+ dlsrc='dl_dyld.xs';
+ ;;
+*)
+ dlsrc='dl_dlopen.xs';
+ d_poll='undef';
+ i_poll='undef';
+ ;;
+esac
+
+case "$ccdlflags" in # If passed in from command line, presume user knows best
+'')
+ cccdlflags=' '; # space, not empty, because otherwise we get -fpic
+;;
+esac
+
# Perl bundles do not expect two-level namespace, added in Darwin 1.4.
# But starting from perl 5.8.1/Darwin 7 the default is the two-level.
case "$osvers" in
@@ -153,10 +172,11 @@ case "$osvers" in
ldflags="${ldflags} -flat_namespace"
lddlflags="${ldflags} -bundle -undefined suppress"
;;
-*) lddlflags="${ldflags} -bundle -undefined dynamic_lookup"
+*)
+ lddlflags="${ldflags} -bundle -undefined dynamic_lookup"
case "$ld" in
- *MACOSX_DEVELOPMENT_TARGET*) ;;
- *) ld="env MACOSX_DEPLOYMENT_TARGET=10.3 ${ld}" ;;
+ *MACOSX_DEVELOPMENT_TARGET*) ;;
+ *) ld="env MACOSX_DEPLOYMENT_TARGET=10.3 ${ld}" ;;
esac
;;
esac
@@ -175,6 +195,42 @@ case "$ldflags" in
esac
EOCBU
+# 64-bit addressing support. Currently strictly experimental. DFD 2005-06-06
+if [ "$use64bitall" ]
+then
+case "$osvers" in
+[1-7].*)
+ cat <<EOM >&4
+
+
+
+*** 64-bit addressing is not supported for Mac OS X versions
+*** below 10.4 ("Tiger") or Darwin versions below 8. Please try
+*** again without -D64bitall. (-D64bitint will work, however.)
+
+EOM
+ exit 1
+ ;;
+*)
+ cat <<EOM >&4
+
+
+
+*** Perl 64-bit addressing support is experimental for Mac OS X
+*** 10.4 ("Tiger") and Darwin version 8. Expect a number of test
+*** failures:
+*** ext/IO/io_* ext/IPC/sysV/t/* lib/Net/Ping/t/450_service
+*** Any test that uses sdbm
+
+EOM
+ for var in ccflags cppflags ld ldflags
+ do
+ eval $var="\$${var}\ -arch\ ppc64"
+ done
+ ;;
+esac
+fi
+
##
# System libraries
##
@@ -191,6 +247,9 @@ esac
case "$usemymalloc" in
'') usemymalloc='n' ;;
esac
+# However sbrk() returns -1 (failure) somewhere in lib/unicore/mktables at
+# around 14M, so we need to use system malloc() as our sbrk()
+malloc_cflags='ccflags="-DUSE_PERL_SBRK -DPERL_SBRK_VIA_MALLOC $ccflags"'
# Locales aren't feeling well.
LC_ALL=C; export LC_ALL;
@@ -224,6 +283,10 @@ esac
# really need ODBM_FIle, though, so let's just hint ODBM away.
i_dbm=undef;
+# Configure doesn't detect ranlib on Tiger properly.
+# NeilW says this should be acceptable on all darwin versions.
+ranlib='ranlib'
+
##
# Build process
##
diff --git a/gnu/usr.bin/perl/hints/gnu.sh b/gnu/usr.bin/perl/hints/gnu.sh
index 828e249a49c..2cfce541083 100644
--- a/gnu/usr.bin/perl/hints/gnu.sh
+++ b/gnu/usr.bin/perl/hints/gnu.sh
@@ -18,6 +18,9 @@ lddlflags='-shared'
# Flags needed by programs that use dynamic linking.
ccdlflags='-Wl,-E'
+# Debian bug #258618
+ccflags='-D_GNU_SOURCE'
+
# The following routines are only available as stubs in GNU libc.
# XXX remove this once metaconf detects the GNU libc stubs.
d_msgctl='undef'
diff --git a/gnu/usr.bin/perl/hints/gnukfreebsd.sh b/gnu/usr.bin/perl/hints/gnukfreebsd.sh
new file mode 100644
index 00000000000..1225f6995fe
--- /dev/null
+++ b/gnu/usr.bin/perl/hints/gnukfreebsd.sh
@@ -0,0 +1,10 @@
+#! /bin/sh
+
+# Support for Debian GNU/kFreeBSD (kfreebsd-gnu)
+# A port of the Debian GNU system using the FreeBSD kernel.
+
+. ./hints/linux.sh
+
+# Configure sets these where $osname = linux
+ccdlflags='-Wl,-E'
+lddlflags='-shared'
diff --git a/gnu/usr.bin/perl/hints/gnuknetbsd.sh b/gnu/usr.bin/perl/hints/gnuknetbsd.sh
new file mode 100644
index 00000000000..6ee143357f7
--- /dev/null
+++ b/gnu/usr.bin/perl/hints/gnuknetbsd.sh
@@ -0,0 +1,10 @@
+#! /bin/sh
+
+# Support for Debian GNU/NetBSD (netbsd-i386 and netbsd-alpha)
+# A port of the Debian GNU system using the NetBSD kernel.
+
+. ./hints/linux.sh
+
+# Configure sets these where $osname = linux
+ccdlflags='-Wl,-E'
+lddlflags='-shared'
diff --git a/gnu/usr.bin/perl/hints/interix.sh b/gnu/usr.bin/perl/hints/interix.sh
new file mode 100644
index 00000000000..a53d29d1b7d
--- /dev/null
+++ b/gnu/usr.bin/perl/hints/interix.sh
@@ -0,0 +1,27 @@
+# hints/interix.sh
+#
+# Please check with tech-pkg@netbsd.org before making modifications
+# to this file.
+
+cc='gcc'
+cccdlflags="-DPIC $cccdlflags"
+ccdlflags='-Wl,-E'
+ccflags="-D_ALL_SOURCE $ccflags"
+d_poll="$undef"
+ld='gcc'
+lddlflags="-shared $lddlflags"
+rpathflag='-Wl,-R'
+sharpbang='#!'
+usemymalloc='false'
+usenm='false'
+
+# 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'
+case "$usethreads" in
+$define|true|[yY]*)
+ ccflags="-D_REENTRANT $ccflags"
+ libswanted="$libswanted pthread"
+ ;;
+esac
+EOCBU
diff --git a/gnu/usr.bin/perl/hints/vmesa.sh b/gnu/usr.bin/perl/hints/vmesa.sh
index 5fad22bf8be..bda26fcb147 100644
--- a/gnu/usr.bin/perl/hints/vmesa.sh
+++ b/gnu/usr.bin/perl/hints/vmesa.sh
@@ -25,7 +25,13 @@ d_alarm='define'
d_archlib='define'
# randbits='15'
archobjs="vmesa.o"
-d_attribut='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_bcmp='define'
d_bcopy='define'
d_bsd='undef'
diff --git a/gnu/usr.bin/perl/intrpvar.h b/gnu/usr.bin/perl/intrpvar.h
index b0697146369..26c104a426e 100644
--- a/gnu/usr.bin/perl/intrpvar.h
+++ b/gnu/usr.bin/perl/intrpvar.h
@@ -30,7 +30,7 @@ PERLVAR(Iwarnhook, SV *)
PERLVAR(Iminus_c, bool)
PERLVAR(Ipatchlevel, SV *)
PERLVAR(Ilocalpatches, char **)
-PERLVARI(Isplitstr, char *, " ")
+PERLVARI(Isplitstr, const char *, " ")
PERLVAR(Ipreprocess, bool)
PERLVAR(Iminus_n, bool)
PERLVAR(Iminus_p, bool)
@@ -250,7 +250,7 @@ PERLVARI(Imaxo, int, MAXO) /* maximum number of ops */
PERLVAR(Iosname, char *) /* operating system */
/* For binary compatibility with older versions only */
-PERLVARI(Ish_path_compat, char *, SH_PATH)/* full path of shell */
+PERLVARI(Ish_path_compat, const char *, SH_PATH)/* full path of shell */
PERLVAR(Isighandlerp, Sighandler_t)
@@ -295,7 +295,7 @@ PERLVAR(Isv_no, SV)
PERLVAR(Isv_yes, SV)
#ifdef CSH
-PERLVARI(Icshname, char *, CSH)
+PERLVARI(Icshname, const char *, CSH)
PERLVARI(Icshlen, I32, 0)
#endif
@@ -569,6 +569,12 @@ PERLVARI(Irehash_seed_set, bool, FALSE) /* 582 hash initialized? */
taken out of blead soon, and relevant prototypes changed. */
PERLVARI(Ifdscript, int, -1) /* fd for script */
PERLVARI(Isuidscript, int, -1) /* fd for suid script */
+
+#if defined(USE_ITHREADS)
+PERLVAR(Ipte_root, struct ptr_tbl_ent *) /* free ptr_tbl_ent list */
+PERLVAR(Ipte_arenaroot, XPV*) /* list of allocated pte areas */
+#endif
+
/* New variables must be added to the very end, before this comment,
* for binary compatibility (the offsets of the old members must not change).
* (Don't forget to add your variable also to perl_clone()!)
@@ -576,3 +582,7 @@ PERLVARI(Isuidscript, int, -1) /* fd for suid script */
* irrelevant, but not all code may be expected to #include XSUB.h.
*/
+#ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
+/* File descriptor to talk to the child which dumps scalars. */
+PERLVARI(Idumper_fd, int, -1)
+#endif
diff --git a/gnu/usr.bin/perl/iperlsys.h b/gnu/usr.bin/perl/iperlsys.h
index 5bb0f05c8b0..2ae09733ff5 100644
--- a/gnu/usr.bin/perl/iperlsys.h
+++ b/gnu/usr.bin/perl/iperlsys.h
@@ -726,7 +726,13 @@ struct IPerlLIOInfo
#define PerlLIO_access(file, mode) access((file), (mode))
#define PerlLIO_chmod(file, mode) chmod((file), (mode))
#define PerlLIO_chown(file, owner, grp) chown((file), (owner), (grp))
-#define PerlLIO_chsize(fd, size) chsize((fd), (size))
+#if defined(HAS_TRUNCATE)
+# define PerlLIO_chsize(fd, size) ftruncate((fd), (size))
+#elif defined(HAS_CHSIZE)
+# define PerlLIO_chsize(fd, size) chsize((fd), (size))
+#else
+# define PerlLIO_chsize(fd, size) my_chsize((fd), (size))
+#endif
#define PerlLIO_close(fd) close((fd))
#define PerlLIO_dup(fd) dup((fd))
#define PerlLIO_dup2(fd1, fd2) dup2((fd1), (fd2))
@@ -909,8 +915,10 @@ struct IPerlProcInfo;
typedef void (*LPProcAbort)(struct IPerlProc*);
typedef char* (*LPProcCrypt)(struct IPerlProc*, const char*,
const char*);
-typedef void (*LPProcExit)(struct IPerlProc*, int);
-typedef void (*LPProc_Exit)(struct IPerlProc*, int);
+typedef void (*LPProcExit)(struct IPerlProc*, int)
+ __attribute__noreturn__;
+typedef void (*LPProc_Exit)(struct IPerlProc*, int)
+ __attribute__noreturn__;
typedef int (*LPProcExecl)(struct IPerlProc*, const char*,
const char*, const char*, const char*,
const char*);
diff --git a/gnu/usr.bin/perl/lib/Benchmark.t b/gnu/usr.bin/perl/lib/Benchmark.t
index 80814767857..3a7a1def859 100644
--- a/gnu/usr.bin/perl/lib/Benchmark.t
+++ b/gnu/usr.bin/perl/lib/Benchmark.t
@@ -8,7 +8,7 @@ BEGIN {
use warnings;
use strict;
use vars qw($foo $bar $baz $ballast);
-use Test::More tests => 193;
+use Test::More tests => 194;
use Benchmark qw(:all);
@@ -42,6 +42,11 @@ is ($foo, 5, "benchmarked code was run 5 times");
isa_ok(timeit(5, '++$bar'), 'Benchmark', "timeit eval");
is ($bar, 5, "benchmarked code was run 5 times");
+# is coderef called with spurious arguments?
+timeit( 1, sub { $foo = @_ });
+is ($foo, 0, "benchmarked code called without arguments");
+
+
print "# Burning CPU to benchmark things will take time...\n";
diff --git a/gnu/usr.bin/perl/lib/CGI/Changes b/gnu/usr.bin/perl/lib/CGI/Changes
new file mode 100644
index 00000000000..c451d7fa48d
--- /dev/null
+++ b/gnu/usr.bin/perl/lib/CGI/Changes
@@ -0,0 +1,1216 @@
+ Version 3.15 Wed Dec 7 15:13:22 EST 2005
+ 1. Remove extraneous "?" from self_url() when URI contains a ? but no query string.
+
+ Version 3.14 Tue Dec 6 17:12:03 EST 2005
+ 1. Fixed broken scrolling_list() select attribute.
+
+ Version 3.13
+ 1. Removed extraneous empty "?" from end of self_url().
+
+ Version 3.12
+ 1. Fixed virtual_port so that it works properly with https protocol.
+ 2. Fixed documentation for upload_hook().
+ 3. Added POSTDATA documentation.
+ 4. Made upload_hook() work in function-oriented mode.
+ 5. Fixed POST_MAX behavior so that it doesn't cause client to hang.
+ 6. Disabled automatic tab indexes and added new -tabindex pragma to
+ turn automatic indexes back on.
+ 7. The url() and self_url() methods now work better in the context of Apache
+ mod_rewrite. Be advised that path_info() may give you confusing results
+ when mod_rewrite is active because Apache calculates the path info *after*
+ rewriting. This is mostly worked around in url() and self_url(), but you
+ may notice some anomalies.
+ 8. Removed empty (and non-validating) <div> from code emitted by end_form().
+ 9. Fixed CGI::Carp to work correctly with Mod_perl 1.29 in an Apache 2 environment.
+ 10. Setting $CGI::TMPDIRECTORY should now be effective.
+
+ Version 3.11
+ 1. Killed warning in CGI::Cookie about MOD_PERL_API_VERSION
+ 2. Fixed append() so that it works in function mode.
+ 3. Workaround for a bug that appears in Apache2 versions through 2.0.54
+ in which SCRIPT_NAME and PATH_INFO are incorrect if the additional path_info
+ contains a double slash. This workaround will handle the common case of
+ http://mysite.com/cgi-bin/log.cgi/http://www.some.other.site/args, but will
+ not handle the uncommon case of a ScriptAlias directive that adds additional
+ path information to the end of the translated URI.
+
+ Version 3.10
+ 1. Added Apache2::RequestIO, which is necessary for mp2 interoperability.
+
+ Version 3.09
+ 1. Fixed tabindex="0" when using CGI to create forms without a prior start_html
+ 2. Removed warning about non-numeric MOD_PERL_API_VERSION.
+
+ Version 3.08
+ 1. update support for mod_perl 2.0. versions prior to
+ mod_perl 1.999_22 (2.0.0-RC5) are no longer supported.
+
+ Version 3.07
+ 1. Fixed typo in mod_perl detection.
+
+ Version 3.06
+
+ 1. Fixed bare call to script() in start_html
+ 2. Moved Fh::DESTROY out of autoloaded functions so as to avoid
+ clobbering $@ when CGI functions are executed in an eval{}
+ context.
+ 3. mod_perl 2.0 version detection patch in CGI::Cookie provided by
+ Allen Day.
+ 4. autoEscape() flag is now respected when generating extra
+ attributes.
+ 5. Tests for *tag start/end generation from Shlomi Fish.
+ 6. Support for can() method provided by Ron Savage.
+ 7. Fix for lang='' when outputting XHTML.
+ 8. Added support for chunked transfer encoding, as suggested by
+ Hakan Ardo
+ 9. Fixed clobbering of row and column headers in tableized radio
+ and checkbox groups, as reported by Nicolas Thierry-Mieg.
+ 10. <Label> tags are now associated with form elements, as suggested
+ by accessibility guidelines.
+ 11. The <?xml> directive produced by start_html is now turned off by
+ default and the charset is specified in a <meta> directive. Apparently
+ IE6 (and maybe some versions of Opera) were getting confused by this.
+ 12. Support for tab indexes.
+ 13. Retired the HTML docs. The POD docs are now primary documentation.
+ 14. CGI::Carp now correctly detects and handles Apache::Dispatch.
+ 15. CGI::Util::utf8_chr now correctly sets the UTF8 flag on 5.006 or
+ higher perls (fix courtesy Slaven Rezic).
+
+
+ Version 3.05
+
+ 1. Fixed uninitialized variable warning on start_form() when running
+ from command line.
+ 2. Fixed CGI::_set_attributes so that attributes with a - are handled
+ correctly.
+ 3. Fixed CGI::Carp::die() so as to avoid problems from _longmess()
+ clobbering @_.
+ 4. If HTTP_X_FORWARDED_HOST is defined (i.e. running under a proxy),
+ the various functions that return HOST will use that instead.
+ 5. Fix for undefined utf8() call in CGI::Util.
+ 6. Changed the call to warningsToBrowser() in
+ CGI::Carp::fatalsToBrowser to call only after HTTP header is sent
+ (thanks to Didier Lebrun for noticing).
+ 7. Patches from Dan Harkless to make CGI.pm validatable against HTML
+ 3.2.
+ 8. Fixed an extraneous "foo=bar" appearing when extra style
+ parameters passed to start_html;
+ 9. Fixed cross-site scripting bug in startform() pointed out by Dan
+ Harkless.
+ 10. Fixed documentation to discuss list context behavior of
+ form-element generators explicitly.
+ 11. Fixed incorrect results from end_form() when called in OO manner.
+ 12. Fixed query string stripping in order to handle URLs containing
+ escaped newlines.
+ 13. During server push, set NPH to 0 rather than 1. This is supposed
+ to fix problems with Apache.
+ 14. Fixed incorrect processing of multipart form fields that contain
+ embedded quotes. There's still the issue of how to handle ones
+ that contain embedded semicolons, but no one has complained (yet).
+ 15. Fixed documentation bug in -style argument to start_html()
+ 16. Added -status argument to redirect().
+
+ Version 3.04
+
+ 1. Fixed the problem with mod_perl crashing when "defaults" button
+ pressed.
+
+ Version 3.03
+
+ 1. Fix upload hook functionality
+ 2. Workaround for CGI->unescape_html()
+ 3. Bumped version numbers in CGI::Fast and CGI::Util for 5.8.3-tobe
+
+ Version 3.02
+
+ 1. Bring in Apache::Response just in case.
+ 2. File upload on EBCDIC systems now works.
+
+ Version 3.01
+
+ 1. No fix yet for upload failures when running on EBCDIC server.
+ 2. Fixed uninitialized glob warnings that appeared when file
+ uploading under perl 5.8.2.
+ 3. Added patch from Schlomi Fish to allow debugging of PATH_INFO from
+ command line.
+ 4. Added patch from Steve Hay to correctly unlink tmp files under
+ mod_perl/windows
+ 5. Added upload_hook functionality from Jamie LeTaul
+ 6. Workarounds for mod_perl 2 IO issues. Check that file upload and
+ state saving still working.
+ 7. Added code for underreads.
+ 8. Fixed misleading description of redirect() and relative URLs in
+ the POD docs.
+ 9. Workaround for weird interaction of CGI::Carp with Safe module
+ reported by William McKee.
+ 10. Added patches from Ilmari Karonen to improve behavior of
+ CGI::Carp.
+ 11. Fixed documentation error in -style argument.
+ 12. Added virtual_port() method for finding out what port server is
+ listening on in a virtual-host aware fashion.
+
+ Version 3.00
+
+ 1. Patch from Randal Schwartz to fix bug introduced by cross-site
+ scripting vulnerability "fix."
+ 2. Patch from JFreeman to replace UTF-8 escape constant of 0xfe with
+ 0xfc. Hope this is right!
+
+ Version 2.99
+
+ 1. Patch from Steve Hay to fix extra Content-type: appearing on
+ browser screen when FatalsToBrowser invoked.
+ 2. Patch from Ewann Corvellec to fix cross-site scripting
+ vulnerability.
+ 3. Fixed tmpdir routine for file uploading to solve problem that
+ occurs under mod_perl when tmpdir is writable at startup time, but
+ not at session time.
+
+ Version 2.98
+
+ 1. Fixed crash in Dump() function.
+
+ Version 2.97
+
+ 1. Sigh. Uploaded wrong 2.96 to CPAN.
+
+ Version 2.96
+
+ 1. More bugfixes to the -style argument.
+
+ Version 2.95
+
+ 1. Fixed bugs in start_html(-style=>...) support introduced in 2.94.
+
+ Version 2.94
+
+ 1. Removed warning from reset() method.
+ 2. Moved
+
+ and tags into the :html3 group. Hope this removes undefined CGI::Area
+ errors.
+
+ Changed CGI::Carp to play with mod_perl2 and to (hopefully) restore
+ reporting of compile-time errors.
+
+ Fixed potential deadlock between web server and CGI.pm when aborting
+ a read due to POST_MAX (reported by Antti Lankila).
+
+ Fixed issue with tag-generating function not incorporating content
+ when first variable undef.
+
+ Fixed cross-site scripting bug reported by obscure.
+
+ Fixed Dump() function to return correctly formed XHTML - bug
+ reported by Ralph Siemsen.
+
+ Version 2.93
+
+ 1. Fixed embarassing bug in mp1 support.
+
+ Version 2.92
+
+ 1. Fix to be P3P compliant submitted from MPREWITT.
+ 2. Added CGI->r() API for mod_perl1/mod_perl2.
+ 3. Fixed bug in redirect() that was corrupting cookies.
+ 4. Minor fix to behavior of reset() button to make it consistent with
+ submit() button (first time this has been changed in 9 years).
+ 5. Patch from Dan Kogai to handle UTF-8 correctly in 5.8 and higher.
+ 6. Patch from Steve Hay to make CGI::Carp's error messages appear on
+ MSIE browsers.
+ 7. Added Yair Lenga's patch for non-urlencoded postings.
+ 8. Added Stas Bekman's patches for mod_perl 2 compatibility.
+ 9. Fixed uninitialized escape behavior submitted by William Campbell.
+ 10. Fixed tied behavior so that you can pass arguments to tie()
+ 11. Fixed incorrect generation of URLs when the path_info contains +
+ and other odd characters.
+ 12. Fixed redirect(-cookies=>$cookie) problem.
+ 13. Fixed tag generation bug that affects -javascript passed to
+ start_html().
+
+ Version 2.91
+
+ 1. Attribute generation now correctly respects the value of
+ autoEscape().
+ 2. Fixed endofrm() syntax error introduced by Ben Edgington's patch.
+
+ Version 2.90
+
+ 1. Fixed bug in redirect header handling.
+ 2. Added P3P option to header().
+ 3. Patches from Alexey Mahotkin to make CGI::Carp work correctly with
+ object-oriented exceptions.
+ 4. Removed inaccurate description of how to set multiple cookies from
+ CGI::Cookie pod file.
+ 5. Patch from Kevin Mahony to prevent running out of filehandles when
+ uploading lots of files.
+ 6. Documentation enhancement from Mark Fisher to note that the
+ import_names() method transforms the parameter names into valid
+ Perl names.
+ 7. Patch from Dan Harkless to suppress lang attribute in <html> tag
+ if specified as a null string.
+ 8. Patch from Ben Edgington to fix broken XHTML-transitional 1.0
+ validation on endform().
+ 9. Custom html header fix from Steffen Beyer (first letter correctly
+ upcased now)
+ 10. Added a -verbatim option to stylesheet generation from Michael
+ Dickson
+ 11. Faster delete() method from Neelam Gupta
+ 12. Fixed broken Cygwin support.
+ 13. Added empty charset support from Bradley Baetz
+ 14. Patches from Doug Perham and Kevin Mahoney to fix file upload
+ failures when uploaded file is a multiple of 4096.
+
+ Version 2.89
+
+ 1. Fixed behavior of ACTION tag when POSTING to a URL that has a
+ query string.
+ 2. Added Patch from Michael Rommel to handle multipart/mixed uploads
+ from Opera
+
+ Version 2.88
+
+ 1. Fixed problem with uploads being refused under Perl 5.8 when under
+ Taint mode.
+ 2. Fixed uninitialized variable warnings under Perl 5.8.
+ 3. Fixed CGI::Pretty regression test failures.
+
+ Version 2.87
+
+ 1. Security hole patched: when processing multipart/form-data
+ postings, most arguments were being untainted silently. Returned
+ arguments are now tainted correctly. This may cause some scripts
+ to fail that used to work (thanks to Nick Cleaton for pointing
+ this out and persisting until it was fixed).
+ 2. Update for mod_perl 2.0.
+ 3. Pragmas such as -no_xhtml are now respected in mod_perl
+ environment.
+
+ Version 2.86
+
+ 1. Fixes for broken CGI::Cookie expiration dates introduced in 2.84.
+
+ Version 2.85
+
+ 1. Fix for broken autoEscape function introduced in 2.84.
+
+ Version 2.84
+
+ 1. Fix for failed file uploads on Cygwin platforms.
+ 2. HTML escaping code now replaced 0x8b and 0x9b with unicode
+ references < and *#8250;
+
+ Version 2.83
+
+ 1. Fixed autoEscape() documentation inconsistencies.
+ 2. Patch from Ville Skyttä to fix a number of XHTML inconsistencies.
+ 3. Added Max-Age to list of CGI::Cookie headers.
+
+ Version 2.82
+
+ 1. Patch from Rudolf Troller to add attribute setting and option
+ groups to form fields.
+ 2. Patch from Simon Perreault for silent crashes when using CGI::Carp
+ under mod_perl.
+ 3. Patch from Scott Gifford allows you to set the program name for
+ CGI::Carp.
+
+ Version 2.81
+
+ 1. Removed extraneous slash from end of stylesheet tags generated by
+ start_html in non-XHTML mode.
+ 2. Changed behavior of CGI::Carp with respect to eval{} contexts so
+ that output behaves properly in mod_perl environments.
+ 3. Fixed default DTD so that it validates with W3C validator.
+
+ Version 2.80
+
+ 1. Fixed broken messages in CGI::Carp.
+ 2. Changed checked="1" to checked="checked" for real XHTML
+ compatibility.
+ 3. Resurrected REQUEST_URI code so that url() works correctly with
+ multiviews.
+
+ Version 2.79
+
+ 1. Changes to CGI::Carp to avoid "subroutine redefined" error
+ messages.
+ 2. Default DTD is now XHTML 1.0 Transitional
+ 3. Patches to support all HTML4 tags.
+
+ Version 2.78
+
+ 1. Added ability to change encoding in <?xml> assertion.
+ 2. Fixed the old escapeHTML('CGI') ne "CGI" bug
+ 3. In accordance with XHTML requirements, there are no longer any
+ minimized attributes, such as "checked".
+ 4. Patched bug which caused file uploads of exactly 4096 bytes to be
+ truncated to 4094 (thanks to Kevin Mahony)
+ 5. New tests and fixes to CGI::Pretty (thanks to Michael Schwern).
+
+ Version 2.77
+
+ 1. No new features, but released in order to fix an apparent CPAN
+ bug.
+
+ Version 2.76
+
+ 1. New esc.t regression test for EBCDIC translations courtesy Peter
+ Prymmer.
+ 2. Patches from James Jurach to make compatible with FCGI-ProcManager
+ 3. Additional fields passed to header() (like -Content_disposition)
+ now honor initial capitalization.
+ 4. Patch from Andrew McNaughton to handle utf-8 escapes (%uXXXX
+ codes) in URLs.
+
+ Version 2.752
+
+ 1. Syntax error in the autoloaded Fh::new() subroutine.
+ 2. Better error reporting in autoloaded functions.
+
+ Version 2.751
+
+ 1. Tiny tweak to filename regular expression function on line 3355.
+
+ Version 2.75
+
+ 1. Fixed bug in server push boundary strings (CGI.pm and CGI::Push).
+ 2. Fixed bug that occurs when uploading files with funny characters
+ in the name
+ 3. Fixed non-XHTML-compliant attributes produced by textfield()
+ 4. Added EPOC support, courtesy Olaf Flebbe
+ 5. Fixed minor XHTML bugs.
+ 6. Made escape() and unescape() symmetric with respect to EBCDIC,
+ courtesy Roca, Ignasi <ignasi.roca@fujitsu.siemens.es>
+ 7. Removed uninitialized variable warning from CGI::Cookie, provided
+ by Atipat Rojnuckarin <rojnuca@yahoo.com>
+ 8. Fixed bug in CGI::Pretty that causes it to print partial end tags
+ when the $INDENT global is changed.
+ 9. Single quotes are changed to character entity ' for compatibility
+ with URLs.
+
+ Version 2.74
+
+ September 13, 2000
+ 1. Quashed one-character bug that caused CGI.pm to fail on file
+ uploads.
+
+ Version 2.73
+
+ September 12, 2000
+ 1. Added -base to the list of arguments accepted by url().
+ 2. Fixes to XHTML support.
+ 3. POST parameters no longer show up in the Location box.
+
+ Version 2.72
+
+ August 19, 2000
+ 1. Fixed the defaults button so that it works again
+ 2. Charset is now correctly saved and restored when saving to files
+ 3. url() now works correctly when given scripts with %20 and other
+ escapes in the additional path info. This undoes a patch
+ introduced in version 2.47 that I no longer understand the
+ rationale for.
+
+ Version 2.71
+
+ August 13, 2000
+ 1. Newlines in the value attributes of hidden fields and other form
+ elements are now escaped when using ISO-Latin.
+ 2. Inline script and style sections are now protected as CDATA
+ sections when XHTML mode is on (the default).
+
+ Version 2.70
+
+ August 4, 2000
+ 1. Fixed bug in scrolling_list() which omitted a space in front of
+ the "multiple" attribute.
+ 2. Squashed the "useless use of string in void context" message from
+ redirects.
+
+ Version 2.69
+
+ 1. startform() now creates default ACTION for POSTs as well as GETs.
+ This may break some browsers, but it no longer violates the HTML
+ spec.
+ 2. CGI.pm now emits XHTML by default. Disable with -no_xhtml.
+ 3. We no longer interpret &#ddd sequences in non-latin character
+ sets.
+
+ Version 2.68
+
+ 1. No longer attempts to escape characters when dealing with non
+ ISO-8861 character sets.
+ 2. checkbox() function now defaults to using -value as its label,
+ rather than -name. The current behavior is what has been
+ documented from the beginning.
+ 3. -style accepts array reference to incorporate multiple stylesheets
+ into document.
+
+ 1. Fixed two bugs that caused the -compile pragma to fail with a
+ syntax error.
+
+ Version 2.67
+
+ 1. Added XHTML support (incomplete; tags need to be lowercased).
+ 2. Fixed CGI/Carp when running under mod_perl. Probably broke in
+ other contexts.
+ 3. Fixed problems when passing multiple cookies.
+ 4. Suppress warnings from _tableize() that were appearing when using
+ -w switch with radio_group() and checkbox_group().
+ 5. Support for the header() -attachment argument, which can give
+ pages a default file name when saving to disk.
+
+ Version 2.66
+
+ 1. 2.65 changes in make_attributes() broke HTTP header functions
+ (including redirect), so made it context sensitive.
+
+ Version 2.65
+
+ 1. Fixed regression tests to skip tests that require implicit fork on
+ machines without fork().
+ 2. Changed make_attributes() to automatically escape any HTML
+ reserved characters.
+ 3. Minor documentation fix in javascript example.
+
+ Version 2.64
+
+ 1. Changes introduced in 2.63 broke param() when retrieving parameter
+ lists containing only a single argument. This is now fixed.
+ 2. self_url() now defaults to returning parameters delimited with
+ semicolon. Use the pragma -oldstyle_urls to get the old "&"
+ delimiter.
+
+ Version 2.63
+
+ 1. Fixed CGI::Push to pull out parameters correctly.
+ 2. Fixed redirect() so that it works with default character set
+ 3. Changed param() so as to returned empty string '' when referring
+ to variables passed in query strings like 'name1=&name2'
+
+ Version 2.62
+
+ 1. Fixed broken ReadParse() function, and added regression tests
+ 2. Fixed broken CGI::Pretty, and added regression tests
+
+ Version 2.61
+
+ 1. Moved more functions from CGI.pm proper into CGI/Util.pm.
+ CGI/Cookie should now be standalone.
+ 2. Disabled per-user temporary directories, which were causing grief.
+
+ Version 2.60
+
+ 1. Fixed junk appearing in autogenerated HTML functions when using
+ object-oriented mode.
+
+ Version 2.59
+
+ 1. autoescape functionality breaks too much existing code, removed
+ it.
+ 2. use escapeHTML() manually
+
+ Version 2.58
+
+ This is the release version of 2.57.
+
+ Version 2.57
+
+ 1. Added -debug pragma and turned off auto reading of STDIN.
+ 2. Default DTD updated to HTML 4.01 transitional.
+ 3. Added charset() method and the -charset argument to header().
+ 4. Fixed behavior of escapeHTML() to respect charset() and to escape
+ nasty Windows characters (thanks to Tom Christiansen).
+ 5. Handle REDIRECT_QUERY_STRING correctly.
+ 6. Removed use_named_parameters() because of dependency problems and
+ general lameness.
+ 7. Fixed problems with bad HREF links generated by url(-relative=>1)
+ when the url is like /people/.
+ 8. Silenced a warning on upload (patch provided by Jonas Liljegren)
+ 9. Fixed race condition in CGI::Carp when errors occur during parsing
+ (patch provided by Maurice Aubrey).
+ 10. Fixed failure of url(-path_info=>1) when path contains % signs.
+ 11. Fixed warning from CGI::Cookie when receiving foreign cookies that
+ don't use name=value format.
+ 12. Fixed incompatibilities with file uploading on VMS systems.
+
+ Version 2.56
+
+ 1. Fixed bugs in file upload introduced in version 2.55
+ 2. Fixed long-standing bug that prevented two files with identical
+ names from being uploaded.
+
+ Version 2.55
+
+ 1. Fixed cookie regression test so as not to produce an error.
+ 2. Fixed path_info() and self_url() to work correctly together when
+ path_info() modified.
+ 3. Removed manify warnings from CGI::{Switch,Apache}.
+
+ Version 2.54
+
+ 1. This will be the last release of the monolithic CGI.pm module.
+ Later versions will be modularized and optimized.
+ 2. DOMAIN tag no longer added to cookies by default. This will break
+ some versions of Internet Explorer, but will avoid breaking
+ networks which use host tables without fully qualified domain
+ names. For compatibility, please always add the -domain tag when
+ creating cookies.
+ 3. Fixed escape() method so that +'s are treated correctly.
+ 4. Updated CGI::Pretty module.
+
+ Version 2.53
+
+ 1. Forgot to upgrade regression tests before releasing 2.52. NOTHING
+ ELSE HAS CHANGED IN LIBRARY
+
+ Version 2.52
+
+ 1. Spurious newline in checkbox() routine removed. (courtesy John
+ Essen)
+ 2. TEXTAREA linebreaks now respected in dump() routine. (courtesy
+ John Essen)
+ 3. Patches for DOS ports (courtesy Robert Davies)
+ 4. Patches for VMS
+ 5. More fixes for cookie problems
+ 6. Fix CGI::Carp so that it doesn't affect eval{} blocks (courtesy
+ Byron Brummer)
+
+ Version 2.51
+
+ 1. Fixed problems with cookies not being remembered when sent to IE
+ 5.0 (and Netscape 5.0 too?)
+ 2. Numerous HTML compliance problems in cgi_docs.html; fixed thanks
+ to Michael Leahy
+
+ Version 2.50
+
+ 1. Added a new Vars() method to retrieve all parameters as a tied
+ hash.
+ 2. Untainted tainted tempfile name so that script doesn't fail on
+ terminal unlink.
+ 3. Made picking of upload tempfile name more intelligent so that
+ doesn't fail in case of name collision.
+ 4. Fixed handling of expire times when passed an absolute timestamp.
+ 5. Changed dump() to Dump() to avoid name clashes.
+
+ Version 2.49
+
+ 1. Fixes for FastCGI (globals not getting reset)
+ 2. Fixed url() to correctly handle query string and path under
+ MOD_PERL
+
+ Version 2.48
+
+ 1. Reverted detection of MOD_PERL to avoid breaking PerlEX.
+
+ Version 2.47
+
+ 1. Patch to fix file upload bug appearing in IE 3.01 for
+ Macintosh/PowerPC.
+ 2. Replaced use of $ENV{SCRIPT_NAME} with $ENV{REQUEST_URI} when
+ running under Apache, to fix self-referencing URIs.
+ 3. Fixed bug in escapeHTML() which caused certain constructs, such as
+ CGI->image_button(), to fail.
+ 4. Fixed bug which caused strong('CGI') to fail. Be careful to use
+ CGI::strong('CGI') and not CGI->strong('CGI'). The latter will
+ produce confusing results.
+ 5. Added upload() function, as a preferred replacement for the
+ "filehandle as string" feature.
+ 6. Added cgi_error() function.
+ 7. Rewrote file upload handling to return undef rather than dieing
+ when an error is encountered. Be sure to call cgi_error() to find
+ out what went wrong.
+
+ Version 2.46
+
+ 1. Fix for failure of the "include" tests under mod_perl
+ 2. Added end_multipart_form to prevent failures during qw(-compile
+ :all)
+
+ Version 2.45
+
+ 1. Multiple small documentation fixes
+ 2. CGI::Pretty didn't get into 2.44. Fixed now.
+
+ Version 2.44
+
+ 1. Fixed file descriptor leak in upload function.
+ 2. Fixed bug in header() that prevented fields from containing double
+ quotes.
+ 3. Added Brian Paulsen's CGI::Pretty package for pretty-printing
+ output HTML.
+ 4. Removed CGI::Apache and CGI::Switch from the distribution.
+ 5. Generated start_* shortcuts so that start_table(), end_table(),
+ start_ol(), end_ol(), and so forth now work (see the docs on how
+ to enable this feature).
+ 6. Changed accept() to Accept(), sub() to Sub(). There's still a
+ conflict with reset(), but this will break too many existing
+ scripts!
+
+ Version 2.43
+
+ 1. Fixed problem with "use strict" and file uploads (thanks to Peter
+ Haworth)
+ 2. Fixed problem with not MSIE 3.01 for the power_mac not doing file
+ uploads right.
+ 3. Fixed problem with file upload on IIS 4.0 when authorization in
+ use.
+ 4. -content_type and '-content-type' can now be provided to header()
+ as synonyms for -type.
+ 5. CGI::Carp now escapes the ampersand BEFORE escaping the > and <
+ signs.
+ 6. Fixed "not an array reference" error when passing a hash reference
+ to radio_group().
+ 7. Fixed non-removal of uploaded TMP files on NT platforms which
+ occurs when server runs on non-C drive (thanks to Steve Kilbane
+ for finding this one).
+
+ Version 2.42
+
+ 1. Too many screams of anguish at changed behavior of url(). Is now
+ back to its old behavior by default, with options to generate all
+ the variants.
+ 2. Added regression tests. "make test" now works.
+ 3. Documentation fixes.
+ 4. Fixes for Macintosh uploads, but uploads STILL do not work pending
+ changes to MacPerl.
+
+ Version 2.41
+
+ 1. url() method now includes the path info. Use script_name() to get
+ it without path info().
+ 2. Changed handling of empty attributes in HTML tag generation. Be
+ warned! Use table({-border=>undef}) rather than
+ table({-border=>''}).
+ 3. Changes to allow uploaded filenames to be compared to other
+ strings with "eq", "cmp" and "ne".
+ 4. Changes to allow CGI.pm to coexist more peacefully with
+ ActiveState PerlEX.
+ 5. Changes to prevent exported variables from clashing when importing
+ ":all" set in combination with cookies.
+
+ Version 2.40
+
+ 1. CGI::Carp patched to work better with mod_perl (thanks to Chris
+ Dean).
+ 2. Uploads of files whose names begin with numbers or the Windows
+ \\UNC\shared\file nomenclature should no longer fail.
+ 3. The <STYLE> tag (for cascading style sheets) now generates the
+ required TYPE attribute.
+ 4. Server push primitives added, thanks to Ed Jordan.
+ 5. Table and other HTML3 functions are now part of the :standard set.
+ 6. Small documentation fixes.
+
+ TO DO:
+ 1. Do something about the DTD mess. The module should generate
+ correct DTDs, or at least offer the programmer a way to specify
+ the correct one.
+ 2. Split CGI.pm into CGI processing and HTML-generating modules.
+ 3. More robust file upload (?still not working on the Macintosh?).
+ 4. Bring in all the HTML4 functionality, particular the accessibility
+ features.
+
+ Version 2.39
+
+ 1. file uploads failing because of VMS patch; fixed.
+ 2. -dtd parameter was not being properly processed.
+
+ Version 2.38
+
+ I finally got tired of all the 2.37 betas and released 2.38. The main
+ difference between this version and the last 2.37 beta (2.37b30) are
+ some fixes for VMS. This should allow file upload to work properly on
+ all VMS Web servers.
+
+ Version 2.37, various beta versions
+
+ 1. Added a CGI::Cookie::parse() method for lucky mod_perl users.
+ 2. No longer need separate -values and -labels arguments for
+ multi-valued form elements.
+ 3. Added better interface to raw cookies (fix courtesy Ken Fox,
+ kfox@ford.com)
+ 4. Added param_fetch() function for direct access to parameter list.
+ 5. Fix to checkbox() to allow for multi-valued single checkboxes
+ (weird problem).
+ 6. Added a compile() method for those who want to compile without
+ importing.
+ 7. Documented the import pragmas a little better.
+ 8. Added a -compile switch to the use clause for the long-suffering
+ mod_perl and Perl compiler users.
+ 9. Fixed initialization routines so that FileHandle and type globs
+ work correctly (and hash initialization doesn't fail!).
+ 10. Better deletion of temporary files on NT systems.
+ 11. Added documentation on escape(), unescape(), unescapeHTML() and
+ unescapeHTML() subroutines.
+ 12. Added documentation on creating subclasses.
+ 13. Fixed problem when calling $self->SUPER::foo() from inheriting
+ subclasses.
+ 14. Fixed problem using filehandles from within subroutines.
+ 15. Fixed inability to use the string "CGI" as a parameter.
+ 16. Fixed exponentially growing $FILLUNIT bug
+ 17. Check for undef filehandle in read_from_client()
+ 18. Now requires the UNIVERSAL.pm module, present in Perl 5.003_7 or
+ higher.
+ 19. Fixed problem with uppercase-only parameters being ignored.
+ 20. Fixed vanishing cookie problem.
+ 21. Fixed warning in initialize_globals() under mod_perl.
+ 22. File uploads from Macintosh versions of MSIE should now work.
+ 23. Pragmas now preceded by dashes (-nph) rather than colons (:nph).
+ Old style is supported for backward compatability.
+ 24. Can now pass arguments to all functions using {} brackets,
+ resolving historical inconsistencies.
+ 25. Removed autoloader warnings about absent MultipartBuffer::DESTROY.
+ 26. Fixed non-sticky checkbox() when -name used without -value.
+ 27. Hack to fix path_info() in IIS 2.0. Doesn't help with IIS 3.0.
+ 28. Parameter syntax for debugging from command line now more
+ straightforward.
+ 29. Added $DISABLE_UPLOAD to disable file uploads.
+ 30. Added $POST_MAX to error out if POSTings exceed some ceiling.
+ 31. Fixed url_param(), which wasn't working at all.
+ 32. Fixed variable suicide problem in s///e expressions, where the
+ autoloader was needed during evaluation.
+ 33. Removed excess spaces between elements of checkbox and radio
+ groups
+ 34. Can now create "valueless" submit buttons
+ 35. Can now set path_info as well as read it.
+ 36. ReadParse() now returns a useful function result.
+ 37. import_names() now allows you to optionally clear out the
+ namespace before importing (for mod_perl users)
+ 38. Made it possible to have a popup menu or radio button with a value
+ of "0".
+ 39. link() changed to Link() to avoid overriding native link function.
+ 40. Takes advantage of mod_perl's register_cleanup() function to clear
+ globals.
+ 41. <LAYER> and <ILAYER> added to :html3 functions.
+ 42. Fixed problems with private tempfiles and NT/IIS systems.
+ 43. No longer prints the DTD by default (I bet no one will complain).
+ 44. Allow underscores to replace internal hyphens in parameter names.
+ 45. CGI::Push supports heterogeneous MIME types and adjustable delays
+ between pages.
+ 46. url_param() method added for retrieving URL parameters even when a
+ fill-out form is POSTed.
+ 47. Got rid of warnings when radio_group() is called.
+ 48. Cookies now moved to their very own module.
+ 49. Fixed documentation bug in CGI::Fast.
+ 50. Added a :no_debug pragma to the import list.
+
+ Version 2.36
+
+ 1. Expanded JavaScript functionality
+ 2. Preliminary support for cascading stylesheets
+ 3. Security fixes for file uploads:
+ + Module will bail out if its temporary file already exists
+ + Temporary files can now be made completely private to avoid
+ peeking by other users or CGI scripts.
+ 4. use CGI qw/:nph/ wasn't working correctly. Now it is.
+ 5. Cookie and HTTP date formats didn't meet spec. Thanks to Mark
+ Fisher (fisherm@indy.tce.com) for catching and fixing this.
+
+ p
+
+ Version 2.35
+
+ 1. Robustified multipart file upload against incorrect syntax in
+ POST.
+ 2. Fixed more problems with mod_perl.
+ 3. Added -noScript parameter to start_html().
+ 4. Documentation fixes.
+
+ Version 2.34
+
+ 1. Stupid typo fix
+
+ Version 2.33
+
+ 1. Fixed a warning about an undefined environment variable.
+ 2. Doug's patch for redirect() under mod_perl
+ 3. Partial fix for busted inheritence from CGI::Apache
+ 4. Documentation fixes.
+
+ Version 2.32
+
+ 1. Improved support for Apache's mod_perl.
+ 2. Changes to better support inheritance.
+ 3. Support for OS/2.
+
+ Version 2.31
+
+ 1. New uploadInfo() method to obtain header information from uploaded
+ files.
+ 2. cookie() without any arguments returns all the cookies passed to a
+ script.
+ 3. Removed annoying warnings about $ENV{NPH} when running with the -w
+ switch.
+ 4. Removed operator overloading throughout to make compatible with
+ new versions of perl.
+ 5. -expires now implies the -date header, to avoid clock skew.
+ 6. WebSite passes cookies in $ENV{COOKIE} rather than
+ $ENV{HTTP_COOKIE}. We now handle this, even though it's O'Reilly's
+ fault.
+ 7. Tested successfully against new sfio I/O layer.
+ 8. Documentation fixes.
+
+ Version 2.30
+
+ 1. Automatic detection of operating system at load time.
+ 2. Changed select() function to Select() in order to avoid conflict
+ with Perl built-in.
+ 3. Added Tr() as an alternative to TR(); some people think it looks
+ better that way.
+ 4. Fixed problem with autoloading of MultipartBuffer::DESTROY code.
+ 5. Added the following methods:
+ + virtual_host()
+ + server_software()
+ 6. Automatic NPH mode when running under Microsoft IIS server.
+
+ Version 2.29
+
+ 1. Fixed cookie bugs
+ 2. Fixed problems that cropped up when useNamedParameters was set to
+ 1.
+ 3. Prevent CGI::Carp::fatalsToBrowser() from crapping out when
+ encountering a die() within an eval().
+ 4. Fixed problems with filehandle initializers.
+
+ Version 2.28
+
+ 1. Added support for NPH scripts; also fixes problems with Microsoft
+ IIS.
+ 2. Fixed a problem with checkbox() values not being correctly saved
+ and restored.
+ 3. Fixed a bug in which CGI objects created with empty string
+ initializers took on default values from earlier CGI objects.
+ 4. Documentation fixes.
+
+ Version 2.27
+
+ 1. Small but important bug fix: the automatic capitalization of tag
+ attributes was accidentally capitalizing the VALUES as well as the
+ ATTRIBUTE names (oops).
+
+ Version 2.26
+
+ 1. Changed behavior of scrolling_list(), checkbox() and
+ checkbox_group() methods so that defaults are honored correctly.
+ The "fix" causes endform() to generate additional <INPUT
+ TYPE="HIDDEN"> tags -- don't be surpised.
+ 2. Fixed bug involving the detection of the SSL protocol.
+ 3. Fixed documentation error in position of the -meta argument in
+ start_html().
+ 4. HTML shortcuts now generate tags in ALL UPPERCASE.
+ 5. start_html() now generates correct SGML header:
+ <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+
+ 6. CGI::Carp no longer fails "use strict refs" pragma.
+
+ Version 2.25
+
+ 1. Fixed bug that caused bad redirection on destination URLs with
+ arguments.
+ 2. Fixed bug involving use_named_parameters() followed by
+ start_multipart_form()
+ 3. Fixed bug that caused incorrect determination of binmode for
+ Macintosh.
+ 4. Spelling fixes on documentation.
+
+ Version 2.24
+
+ 1. Fixed bug that caused generation of lousy HTML for some form
+ elements
+ 2. Fixed uploading bug in Windows NT
+ 3. Some code cleanup (not enough)
+
+ Version 2.23
+
+ 1. Fixed an obscure bug that caused scripts to fail mysteriously.
+ 2. Fixed auto-caching bug.
+ 3. Fixed bug that prevented HTML shortcuts from passing taint checks.
+ 4. Fixed some -w warning problems.
+
+ Version 2.22
+
+ 1. New CGI::Fast module for use with FastCGI protocol. See pod
+ documentation for details.
+ 2. Fixed problems with inheritance and autoloading.
+ 3. Added TR() (<tr>) and PARAM() (<param>) methods to list of
+ exported HTML tag-generating functions.
+ 4. Moved all CGI-related I/O to a bottleneck method so that this can
+ be overridden more easily in mod_perl (thanks to Doug MacEachern).
+ 5. put() method as substitute for print() for use in mod_perl.
+ 6. Fixed crash in tmpFileName() method.
+ 7. Added tmpFileName(), startform() and endform() to export list.
+ 8. Fixed problems with attributes in HTML shortcuts.
+ 9. Functions that don't actually need access to the CGI object now no
+ longer generate a default one. May speed things up slightly.
+ 10. Aesthetic improvements in generated HTML.
+ 11. New examples.
+
+ Version 2.21
+
+ 1. Added the -meta argument to start_html().
+ 2. Fixed hidden fields (again).
+ 3. Radio_group() and checkbox_group() now return an appropriate
+ scalar value when called in a scalar context, rather than
+ returning a numeric value!
+ 4. Cleaned up the formatting of form elements to avoid unesthetic
+ extra spaces within the attributes.
+ 5. HTML elements now correctly include the closing tag when
+ parameters are present but null: em('')
+ 6. Added password_field() to the export list.
+
+ Version 2.20
+
+ 1. Dumped the SelfLoader because of problems with running with taint
+ checks and rolled my own. Performance is now significantly
+ improved.
+ 2. Added HTML shortcuts.
+ 3. import() now adheres to the Perl module conventions, allowing
+ CGI.pm to import any or all method names into the user's name
+ space.
+ 4. Added the ability to initialize CGI objects from strings and
+ associative arrays.
+ 5. Made it possible to initialize CGI objects with filehandle
+ references rather than filehandle strings.
+ 6. Added the delete_all() and append() methods.
+ 7. CGI objects correctly initialize from filehandles on NT/95 systems
+ now.
+ 8. Fixed the problem with binary file uploads on NT/95 systems.
+ 9. Fixed bug in redirect().
+ 10. Added '-Window-target' parameter to redirect().
+ 11. Fixed import_names() so that parameter names containing funny
+ characters work.
+ 12. Broke the unfortunate connection between cookie and CGI parameter
+ name space.
+ 13. Fixed problems with hidden fields whose values are 0.
+ 14. Cleaned up the documentation somewhat.
+
+ Version 2.19
+
+ 1. Added cookie() support routines.
+ 2. Added -expires parameter to header().
+ 3. Added cgi-lib.pl compatability mode.
+ 4. Made the module more configurable for different operating systems.
+ 5. Fixed a dumb bug in JavaScript button() method.
+
+ Version 2.18
+
+ 1. Fixed a bug that corrects a hang that occurs on some platforms
+ when processing file uploads. Unfortunately this disables the
+ check for bad Netscape uploads.
+ 2. Fixed bizarre problem involving the inability to process uploaded
+ files that begin with a non alphabetic character in the file name.
+ 3. Fixed a bug in the hidden fields involving the -override directive
+ being ignored when scalar defaults were passed.
+ 4. Added documentation on how to disable the SelfLoader features.
+
+ Version 2.17
+
+ 1. Added support for the SelfLoader module.
+ 2. Added oodles of JavaScript support routines.
+ 3. Fixed bad bug in query_string() method that caused some parameters
+ to be silently dropped.
+ 4. Robustified file upload code to handle premature termination by
+ the client.
+ 5. Exported temporary file names on file upload.
+ 6. Removed spurious "uninitialized variable" warnings that appeared
+ when running under 5.002.
+ 7. Added the Carp.pm library to the standard distribution.
+ 8. Fixed a number of errors in this documentation, and probably added
+ a few more.
+ 9. Checkbox_group() and radio_group() now return the buttons as
+ arrays, so that you can incorporate the individual buttons into
+ specialized tables.
+ 10. Added the '-nolabels' option to checkbox_group() and
+ radio_group(). Probably should be added to all the other
+ HTML-generating routines.
+ 11. Added the url() method to recover the URL without the entire query
+ string appended.
+ 12. Added request_method() to list of environment variables available.
+ 13. Would you believe it? Fixed hidden fields again!
+
+ Version 2.16
+
+ 1. Fixed hidden fields yet again.
+ 2. Fixed subtle problems in the file upload method that caused
+ intermittent failures (thanks to Keven Hendrick for this one).
+ 3. Made file upload more robust in the face of bizarre behavior by
+ the Macintosh and Windows Netscape clients.
+ 4. Moved the POD documentation to the bottom of the module at the
+ request of Stephen Dahmen.
+ 5. Added the -xbase parameter to the start_html() method, also at the
+ request of Stephen Dahmen.
+ 6. Added JavaScript form buttons at Stephen's request. I'm not sure
+ how to use this Netscape extension correctly, however, so for now
+ the form() method is in the module as an undocumented feature. Use
+ at your own risk!
+
+ Version 2.15
+
+ 1. Added the -override parameter to all field-generating methods.
+ 2. Documented the user_name() and remote_user() methods.
+ 3. Fixed bugs that prevented empty strings from being recognized as
+ valid textfield contents.
+ 4. Documented the use of framesets and added a frameset example.
+
+ Version 2.14
+
+ This was an internal experimental version that was never released.
+
+ Version 2.13
+
+ 1. Fixed a bug that interfered with the value "0" being entered into
+ text fields.
+
+ Version 2.01
+
+ 1. Added -rows and -columns to the radio and checkbox groups. No
+ doubt this will cause much grief because it seems to promise a
+ level of meta-organization that it doesn't actually provide.
+ 2. Fixed a bug in the redirect() method -- it was not truly HTTP/1.0
+ compliant.
+
+ Version 2.0
+
+ The changes seemed to touch every line of code, so I decided to bump
+ up the major version number.
+ 1. Support for named parameter style method calls. This turns out
+ to be a big win for extending CGI.pm when Netscape adds new HTML
+ "features".
+ 2. Changed behavior of hidden fields back to the correct "sticky"
+ behavior. This is going to break some programs, but it is for
+ the best in the long run.
+ 3. Netscape 2.0b2 broke the file upload feature. CGI.pm now handles
+ both 2.0b1 and 2.0b2-style uploading. It will probably break again
+ in 2.0b3.
+ 4. There were still problems with library being unable to distinguish
+ between a form being loaded for the first time, and a subsequent
+ loading with all fields blank. We now forcibly create a default
+ name for the Submit button (if not provided) so that there's
+ always at least one parameter.
+ 5. More workarounds to prevent annoying spurious warning messages
+ when run under the -w switch. -w is seriously broken in perl
+ 5.001!
+
+ Version 1.57
+
+ 1. Support for the Netscape 2.0 "File upload" field.
+ 2. The handling of defaults for selected items in scrolling lists and
+ multiple checkboxes is now consistent.
+
+ Version 1.56
+
+ 1. Created true "pod" documentation for the module.
+ 2. Cleaned up the code to avoid many of the spurious "use of
+ uninitialized variable" warnings when running with the -w switch.
+ 3. Added the autoEscape() method. v
+ 4. Added string interpolation of the CGI object.
+ 5. Added the ability to pass additional parameters to the <BODY> tag.
+ 6. Added the ability to specify the status code in the HTTP header.
+
+ Bug fixes in version 1.55
+
+ 1. Every time self_url() was called, the parameter list would grow.
+ This was a bad "feature".
+ 2. Documented the fact that you can pass "-" to radio_group() in
+ order to prevent any button from being highlighted by default.
+
+ Bug fixes in version 1.54
+
+ 1. The user_agent() method is now documented;
+ 2. A potential security hole in import() is now plugged.
+ 3. Changed name of import() to import_names() for compatability with
+ CGI:: modules.
+
+ Bug fixes in version 1.53
+
+ 1. Fixed several typos in the code that were causing the following
+ subroutines to fail in some circumstances
+ 1. checkbox()
+ 2. hidden()
+ 2. No features added
+
+ New features added in version 1.52
+
+ 1. Added backslashing, quotation marks, and other shell-style escape
+ sequences to the parameters passed in during debugging off-line.
+ 2. Changed the way that the hidden() method works so that the default
+ value always overrides the current one.
+ 3. Improved the handling of sticky values in forms. It's now less
+ likely that sticky values will get stuck.
+ 4. If you call server_name(), script_name() and several other methods
+ when running offline, the methods now create "dummy" values to
+ work with.
+
+ Bugs fixed in version 1.51
+
+ 1. param() when called without arguments was returning an array of
+ length 1 even when there were no parameters to be had. Bad bug!
+ Bad!
+ 2. The HTML code generated would break if input fields contained the
+ forbidden characters ">< or &. You can now use these characters
+ freely.
+
+ New features added in version 1.50
+
+ 1. import() method allows all the parameters to be imported into a
+ namespace in one fell swoop.
+ 2. Parameters are now returned in the same order in which they were
+ defined.
+
+ Bugs fixed in version 1.45
+
+ 1. delete() method didn't work correctly. This is now fixed.
+ 2. reset() method didn't allow you to set the name of the button.
+ Fixed.
+
+ Bugs fixed in version 1.44
+
+ 1. self_url() didn't include the path information. This is now fixed.
+
+ New features added in version 1.43
+
+ 1. Added the delete() method.
+
+ New features added in version 1.42
+
+ 1. The image_button() method to create clickable images.
+ 2. A few bug fixes involving forms embedded in <PRE> blocks.
+
+ New features added in version 1.4
+
+ 1. New header shortcut methods
+ + redirect() to create HTTP redirection messages.
+ + start_html() to create the HTML title, complete with the
+ recommended <LINK> tag that no one ever remembers to include.
+ + end_html() for completeness' sake.
+ 2. A new save() method that allows you to write out the state of an
+ script to a file or pipe.
+ 3. An improved version of the new() method that allows you to restore
+ the state of a script from a file or pipe. With (2) this gives you
+ dump and restore capabilities! (Wow, you can put a "121,931
+ customers served" banner at the bottom of your pages!)
+ 4. A self_url() method that allows you to create state-maintaining
+ hypertext links. In addition to allowing you to maintain the state
+ of your scripts between invocations, this lets you work around a
+ problem that some browsers have when jumping to internal links in
+ a document that contains a form -- the form information gets lost.
+ 5. The user-visible labels in checkboxes, radio buttons, popup menus
+ and scrolling lists have now been decoupled from the values sent
+ to your CGI script. Your script can know a checkbox by the name of
+ "cb1" while the user knows it by a more descriptive name. I've
+ also added some parameters that were missing from the text fields,
+ such as MAXLENGTH.
+ 6. A whole bunch of methods have been added to get at environment
+ variables involved in user verification and other obscure
+ features.
+
+ Bug fixes
+
+ 1. The problems with the hidden fields have (I hope at last) been
+ fixed.
+ 2. You can create multiple query objects and they will all be
+ initialized correctly. This simplifies the creation of multiple
+ forms on one page.
+ 3. The URL unescaping code works correctly now.
diff --git a/gnu/usr.bin/perl/lib/CGI/t/can.t b/gnu/usr.bin/perl/lib/CGI/t/can.t
new file mode 100755
index 00000000000..720eb493e86
--- /dev/null
+++ b/gnu/usr.bin/perl/lib/CGI/t/can.t
@@ -0,0 +1,12 @@
+#!/usr/local/bin/perl -w
+
+# Due to a bug in older versions of MakeMaker & Test::Harness, we must
+# ensure the blib's are in @INC, else we might use the core CGI.pm
+
+use lib qw(blib/lib blib/arch);
+
+use Test::More tests => 2;
+
+BEGIN{ use_ok('CGI'); }
+
+can_ok('CGI', qw/cookie param/); \ No newline at end of file
diff --git a/gnu/usr.bin/perl/lib/CGI/t/no_tabindex.t b/gnu/usr.bin/perl/lib/CGI/t/no_tabindex.t
new file mode 100755
index 00000000000..c9a7fb8fb6a
--- /dev/null
+++ b/gnu/usr.bin/perl/lib/CGI/t/no_tabindex.t
@@ -0,0 +1,126 @@
+#!/usr/local/bin/perl -w
+
+# Due to a bug in older versions of MakeMaker & Test::Harness, we must
+# ensure the blib's are in @INC, else we might use the core CGI.pm
+use lib qw(. ./blib/lib ./blib/arch);
+
+use Test::More tests => 18;
+
+BEGIN { use_ok('CGI'); };
+use CGI (':standard','-no_debug');
+
+my $CRLF = "\015\012";
+if ($^O eq 'VMS') {
+ $CRLF = "\n"; # via web server carriage is inserted automatically
+}
+if (ord("\t") != 9) { # EBCDIC?
+ $CRLF = "\r\n";
+}
+
+
+# Set up a CGI environment
+$ENV{REQUEST_METHOD} = 'GET';
+$ENV{QUERY_STRING} = 'game=chess&game=checkers&weather=dull';
+$ENV{PATH_INFO} = '/somewhere/else';
+$ENV{PATH_TRANSLATED} = '/usr/local/somewhere/else';
+$ENV{SCRIPT_NAME} ='/cgi-bin/foo.cgi';
+$ENV{SERVER_PROTOCOL} = 'HTTP/1.0';
+$ENV{SERVER_PORT} = 8080;
+$ENV{SERVER_NAME} = 'the.good.ship.lollypop.com';
+
+ok( (not $CGI::TABINDEX), "Tab index turned off.");
+
+is(submit(),
+ qq(<input type="submit" name=".submit" />),
+ "submit()");
+
+is(submit(-name => 'foo',
+ -value => 'bar'),
+ qq(<input type="submit" name="foo" value="bar" />),
+ "submit(-name,-value)");
+
+is(submit({-name => 'foo',
+ -value => 'bar'}),
+ qq(<input type="submit" name="foo" value="bar" />),
+ "submit({-name,-value})");
+
+is(textfield(-name => 'weather'),
+ qq(<input type="text" name="weather" value="dull" />),
+ "textfield({-name})");
+
+is(textfield(-name => 'weather',
+ -value => 'nice'),
+ qq(<input type="text" name="weather" value="dull" />),
+ "textfield({-name,-value})");
+
+is(textfield(-name => 'weather',
+ -value => 'nice',
+ -override => 1),
+ qq(<input type="text" name="weather" value="nice" />),
+ "textfield({-name,-value,-override})");
+
+is(checkbox(-name => 'weather',
+ -value => 'nice'),
+ qq(<label><input type="checkbox" name="weather" value="nice" />weather</label>),
+ "checkbox()");
+
+is(checkbox(-name => 'weather',
+ -value => 'nice',
+ -label => 'forecast'),
+ qq(<label><input type="checkbox" name="weather" value="nice" />forecast</label>),
+ "checkbox()");
+
+is(checkbox(-name => 'weather',
+ -value => 'nice',
+ -label => 'forecast',
+ -checked => 1,
+ -override => 1),
+ qq(<label><input type="checkbox" name="weather" value="nice" checked="checked" />forecast</label>),
+ "checkbox()");
+
+is(checkbox(-name => 'weather',
+ -value => 'dull',
+ -label => 'forecast'),
+ qq(<label><input type="checkbox" name="weather" value="dull" checked="checked" />forecast</label>),
+ "checkbox()");
+
+is(radio_group(-name => 'game'),
+ qq(<label><input type="radio" name="game" value="chess" checked="checked" />chess</label> <label><input type="radio" name="game" value="checkers" />checkers</label>),
+ 'radio_group()');
+
+is(radio_group(-name => 'game',
+ -labels => {'chess' => 'ping pong'}),
+ qq(<label><input type="radio" name="game" value="chess" checked="checked" />ping pong</label> <label><input type="radio" name="game" value="checkers" />checkers</label>),
+ 'radio_group()');
+
+is(checkbox_group(-name => 'game',
+ -Values => [qw/checkers chess cribbage/]),
+ qq(<label><input type="checkbox" name="game" value="checkers" checked="checked" />checkers</label> <label><input type="checkbox" name="game" value="chess" checked="checked" />chess</label> <label><input type="checkbox" name="game" value="cribbage" />cribbage</label>),
+ 'checkbox_group()');
+
+is(checkbox_group(-name => 'game',
+ '-values' => [qw/checkers chess cribbage/],
+ '-defaults' => ['cribbage'],
+ -override=>1),
+ qq(<label><input type="checkbox" name="game" value="checkers" />checkers</label> <label><input type="checkbox" name="game" value="chess" />chess</label> <label><input type="checkbox" name="game" value="cribbage" checked="checked" />cribbage</label>),
+ 'checkbox_group()');
+
+is(popup_menu(-name => 'game',
+ '-values' => [qw/checkers chess cribbage/],
+ -default => 'cribbage',
+ -override => 1),
+ '<select name="game" >
+<option value="checkers">checkers</option>
+<option value="chess">chess</option>
+<option selected="selected" value="cribbage">cribbage</option>
+</select>',
+ 'popup_menu()');
+
+
+is(textarea(-name=>'foo',
+ -default=>'starting value',
+ -rows=>10,
+ -columns=>50),
+ '<textarea name="foo" rows="10" cols="50">starting value</textarea>',
+ 'textarea()');
+
diff --git a/gnu/usr.bin/perl/lib/Carp.t b/gnu/usr.bin/perl/lib/Carp.t
index 47f83c96c1c..2ce5eb4dff9 100644
--- a/gnu/usr.bin/perl/lib/Carp.t
+++ b/gnu/usr.bin/perl/lib/Carp.t
@@ -4,9 +4,11 @@ BEGIN {
require './test.pl';
}
+my $Is_VMS = $^O eq 'VMS';
+
use Carp qw(carp cluck croak confess);
-plan tests => 19;
+plan tests => 21;
ok 1;
@@ -155,3 +157,19 @@ sub w { cluck @_ }
main::w(1);
}
}
+
+
+{
+ local $TODO = "VMS exit status semantics don't work this way" if $Is_VMS;
+
+ # Check that croak() and confess() don't clobber $!
+ runperl(prog => 'use Carp; $@=q{Phooey}; $!=42; croak(q{Dead})',
+ stderr => 1);
+
+ is($?>>8, 42, 'croak() doesn\'t clobber $!');
+
+ runperl(prog => 'use Carp; $@=q{Phooey}; $!=42; confess(q{Dead})',
+ stderr => 1);
+
+ is($?>>8, 42, 'confess() doesn\'t clobber $!');
+}
diff --git a/gnu/usr.bin/perl/lib/Carp/Heavy.pm b/gnu/usr.bin/perl/lib/Carp/Heavy.pm
index fe7fec4585d..55bca2b421a 100644
--- a/gnu/usr.bin/perl/lib/Carp/Heavy.pm
+++ b/gnu/usr.bin/perl/lib/Carp/Heavy.pm
@@ -43,11 +43,10 @@ sub caller_info {
# Transform an argument to a function into a string.
sub format_arg {
my $arg = shift;
- if (not defined($arg)) {
- $arg = 'undef';
- }
- elsif (ref($arg)) {
+ if (ref($arg)) {
$arg = defined($overload::VERSION) ? overload::StrVal($arg) : "$arg";
+ }elsif (not defined($arg)) {
+ $arg = 'undef';
}
$arg =~ s/'/\\'/g;
$arg = str_len_trim($arg, $MaxArgLen);
@@ -56,9 +55,10 @@ sub format_arg {
$arg = "'$arg'" unless $arg =~ /^-?[\d.]+\z/;
# The following handling of "control chars" is direct from
- # the original code - I think it is broken on Unicode though.
+ # the original code - it is broken on Unicode though.
# Suggestions?
- $arg =~ s/([[:cntrl:]]|[[:^ascii:]])/sprintf("\\x{%x}",ord($1))/eg;
+ utf8::is_utf8($arg)
+ or $arg =~ s/([[:cntrl:]]|[[:^ascii:]])/sprintf("\\x{%x}",ord($1))/eg;
return $arg;
}
diff --git a/gnu/usr.bin/perl/lib/Class/ISA/ChangeLog b/gnu/usr.bin/perl/lib/Class/ISA/ChangeLog
new file mode 100644
index 00000000000..ac18541b1e3
--- /dev/null
+++ b/gnu/usr.bin/perl/lib/Class/ISA/ChangeLog
@@ -0,0 +1,24 @@
+Revision history for Perl extension Class::ISA
+ Time-stamp: "2004-12-29 20:00:49 AST"
+
+2004-12-29 Sean M. Burke sburke@cpan.org
+
+ * Release 0.33 -- just rebundling. No code changes.
+
+
+2000-05-13 Sean M. Burke sburke@cpan.org
+
+ * Release 0.32 -- Just noting my new email address.
+
+
+1999-05-14 Sean M. Burke sburke@netadventure.net
+
+ * Release 0.31 -- release version.
+
+ No changes in functionality -- just changed the core algorithm to
+ something that should behave the same, but is cleaner and faster.
+
+
+1999-01-23 Sean M. Burke sburke@netadventure.net
+
+ * Release 0.20 -- first release version.
diff --git a/gnu/usr.bin/perl/lib/Class/ISA/t/00_about_verbose.t b/gnu/usr.bin/perl/lib/Class/ISA/t/00_about_verbose.t
new file mode 100755
index 00000000000..edc3023f843
--- /dev/null
+++ b/gnu/usr.bin/perl/lib/Class/ISA/t/00_about_verbose.t
@@ -0,0 +1,89 @@
+BEGIN {
+ chdir 't' if -d 't';
+ @INC = '../lib';
+}
+
+require 5;
+# Time-stamp: "2004-12-29 20:57:15 AST"
+# Summary of, well, things.
+
+use Test;
+BEGIN {plan tests => 2};
+ok 1;
+
+use Class::ISA ();
+
+#chdir "t" if -e "t";
+
+{
+ my @out;
+ push @out,
+ "\n\nPerl v",
+ defined($^V) ? sprintf('%vd', $^V) : $],
+ " under $^O ",
+ (defined(&Win32::BuildNumber) and defined &Win32::BuildNumber())
+ ? ("(Win32::BuildNumber ", &Win32::BuildNumber(), ")") : (),
+ (defined $MacPerl::Version)
+ ? ("(MacPerl version $MacPerl::Version)") : (),
+ "\n"
+ ;
+
+ # Ugly code to walk the symbol tables:
+ my %v;
+ my @stack = (''); # start out in %::
+ my $this;
+ my $count = 0;
+ my $pref;
+ while(@stack) {
+ $this = shift @stack;
+ die "Too many packages?" if ++$count > 1000;
+ next if exists $v{$this};
+ next if $this eq 'main'; # %main:: is %::
+
+ #print "Peeking at $this => ${$this . '::VERSION'}\n";
+
+ if(defined ${$this . '::VERSION'} ) {
+ $v{$this} = ${$this . '::VERSION'}
+ } elsif(
+ defined *{$this . '::ISA'} or defined &{$this . '::import'}
+ or ($this ne '' and grep defined *{$_}{'CODE'}, values %{$this . "::"})
+ # If it has an ISA, an import, or any subs...
+ ) {
+ # It's a class/module with no version.
+ $v{$this} = undef;
+ } else {
+ # It's probably an unpopulated package.
+ ## $v{$this} = '...';
+ }
+
+ $pref = length($this) ? "$this\::" : '';
+ push @stack, map m/^(.+)::$/ ? "$pref$1" : (), keys %{$this . '::'};
+ #print "Stack: @stack\n";
+ }
+ push @out, " Modules in memory:\n";
+ delete @v{'', '[none]'};
+ foreach my $p (sort {lc($a) cmp lc($b)} keys %v) {
+ $indent = ' ' x (2 + ($p =~ tr/:/:/));
+ push @out, ' ', $indent, $p, defined($v{$p}) ? " v$v{$p};\n" : ";\n";
+ }
+ push @out, sprintf "[at %s (local) / %s (GMT)]\n",
+ scalar(gmtime), scalar(localtime);
+ my $x = join '', @out;
+ $x =~ s/^/#/mg;
+ print $x;
+}
+
+print "# Running",
+ (chr(65) eq 'A') ? " in an ASCII world.\n" : " in a non-ASCII world.\n",
+ "#\n",
+;
+
+print "# \@INC:\n", map("# [$_]\n", @INC), "#\n#\n";
+
+print "# \%INC:\n";
+foreach my $x (sort {lc($a) cmp lc($b)} keys %INC) {
+ print "# [$x] = [", $INC{$x} || '', "]\n";
+}
+
+ok 1;
+
diff --git a/gnu/usr.bin/perl/lib/Class/ISA/t/01_old_junk.t b/gnu/usr.bin/perl/lib/Class/ISA/t/01_old_junk.t
new file mode 100755
index 00000000000..8afe373cd2b
--- /dev/null
+++ b/gnu/usr.bin/perl/lib/Class/ISA/t/01_old_junk.t
@@ -0,0 +1,28 @@
+BEGIN {
+ chdir 't' if -d 't';
+ @INC = '../lib';
+}
+
+# Time-stamp: "2004-12-29 19:59:33 AST"
+
+BEGIN { $| = 1; print "1..2\n"; }
+END {print "not ok 1\n" unless $loaded;}
+use Class::ISA;
+$loaded = 1;
+print "ok 1\n";
+
+ @Food::Fishstick::ISA = qw(Food::Fish Life::Fungus Chemicals);
+ @Food::Fish::ISA = qw(Food);
+ @Food::ISA = qw(Matter);
+ @Life::Fungus::ISA = qw(Life);
+ @Chemicals::ISA = qw(Matter);
+ @Life::ISA = qw(Matter);
+ @Matter::ISA = qw();
+
+ use Class::ISA;
+ my @path = Class::ISA::super_path('Food::Fishstick');
+ my $flat_path = join ' ', @path;
+ print "#Food::Fishstick path is:\n# $flat_path\n";
+ print
+ "Food::Fish Food Matter Life::Fungus Life Chemicals" eq $flat_path ?
+ "ok 2\n" : "fail 2!\n";
diff --git a/gnu/usr.bin/perl/lib/Config.t b/gnu/usr.bin/perl/lib/Config.t
index 3ed110a0499..da84b78fa6b 100644
--- a/gnu/usr.bin/perl/lib/Config.t
+++ b/gnu/usr.bin/perl/lib/Config.t
@@ -1,20 +1,32 @@
-#!./perl
+#!./perl -w
BEGIN {
chdir 't' if -d 't';
@INC = '../lib';
require "./test.pl";
-}
-plan 'no_plan';
+ plan ('no_plan');
+
+ use_ok('Config');
+}
-use_ok('Config');
+use strict;
# Some (safe?) bets.
ok(keys %Config > 500, "Config has more than 500 entries");
-ok(each %Config);
+my ($first) = Config::config_sh() =~ /^(\S+)=/m;
+die "Can't find first entry in Config::config_sh()" unless defined $first;
+print "# First entry is '$first'\n";
+
+# It happens that the we know what the first key should be. This is somewhat
+# cheating, but there was briefly a bug where the key got a bonus newline.
+my ($first_each) = each %Config;
+is($first_each, $first, "First key from each is correct");
+ok(exists($Config{$first_each}), "First key exists");
+ok(!exists($Config{"\n$first"}),
+ "Check that first key with prepended newline isn't falsely existing");
is($Config{PERL_REVISION}, 5, "PERL_REVISION is 5");
@@ -38,13 +50,16 @@ ok( exists $Config{d_fork}, "has d_fork");
ok(!exists $Config{d_bork}, "has no d_bork");
-like($Config{ivsize}, qr/^(4|8)$/, "ivsize is 4 or 8 (it is $Config{ivsize})");
+like($Config{ivsize}, qr/^(4|8)$/, "ivsize is 4 or 8 (it is $Config{ivsize})");
# byteorder is virtual, but it has rules.
-like($Config{byteorder}, qr/^(1234|4321|12345678|87654321)$/, "byteorder is 1234 or 4321 or 12345678 or 87654321 (it is $Config{byteorder})");
+like($Config{byteorder}, qr/^(1234|4321|12345678|87654321)$/,
+ "byteorder is 1234 or 4321 or 12345678 or 87654321 "
+ . "(it is $Config{byteorder})");
-is(length $Config{byteorder}, $Config{ivsize}, "byteorder is as long as ivsize (which is $Config{ivsize})");
+is(length $Config{byteorder}, $Config{ivsize},
+ "byteorder is as long as ivsize (which is $Config{ivsize})");
# ccflags_nolargefiles is virtual, too.
@@ -100,7 +115,8 @@ Config::config_vars('PERL_API_REVISION.*:'); # regex, tagged
my $out7 = $$out;
$out->clear;
-Config::config_vars(':PERL_API_REVISION.*'); # regex, non-tagged multi-line answer
+# regex, non-tagged multi-line answer
+Config::config_vars(':PERL_API_REVISION.*');
my $out8 = $$out;
$out->clear;
@@ -112,27 +128,30 @@ Config::config_vars('?flags'); # bogus regex, no explicit warning !
my $out10 = $$out;
$out->clear;
+undef $out;
untie *STDOUT;
like($out1, qr/^cc='\Q$Config{cc}\E';/, "found config_var cc");
like($out2, qr/^d_bork='UNKNOWN';/, "config_var d_bork is UNKNOWN");
# test for leading, trailing colon effects
-is(scalar split(/;\n/, $out3), 3, "3 lines found");
-is(scalar split(/;\n/, $out6), 3, "3 lines found");
+# Split in scalar context it deprecated, and will warn.
+my @tmp;
+is(scalar (@tmp = split(/;\n/, $out3)), 3, "3 lines found");
+is(scalar (@tmp = split(/;\n/, $out6)), 3, "3 lines found");
is($out4 =~ /(;\n)/s, '', "trailing colon gives 1-line response: $out4");
is($out5 =~ /(;\n)/s, '', "trailing colon gives 1-line response: $out5");
-is(scalar split(/=/, $out3), 4, "found 'tag='");
-is(scalar split(/=/, $out4), 4, "found 'tag='");
+is(scalar (@tmp = split(/=/, $out3)), 4, "found 'tag='");
+is(scalar (@tmp = split(/=/, $out4)), 4, "found 'tag='");
my @api;
my @rev = @Config{qw(PERL_API_REVISION PERL_API_VERSION PERL_API_SUBVERSION)};
print ("# test tagged responses, multi-line and single-line\n");
-foreach $api ($out3, $out4) {
+foreach my $api ($out3, $out4) {
@api = $api =~ /PERL_API_(\w+)=(.*?)(?:;\n|\s)/mg;
is($api[0], "REVISION", "REVISION tag");
is($api[4], "VERSION", "VERSION tag");
@@ -143,7 +162,7 @@ foreach $api ($out3, $out4) {
}
print("# test non-tagged responses, multi-line and single-line\n");
-foreach $api ($out5, $out6) {
+foreach my $api ($out5, $out6) {
@api = split /(?: |;\n)/, $api;
is($api[0], "'$rev[0]'", "revision is $rev[0]");
is($api[2], "'$rev[1]'", "version is $rev[1]");
@@ -201,10 +220,53 @@ is($Config{sig_num_init} =~ tr/,/,/, $Config{sig_size}, "sig_num_init size");
is($Config{sig_name_init} =~ tr/,/,/, $Config{sig_size}, "sig_name_init size");
# Test the troublesome virtual stuff
-foreach my $pain (qw(byteorder)) {
- # No config var is named with anything that is a regexp metachar"
- my @result = Config::config_re($pain);
+my @virtual = qw(byteorder ccflags_nolargefiles ldflags_nolargefiles
+ libs_nolargefiles libswanted_nolargefiles);
+
+# Also test that the first entry in config.sh is found correctly. There was
+# special casing code for this
+
+foreach my $pain ($first, @virtual) {
+ # No config var is named with anything that is a regexp metachar
+ ok(exists $Config{$pain}, "\$config('$pain') exists");
+
+ my @result = $Config{$pain};
+ is (scalar @result, 1, "single result for \$config('$pain')");
+
+ @result = Config::config_re($pain);
is (scalar @result, 1, "single result for config_re('$pain')");
- like ($result[0], qr/^$pain=(['"])$Config{$pain}\1$/, # grr '
- "which is the expected result for $pain");
+ like ($result[0], qr/^$pain=(['"])\Q$Config{$pain}\E\1$/, # grr '
+ "which is the expected result for $pain");
+}
+
+# Check that config entries appear correctly in @INC
+# TestInit.pm has probably already messed with our @INC
+# This little bit of evil is to avoid a @ in the program, in case it confuses
+# shell 1 liners. Perl 1 rules.
+my ($path, $ver, @orig_inc)
+ = split /\n/,
+ runperl (nolib=>1,
+ prog=>'print qq{$^X\n$]\n}; print qq{$_\n} while $_ = shift INC');
+
+die "This perl is $] at $^X; other perl is $ver (at $path) "
+ . '- failed to find this perl' unless $] eq $ver;
+
+my %orig_inc;
+@orig_inc{@orig_inc} = ();
+
+my $failed;
+# This is the order that directories are pushed onto @INC in perl.c:
+foreach my $lib (qw(applibexp archlibexp privlibexp sitearchexp sitelibexp
+ vendorarchexp vendorlibexp vendorlib_stem)) {
+ my $dir = $Config{$lib};
+ SKIP: {
+ skip "lib $lib not in \@INC on Win32" if $^O eq 'MSWin32';
+ skip "lib $lib not defined" unless defined $dir;
+ skip "lib $lib not set" unless length $dir;
+ # So we expect to find it in @INC
+
+ ok (exists $orig_inc{$dir}, "Expect $lib '$dir' to be in \@INC")
+ or $failed++;
+ }
}
+_diag ('@INC is:', @orig_inc) if $failed;
diff --git a/gnu/usr.bin/perl/lib/DB.pm b/gnu/usr.bin/perl/lib/DB.pm
index 342f5d82ec1..a12bcd600c7 100644
--- a/gnu/usr.bin/perl/lib/DB.pm
+++ b/gnu/usr.bin/perl/lib/DB.pm
@@ -41,7 +41,7 @@ BEGIN {
$DB::subname = ''; # currently executing sub (fullly qualified name)
$DB::lineno = ''; # current line number
- $DB::VERSION = $DB::VERSION = '1.0';
+ $DB::VERSION = $DB::VERSION = '1.01';
# initialize private globals to avoid warnings
@@ -63,8 +63,7 @@ sub sub {
push(@stack, $DB::single);
$DB::single &= 1;
$DB::single |= 4 if $#stack == $deep;
-# print $DB::sub, "\n";
- if ($DB::sub =~ /(?:^|::)DESTROY$/ or not defined wantarray) {
+ if ($DB::sub eq 'DESTROY' or substr($DB::sub, -9) eq '::DESTROY' or not defined wantarray) {
&$DB::sub;
$DB::single |= pop(@stack);
$DB::ret = undef;
diff --git a/gnu/usr.bin/perl/lib/Digest/Changes b/gnu/usr.bin/perl/lib/Digest/Changes
new file mode 100644
index 00000000000..63c0bee9c62
--- /dev/null
+++ b/gnu/usr.bin/perl/lib/Digest/Changes
@@ -0,0 +1,142 @@
+2005-11-26 Gisle Aas <gisle@ActiveState.com>
+
+ Release 1.14
+
+ Documentation tweaks.
+
+
+
+2005-10-18 Gisle Aas <gisle@ActiveState.com>
+
+ Release 1.13
+
+ Fixed documentation typo.
+
+
+
+2005-09-29 Gisle Aas <gisle@ActiveState.com>
+
+ Release 1.12
+
+ Fix documentation typo. Patch by <steve@fisharerojo.org>.
+
+
+
+2005-09-11 Gisle Aas <gisle@ActiveState.com>
+
+ Release 1.11
+
+ Make Digest->new("SHA-224") work. Patch by Mark Shelor
+ <shelor@cpan.org>.
+
+
+
+2004-11-08 Gisle Aas <gisle@ActiveState.com>
+
+ Release 1.10
+
+ Added Digest::file module which provide convenience functions
+ that calculate digests of files.
+
+
+
+2004-11-05 Gisle Aas <gisle@ActiveState.com>
+
+ Release 1.09
+
+ Fix trivial documentation typo.
+
+
+
+2004-04-29 Gisle Aas <gisle@ActiveState.com>
+
+ Release 1.08
+
+ Make Digest->new("CRC-16"), Digest->new("CRC-32") and
+ Digest->new("CRC-CCITT") work.
+ Patch by Oliver Maul <oliver@maul.tv>.
+
+
+
+2004-04-25 Gisle Aas <gisle@ActiveState.com>
+
+ Release 1.07
+
+ Updated benchmark.
+
+
+
+2004-04-01 Gisle Aas <gisle@ActiveState.com>
+
+ Release 1.06
+
+ Added MIME::Base64 dependency.
+
+ Minor doc tweak.
+
+
+
+2003-12-01 Gisle Aas <gisle@ActiveState.com>
+
+ Release 1.05
+
+ Drop Digest::MD5 dependency. Avoids circular dependency
+ now that Digest::MD5 depend on this package to inherit
+ Digest::base.
+
+ Included a section about digest speed with benchmark
+ results for some implementations of this API.
+
+
+
+2003-11-29 Gisle Aas <gisle@ActiveState.com>
+
+ Release 1.04
+
+ Doc tweaks to unconfuse search.cpan.org.
+
+
+
+2003-11-28 Gisle Aas <gisle@ActiveState.com>
+
+ Release 1.03
+
+ Added add_bits() method as requested by the
+ Digest::SHA author Mark Shelor.
+
+ Added Digest::base class that Digest implementations
+ can use to get default implementations of addfile(),
+ add_bits(), hexdigest() and b64digest().
+
+ Digest->new("SHA-256") and similar should work now
+ given that you have either Digest::SHA or Digest::SHA2
+ installed.
+
+
+
+2003-01-18 Gisle Aas <gisle@ActiveState.com>
+
+ Release 1.02
+
+ Sync up with version bundled with perl-5.8.
+ Patch by Jarkko Hietaniemi <jhi@iki.fi>.
+
+ Override INSTALLDIRS for 5.8 as suggested by
+ Guido Ostkamp <Guido.Ostkamp@t-online.de>.
+
+
+
+2003-01-04 Gisle Aas <gisle@ActiveState.com>
+
+ Release 1.01
+
+ Document the clone() method.
+
+
+
+2001-03-13 Gisle Aas <gisle@ActiveState.com>
+
+ Release 1.00
+
+ Broken out of the Digest-MD5-2.12 distribution and made into
+ a separate dist.
diff --git a/gnu/usr.bin/perl/lib/Digest/file.pm b/gnu/usr.bin/perl/lib/Digest/file.pm
new file mode 100644
index 00000000000..67985fd7599
--- /dev/null
+++ b/gnu/usr.bin/perl/lib/Digest/file.pm
@@ -0,0 +1,85 @@
+package Digest::file;
+
+use strict;
+
+use Exporter ();
+use Carp qw(croak);
+use Digest ();
+
+use vars qw($VERSION @ISA @EXPORT_OK);
+
+$VERSION = "1.00";
+@ISA = qw(Exporter);
+@EXPORT_OK = qw(digest_file_ctx digest_file digest_file_hex digest_file_base64);
+
+sub digest_file_ctx {
+ my $file = shift;
+ croak("No digest algorithm specified") unless @_;
+ local *F;
+ open(F, $file) || croak("Can't open '$file': $!");
+ binmode(F);
+ my $ctx = Digest->new(@_);
+ $ctx->addfile(*F);
+ close(F);
+ return $ctx;
+}
+
+sub digest_file {
+ digest_file_ctx(@_)->digest;
+}
+
+sub digest_file_hex {
+ digest_file_ctx(@_)->hexdigest;
+}
+
+sub digest_file_base64 {
+ digest_file_ctx(@_)->b64digest;
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+Digest::file - Calculate digests of files
+
+=head1 SYNOPSIS
+
+ # Poor mans "md5sum" command
+ use Digest::file qw(digest_file_hex);
+ for (@ARGV) {
+ print digest_file_hex($_, "MD5"), " $_\n";
+ }
+
+=head1 DESCRIPTION
+
+This module provide 3 convenience functions to calculate the digest
+of files. The following functions are provided:
+
+=over
+
+=item digest_file( $file, $algorithm, [$arg,...] )
+
+This function will calculate and return the binary digest of the bytes
+of the given file. The function will croak if it fails to open or
+read the file.
+
+The $algorithm is a string like "MD2", "MD5", "SHA-1", "SHA-512".
+Additional arguments are passed to the constructor for the
+implementation of the given algorithm.
+
+=item digest_file_hex( $file, $algorithm, [$arg,...] )
+
+Same as digest_file(), but return the digest in hex form.
+
+=item digest_file_base64( $file, $algorithm, [$arg,...] )
+
+Same as digest_file(), but return the digest as a base64 encoded
+string.
+
+=back
+
+=head1 SEE ALSO
+
+L<Digest>
diff --git a/gnu/usr.bin/perl/lib/Digest/t/file.t b/gnu/usr.bin/perl/lib/Digest/t/file.t
new file mode 100755
index 00000000000..2184ac26f51
--- /dev/null
+++ b/gnu/usr.bin/perl/lib/Digest/t/file.t
@@ -0,0 +1,46 @@
+#!perl -w
+
+use Test qw(plan ok);
+plan tests => 5;
+
+{
+ package Digest::Foo;
+ require Digest::base;
+ use vars qw(@ISA $VERSION);
+ @ISA = qw(Digest::base);
+
+ sub new {
+ my $class = shift;
+ my $str = "";
+ bless \$str, $class;
+ }
+
+ sub add {
+ my $self = shift;
+ $$self .= join("", @_);
+ return $self;
+ }
+
+ sub digest {
+ my $self = shift;
+ return sprintf "%04d", length($$self);
+ }
+}
+
+use Digest::file qw(digest_file digest_file_hex digest_file_base64);
+
+my $file = "test-$$";
+die if -f $file;
+open(F, ">$file") || die "Can't create '$file': $!";
+binmode(F);
+print F "foo\0\n";
+close(F) || die "Can't write '$file': $!";
+
+ok(digest_file($file, "Foo"), "0005");
+ok(digest_file_hex($file, "Foo"), "30303035");
+ok(digest_file_base64($file, "Foo"), "MDAwNQ");
+
+unlink($file) || warn "Can't unlink '$file': $!";
+
+ok(eval { digest_file("not-there.txt", "Foo") }, undef);
+ok($@);
diff --git a/gnu/usr.bin/perl/lib/Dumpvalue.pm b/gnu/usr.bin/perl/lib/Dumpvalue.pm
index 7944e78c963..f1822971f40 100644
--- a/gnu/usr.bin/perl/lib/Dumpvalue.pm
+++ b/gnu/usr.bin/perl/lib/Dumpvalue.pm
@@ -1,7 +1,7 @@
use 5.006_001; # for (defined ref) and $#$v and our
package Dumpvalue;
use strict;
-our $VERSION = '1.11';
+our $VERSION = '1.12';
our(%address, $stab, @stab, %stab, %subs);
# documentation nits, handle complex data structures better by chromatic
@@ -616,7 +616,7 @@ given quote char. Possible values are C<auto>, C<'> and C<">.
=item set_unctrl
- $d->set_unctrl('"');
+ $d->set_unctrl('unctrl');
Sets C<unctrl> option with checking for an invalid argument.
Possible values are C<unctrl> and C<quote>.
diff --git a/gnu/usr.bin/perl/lib/ExtUtils/Constant/Base.pm b/gnu/usr.bin/perl/lib/ExtUtils/Constant/Base.pm
new file mode 100644
index 00000000000..8a6fc6fab02
--- /dev/null
+++ b/gnu/usr.bin/perl/lib/ExtUtils/Constant/Base.pm
@@ -0,0 +1,973 @@
+package ExtUtils::Constant::Base;
+
+use strict;
+use vars qw($VERSION $is_perl56);
+use Carp;
+use Text::Wrap;
+use ExtUtils::Constant::Utils qw(C_stringify perl_stringify);
+
+$VERSION = '0.01';
+
+$is_perl56 = ($] < 5.007 && $] > 5.005_50);
+
+
+=head1 NAME
+
+ExtUtils::Constant::Base - base class for ExtUtils::Constant objects
+
+=head1 SYNOPSIS
+
+ require ExtUtils::Constant::Base;
+ @ISA = 'ExtUtils::Constant::Base';
+
+=head1 DESCRIPTION
+
+ExtUtils::Constant::Base provides a base implementation of methods to
+generate C code to give fast constant value lookup by named string. Currently
+it's mostly used ExtUtils::Constant::XS, which generates the lookup code
+for the constant() subroutine found in many XS modules.
+
+=head1 USAGE
+
+ExtUtils::Constant::Base exports no subroutines. The following methods are
+available
+
+=over 4
+
+=cut
+
+sub valid_type {
+ # Default to assuming that you don't need different types of return data.
+ 1;
+}
+sub default_type {
+ '';
+}
+
+=item header
+
+A method returning a scalar containing definitions needed, typically for a
+C header file.
+
+=cut
+
+sub header {
+ ''
+}
+
+# This might actually be a return statement. Note that you are responsible
+# for any space you might need before your value, as it lets to perform
+# "tricks" such as "return KEY_" and have strings appended.
+sub assignment_clause_for_type;
+# In which case this might be an empty string
+sub return_statement_for_type {undef};
+sub return_statement_for_notdef;
+sub return_statement_for_notfound;
+
+# "#if 1" is true to a C pre-processor
+sub macro_from_name {
+ 1;
+}
+
+sub name_param {
+ 'name';
+}
+
+# This is possibly buggy, in that it's not mandatory (below, in the main
+# C_constant parameters, but is expected to exist here, if it's needed)
+# Buggy because if you're definitely pure 8 bit only, and will never be
+# presented with your constants in utf8, the default form of C_constant can't
+# be told not to do the utf8 version.
+
+sub is_utf8_param {
+ 'utf8';
+}
+
+sub memEQ {
+ "!memcmp";
+}
+
+=item memEQ_clause args_hashref
+
+A method to return a suitable C C<if> statement to check whether I<name>
+is equal to the C variable C<name>. If I<checked_at> is defined, then it
+is used to avoid C<memEQ> for short names, or to generate a comment to
+highlight the position of the character in the C<switch> statement.
+
+If i<checked_at> is a reference to a scalar, then instead it gives
+the characters pre-checked at the beginning, (and the number of chars by
+which the C variable name has been advanced. These need to be chopped from
+the front of I<name>).
+
+=cut
+
+sub memEQ_clause {
+# if (memEQ(name, "thingy", 6)) {
+ # Which could actually be a character comparison or even ""
+ my ($self, $args) = @_;
+ my ($name, $checked_at, $indent) = @{$args}{qw(name checked_at indent)};
+ $indent = ' ' x ($indent || 4);
+ my $front_chop;
+ if (ref $checked_at) {
+ # regexp won't work on 5.6.1 without use utf8; in turn that won't work
+ # on 5.005_03.
+ substr ($name, 0, length $$checked_at,) = '';
+ $front_chop = C_stringify ($$checked_at);
+ undef $checked_at;
+ }
+ my $len = length $name;
+
+ if ($len < 2) {
+ return $indent . "{\n"
+ if (defined $checked_at and $checked_at == 0) or $len == 0;
+ # We didn't switch, drop through to the code for the 2 character string
+ $checked_at = 1;
+ }
+
+ my $name_param = $self->name_param;
+
+ if ($len < 3 and defined $checked_at) {
+ my $check;
+ if ($checked_at == 1) {
+ $check = 0;
+ } elsif ($checked_at == 0) {
+ $check = 1;
+ }
+ if (defined $check) {
+ my $char = C_stringify (substr $name, $check, 1);
+ # Placate 5.005 with a break in the string. I can't see a good way of
+ # getting it to not take [ as introducing an array lookup, even with
+ # ${name_param}[$check]
+ return $indent . "if ($name_param" . "[$check] == '$char') {\n";
+ }
+ }
+ if (($len == 2 and !defined $checked_at)
+ or ($len == 3 and defined ($checked_at) and $checked_at == 2)) {
+ my $char1 = C_stringify (substr $name, 0, 1);
+ my $char2 = C_stringify (substr $name, 1, 1);
+ return $indent .
+ "if ($name_param" . "[0] == '$char1' && $name_param" . "[1] == '$char2') {\n";
+ }
+ if (($len == 3 and defined ($checked_at) and $checked_at == 1)) {
+ my $char1 = C_stringify (substr $name, 0, 1);
+ my $char2 = C_stringify (substr $name, 2, 1);
+ return $indent .
+ "if ($name_param" . "[0] == '$char1' && $name_param" . "[2] == '$char2') {\n";
+ }
+
+ my $pointer = '^';
+ my $have_checked_last = defined ($checked_at) && $len == $checked_at + 1;
+ if ($have_checked_last) {
+ # Checked at the last character, so no need to memEQ it.
+ $pointer = C_stringify (chop $name);
+ $len--;
+ }
+
+ $name = C_stringify ($name);
+ my $memEQ = $self->memEQ();
+ my $body = $indent . "if ($memEQ($name_param, \"$name\", $len)) {\n";
+ # Put a little ^ under the letter we checked at
+ # Screws up for non printable and non-7 bit stuff, but that's too hard to
+ # get right.
+ if (defined $checked_at) {
+ $body .= $indent . "/* " . (' ' x length $memEQ)
+ . (' ' x length $name_param)
+ . (' ' x $checked_at) . $pointer
+ . (' ' x ($len - $checked_at + length $len)) . " */\n";
+ } elsif (defined $front_chop) {
+ $body .= $indent . "/* $front_chop"
+ . (' ' x ($len + 1 + length $len)) . " */\n";
+ }
+ return $body;
+}
+
+=item dump_names arg_hashref, ITEM...
+
+An internal function to generate the embedded perl code that will regenerate
+the constant subroutines. I<default_type>, I<types> and I<ITEM>s are the
+same as for C_constant. I<indent> is treated as number of spaces to indent
+by. If C<declare_types> is true a C<$types> is always declared in the perl
+code generated, if defined and false never declared, and if undefined C<$types>
+is only declared if the values in I<types> as passed in cannot be inferred from
+I<default_types> and the I<ITEM>s.
+
+=cut
+
+sub dump_names {
+ my ($self, $args, @items) = @_;
+ my ($default_type, $what, $indent, $declare_types)
+ = @{$args}{qw(default_type what indent declare_types)};
+ $indent = ' ' x ($indent || 0);
+
+ my $result;
+ my (@simple, @complex, %used_types);
+ foreach (@items) {
+ my $type;
+ if (ref $_) {
+ $type = $_->{type} || $default_type;
+ if ($_->{utf8}) {
+ # For simplicity always skip the bytes case, and reconstitute this entry
+ # from its utf8 twin.
+ next if $_->{utf8} eq 'no';
+ # Copy the hashref, as we don't want to mess with the caller's hashref.
+ $_ = {%$_};
+ unless ($is_perl56) {
+ utf8::decode ($_->{name});
+ } else {
+ $_->{name} = pack 'U*', unpack 'U0U*', $_->{name};
+ }
+ delete $_->{utf8};
+ }
+ } else {
+ $_ = {name=>$_};
+ $type = $default_type;
+ }
+ $used_types{$type}++;
+ if ($type eq $default_type
+ # grr 5.6.1
+ and length $_->{name}
+ and length $_->{name} == ($_->{name} =~ tr/A-Za-z0-9_//)
+ and !defined ($_->{macro}) and !defined ($_->{value})
+ and !defined ($_->{default}) and !defined ($_->{pre})
+ and !defined ($_->{post}) and !defined ($_->{def_pre})
+ and !defined ($_->{def_post}) and !defined ($_->{weight})) {
+ # It's the default type, and the name consists only of A-Za-z0-9_
+ push @simple, $_->{name};
+ } else {
+ push @complex, $_;
+ }
+ }
+
+ if (!defined $declare_types) {
+ # Do they pass in any types we weren't already using?
+ foreach (keys %$what) {
+ next if $used_types{$_};
+ $declare_types++; # Found one in $what that wasn't used.
+ last; # And one is enough to terminate this loop
+ }
+ }
+ if ($declare_types) {
+ $result = $indent . 'my $types = {map {($_, 1)} qw('
+ . join (" ", sort keys %$what) . ")};\n";
+ }
+ local $Text::Wrap::huge = 'overflow';
+ local $Text::Wrap::columns = 80;
+ $result .= wrap ($indent . "my \@names = (qw(",
+ $indent . " ", join (" ", sort @simple) . ")");
+ if (@complex) {
+ foreach my $item (sort {$a->{name} cmp $b->{name}} @complex) {
+ my $name = perl_stringify $item->{name};
+ my $line = ",\n$indent {name=>\"$name\"";
+ $line .= ", type=>\"$item->{type}\"" if defined $item->{type};
+ foreach my $thing (qw (macro value default pre post def_pre def_post)) {
+ my $value = $item->{$thing};
+ if (defined $value) {
+ if (ref $value) {
+ $line .= ", $thing=>[\""
+ . join ('", "', map {perl_stringify $_} @$value) . '"]';
+ } else {
+ $line .= ", $thing=>\"" . perl_stringify($value) . "\"";
+ }
+ }
+ }
+ $line .= "}";
+ # Ensure that the enclosing C comment doesn't end
+ # by turning */ into *" . "/
+ $line =~ s!\*\/!\*" . "/!gs;
+ # gcc -Wall doesn't like finding /* inside a comment
+ $line =~ s!\/\*!/" . "\*!gs;
+ $result .= $line;
+ }
+ }
+ $result .= ");\n";
+
+ $result;
+}
+
+=item assign arg_hashref, VALUE...
+
+A method to return a suitable assignment clause. If I<type> is aggregate
+(eg I<PVN> expects both pointer and length) then there should be multiple
+I<VALUE>s for the components. I<pre> and I<post> if defined give snippets
+of C code to proceed and follow the assignment. I<pre> will be at the start
+of a block, so variables may be defined in it.
+
+=cut
+# Hmm. value undef to to NOTDEF? value () to do NOTFOUND?
+
+sub assign {
+ my $self = shift;
+ my $args = shift;
+ my ($indent, $type, $pre, $post, $item)
+ = @{$args}{qw(indent type pre post item)};
+ $post ||= '';
+ my $clause;
+ my $close;
+ if ($pre) {
+ chomp $pre;
+ $close = "$indent}\n";
+ $clause = $indent . "{\n";
+ $indent .= " ";
+ $clause .= "$indent$pre";
+ $clause .= ";" unless $pre =~ /;$/;
+ $clause .= "\n";
+ }
+ confess "undef \$type" unless defined $type;
+ confess "Can't generate code for type $type"
+ unless $self->valid_type($type);
+
+ $clause .= join '', map {"$indent$_\n"}
+ $self->assignment_clause_for_type({type=>$type,item=>$item}, @_);
+ chomp $post;
+ if (length $post) {
+ $clause .= "$post";
+ $clause .= ";" unless $post =~ /;$/;
+ $clause .= "\n";
+ }
+ my $return = $self->return_statement_for_type($type);
+ $clause .= "$indent$return\n" if defined $return;
+ $clause .= $close if $close;
+ return $clause;
+}
+
+=item return_clause arg_hashref, ITEM
+
+A method to return a suitable C<#ifdef> clause. I<ITEM> is a hashref
+(as passed to C<C_constant> and C<match_clause>. I<indent> is the number
+of spaces to indent, defaulting to 6.
+
+=cut
+
+sub return_clause {
+
+##ifdef thingy
+# *iv_return = thingy;
+# return PERL_constant_ISIV;
+##else
+# return PERL_constant_NOTDEF;
+##endif
+ my ($self, $args, $item) = @_;
+ my $indent = $args->{indent};
+
+ my ($name, $value, $macro, $default, $pre, $post, $def_pre, $def_post, $type)
+ = @$item{qw (name value macro default pre post def_pre def_post type)};
+ $value = $name unless defined $value;
+ $macro = $self->macro_from_name($item) unless defined $macro;
+ # "#if 1" is true to a C pre-processor
+ $macro = 1 if !defined $macro or $macro eq '';
+ $indent = ' ' x ($indent || 6);
+ unless (defined $type) {
+ # use Data::Dumper; print STDERR Dumper ($item);
+ confess "undef \$type";
+ }
+
+ my $clause;
+
+ ##ifdef thingy
+ if (ref $macro) {
+ $clause = $macro->[0];
+ } elsif ($macro ne "1") {
+ $clause = "#ifdef $macro\n";
+ }
+
+ # *iv_return = thingy;
+ # return PERL_constant_ISIV;
+ $clause
+ .= $self->assign ({indent=>$indent, type=>$type, pre=>$pre, post=>$post,
+ item=>$item}, ref $value ? @$value : $value);
+
+ if (ref $macro or $macro ne "1") {
+ ##else
+ $clause .= "#else\n";
+
+ # return PERL_constant_NOTDEF;
+ if (!defined $default) {
+ my $notdef = $self->return_statement_for_notdef();
+ $clause .= "$indent$notdef\n" if defined $notdef;
+ } else {
+ my @default = ref $default ? @$default : $default;
+ $type = shift @default;
+ $clause .= $self->assign ({indent=>$indent, type=>$type, pre=>$pre,
+ post=>$post, item=>$item}, @default);
+ }
+
+ ##endif
+ if (ref $macro) {
+ $clause .= $macro->[1];
+ } else {
+ $clause .= "#endif\n";
+ }
+ }
+ return $clause;
+}
+
+sub match_clause {
+ # $offset defined if we have checked an offset.
+ my ($self, $args, $item) = @_;
+ my ($offset, $indent) = @{$args}{qw(checked_at indent)};
+ $indent = ' ' x ($indent || 4);
+ my $body = '';
+ my ($no, $yes, $either, $name, $inner_indent);
+ if (ref $item eq 'ARRAY') {
+ ($yes, $no) = @$item;
+ $either = $yes || $no;
+ confess "$item is $either expecting hashref in [0] || [1]"
+ unless ref $either eq 'HASH';
+ $name = $either->{name};
+ } else {
+ confess "$item->{name} has utf8 flag '$item->{utf8}', should be false"
+ if $item->{utf8};
+ $name = $item->{name};
+ $inner_indent = $indent;
+ }
+
+ $body .= $self->memEQ_clause ({name => $name, checked_at => $offset,
+ indent => length $indent});
+ # If we've been presented with an arrayref for $item, then the user string
+ # contains in the range 128-255, and we need to check whether it was utf8
+ # (or not).
+ # In the worst case we have two named constants, where one's name happens
+ # encoded in UTF8 happens to be the same byte sequence as the second's
+ # encoded in (say) ISO-8859-1.
+ # In this case, $yes and $no both have item hashrefs.
+ if ($yes) {
+ $body .= $indent . " if (" . $self->is_utf8_param . ") {\n";
+ } elsif ($no) {
+ $body .= $indent . " if (!" . $self->is_utf8_param . ") {\n";
+ }
+ if ($either) {
+ $body .= $self->return_clause ({indent=>4 + length $indent}, $either);
+ if ($yes and $no) {
+ $body .= $indent . " } else {\n";
+ $body .= $self->return_clause ({indent=>4 + length $indent}, $no);
+ }
+ $body .= $indent . " }\n";
+ } else {
+ $body .= $self->return_clause ({indent=>2 + length $indent}, $item);
+ }
+ $body .= $indent . "}\n";
+}
+
+
+=item switch_clause arg_hashref, NAMELEN, ITEMHASH, ITEM...
+
+An internal method to generate a suitable C<switch> clause, called by
+C<C_constant> I<ITEM>s are in the hash ref format as given in the description
+of C<C_constant>, and must all have the names of the same length, given by
+I<NAMELEN>. I<ITEMHASH> is a reference to a hash, keyed by name, values being
+the hashrefs in the I<ITEM> list. (No parameters are modified, and there can
+be keys in the I<ITEMHASH> that are not in the list of I<ITEM>s without
+causing problems - the hash is passed in to save generating it afresh for
+each call).
+
+=cut
+
+sub switch_clause {
+ my ($self, $args, $namelen, $items, @items) = @_;
+ my ($indent, $comment) = @{$args}{qw(indent comment)};
+ $indent = ' ' x ($indent || 2);
+
+ local $Text::Wrap::huge = 'overflow';
+ local $Text::Wrap::columns = 80;
+
+ my @names = sort map {$_->{name}} @items;
+ my $leader = $indent . '/* ';
+ my $follower = ' ' x length $leader;
+ my $body = $indent . "/* Names all of length $namelen. */\n";
+ if (defined $comment) {
+ $body = wrap ($leader, $follower, $comment) . "\n";
+ $leader = $follower;
+ }
+ my @safe_names = @names;
+ foreach (@safe_names) {
+ confess sprintf "Name '$_' is length %d, not $namelen", length
+ unless length == $namelen;
+ # Argh. 5.6.1
+ # next unless tr/A-Za-z0-9_//c;
+ next if tr/A-Za-z0-9_// == length;
+ $_ = '"' . perl_stringify ($_) . '"';
+ # Ensure that the enclosing C comment doesn't end
+ # by turning */ into *" . "/
+ s!\*\/!\*"."/!gs;
+ # gcc -Wall doesn't like finding /* inside a comment
+ s!\/\*!/"."\*!gs;
+ }
+ $body .= wrap ($leader, $follower, join (" ", @safe_names) . " */") . "\n";
+ # Figure out what to switch on.
+ # (RMS, Spread of jump table, Position, Hashref)
+ my @best = (1e38, ~0);
+ # Prefer the last character over the others. (As it lets us shorten the
+ # memEQ clause at no cost).
+ foreach my $i ($namelen - 1, 0 .. ($namelen - 2)) {
+ my ($min, $max) = (~0, 0);
+ my %spread;
+ if ($is_perl56) {
+ # Need proper Unicode preserving hash keys for bytes in range 128-255
+ # here too, for some reason. grr 5.6.1 yet again.
+ tie %spread, 'ExtUtils::Constant::Aaargh56Hash';
+ }
+ foreach (@names) {
+ my $char = substr $_, $i, 1;
+ my $ord = ord $char;
+ confess "char $ord is out of range" if $ord > 255;
+ $max = $ord if $ord > $max;
+ $min = $ord if $ord < $min;
+ push @{$spread{$char}}, $_;
+ # warn "$_ $char";
+ }
+ # I'm going to pick the character to split on that minimises the root
+ # mean square of the number of names in each case. Normally this should
+ # be the one with the most keys, but it may pick a 7 where the 8 has
+ # one long linear search. I'm not sure if RMS or just sum of squares is
+ # actually better.
+ # $max and $min are for the tie-breaker if the root mean squares match.
+ # Assuming that the compiler may be building a jump table for the
+ # switch() then try to minimise the size of that jump table.
+ # Finally use < not <= so that if it still ties the earliest part of
+ # the string wins. Because if that passes but the memEQ fails, it may
+ # only need the start of the string to bin the choice.
+ # I think. But I'm micro-optimising. :-)
+ # OK. Trump that. Now favour the last character of the string, before the
+ # rest.
+ my $ss;
+ $ss += @$_ * @$_ foreach values %spread;
+ my $rms = sqrt ($ss / keys %spread);
+ if ($rms < $best[0] || ($rms == $best[0] && ($max - $min) < $best[1])) {
+ @best = ($rms, $max - $min, $i, \%spread);
+ }
+ }
+ confess "Internal error. Failed to pick a switch point for @names"
+ unless defined $best[2];
+ # use Data::Dumper; print Dumper (@best);
+ my ($offset, $best) = @best[2,3];
+ $body .= $indent . "/* Offset $offset gives the best switch position. */\n";
+
+ my $do_front_chop = $offset == 0 && $namelen > 2;
+ if ($do_front_chop) {
+ $body .= $indent . "switch (*" . $self->name_param() . "++) {\n";
+ } else {
+ $body .= $indent . "switch (" . $self->name_param() . "[$offset]) {\n";
+ }
+ foreach my $char (sort keys %$best) {
+ confess sprintf "'$char' is %d bytes long, not 1", length $char
+ if length ($char) != 1;
+ confess sprintf "char %#X is out of range", ord $char if ord ($char) > 255;
+ $body .= $indent . "case '" . C_stringify ($char) . "':\n";
+ foreach my $thisone (sort {
+ # Deal with the case of an item actually being an array ref to 1 or 2
+ # hashrefs. Don't assign to $a or $b, as they're aliases to the orignal
+ my $l = ref $a eq 'ARRAY' ? ($a->[0] || $->[1]) : $a;
+ my $r = ref $b eq 'ARRAY' ? ($b->[0] || $->[1]) : $b;
+ # Sort by weight first
+ ($r->{weight} || 0) <=> ($l->{weight} || 0)
+ # Sort equal weights by name
+ or $l->{name} cmp $r->{name}}
+ # If this looks evil, maybe it is. $items is a
+ # hashref, and we're doing a hash slice on it
+ @{$items}{@{$best->{$char}}}) {
+ # warn "You are here";
+ if ($do_front_chop) {
+ $body .= $self->match_clause ({indent => 2 + length $indent,
+ checked_at => \$char}, $thisone);
+ } else {
+ $body .= $self->match_clause ({indent => 2 + length $indent,
+ checked_at => $offset}, $thisone);
+ }
+ }
+ $body .= $indent . " break;\n";
+ }
+ $body .= $indent . "}\n";
+ return $body;
+}
+
+sub C_constant_return_type {
+ "static int";
+}
+
+sub C_constant_prefix_param {
+ '';
+}
+
+sub C_constant_prefix_param_defintion {
+ '';
+}
+
+sub name_param_definition {
+ "const char *" . $_[0]->name_param;
+}
+
+sub namelen_param {
+ 'len';
+}
+
+sub namelen_param_definition {
+ 'size_t ' . $_[0]->namelen_param;
+}
+
+sub C_constant_other_params {
+ '';
+}
+
+sub C_constant_other_params_defintion {
+ '';
+}
+
+=item params WHAT
+
+An "internal" method, subject to change, currently called to allow an
+overriding class to cache information that will then be passed into all
+the C<*param*> calls. (Yes, having to read the source to make sense of this is
+considered a known bug). I<WHAT> is be a hashref of types the constant
+function will return. In ExtUtils::Constant::XS this method is used to
+returns a hashref keyed IV NV PV SV to show which combination of pointers will
+be needed in the C argument list generated by
+C_constant_other_params_definition and C_constant_other_params
+
+=cut
+
+sub params {
+ '';
+}
+
+
+=item dogfood arg_hashref, ITEM...
+
+An internal function to generate the embedded perl code that will regenerate
+the constant subroutines. Parameters are the same as for C_constant.
+
+Currently the base class does nothing and returns an empty string.
+
+=cut
+
+sub dogfood {
+ ''
+}
+
+=item C_constant arg_hashref, ITEM...
+
+A function that returns a B<list> of C subroutine definitions that return
+the value and type of constants when passed the name by the XS wrapper.
+I<ITEM...> gives a list of constant names. Each can either be a string,
+which is taken as a C macro name, or a reference to a hash with the following
+keys
+
+=over 8
+
+=item name
+
+The name of the constant, as seen by the perl code.
+
+=item type
+
+The type of the constant (I<IV>, I<NV> etc)
+
+=item value
+
+A C expression for the value of the constant, or a list of C expressions if
+the type is aggregate. This defaults to the I<name> if not given.
+
+=item macro
+
+The C pre-processor macro to use in the C<#ifdef>. This defaults to the
+I<name>, and is mainly used if I<value> is an C<enum>. If a reference an
+array is passed then the first element is used in place of the C<#ifdef>
+line, and the second element in place of the C<#endif>. This allows
+pre-processor constructions such as
+
+ #if defined (foo)
+ #if !defined (bar)
+ ...
+ #endif
+ #endif
+
+to be used to determine if a constant is to be defined.
+
+A "macro" 1 signals that the constant is always defined, so the C<#if>/C<#endif>
+test is omitted.
+
+=item default
+
+Default value to use (instead of C<croak>ing with "your vendor has not
+defined...") to return if the macro isn't defined. Specify a reference to
+an array with type followed by value(s).
+
+=item pre
+
+C code to use before the assignment of the value of the constant. This allows
+you to use temporary variables to extract a value from part of a C<struct>
+and return this as I<value>. This C code is places at the start of a block,
+so you can declare variables in it.
+
+=item post
+
+C code to place between the assignment of value (to a temporary) and the
+return from the function. This allows you to clear up anything in I<pre>.
+Rarely needed.
+
+=item def_pre
+
+=item def_post
+
+Equivalents of I<pre> and I<post> for the default value.
+
+=item utf8
+
+Generated internally. Is zero or undefined if name is 7 bit ASCII,
+"no" if the name is 8 bit (and so should only match if SvUTF8() is false),
+"yes" if the name is utf8 encoded.
+
+The internals automatically clone any name with characters 128-255 but none
+256+ (ie one that could be either in bytes or utf8) into a second entry
+which is utf8 encoded.
+
+=item weight
+
+Optional sorting weight for names, to determine the order of
+linear testing when multiple names fall in the same case of a switch clause.
+Higher comes earlier, undefined defaults to zero.
+
+=back
+
+In the argument hashref, I<package> is the name of the package, and is only
+used in comments inside the generated C code. I<subname> defaults to
+C<constant> if undefined.
+
+I<default_type> is the type returned by C<ITEM>s that don't specify their
+type. It defaults to the value of C<default_type()>. I<types> should be given
+either as a comma separated list of types that the C subroutine I<subname>
+will generate or as a reference to a hash. I<default_type> will be added to
+the list if not present, as will any types given in the list of I<ITEM>s. The
+resultant list should be the same list of types that C<XS_constant> is
+given. [Otherwise C<XS_constant> and C<C_constant> may differ in the number of
+parameters to the constant function. I<indent> is currently unused and
+ignored. In future it may be used to pass in information used to change the C
+indentation style used.] The best way to maintain consistency is to pass in a
+hash reference and let this function update it.
+
+I<breakout> governs when child functions of I<subname> are generated. If there
+are I<breakout> or more I<ITEM>s with the same length of name, then the code
+to switch between them is placed into a function named I<subname>_I<len>, for
+example C<constant_5> for names 5 characters long. The default I<breakout> is
+3. A single C<ITEM> is always inlined.
+
+=cut
+
+# The parameter now BREAKOUT was previously documented as:
+#
+# I<NAMELEN> if defined signals that all the I<name>s of the I<ITEM>s are of
+# this length, and that the constant name passed in by perl is checked and
+# also of this length. It is used during recursion, and should be C<undef>
+# unless the caller has checked all the lengths during code generation, and
+# the generated subroutine is only to be called with a name of this length.
+#
+# As you can see it now performs this function during recursion by being a
+# scalar reference.
+
+sub C_constant {
+ my ($self, $args, @items) = @_;
+ my ($package, $subname, $default_type, $what, $indent, $breakout) =
+ @{$args}{qw(package subname default_type types indent breakout)};
+ $package ||= 'Foo';
+ $subname ||= 'constant';
+ # I'm not using this. But a hashref could be used for full formatting without
+ # breaking this API
+ # $indent ||= 0;
+
+ my ($namelen, $items);
+ if (ref $breakout) {
+ # We are called recursively. We trust @items to be normalised, $what to
+ # be a hashref, and pinch %$items from our parent to save recalculation.
+ ($namelen, $items) = @$breakout;
+ } else {
+ if ($is_perl56) {
+ # Need proper Unicode preserving hash keys.
+ require ExtUtils::Constant::Aaargh56Hash;
+ $items = {};
+ tie %$items, 'ExtUtils::Constant::Aaargh56Hash';
+ }
+ $breakout ||= 3;
+ $default_type ||= $self->default_type();
+ if (!ref $what) {
+ # Convert line of the form IV,UV,NV to hash
+ $what = {map {$_ => 1} split /,\s*/, ($what || '')};
+ # Figure out what types we're dealing with, and assign all unknowns to the
+ # default type
+ }
+ my @new_items;
+ foreach my $orig (@items) {
+ my ($name, $item);
+ if (ref $orig) {
+ # Make a copy which is a normalised version of the ref passed in.
+ $name = $orig->{name};
+ my ($type, $macro, $value) = @$orig{qw (type macro value)};
+ $type ||= $default_type;
+ $what->{$type} = 1;
+ $item = {name=>$name, type=>$type};
+
+ undef $macro if defined $macro and $macro eq $name;
+ $item->{macro} = $macro if defined $macro;
+ undef $value if defined $value and $value eq $name;
+ $item->{value} = $value if defined $value;
+ foreach my $key (qw(default pre post def_pre def_post weight)) {
+ my $value = $orig->{$key};
+ $item->{$key} = $value if defined $value;
+ # warn "$key $value";
+ }
+ } else {
+ $name = $orig;
+ $item = {name=>$name, type=>$default_type};
+ $what->{$default_type} = 1;
+ }
+ warn +(ref ($self) || $self)
+ . "doesn't know how to handle values of type $_ used in macro $name"
+ unless $self->valid_type ($item->{type});
+ # tr///c is broken on 5.6.1 for utf8, so my original tr/\0-\177//c
+ # doesn't work. Upgrade to 5.8
+ # if ($name !~ tr/\0-\177//c || $] < 5.005_50) {
+ if ($name =~ tr/\0-\177// == length $name || $] < 5.005_50) {
+ # No characters outside 7 bit ASCII.
+ if (exists $items->{$name}) {
+ die "Multiple definitions for macro $name";
+ }
+ $items->{$name} = $item;
+ } else {
+ # No characters outside 8 bit. This is hardest.
+ if (exists $items->{$name} and ref $items->{$name} ne 'ARRAY') {
+ confess "Unexpected ASCII definition for macro $name";
+ }
+ # Again, 5.6.1 tr broken, so s/5\.6.*/5\.8\.0/;
+ # if ($name !~ tr/\0-\377//c) {
+ if ($name =~ tr/\0-\377// == length $name) {
+# if ($] < 5.007) {
+# $name = pack "C*", unpack "U*", $name;
+# }
+ $item->{utf8} = 'no';
+ $items->{$name}[1] = $item;
+ push @new_items, $item;
+ # Copy item, to create the utf8 variant.
+ $item = {%$item};
+ }
+ # Encode the name as utf8 bytes.
+ unless ($is_perl56) {
+ utf8::encode($name);
+ } else {
+# warn "Was >$name< " . length ${name};
+ $name = pack 'C*', unpack 'C*', $name . pack 'U*';
+# warn "Now '${name}' " . length ${name};
+ }
+ if ($items->{$name}[0]) {
+ die "Multiple definitions for macro $name";
+ }
+ $item->{utf8} = 'yes';
+ $item->{name} = $name;
+ $items->{$name}[0] = $item;
+ # We have need for the utf8 flag.
+ $what->{''} = 1;
+ }
+ push @new_items, $item;
+ }
+ @items = @new_items;
+ # use Data::Dumper; print Dumper @items;
+ }
+ my $params = $self->params ($what);
+
+ # Probably "static int"
+ my ($body, @subs);
+ $body = $self->C_constant_return_type($params) . "\n$subname ("
+ # Eg "pTHX_ "
+ . $self->C_constant_prefix_param_defintion($params)
+ # Probably "const char *name"
+ . $self->name_param_definition($params);
+ # Something like ", STRLEN len"
+ $body .= ", " . $self->namelen_param_definition($params)
+ unless defined $namelen;
+ $body .= $self->C_constant_other_params_defintion($params);
+ $body .= ") {\n";
+
+ if (defined $namelen) {
+ # We are a child subroutine. Print the simple description
+ my $comment = 'When generated this function returned values for the list'
+ . ' of names given here. However, subsequent manual editing may have'
+ . ' added or removed some.';
+ $body .= $self->switch_clause ({indent=>2, comment=>$comment},
+ $namelen, $items, @items);
+ } else {
+ # We are the top level.
+ $body .= " /* Initially switch on the length of the name. */\n";
+ $body .= $self->dogfood ({package => $package, subname => $subname,
+ default_type => $default_type, what => $what,
+ indent => $indent, breakout => $breakout},
+ @items);
+ $body .= ' switch ('.$self->namelen_param().") {\n";
+ # Need to group names of the same length
+ my @by_length;
+ foreach (@items) {
+ push @{$by_length[length $_->{name}]}, $_;
+ }
+ foreach my $i (0 .. $#by_length) {
+ next unless $by_length[$i]; # None of this length
+ $body .= " case $i:\n";
+ if (@{$by_length[$i]} == 1) {
+ my $only_thing = $by_length[$i]->[0];
+ if ($only_thing->{utf8}) {
+ if ($only_thing->{utf8} eq 'yes') {
+ # With utf8 on flag item is passed in element 0
+ $body .= $self->match_clause (undef, [$only_thing]);
+ } else {
+ # With utf8 off flag item is passed in element 1
+ $body .= $self->match_clause (undef, [undef, $only_thing]);
+ }
+ } else {
+ $body .= $self->match_clause (undef, $only_thing);
+ }
+ } elsif (@{$by_length[$i]} < $breakout) {
+ $body .= $self->switch_clause ({indent=>4},
+ $i, $items, @{$by_length[$i]});
+ } else {
+ # Only use the minimal set of parameters actually needed by the types
+ # of the names of this length.
+ my $what = {};
+ foreach (@{$by_length[$i]}) {
+ $what->{$_->{type}} = 1;
+ $what->{''} = 1 if $_->{utf8};
+ }
+ $params = $self->params ($what);
+ push @subs, $self->C_constant ({package=>$package,
+ subname=>"${subname}_$i",
+ default_type => $default_type,
+ types => $what, indent => $indent,
+ breakout => [$i, $items]},
+ @{$by_length[$i]});
+ $body .= " return ${subname}_$i ("
+ # Eg "aTHX_ "
+ . $self->C_constant_prefix_param($params)
+ # Probably "name"
+ . $self->name_param($params);
+ $body .= $self->C_constant_other_params($params);
+ $body .= ");\n";
+ }
+ $body .= " break;\n";
+ }
+ $body .= " }\n";
+ }
+ my $notfound = $self->return_statement_for_notfound();
+ $body .= " $notfound\n" if $notfound;
+ $body .= "}\n";
+ return (@subs, $body);
+}
+
+1;
+__END__
+
+=back
+
+=head1 BUGS
+
+Not everything is documented yet.
+
+Probably others.
+
+=head1 AUTHOR
+
+Nicholas Clark <nick@ccl4.org> based on the code in C<h2xs> by Larry Wall and
+others
diff --git a/gnu/usr.bin/perl/lib/ExtUtils/Constant/Utils.pm b/gnu/usr.bin/perl/lib/ExtUtils/Constant/Utils.pm
new file mode 100644
index 00000000000..3ef2228c871
--- /dev/null
+++ b/gnu/usr.bin/perl/lib/ExtUtils/Constant/Utils.pm
@@ -0,0 +1,123 @@
+package ExtUtils::Constant::Utils;
+
+use strict;
+use vars qw($VERSION @EXPORT_OK @ISA $is_perl56);
+use Carp;
+
+@ISA = 'Exporter';
+@EXPORT_OK = qw(C_stringify perl_stringify);
+$VERSION = '0.01';
+
+$is_perl56 = ($] < 5.007 && $] > 5.005_50);
+
+=head1 NAME
+
+ExtUtils::Constant::Utils - helper functions for ExtUtils::Constant
+
+=head1 SYNOPSIS
+
+ use ExtUtils::Constant::Utils qw (C_stringify);
+ $C_code = C_stringify $stuff;
+
+=head1 DESCRIPTION
+
+ExtUtils::Constant::Utils packages up utility subroutines used by
+ExtUtils::Constant, ExtUtils::Constant::Base and derived classes. All its
+functions are explicitly exportable.
+
+=head1 USAGE
+
+=over 4
+
+=item C_stringify NAME
+
+A function which returns a 7 bit ASCII correctly \ escaped version of the
+string passed suitable for C's "" or ''. It will die if passed Unicode
+characters.
+
+=cut
+
+# Hopefully make a happy C identifier.
+sub C_stringify {
+ local $_ = shift;
+ return unless defined $_;
+ # grr 5.6.1
+ confess "Wide character in '$_' intended as a C identifier"
+ if tr/\0-\377// != length;
+ # grr 5.6.1 moreso because its regexps will break on data that happens to
+ # be utf8, which includes my 8 bit test cases.
+ $_ = pack 'C*', unpack 'U*', $_ . pack 'U*' if $is_perl56;
+ s/\\/\\\\/g;
+ s/([\"\'])/\\$1/g; # Grr. fix perl mode.
+ s/\n/\\n/g; # Ensure newlines don't end up in octal
+ s/\r/\\r/g;
+ s/\t/\\t/g;
+ s/\f/\\f/g;
+ s/\a/\\a/g;
+ s/([^\0-\177])/sprintf "\\%03o", ord $1/ge;
+ unless ($] < 5.006) {
+ # This will elicit a warning on 5.005_03 about [: :] being reserved unless
+ # I cheat
+ my $cheat = '([[:^print:]])';
+ s/$cheat/sprintf "\\%03o", ord $1/ge;
+ } else {
+ require POSIX;
+ s/([^A-Za-z0-9_])/POSIX::isprint($1) ? $1 : sprintf "\\%03o", ord $1/ge;
+ }
+ $_;
+}
+
+=item perl_stringify NAME
+
+A function which returns a 7 bit ASCII correctly \ escaped version of the
+string passed suitable for a perl "" string.
+
+=cut
+
+# Hopefully make a happy perl identifier.
+sub perl_stringify {
+ local $_ = shift;
+ return unless defined $_;
+ s/\\/\\\\/g;
+ s/([\"\'])/\\$1/g; # Grr. fix perl mode.
+ s/\n/\\n/g; # Ensure newlines don't end up in octal
+ s/\r/\\r/g;
+ s/\t/\\t/g;
+ s/\f/\\f/g;
+ s/\a/\\a/g;
+ unless ($] < 5.006) {
+ if ($] > 5.007) {
+ s/([^\0-\177])/sprintf "\\x{%X}", ord $1/ge;
+ } else {
+ # Grr 5.6.1. And I don't think I can use utf8; to force the regexp
+ # because 5.005_03 will fail.
+ # This is grim, but I also can't split on //
+ my $copy;
+ foreach my $index (0 .. length ($_) - 1) {
+ my $char = substr ($_, $index, 1);
+ $copy .= ($char le "\177") ? $char : sprintf "\\x{%X}", ord $char;
+ }
+ $_ = $copy;
+ }
+ # This will elicit a warning on 5.005_03 about [: :] being reserved unless
+ # I cheat
+ my $cheat = '([[:^print:]])';
+ s/$cheat/sprintf "\\%03o", ord $1/ge;
+ } else {
+ # Turns out "\x{}" notation only arrived with 5.6
+ s/([^\0-\177])/sprintf "\\x%02X", ord $1/ge;
+ require POSIX;
+ s/([^A-Za-z0-9_])/POSIX::isprint($1) ? $1 : sprintf "\\%03o", ord $1/ge;
+ }
+ $_;
+}
+
+1;
+__END__
+
+=back
+
+=head1 AUTHOR
+
+Nicholas Clark <nick@ccl4.org> based on the code in C<h2xs> by Larry Wall and
+others
diff --git a/gnu/usr.bin/perl/lib/ExtUtils/Constant/XS.pm b/gnu/usr.bin/perl/lib/ExtUtils/Constant/XS.pm
new file mode 100644
index 00000000000..51244f6b2bf
--- /dev/null
+++ b/gnu/usr.bin/perl/lib/ExtUtils/Constant/XS.pm
@@ -0,0 +1,252 @@
+package ExtUtils::Constant::XS;
+
+use strict;
+use vars qw($VERSION %XS_Constant %XS_TypeSet @ISA @EXPORT_OK $is_perl56);
+use Carp;
+use ExtUtils::Constant::Utils 'perl_stringify';
+require ExtUtils::Constant::Base;
+
+
+@ISA = qw(ExtUtils::Constant::Base Exporter);
+@EXPORT_OK = qw(%XS_Constant %XS_TypeSet);
+
+$VERSION = '0.01';
+
+$is_perl56 = ($] < 5.007 && $] > 5.005_50);
+
+=head1 NAME
+
+ExtUtils::Constant::Base - base class for ExtUtils::Constant objects
+
+=head1 SYNOPSIS
+
+ require ExtUtils::Constant::XS;
+
+=head1 DESCRIPTION
+
+ExtUtils::Constant::XS overrides ExtUtils::Constant::Base to generate C
+code for XS modules' constants.
+
+=head1 BUGS
+
+Nothing is documented.
+
+Probably others.
+
+=head1 AUTHOR
+
+Nicholas Clark <nick@ccl4.org> based on the code in C<h2xs> by Larry Wall and
+others
+
+=cut
+
+# '' is used as a flag to indicate non-ascii macro names, and hence the need
+# to pass in the utf8 on/off flag.
+%XS_Constant = (
+ '' => '',
+ IV => 'PUSHi(iv)',
+ UV => 'PUSHu((UV)iv)',
+ NV => 'PUSHn(nv)',
+ PV => 'PUSHp(pv, strlen(pv))',
+ PVN => 'PUSHp(pv, iv)',
+ SV => 'PUSHs(sv)',
+ YES => 'PUSHs(&PL_sv_yes)',
+ NO => 'PUSHs(&PL_sv_no)',
+ UNDEF => '', # implicit undef
+);
+
+%XS_TypeSet = (
+ IV => '*iv_return = ',
+ UV => '*iv_return = (IV)',
+ NV => '*nv_return = ',
+ PV => '*pv_return = ',
+ PVN => ['*pv_return = ', '*iv_return = (IV)'],
+ SV => '*sv_return = ',
+ YES => undef,
+ NO => undef,
+ UNDEF => undef,
+);
+
+sub header {
+ my $start = 1;
+ my @lines;
+ push @lines, "#define PERL_constant_NOTFOUND\t$start\n"; $start++;
+ push @lines, "#define PERL_constant_NOTDEF\t$start\n"; $start++;
+ foreach (sort keys %XS_Constant) {
+ next if $_ eq '';
+ push @lines, "#define PERL_constant_IS$_\t$start\n"; $start++;
+ }
+ push @lines, << 'EOT';
+
+#ifndef NVTYPE
+typedef double NV; /* 5.6 and later define NVTYPE, and typedef NV to it. */
+#endif
+#ifndef aTHX_
+#define aTHX_ /* 5.6 or later define this for threading support. */
+#endif
+#ifndef pTHX_
+#define pTHX_ /* 5.6 or later define this for threading support. */
+#endif
+EOT
+
+ return join '', @lines;
+}
+
+sub valid_type {
+ my ($self, $type) = @_;
+ return exists $XS_TypeSet{$type};
+}
+
+# This might actually be a return statement
+sub assignment_clause_for_type {
+ my $self = shift;
+ my $args = shift;
+ my $type = $args->{type};
+ my $typeset = $XS_TypeSet{$type};
+ if (ref $typeset) {
+ die "Type $type is aggregate, but only single value given"
+ if @_ == 1;
+ return map {"$typeset->[$_]$_[$_];"} 0 .. $#$typeset;
+ } elsif (defined $typeset) {
+ confess "Aggregate value given for type $type"
+ if @_ > 1;
+ return "$typeset$_[0];";
+ }
+ return ();
+}
+
+sub return_statement_for_type {
+ my ($self, $type) = @_;
+ # In the future may pass in an options hash
+ $type = $type->{type} if ref $type;
+ "return PERL_constant_IS$type;";
+}
+
+sub return_statement_for_notdef {
+ # my ($self) = @_;
+ "return PERL_constant_NOTDEF;";
+}
+
+sub return_statement_for_notfound {
+ # my ($self) = @_;
+ "return PERL_constant_NOTFOUND;";
+}
+
+sub default_type {
+ 'IV';
+}
+
+sub macro_from_name {
+ my ($self, $item) = @_;
+ my $macro = $item->{name};
+ $macro = $item->{value} unless defined $macro;
+ $macro;
+}
+
+# Keep to the traditional perl source macro
+sub memEQ {
+ "memEQ";
+}
+
+sub params {
+ my ($self, $what) = @_;
+ foreach (sort keys %$what) {
+ warn "ExtUtils::Constant doesn't know how to handle values of type $_" unless defined $XS_Constant{$_};
+ }
+ my $params = {};
+ $params->{''} = 1 if $what->{''};
+ $params->{IV} = 1 if $what->{IV} || $what->{UV} || $what->{PVN};
+ $params->{NV} = 1 if $what->{NV};
+ $params->{PV} = 1 if $what->{PV} || $what->{PVN};
+ $params->{SV} = 1 if $what->{SV};
+ return $params;
+}
+
+
+sub C_constant_prefix_param {
+ "aTHX_ ";
+}
+
+sub C_constant_prefix_param_defintion {
+ "pTHX_ ";
+}
+
+sub namelen_param_definition {
+ 'STRLEN ' . $_[0] -> namelen_param;
+}
+
+sub C_constant_other_params_defintion {
+ my ($self, $params) = @_;
+ my $body = '';
+ $body .= ", int utf8" if $params->{''};
+ $body .= ", IV *iv_return" if $params->{IV};
+ $body .= ", NV *nv_return" if $params->{NV};
+ $body .= ", const char **pv_return" if $params->{PV};
+ $body .= ", SV **sv_return" if $params->{SV};
+ $body;
+}
+
+sub C_constant_other_params {
+ my ($self, $params) = @_;
+ my $body = '';
+ $body .= ", utf8" if $params->{''};
+ $body .= ", iv_return" if $params->{IV};
+ $body .= ", nv_return" if $params->{NV};
+ $body .= ", pv_return" if $params->{PV};
+ $body .= ", sv_return" if $params->{SV};
+ $body;
+}
+
+sub dogfood {
+ my ($self, $args, @items) = @_;
+ my ($package, $subname, $default_type, $what, $indent, $breakout) =
+ @{$args}{qw(package subname default_type what indent breakout)};
+ my $result = <<"EOT";
+ /* When generated this function returned values for the list of names given
+ in this section of perl code. Rather than manually editing these functions
+ to add or remove constants, which would result in this comment and section
+ of code becoming inaccurate, we recommend that you edit this section of
+ code, and use it to regenerate a new set of constant functions which you
+ then use to replace the originals.
+
+ Regenerate these constant functions by feeding this entire source file to
+ perl -x
+
+#!$^X -w
+use ExtUtils::Constant qw (constant_types C_constant XS_constant);
+
+EOT
+ $result .= $self->dump_names ({default_type=>$default_type, what=>$what,
+ indent=>0, declare_types=>1},
+ @items);
+ $result .= <<'EOT';
+
+print constant_types(); # macro defs
+EOT
+ $package = perl_stringify($package);
+ $result .=
+ "foreach (C_constant (\"$package\", '$subname', '$default_type', \$types, ";
+ # The form of the indent parameter isn't defined. (Yet)
+ if (defined $indent) {
+ require Data::Dumper;
+ $Data::Dumper::Terse=1;
+ $Data::Dumper::Terse=1; # Not used once. :-)
+ chomp ($indent = Data::Dumper::Dumper ($indent));
+ $result .= $indent;
+ } else {
+ $result .= 'undef';
+ }
+ $result .= ", $breakout" . ', @names) ) {
+ print $_, "\n"; # C constant subs
+}
+print "#### XS Section:\n";
+print XS_constant ("' . $package . '", $types);
+__END__
+ */
+
+';
+
+ $result;
+}
+
+1;
diff --git a/gnu/usr.bin/perl/lib/ExtUtils/MM_AIX.pm b/gnu/usr.bin/perl/lib/ExtUtils/MM_AIX.pm
new file mode 100644
index 00000000000..7de7da557e0
--- /dev/null
+++ b/gnu/usr.bin/perl/lib/ExtUtils/MM_AIX.pm
@@ -0,0 +1,80 @@
+package ExtUtils::MM_AIX;
+
+use strict;
+use vars qw($VERSION @ISA);
+$VERSION = '0.03';
+
+require ExtUtils::MM_Unix;
+@ISA = qw(ExtUtils::MM_Unix);
+
+use ExtUtils::MakeMaker qw(neatvalue);
+
+
+=head1 NAME
+
+ExtUtils::MM_AIX - AIX specific subclass of ExtUtils::MM_Unix
+
+=head1 SYNOPSIS
+
+ Don't use this module directly.
+ Use ExtUtils::MM and let it choose.
+
+=head1 DESCRIPTION
+
+This is a subclass of ExtUtils::MM_Unix which contains functionality for
+AIX.
+
+Unless otherwise stated it works just like ExtUtils::MM_Unix
+
+=head2 Overridden methods
+
+=head3 dlsyms
+
+Define DL_FUNCS and DL_VARS and write the *.exp files.
+
+=cut
+
+sub dlsyms {
+ my($self,%attribs) = @_;
+
+ return '' unless $self->needs_linking();
+
+ my($funcs) = $attribs{DL_FUNCS} || $self->{DL_FUNCS} || {};
+ my($vars) = $attribs{DL_VARS} || $self->{DL_VARS} || [];
+ my($funclist) = $attribs{FUNCLIST} || $self->{FUNCLIST} || [];
+ my(@m);
+
+ push(@m,"
+dynamic :: $self->{BASEEXT}.exp
+
+") unless $self->{SKIPHASH}{'dynamic'}; # dynamic and static are subs, so...
+
+ push(@m,"
+static :: $self->{BASEEXT}.exp
+
+") unless $self->{SKIPHASH}{'static'}; # we avoid a warning if we tick them
+
+ push(@m,"
+$self->{BASEEXT}.exp: Makefile.PL
+",' $(PERLRUN) -e \'use ExtUtils::Mksymlists; \\
+ Mksymlists("NAME" => "',$self->{NAME},'", "DL_FUNCS" => ',
+ neatvalue($funcs), ', "FUNCLIST" => ', neatvalue($funclist),
+ ', "DL_VARS" => ', neatvalue($vars), ');\'
+');
+
+ join('',@m);
+}
+
+
+=head1 AUTHOR
+
+Michael G Schwern <schwern@pobox.com> with code from ExtUtils::MM_Unix
+
+=head1 SEE ALSO
+
+L<ExtUtils::MakeMaker>
+
+=cut
+
+
+1;
diff --git a/gnu/usr.bin/perl/lib/ExtUtils/MM_QNX.pm b/gnu/usr.bin/perl/lib/ExtUtils/MM_QNX.pm
new file mode 100644
index 00000000000..d975289eee9
--- /dev/null
+++ b/gnu/usr.bin/perl/lib/ExtUtils/MM_QNX.pm
@@ -0,0 +1,58 @@
+package ExtUtils::MM_QNX;
+
+use strict;
+use vars qw($VERSION @ISA);
+$VERSION = '0.02';
+
+require ExtUtils::MM_Unix;
+@ISA = qw(ExtUtils::MM_Unix);
+
+
+=head1 NAME
+
+ExtUtils::MM_QNX - QNX specific subclass of ExtUtils::MM_Unix
+
+=head1 SYNOPSIS
+
+ Don't use this module directly.
+ Use ExtUtils::MM and let it choose.
+
+=head1 DESCRIPTION
+
+This is a subclass of ExtUtils::MM_Unix which contains functionality for
+QNX.
+
+Unless otherwise stated it works just like ExtUtils::MM_Unix
+
+=head2 Overridden methods
+
+=head3 extra_clean_files
+
+Add .err files corresponding to each .c file.
+
+=cut
+
+sub extra_clean_files {
+ my $self = shift;
+
+ my @errfiles = @{$self->{C}};
+ for ( @errfiles ) {
+ s/.c$/.err/;
+ }
+
+ return( @errfiles, 'perlmain.err' );
+}
+
+
+=head1 AUTHOR
+
+Michael G Schwern <schwern@pobox.com> with code from ExtUtils::MM_Unix
+
+=head1 SEE ALSO
+
+L<ExtUtils::MakeMaker>
+
+=cut
+
+
+1;
diff --git a/gnu/usr.bin/perl/lib/ExtUtils/MM_VOS.pm b/gnu/usr.bin/perl/lib/ExtUtils/MM_VOS.pm
new file mode 100644
index 00000000000..82f71ca2860
--- /dev/null
+++ b/gnu/usr.bin/perl/lib/ExtUtils/MM_VOS.pm
@@ -0,0 +1,51 @@
+package ExtUtils::MM_VOS;
+
+use strict;
+use vars qw($VERSION @ISA);
+$VERSION = '0.02';
+
+require ExtUtils::MM_Unix;
+@ISA = qw(ExtUtils::MM_Unix);
+
+
+=head1 NAME
+
+ExtUtils::MM_VOS - VOS specific subclass of ExtUtils::MM_Unix
+
+=head1 SYNOPSIS
+
+ Don't use this module directly.
+ Use ExtUtils::MM and let it choose.
+
+=head1 DESCRIPTION
+
+This is a subclass of ExtUtils::MM_Unix which contains functionality for
+VOS.
+
+Unless otherwise stated it works just like ExtUtils::MM_Unix
+
+=head2 Overridden methods
+
+=head3 extra_clean_files
+
+Cleanup VOS core files
+
+=cut
+
+sub extra_clean_files {
+ return qw(*.kp);
+}
+
+
+=head1 AUTHOR
+
+Michael G Schwern <schwern@pobox.com> with code from ExtUtils::MM_Unix
+
+=head1 SEE ALSO
+
+L<ExtUtils::MakeMaker>
+
+=cut
+
+
+1;
diff --git a/gnu/usr.bin/perl/lib/ExtUtils/MakeMaker/Config.pm b/gnu/usr.bin/perl/lib/ExtUtils/MakeMaker/Config.pm
new file mode 100644
index 00000000000..52ae800f782
--- /dev/null
+++ b/gnu/usr.bin/perl/lib/ExtUtils/MakeMaker/Config.pm
@@ -0,0 +1,39 @@
+package ExtUtils::MakeMaker::Config;
+
+$VERSION = '0.02';
+
+use strict;
+use Config ();
+
+# Give us an overridable config.
+use vars qw(%Config);
+%Config = %Config::Config;
+
+sub import {
+ my $caller = caller;
+
+ no strict 'refs';
+ *{$caller.'::Config'} = \%Config;
+}
+
+1;
+
+
+=head1 NAME
+
+ExtUtils::MakeMaker::Config - Wrapper around Config.pm
+
+
+=head1 SYNOPSIS
+
+ use ExtUtils::MakeMaker::Config;
+ print $Config{installbin}; # or whatever
+
+
+=head1 DESCRIPTION
+
+B<FOR INTERNAL USE ONLY>
+
+A very thin wrapper around Config.pm so MakeMaker is easier to test.
+
+=cut
diff --git a/gnu/usr.bin/perl/lib/ExtUtils/t/Embed.t b/gnu/usr.bin/perl/lib/ExtUtils/t/Embed.t
index fc0ed3cbc17..010d05a827d 100644
--- a/gnu/usr.bin/perl/lib/ExtUtils/t/Embed.t
+++ b/gnu/usr.bin/perl/lib/ExtUtils/t/Embed.t
@@ -153,10 +153,24 @@ __END__
static char *cmds[] = { "perl","-e", "$|=1; print qq[ok 5\\n]", NULL };
+#ifdef PERL_GLOBAL_STRUCT_PRIVATE
+static struct perl_vars *my_plvarsp;
+struct perl_vars* Perl_GetVarsPrivate(void) { return my_plvarsp; }
+#endif
+
int main(int argc, char **argv, char **env)
{
PerlInterpreter *my_perl;
-
+#ifdef PERL_GLOBAL_STRUCT
+ dVAR;
+ struct perl_vars *plvarsp = init_global_struct();
+# ifdef PERL_GLOBAL_STRUCT_PRIVATE
+ my_vars = my_plvarsp = plvarsp;
+# endif
+#endif /* PERL_GLOBAL_STRUCT */
+
+ (void)argc; /* PERL_SYS_INIT3 may #define away their use */
+ (void)argv;
PERL_SYS_INIT3(&argc,&argv,&env);
my_perl = perl_alloc();
@@ -183,6 +197,10 @@ int main(int argc, char **argv, char **env)
perl_free(my_perl);
+#ifdef PERL_GLOBAL_STRUCT
+ free_global_struct(plvarsp);
+#endif /* PERL_GLOBAL_STRUCT */
+
my_puts("ok 8");
PERL_SYS_TERM();
diff --git a/gnu/usr.bin/perl/lib/ExtUtils/t/FIRST_MAKEFILE.t b/gnu/usr.bin/perl/lib/ExtUtils/t/FIRST_MAKEFILE.t
new file mode 100755
index 00000000000..731dd34d929
--- /dev/null
+++ b/gnu/usr.bin/perl/lib/ExtUtils/t/FIRST_MAKEFILE.t
@@ -0,0 +1,40 @@
+#!/usr/bin/perl -w
+
+BEGIN {
+ if( $ENV{PERL_CORE} ) {
+ chdir 't' if -d 't';
+ @INC = ('../lib', 'lib');
+ }
+ else {
+ unshift @INC, 't/lib';
+ }
+}
+chdir 't';
+
+use strict;
+use Test::More tests => 7;
+
+use MakeMaker::Test::Setup::BFD;
+use MakeMaker::Test::Utils;
+
+my $perl = which_perl();
+my $make = make_run();
+perl_lib();
+
+
+ok( setup_recurs(), 'setup' );
+END {
+ ok( chdir File::Spec->updir );
+ ok( teardown_recurs(), 'teardown' );
+}
+
+ok( chdir('Big-Dummy'), "chdir'd to Big-Dummy" ) ||
+ diag("chdir failed: $!");
+
+my @mpl_out = run(qq{$perl Makefile.PL FIRST_MAKEFILE=jakefile});
+cmp_ok( $?, '==', 0, 'Makefile.PL exited with zero' ) || diag @mpl_out;
+
+ok( -e 'jakefile', 'FIRST_MAKEFILE honored' );
+
+ok( grep(/^Writing jakefile for Big::Dummy/, @mpl_out) == 1,
+ 'Makefile.PL output looks right' );
diff --git a/gnu/usr.bin/perl/lib/ExtUtils/t/PL_FILES.t b/gnu/usr.bin/perl/lib/ExtUtils/t/PL_FILES.t
new file mode 100755
index 00000000000..106fb08c949
--- /dev/null
+++ b/gnu/usr.bin/perl/lib/ExtUtils/t/PL_FILES.t
@@ -0,0 +1,42 @@
+#!/usr/bin/perl -w
+
+BEGIN {
+ if( $ENV{PERL_CORE} ) {
+ chdir 't' if -d 't';
+ @INC = ('../lib', 'lib');
+ }
+ else {
+ unshift @INC, 't/lib';
+ }
+}
+chdir 't';
+
+use strict;
+use Test::More tests => 9;
+
+use File::Spec;
+use MakeMaker::Test::Setup::PL_FILES;
+use MakeMaker::Test::Utils;
+
+my $perl = which_perl();
+my $make = make_run();
+perl_lib();
+
+setup;
+
+END {
+ ok( chdir File::Spec->updir );
+ ok( teardown );
+}
+
+ok chdir('PL_FILES-Module');
+
+run(qq{$perl Makefile.PL});
+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)) {
+ ok( -e $file, "$file was created" );
+}
diff --git a/gnu/usr.bin/perl/lib/ExtUtils/t/config.t b/gnu/usr.bin/perl/lib/ExtUtils/t/config.t
new file mode 100755
index 00000000000..094fce0f915
--- /dev/null
+++ b/gnu/usr.bin/perl/lib/ExtUtils/t/config.t
@@ -0,0 +1,23 @@
+#!/usr/bin/perl -w
+
+BEGIN {
+ if( $ENV{PERL_CORE} ) {
+ chdir 't';
+ @INC = ('../lib', 'lib/');
+ }
+ else {
+ unshift @INC, 't/lib/';
+ }
+}
+
+use Test::More tests => 3;
+use Config ();
+
+BEGIN { use_ok 'ExtUtils::MakeMaker::Config'; }
+
+is $Config{path_sep}, $Config::Config{path_sep};
+
+eval {
+ $Config{wibble} = 42;
+};
+is $Config{wibble}, 42;
diff --git a/gnu/usr.bin/perl/lib/ExtUtils/t/dir_target.t b/gnu/usr.bin/perl/lib/ExtUtils/t/dir_target.t
new file mode 100755
index 00000000000..9b7dfe739ff
--- /dev/null
+++ b/gnu/usr.bin/perl/lib/ExtUtils/t/dir_target.t
@@ -0,0 +1,18 @@
+#!/usr/bin/perl -w
+
+BEGIN {
+ if( $ENV{PERL_CORE} ) {
+ chdir 't';
+ @INC = ('../lib', 'lib/');
+ }
+ else {
+ unshift @INC, 't/lib/';
+ }
+}
+chdir 't';
+
+use Test::More tests => 1;
+use ExtUtils::MakeMaker;
+
+# dir_target() was typo'd as dir_targets()
+can_ok('MM', 'dir_target');
diff --git a/gnu/usr.bin/perl/lib/ExtUtils/t/installbase.t b/gnu/usr.bin/perl/lib/ExtUtils/t/installbase.t
new file mode 100755
index 00000000000..e22c3de5e41
--- /dev/null
+++ b/gnu/usr.bin/perl/lib/ExtUtils/t/installbase.t
@@ -0,0 +1,81 @@
+#!/usr/bin/perl -w
+
+# Tests INSTALLBASE
+
+BEGIN {
+ if( $ENV{PERL_CORE} ) {
+ chdir 't' if -d 't';
+ @INC = ('../lib', 'lib');
+ }
+ else {
+ unshift @INC, 't/lib';
+ }
+}
+
+use strict;
+use File::Path;
+use Config;
+
+use Test::More tests => 21;
+use MakeMaker::Test::Utils;
+use MakeMaker::Test::Setup::BFD;
+
+my $Is_VMS = $^O eq 'VMS';
+
+my $perl = which_perl();
+
+chdir 't';
+perl_lib;
+
+ok( setup_recurs(), 'setup' );
+END {
+ ok( chdir File::Spec->updir );
+ ok( teardown_recurs(), 'teardown' );
+}
+
+ok( chdir('Big-Dummy'), "chdir'd to Big-Dummy") || diag("chdir failed; $!");
+
+my @mpl_out = run(qq{$perl Makefile.PL "INSTALLBASE=../dummy-install"});
+END { rmtree '../dummy-install'; }
+
+cmp_ok( $?, '==', 0, 'Makefile.PL exited with zero' ) ||
+ diag(@mpl_out);
+
+my $makefile = makefile_name();
+ok( grep(/^Writing $makefile for Big::Dummy/,
+ @mpl_out) == 1,
+ 'Makefile.PL output looks right');
+
+my $make = make_run();
+run("$make"); # this is necessary due to a dmake bug.
+my $install_out = run("$make install");
+is( $?, 0, ' make install exited normally' ) || diag $install_out;
+like( $install_out, qr/^Installing /m );
+like( $install_out, qr/^Writing /m );
+
+ok( -r '../dummy-install', ' install dir created' );
+
+my @installed_files =
+ ('../dummy-install/lib/perl5/Big/Dummy.pm',
+ '../dummy-install/lib/perl5/Big/Liar.pm',
+ '../dummy-install/bin/program',
+ "../dummy-install/lib/perl5/$Config{archname}/perllocal.pod",
+ "../dummy-install/lib/perl5/$Config{archname}/auto/Big/Dummy/.packlist"
+ );
+
+foreach my $file (@installed_files) {
+ ok( -e $file, " $file installed" );
+ ok( -r $file, " $file readable" );
+}
+
+
+# nmake outputs its damned logo
+# Send STDERR off to oblivion.
+open(SAVERR, ">&STDERR") or die $!;
+open(STDERR, ">".File::Spec->devnull) or die $!;
+
+my $realclean_out = run("$make realclean");
+is( $?, 0, 'realclean' ) || diag($realclean_out);
+
+open(STDERR, ">&SAVERR") or die $!;
+close SAVERR;
diff --git a/gnu/usr.bin/perl/lib/ExtUtils/t/parse_version.t b/gnu/usr.bin/perl/lib/ExtUtils/t/parse_version.t
new file mode 100755
index 00000000000..8d2a8d0c505
--- /dev/null
+++ b/gnu/usr.bin/perl/lib/ExtUtils/t/parse_version.t
@@ -0,0 +1,34 @@
+#!/usr/bin/perl -w
+
+BEGIN {
+ if( $ENV{PERL_CORE} ) {
+ chdir 't';
+ @INC = '../lib';
+ }
+ else {
+ unshift @INC, 't/lib';
+ }
+}
+chdir 't';
+
+use Test::More tests => 10;
+use ExtUtils::MakeMaker;
+
+my %versions = ('$VERSION = 0.02' => 0.02,
+ '$VERSION = 0.0' => 0.0,
+ '$VERSION = -1.0' => -1.0,
+ '$VERSION = undef' => 'undef',
+ '$wibble = 1.0' => 'undef',
+ );
+
+while( my($code, $expect) = each %versions ) {
+ open(FILE, ">VERSION.tmp") || die $!;
+ print FILE "$code\n";
+ close FILE;
+
+ $_ = 'foo';
+ is( MM->parse_version('VERSION.tmp'), $expect, $code );
+ is( $_, 'foo', '$_ not leaked by parse_version' );
+
+ unlink "VERSION.tmp";
+}
diff --git a/gnu/usr.bin/perl/lib/ExtUtils/t/xs.t b/gnu/usr.bin/perl/lib/ExtUtils/t/xs.t
new file mode 100755
index 00000000000..62d29eae798
--- /dev/null
+++ b/gnu/usr.bin/perl/lib/ExtUtils/t/xs.t
@@ -0,0 +1,24 @@
+#!/usr/bin/perl -w
+
+BEGIN {
+ if( $ENV{PERL_CORE} ) {
+ chdir 't';
+ @INC = ('../lib', 'lib/');
+ }
+ else {
+ unshift @INC, 't/lib/';
+ }
+}
+chdir 't';
+
+use Test::More;
+use MakeMaker::Test::Utils;
+
+if( have_compiler() ) {
+ plan tests => 1;
+}
+else {
+ plan skip_all => "ExtUtils::CBuilder not installed or couldn't find a compiler";
+}
+
+pass("You have a compiler, isn't that great?");
diff --git a/gnu/usr.bin/perl/lib/File/Basename.t b/gnu/usr.bin/perl/lib/File/Basename.t
index 32d9bfba0c4..0d3b633669d 100644
--- a/gnu/usr.bin/perl/lib/File/Basename.t
+++ b/gnu/usr.bin/perl/lib/File/Basename.t
@@ -1,144 +1,178 @@
-#!./perl -T
+#!./perl -Tw
BEGIN {
chdir 't' if -d 't';
@INC = '../lib';
}
-use File::Basename qw(fileparse basename dirname);
+use Test::More tests => 64;
-print "1..41\n";
+BEGIN { use_ok 'File::Basename' }
# import correctly?
-print +(defined(&basename) && !defined(&fileparse_set_fstype) ?
- '' : 'not '),"ok 1\n";
+can_ok( __PACKAGE__, qw( basename fileparse dirname fileparse_set_fstype ) );
+
+### Testing Unix
+{
+ ok length fileparse_set_fstype('unix'), 'set fstype to unix';
+ is( fileparse_set_fstype(), 'Unix', 'get fstype' );
+
+ my($base,$path,$type) = fileparse('/virgil/aeneid/draft.book7',
+ qr'\.book\d+');
+ is($base, 'draft');
+ is($path, '/virgil/aeneid/');
+ is($type, '.book7');
+
+ is(basename('/arma/virumque.cano'), 'virumque.cano');
+ is(dirname ('/arma/virumque.cano'), '/arma');
+ is(dirname('arma/'), '.');
+}
-# set fstype -- should replace non-null default
-print +(length(File::Basename::fileparse_set_fstype('unix')) ?
- '' : 'not '),"ok 2\n";
-# Unix syntax tests
-($base,$path,$type) = fileparse('/virgil/aeneid/draft.book7',qr'\.book\d+');
-if ($base eq 'draft' and $path eq '/virgil/aeneid/' and $type eq '.book7') {
- print "ok 3\n";
-}
-else {
- print "not ok 3 |$base|$path|$type|\n";
-}
-print +(basename('/arma/virumque.cano') eq 'virumque.cano' ?
- '' : 'not '),"ok 4\n";
-print +(dirname('/arma/virumque.cano') eq '/arma' ? '' : 'not '),"ok 5\n";
-print +(dirname('arma/') eq '.' ? '' : 'not '),"ok 6\n";
-print +(dirname('/') eq '/' ? '' : 'not '),"ok 7\n";
+### Testing VMS
+{
+ is(fileparse_set_fstype('VMS'), 'Unix', 'set fstype to VMS');
+ my($base,$path,$type) = fileparse('virgil:[aeneid]draft.book7',
+ qr{\.book\d+});
+ is($base, 'draft');
+ is($path, 'virgil:[aeneid]');
+ is($type, '.book7');
-# set fstype -- should replace non-null default
-print +(File::Basename::fileparse_set_fstype('VMS') eq 'unix' ?
- '' : 'not '),"ok 8\n";
+ is(basename('arma:[virumque]cano.trojae'), 'cano.trojae');
+ is(dirname('arma:[virumque]cano.trojae'), 'arma:[virumque]');
+ is(dirname('arma:<virumque>cano.trojae'), 'arma:<virumque>');
+ is(dirname('arma:virumque.cano'), 'arma:');
-# VMS syntax tests
-($base,$path,$type) = fileparse('virgil:[aeneid]draft.book7',qr{\.book\d+});
-if ($base eq 'draft' and $path eq 'virgil:[aeneid]' and $type eq '.book7') {
- print "ok 9\n";
-}
-else {
- print "not ok 9 |$base|$path|$type|\n";
+ {
+ local $ENV{DEFAULT} = '' unless exists $ENV{DEFAULT};
+ is(dirname('virumque.cano'), $ENV{DEFAULT});
+ is(dirname('arma/'), '.');
+ }
}
-print +(basename('arma:[virumque]cano.trojae') eq 'cano.trojae' ?
- '' : 'not '),"ok 10\n";
-print +(dirname('arma:[virumque]cano.trojae') eq 'arma:[virumque]' ?
- '' : 'not '),"ok 11\n";
-print +(dirname('arma:<virumque>cano.trojae') eq 'arma:<virumque>' ?
- '' : 'not '),"ok 12\n";
-print +(dirname('arma:virumque.cano') eq 'arma:' ? '' : 'not '),"ok 13\n";
-$ENV{DEFAULT} = '' unless exists $ENV{DEFAULT};
-print +(dirname('virumque.cano') eq $ENV{DEFAULT} ? '' : 'not '),"ok 14\n";
-print +(dirname('arma/') eq '.' ? '' : 'not '),"ok 15\n";
-
-# set fstype -- should replace non-null default
-print +(File::Basename::fileparse_set_fstype('MSDOS') eq 'VMS' ?
- '' : 'not '),"ok 16\n";
-
-# MSDOS syntax tests
-($base,$path,$type) = fileparse('C:\\virgil\\aeneid\\draft.book7','\.book\d+');
-if ($base eq 'draft' and $path eq 'C:\\virgil\\aeneid\\' and $type eq '.book7') {
- print "ok 17\n";
-}
-else {
- print "not ok 17 |$base|$path|$type|\n";
+
+
+### Testing DOS
+{
+ is(fileparse_set_fstype('DOS'), 'VMS', 'set fstype to DOS');
+
+ my($base,$path,$type) = fileparse('C:\\virgil\\aeneid\\draft.book7',
+ '\.book\d+');
+ is($base, 'draft');
+ is($path, 'C:\\virgil\\aeneid\\');
+ is($type, '.book7');
+
+ is(basename('A:virumque\\cano.trojae'), 'cano.trojae');
+ is(dirname('A:\\virumque\\cano.trojae'), 'A:\\virumque');
+ is(dirname('A:\\'), 'A:\\');
+ is(dirname('arma\\'), '.');
+
+ # Yes "/" is a legal path separator under DOS
+ is(basename("lib/File/Basename.pm"), "Basename.pm");
+
+ # $^O for DOS is "dos" not "MSDOS" but "MSDOS" is left in for
+ # backward bug compat.
+ is(fileparse_set_fstype('MSDOS'), 'DOS');
+ is( dirname("\\foo\\bar\\baz"), "\\foo\\bar" );
}
-print +(basename('A:virumque\\cano.trojae') eq 'cano.trojae' ?
- '' : 'not '),"ok 18\n";
-print +(dirname('A:\\virumque\\cano.trojae') eq 'A:\\virumque' ?
- '' : 'not '),"ok 19\n";
-print +(dirname('A:\\') eq 'A:\\' ? '' : 'not '),"ok 20\n";
-print +(dirname('arma\\') eq '.' ? '' : 'not '),"ok 21\n";
-# Yes "/" is a legal path separator under MSDOS
-basename("lib/File/Basename.pm") eq "Basename.pm" or print "not ";
-print "ok 22\n";
+### Testing MacOS
+{
+ is(fileparse_set_fstype('MacOS'), 'MSDOS', 'set fstype to MacOS');
+ my($base,$path,$type) = fileparse('virgil:aeneid:draft.book7',
+ '\.book\d+');
+ is($base, 'draft');
+ is($path, 'virgil:aeneid:');
+ is($type, '.book7');
-# set fstype -- should replace non-null default
-print +(File::Basename::fileparse_set_fstype('MacOS') eq 'MSDOS' ?
- '' : 'not '),"ok 23\n";
+ is(basename(':arma:virumque:cano.trojae'), 'cano.trojae');
+ is(dirname(':arma:virumque:cano.trojae'), ':arma:virumque:');
+ is(dirname(':arma:virumque:'), ':arma:');
+ is(dirname(':arma:virumque'), ':arma:');
+ is(dirname(':arma:'), ':');
+ is(dirname(':arma'), ':');
+ is(dirname('arma:'), 'arma:');
+ is(dirname('arma'), ':');
+ is(dirname(':'), ':');
-# MacOS syntax tests
-($base,$path,$type) = fileparse('virgil:aeneid:draft.book7','\.book\d+');
-if ($base eq 'draft' and $path eq 'virgil:aeneid:' and $type eq '.book7') {
- print "ok 24\n";
+
+ # Check quoting of metacharacters in suffix arg by basename()
+ is(basename(':arma:virumque:cano.trojae','.trojae'), 'cano');
+ is(basename(':arma:virumque:cano_trojae','.trojae'), 'cano_trojae');
}
-else {
- print "not ok 24 |$base|$path|$type|\n";
+
+
+### extra tests for a few specific bugs
+{
+ fileparse_set_fstype 'DOS';
+ # perl5.003_18 gives C:/perl/.\
+ is((fileparse 'C:/perl/lib')[1], 'C:/perl/');
+ # perl5.003_18 gives C:\perl\
+ is(dirname('C:\\perl\\lib\\'), 'C:\\perl');
+
+ fileparse_set_fstype 'UNIX';
+ # perl5.003_18 gives '.'
+ is(dirname('/perl/'), '/');
+ # perl5.003_18 gives '/perl/lib'
+ is(dirname('/perl/lib//'), '/perl');
}
-print +(basename(':arma:virumque:cano.trojae') eq 'cano.trojae' ?
- '' : 'not '),"ok 25\n";
-print +(dirname(':arma:virumque:cano.trojae') eq ':arma:virumque:' ?
- '' : 'not '),"ok 26\n";
-print +(dirname(':arma:virumque:') eq ':arma:' ? '' : 'not '),"ok 27\n";
-print +(dirname(':arma:virumque') eq ':arma:' ? '' : 'not '),"ok 28\n";
-print +(dirname(':arma:') eq ':' ? '' : 'not '),"ok 29\n";
-print +(dirname(':arma') eq ':' ? '' : 'not '),"ok 30\n";
-print +(dirname('arma:') eq 'arma:' ? '' : 'not '),"ok 31\n";
-print +(dirname('arma') eq ':' ? '' : 'not '),"ok 32\n";
-print +(dirname(':') eq ':' ? '' : 'not '),"ok 33\n";
-
-
-# Check quoting of metacharacters in suffix arg by basename()
-print +(basename(':arma:virumque:cano.trojae','.trojae') eq 'cano' ?
- '' : 'not '),"ok 34\n";
-print +(basename(':arma:virumque:cano_trojae','.trojae') eq 'cano_trojae' ?
- '' : 'not '),"ok 35\n";
-
-# extra tests for a few specific bugs
-
-File::Basename::fileparse_set_fstype 'MSDOS';
-# perl5.003_18 gives C:/perl/.\
-print +((fileparse 'C:/perl/lib')[1] eq 'C:/perl/' ? '' : 'not '), "ok 36\n";
-# perl5.003_18 gives C:\perl\
-print +(dirname('C:\\perl\\lib\\') eq 'C:\\perl' ? '' : 'not '), "ok 37\n";
-
-File::Basename::fileparse_set_fstype 'UNIX';
-# perl5.003_18 gives '.'
-print +(dirname('/perl/') eq '/' ? '' : 'not '), "ok 38\n";
-# perl5.003_18 gives '/perl/lib'
-print +(dirname('/perl/lib//') eq '/perl' ? '' : 'not '), "ok 39\n";
-
-# The empty tainted value, for tainting strings
-my $TAINT = substr($^X, 0, 0);
-# How to identify taint when you see it
-sub any_tainted (@) {
- not eval { join("",@_), kill 0; 1 };
+
+### rt.perl.org 22236
+{
+ is(basename('a/'), 'a');
+ is(basename('/usr/lib//'), 'lib');
+
+ fileparse_set_fstype 'MSWin32';
+ is(basename('a\\'), 'a');
+ is(basename('\\usr\\lib\\\\'), 'lib');
}
-sub tainted ($) {
- any_tainted @_;
+
+
+### rt.cpan.org 36477
+{
+ fileparse_set_fstype('Unix');
+ is(dirname('/'), '/');
+ is(basename('/'), '/');
+
+ fileparse_set_fstype('DOS');
+ is(dirname('\\'), '\\');
+ is(basename('\\'), '\\');
}
-sub all_tainted (@) {
- for (@_) { return 0 unless tainted $_ }
- 1;
+
+
+### basename(1) sez: "The suffix is not stripped if it is identical to the
+### remaining characters in string"
+{
+ fileparse_set_fstype('Unix');
+ is(basename('.foo'), '.foo');
+ is(basename('.foo', '.foo'), '.foo');
+ is(basename('.foo.bar', '.foo'), '.foo.bar');
+ is(basename('.foo.bar', '.bar'), '.foo');
}
-print +(tainted(dirname($TAINT.'/perl/lib//')) ? '' : 'not '), "ok 40\n";
-print +(all_tainted(fileparse($TAINT.'/dir/draft.book7','\.book\d+'))
- ? '' : 'not '), "ok 41\n";
+
+### Test tainting
+{
+ # The empty tainted value, for tainting strings
+ my $TAINT = substr($^X, 0, 0);
+
+ # How to identify taint when you see it
+ sub any_tainted (@) {
+ return ! eval { eval("#" . substr(join("", @_), 0, 0)); 1 };
+ }
+
+ sub tainted ($) {
+ any_tainted @_;
+ }
+
+ sub all_tainted (@) {
+ for (@_) { return 0 unless tainted $_ }
+ 1;
+ }
+
+ fileparse_set_fstype 'Unix';
+ ok tainted(dirname($TAINT.'/perl/lib//'));
+ ok all_tainted(fileparse($TAINT.'/dir/draft.book7','\.book\d+'));
+}
diff --git a/gnu/usr.bin/perl/lib/File/Copy.t b/gnu/usr.bin/perl/lib/File/Copy.t
index 0fcc1306c41..db94cc3adf1 100644
--- a/gnu/usr.bin/perl/lib/File/Copy.t
+++ b/gnu/usr.bin/perl/lib/File/Copy.t
@@ -3,26 +3,44 @@
BEGIN {
chdir 't' if -d 't';
@INC = '../lib';
- push @INC, "::lib:$MacPerl::Architecture" if $^O eq 'MacOS';
}
-$| = 1;
+use Test::More;
+
+my $TB = Test::More->builder;
+
+plan tests => 60;
+
+# We're going to override rename() later on but Perl has to see an override
+# at compile time to honor it.
+BEGIN { *CORE::GLOBAL::rename = sub { CORE::rename($_[0], $_[1]) }; }
-my @pass = (0,1);
-my $tests = $^O eq 'MacOS' ? 17 : 14;
-printf "1..%d\n", $tests * scalar(@pass);
use File::Copy;
use Config;
-for my $pass (@pass) {
- my $loopconst = $pass*$tests;
+foreach my $code ("copy()", "copy('arg')", "copy('arg', 'arg', 'arg', 'arg')",
+ "move()", "move('arg')", "move('arg', 'arg', 'arg')"
+ )
+{
+ eval $code;
+ like $@, qr/^Usage: /;
+}
+
+
+for my $cross_partition_test (0..1) {
+ {
+ # Simulate a cross-partition copy/move by forcing rename to
+ # fail.
+ no warnings 'redefine';
+ *CORE::GLOBAL::rename = sub { 0 } if $cross_partition_test;
+ }
# First we create a file
open(F, ">file-$$") or die;
binmode F; # for DOSISH platforms, because test 3 copies to stdout
- printf F "ok %d\n", 3 + $loopconst;
+ printf F "ok\n";
close F;
copy "file-$$", "copy-$$";
@@ -31,28 +49,27 @@ for my $pass (@pass) {
$foo = <F>;
close(F);
- print "not " if -s "file-$$" != -s "copy-$$";
- printf "ok %d\n", 1 + $loopconst;
+ is -s "file-$$", -s "copy-$$";
- print "not " unless $foo eq sprintf "ok %d\n", 3+$loopconst;
- printf "ok %d\n", 2+$loopconst;
+ is $foo, "ok\n";
binmode STDOUT unless $^O eq 'VMS'; # Copy::copy works in binary mode
+ # This outputs "ok" so its a test.
copy "copy-$$", \*STDOUT;
+ $TB->current_test($TB->current_test + 1);
unlink "copy-$$" or die "unlink: $!";
open(F,"file-$$");
copy(*F, "copy-$$");
open(R, "copy-$$") or die "open copy-$$: $!"; $foo = <R>; close(R);
- print "not " unless $foo eq sprintf "ok %d\n", 3+$loopconst;
- printf "ok %d\n", 4+$loopconst;
+ is $foo, "ok\n";
unlink "copy-$$" or die "unlink: $!";
+
open(F,"file-$$");
copy(\*F, "copy-$$");
close(F) or die "close: $!";
open(R, "copy-$$") or die; $foo = <R>; close(R) or die "close: $!";
- print "not " unless $foo eq sprintf "ok %d\n", 3+$loopconst;
- printf "ok %d\n", 5+$loopconst;
+ is $foo, "ok\n";
unlink "copy-$$" or die "unlink: $!";
require IO::File;
@@ -61,134 +78,114 @@ for my $pass (@pass) {
copy("file-$$",$fh);
$fh->close or die "close: $!";
open(R, "copy-$$") or die; $foo = <R>; close(R);
- print "# foo=`$foo'\nnot " unless $foo eq sprintf "ok %d\n", 3+$loopconst;
- printf "ok %d\n", 6+$loopconst;
+ is $foo, "ok\n";
unlink "copy-$$" or die "unlink: $!";
+
require FileHandle;
my $fh = FileHandle->new(">copy-$$") or die "Cannot open copy-$$:$!";
binmode $fh or die;
copy("file-$$",$fh);
$fh->close;
open(R, "copy-$$") or die; $foo = <R>; close(R);
- print "not " unless $foo eq sprintf "ok %d\n", 3+$loopconst;
- printf "ok %d\n", 7+$loopconst;
+ is $foo, "ok\n";
unlink "file-$$" or die "unlink: $!";
- print "# moved missing file.\nnot " if move("file-$$", "copy-$$");
- print "# target disappeared.\nnot " if not -e "copy-$$";
- printf "ok %d\n", 8+$loopconst;
+ ok !move("file-$$", "copy-$$"), "move on missing file";
+ ok -e "copy-$$", ' target still there';
+
+ # Doesn't really matter what time it is as long as its not now.
+ my $time = 1000000000;
+ utime( $time, $time, "copy-$$" );
- move "copy-$$", "file-$$" or print "# move did not succeed.\n";
- print "# not moved: $!\nnot " unless -e "file-$$" and not -e "copy-$$";
+ # Recheck the mtime rather than rely on utime in case we're on a
+ # system where utime doesn't work or there's no mtime at all.
+ # The destination file will reflect the same difficulties.
+ my $mtime = (stat("copy-$$"))[9];
+
+ ok move("copy-$$", "file-$$"), 'move';
+ ok -e "file-$$", ' destination exists';
+ ok !-e "copy-$$", ' source does not';
open(R, "file-$$") or die; $foo = <R>; close(R);
- print "# foo=`$foo'\nnot " unless $foo eq sprintf "ok %d\n", 3+$loopconst;
- printf "ok %d\n", 9+$loopconst;
-
- my $test_i;
- if ($^O eq 'MacOS') {
-
- copy "file-$$", "lib";
- open(R, ":lib:file-$$") or die; $foo = <R>; close(R);
- print "not " unless $foo eq sprintf "ok %d\n", 3+$loopconst;
- printf "ok %d\n", 10+$loopconst;
- unlink ":lib:file-$$" or die "unlink: $!";
-
- copy "file-$$", ":lib";
- open(R, ":lib:file-$$") or die; $foo = <R>; close(R);
- print "not " unless $foo eq sprintf "ok %d\n", 3+$loopconst;
- printf "ok %d\n", 11+$loopconst;
- unlink ":lib:file-$$" or die "unlink: $!";
-
- copy "file-$$", ":lib:";
- open(R, ":lib:file-$$") or die; $foo = <R>; close(R);
- print "not " unless $foo eq sprintf "ok %d\n", 3+$loopconst;
- printf "ok %d\n", 12+$loopconst;
- unlink ":lib:file-$$" or die "unlink: $!";
-
- unless (-e 'lib:') { # make sure there's no volume called 'lib'
- undef $@;
- eval { (copy "file-$$", "lib:") || die "'lib:' is not a volume name"; };
- print "# Died: $@";
- print "not " unless ( $@ =~ m|'lib:' is not a volume name| );
- }
- printf "ok %d\n", 13+$loopconst;
-
- move "file-$$", ":lib:";
- open(R, ":lib:file-$$") or die "open :lib:file-$$: $!"; $foo = <R>; close(R);
- print "not " unless $foo eq sprintf("ok %d\n", 3+$loopconst)
- and not -e "file-$$";;
- printf "ok %d\n", 14+$loopconst;
-
- eval { copy("copy-$$", "copy-$$") };
- printf "ok %d\n", 15+$loopconst
- unless $@ =~ /are identical/ && -s "copy-$$";
-
- unlink ":lib:file-$$" or die "unlink: $!";
-
- $test_i = 15;
- } else {
-
- copy "file-$$", "lib";
- open(R, "lib/file-$$") or die; $foo = <R>; close(R);
- print "not " unless $foo eq sprintf "ok %d\n", 3+$loopconst;
- printf "ok %d\n", 10+$loopconst;
- unlink "lib/file-$$" or die "unlink: $!";
-
- move "file-$$", "lib";
- open(R, "lib/file-$$") or die "open lib/file-$$: $!"; $foo = <R>; close(R);
- print "not " unless $foo eq sprintf("ok %d\n", 3+$loopconst)
- and not -e "file-$$";;
- printf "ok %d\n", 11+$loopconst;
-
- eval { copy("copy-$$", "copy-$$") };
- printf "ok %d\n", 12+$loopconst
- unless $@ =~ /are identical/ && -s "copy-$$";
-
- unlink "lib/file-$$" or die "unlink: $!";
-
- $test_i = 12;
+ is $foo, "ok\n";
+
+ TODO: {
+ local $TODO = 'mtime only preserved on ODS-5 with POSIX dates and DECC$EFS_FILE_TIMESTAMPS enabled' if $^O eq 'VMS';
+
+ my $dest_mtime = (stat("file-$$"))[9];
+ is $dest_mtime, $mtime,
+ "mtime preserved by copy()".
+ ($cross_partition_test ? " while testing cross-partition" : "");
+ }
+
+ copy "file-$$", "lib";
+ open(R, "lib/file-$$") or die; $foo = <R>; close(R);
+ is $foo, "ok\n";
+ unlink "lib/file-$$" or die "unlink: $!";
+
+ # Do it twice to ensure copying over the same file works.
+ copy "file-$$", "lib";
+ open(R, "lib/file-$$") or die; $foo = <R>; close(R);
+ is $foo, "ok\n";
+ unlink "lib/file-$$" or die "unlink: $!";
+
+ {
+ my $warnings = '';
+ local $SIG{__WARN__} = sub { $warnings .= join '', @_ };
+ ok copy("file-$$", "file-$$");
+
+ like $warnings, qr/are identical/;
+ ok -s "file-$$";
}
- if ($Config{d_symlink}) {
+ move "file-$$", "lib";
+ open(R, "lib/file-$$") or die "open lib/file-$$: $!"; $foo = <R>; close(R);
+ is $foo, "ok\n";
+ ok !-e "file-$$";
+ unlink "lib/file-$$" or die "unlink: $!";
+
+ SKIP: {
+ skip "Testing symlinks", 3 unless $Config{d_symlink};
+
open(F, ">file-$$") or die $!;
print F "dummy content\n";
close F;
symlink("file-$$", "symlink-$$") or die $!;
- eval { copy("file-$$", "symlink-$$") };
- print "not " if $@ !~ /are identical/ || -z "file-$$";
- printf "ok %d\n", (++$test_i)+$loopconst;
+
+ my $warnings = '';
+ local $SIG{__WARN__} = sub { $warnings .= join '', @_ };
+ ok !copy("file-$$", "symlink-$$");
+
+ like $warnings, qr/are identical/;
+ ok !-z "file-$$",
+ 'rt.perl.org 5196: copying to itself would truncate the file';
+
unlink "symlink-$$";
unlink "file-$$";
- } else {
- printf "ok %d # Skipped: no symlinks on this platform\n", (++$test_i)+$loopconst;
}
- if ($Config{d_link}) {
- if ($^O ne 'MSWin32') {
- open(F, ">file-$$") or die $!;
- print F "dummy content\n";
- close F;
- link("file-$$", "hardlink-$$") or die $!;
- eval { copy("file-$$", "hardlink-$$") };
- print "not " if $@ !~ /are identical/ || -z "file-$$";
- printf "ok %d\n", (++$test_i)+$loopconst;
- unlink "hardlink-$$";
- unlink "file-$$";
- } else {
- printf "ok %d # Skipped: can't test hardlinks on MSWin32\n", (++$test_i)+$loopconst;
- }
- } else {
- printf "ok %d # Skipped: no hardlinks on this platform\n", (++$test_i)+$loopconst;
- }
+ SKIP: {
+ skip "Testing hard links", 3 if !$Config{d_link} or $^O eq 'MSWin32';
+ open(F, ">file-$$") or die $!;
+ print F "dummy content\n";
+ close F;
+ link("file-$$", "hardlink-$$") or die $!;
+
+ my $warnings = '';
+ local $SIG{__WARN__} = sub { $warnings .= join '', @_ };
+ ok !copy("file-$$", "hardlink-$$");
+
+ like $warnings, qr/are identical/;
+ ok ! -z "file-$$",
+ 'rt.perl.org 5196: copying to itself would truncate the file';
+
+ unlink "hardlink-$$";
+ unlink "file-$$";
+ }
}
END {
1 while unlink "file-$$";
- if ($^O eq 'MacOS') {
- 1 while unlink ":lib:file-$$";
- } else {
- 1 while unlink "lib/file-$$";
- }
+ 1 while unlink "lib/file-$$";
}
diff --git a/gnu/usr.bin/perl/lib/File/Find/t/find.t b/gnu/usr.bin/perl/lib/File/Find/t/find.t
index 85123732118..315ad31d9e3 100644
--- a/gnu/usr.bin/perl/lib/File/Find/t/find.t
+++ b/gnu/usr.bin/perl/lib/File/Find/t/find.t
@@ -661,6 +661,7 @@ if ( $symlink_exists ) {
use warnings;
%Expect_File = (File::Spec->curdir => 1,
+ file_path('dangling_file_sl') => 1,
file_path('fa_ord') => 1,
file_path('fsl') => 1,
file_path('fb_ord') => 1,
@@ -684,7 +685,7 @@ if ( $symlink_exists ) {
topdir('dangling_dir_sl'), topdir('fa') );
Check( scalar(keys %Expect_File) == 0 );
- Check( $warn_msg =~ m|dangling_dir_sl is a dangling symbolic link| );
+ Check( $warn_msg =~ m|dangling_file_sl is a dangling symbolic link| );
unlink file_path('fa', 'dangling_file_sl'),
file_path('dangling_dir_sl');
@@ -750,10 +751,7 @@ if ( $symlink_exists ) {
File::Find::finddepth( {wanted => \&wanted_File_Dir, follow => 1,
follow_skip => 1, no_chdir => 1},
topdir('fa') );
-
- Check( scalar(keys %Expect_File) == 1 );
- # Only the file and its symlink have value 2;<
- Check( (values %Expect_File)[0] == 2);
+ Check( scalar(keys %Expect_File) == 0 );
unlink file_path('fa', 'fa_ord_sl');
@@ -814,13 +812,10 @@ if ( $symlink_exists ) {
# If we encountered the symlink first, then the entries corresponding to
# the real name remain, if the real name first then the symlink
my @names = sort keys %Expect_File;
- Check( @names == 2 );
- # In sorted order the directory name comes first
- Check ($names[1] =~ /^$names[0]/);
+ Check( @names == 1 );
# Normalise both to the original name
s/_sl// foreach @names;
- Check ($names[0] eq file_path_name('fa', 'faa'));
- Check ($names[1] eq file_path_name('fa', 'faa', 'faa_ord'));
+ Check ($names[0] eq file_path_name('fa', 'faa', 'faa_ord'));
unlink file_path('fa', 'faa_sl');
}
diff --git a/gnu/usr.bin/perl/lib/FileCache/t/06export.t b/gnu/usr.bin/perl/lib/FileCache/t/06export.t
new file mode 100755
index 00000000000..60f55a31824
--- /dev/null
+++ b/gnu/usr.bin/perl/lib/FileCache/t/06export.t
@@ -0,0 +1,62 @@
+#!./perl
+BEGIN {
+ chdir 't' if -d 't';
+
+ #For tests within the perl distribution
+ @INC = '../lib' if -d '../lib';
+ END;
+
+ # Functions exported by FileCache;
+ @funcs = qw[cacheout cacheout_close];
+ $i = 0;
+
+ # number of tests
+ print "1..8\n";
+}
+
+# Test 6: Test that exporting both works to package main and
+# other packages. Now using Exporter.
+
+# First, we shouldn't be able to have these in our namespace
+# Add them to BEGIN so the later 'use' doesn't influence this
+# test
+BEGIN {
+ for my $f (@funcs) {
+ ++$i;
+ print 'not ' if __PACKAGE__->can($f);
+ print "ok $i\n";
+ }
+}
+
+# With an empty import list, we also shouldn't have them in
+# our namespace.
+# Add them to BEGIN so the later 'use' doesn't influence this
+# test
+BEGIN {
+ use FileCache ();
+ for my $f (@funcs) {
+ ++$i;
+ print 'not ' if __PACKAGE__->can($f);
+ print "ok $i\n";
+ }
+}
+
+
+# Now, we use FileCache in 'main'
+{ use FileCache;
+ for my $f (@funcs) {
+ ++$i;
+ print 'not ' if !__PACKAGE__->can($f);
+ print "ok $i\n";
+ }
+}
+
+# Now we use them in another package
+{ package X;
+ use FileCache;
+ for my $f (@main::funcs) {
+ ++$main::i;
+ print 'not ' if !__PACKAGE__->can($f);
+ print "ok $main::i\n";
+ }
+}
diff --git a/gnu/usr.bin/perl/lib/FileCache/t/07noimport.t b/gnu/usr.bin/perl/lib/FileCache/t/07noimport.t
new file mode 100755
index 00000000000..d2f926ce5c2
--- /dev/null
+++ b/gnu/usr.bin/perl/lib/FileCache/t/07noimport.t
@@ -0,0 +1,26 @@
+#!./perl -w
+
+BEGIN {
+ chdir 't';
+ @INC = '../lib';
+}
+
+require './test.pl';
+plan( tests => 1 );
+
+# Try using FileCache without importing to make sure everything's
+# initialized without it.
+{
+ package Y;
+ use FileCache ();
+
+ my $file = 'foo';
+ END { unlink $file }
+ FileCache::cacheout($file);
+ print $file "bar";
+ close $file;
+
+ FileCache::cacheout("<", $file);
+ ::ok( <$file> eq "bar" );
+ close $file;
+}
diff --git a/gnu/usr.bin/perl/lib/Math/BigInt/t/lib_load.t b/gnu/usr.bin/perl/lib/Math/BigInt/t/lib_load.t
new file mode 100755
index 00000000000..3aff7c4037a
--- /dev/null
+++ b/gnu/usr.bin/perl/lib/Math/BigInt/t/lib_load.t
@@ -0,0 +1,45 @@
+#!/usr/bin/perl -w
+
+use Test::More;
+use strict;
+
+BEGIN
+ {
+ $| = 1;
+ # to locate the testing files
+ my $location = $0; $location =~ s/sub_mbf.t//i;
+ if ($ENV{PERL_CORE})
+ {
+ # testing with the core distribution
+ @INC = qw(../t/lib);
+ }
+ unshift @INC, '../lib';
+ if (-d 't')
+ {
+ chdir 't';
+ require File::Spec;
+ unshift @INC, File::Spec->catdir(File::Spec->updir, $location);
+ }
+ else
+ {
+ unshift @INC, $location;
+ }
+ print "# INC = @INC\n";
+
+ plan tests => 2;
+ }
+
+# first load BigInt with Calc
+use Math::BigInt lib => 'Calc';
+
+# BigFloat will remember that we loaded Calc
+require Math::BigFloat;
+is (Math::BigFloat::config()->{lib}, 'Math::BigInt::Calc', 'BigFloat got Calc');
+
+# now load BigInt again with a different lib
+Math::BigInt->import( lib => 'BareCalc' );
+
+# and finally test that BigFloat knows about BareCalc
+
+is (Math::BigFloat::config()->{lib}, 'Math::BigInt::BareCalc', 'BigFloat was notified');
+
diff --git a/gnu/usr.bin/perl/lib/PerlIO.pm b/gnu/usr.bin/perl/lib/PerlIO.pm
index b3693c9f364..116deb5f35c 100644
--- a/gnu/usr.bin/perl/lib/PerlIO.pm
+++ b/gnu/usr.bin/perl/lib/PerlIO.pm
@@ -1,6 +1,6 @@
package PerlIO;
-our $VERSION = '1.03';
+our $VERSION = '1.04';
# Map layer name to package that defines it
our %alias;
@@ -35,7 +35,7 @@ PerlIO - On demand loader for PerlIO layers and root of PerlIO::* name space
=head1 SYNOPSIS
- open($fh,"<:crlf", "my.txt"); # portably open a text file for reading
+ open($fh,"<:crlf", "my.txt"); # support platform-native and CRLF text files
open($fh,"<","his.jpg"); # portably open a binary file for reading
binmode($fh);
@@ -188,7 +188,7 @@ An example of a possible use might be:
...
binmode($fh,":encoding(...)"); # next chunk is encoded
...
- binmode($fh,":pop"); # back to un-encocded
+ binmode($fh,":pop"); # back to un-encoded
A more elegant (and safer) interface is needed.
@@ -288,7 +288,7 @@ The following table summarizes the default layers on UNIX-like and
DOS-like platforms and depending on the setting of the C<$ENV{PERLIO}>:
PERLIO UNIX-like DOS-like
-
+ ------ --------- --------
unset / "" unix perlio / stdio [1] unix crlf
stdio unix perlio / stdio [1] stdio
perlio unix perlio unix perlio
@@ -338,4 +338,3 @@ L<perlfunc/"binmode">, L<perlfunc/"open">, L<perlunicode>, L<perliol>,
L<Encode>
=cut
-
diff --git a/gnu/usr.bin/perl/lib/Pod/t/InputObjects.t b/gnu/usr.bin/perl/lib/Pod/t/InputObjects.t
index d0860864774..0beeb4e5d48 100644
--- a/gnu/usr.bin/perl/lib/Pod/t/InputObjects.t
+++ b/gnu/usr.bin/perl/lib/Pod/t/InputObjects.t
@@ -37,7 +37,7 @@ use_ok( 'Pod::InputObjects' );
is( $p_p1->cmd_name(), 'head2', 'Pod::Paragraph->cmd_name()' );
is( $p_p1->cmd_name( 'head1' ), 'head1',
'Pod::Paragraph->cmd_name( head1 )' );
- cmp_ok( $p_p2->cmd_name(), 'eq', '',
+ ok( !$p_p2->cmd_name(),
'Pod::Paragraph->cmd_name() revisited' );
is( $p_p1->text(), 'NAME', 'Pod::Paragraph->text()' );
diff --git a/gnu/usr.bin/perl/lib/Pod/t/contains_pod.t b/gnu/usr.bin/perl/lib/Pod/t/contains_pod.t
new file mode 100755
index 00000000000..13b36318dec
--- /dev/null
+++ b/gnu/usr.bin/perl/lib/Pod/t/contains_pod.t
@@ -0,0 +1,25 @@
+#!/usr/bin/env perl
+
+# Copyright (C) 2005 Joshua Hoblitt
+#
+# $Id: contains_pod.t,v 1.1 2006/03/28 18:48:57 millert Exp $
+
+use strict;
+
+BEGIN {
+ if( $ENV{PERL_CORE} ) {
+ chdir 't';
+ @INC = '../lib';
+ } else {
+ use lib qw( ./lib );
+ }
+}
+
+
+use Test::More tests => 1;
+
+use Pod::Find qw( contains_pod );
+
+{
+ ok(contains_pod('lib/contains_pod.xr'), "contains pod");
+}
diff --git a/gnu/usr.bin/perl/lib/Pod/t/htmlescp.t b/gnu/usr.bin/perl/lib/Pod/t/htmlescp.t
index b7913c505b6..a17a549cd2e 100644
--- a/gnu/usr.bin/perl/lib/Pod/t/htmlescp.t
+++ b/gnu/usr.bin/perl/lib/Pod/t/htmlescp.t
@@ -13,10 +13,12 @@ use Test::More tests => 1;
convert_n_test("htmlescp", "html escape");
__DATA__
+<?xml version="1.0" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>NAME</title>
+<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<link rev="made" href="mailto:[PERLADMIN]" />
</head>
diff --git a/gnu/usr.bin/perl/lib/Pod/t/htmllink.pod b/gnu/usr.bin/perl/lib/Pod/t/htmllink.pod
new file mode 100644
index 00000000000..2113db7462c
--- /dev/null
+++ b/gnu/usr.bin/perl/lib/Pod/t/htmllink.pod
@@ -0,0 +1,107 @@
+=head1 NAME
+
+htmllink - Test HTML links
+
+=head1 LINKS
+
+L</"section1">
+
+L</"section 2">
+
+L</"section three">
+
+L</"item1">
+
+L</"item 2">
+
+L</"item three">
+
+L</section1>
+
+L</section 2>
+
+L</section three>
+
+L</item1>
+
+L</item 2>
+
+L</item three>
+
+L<"section1">
+
+L<"section 2">
+
+L<"section three">
+
+L<"item1">
+
+L<"item 2">
+
+L<"item three">
+
+L<text|/"section1">
+
+L<text|/"section 2">
+
+L<text|/"section three">
+
+L<text|/"item1">
+
+L<text|/"item 2">
+
+L<text|/"item three">
+
+L<text|/section1>
+
+L<text|/section 2>
+
+L<text|/section three>
+
+L<text|/item1>
+
+L<text|/item 2>
+
+L<text|/item three>
+
+L<text|"section1">
+
+L<text|"section 2">
+
+L<text|"section three">
+
+L<text|"item1">
+
+L<text|"item 2">
+
+L<text|"item three">
+
+=head1 TARGETS
+
+=head2 section1
+
+This is section one.
+
+=head2 section 2
+
+This is section two.
+
+=head2 section three
+
+This is section three.
+
+=over 4
+
+=item item1
+
+This is item one.
+
+=item item 2
+
+This is item two.
+
+=item item three
+
+This is item three.
+
+=back
diff --git a/gnu/usr.bin/perl/lib/Pod/t/htmllink.t b/gnu/usr.bin/perl/lib/Pod/t/htmllink.t
new file mode 100755
index 00000000000..27142e698b5
--- /dev/null
+++ b/gnu/usr.bin/perl/lib/Pod/t/htmllink.t
@@ -0,0 +1,129 @@
+#!/usr/bin/perl -w # -*- perl -*-
+
+BEGIN {
+ chdir 't' if -d 't';
+ unshift @INC, '../lib';
+ unshift @INC, '../lib/Pod/t';
+ require "pod2html-lib.pl";
+}
+
+use strict;
+use Test::More tests => 1;
+
+TODO: {
+ local $TODO = "item 2 doesn't work as expected";
+ convert_n_test("htmllink", "html links");
+}
+
+__DATA__
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>htmllink - Test HTML links</title>
+<link rev="made" href="mailto:" />
+</head>
+
+<body style="background-color: white">
+
+<p><a name="__index__"></a></p>
+<!-- INDEX BEGIN -->
+
+<ul>
+
+ <li><a href="#name">NAME</a></li>
+ <li><a href="#links">LINKS</a></li>
+ <li><a href="#targets">TARGETS</a></li>
+ <ul>
+
+ <li><a href="#section1">section1</a></li>
+ <li><a href="#section_2">section 2</a></li>
+ <li><a href="#section_three">section three</a></li>
+ </ul>
+
+</ul>
+<!-- INDEX END -->
+
+<hr />
+<p>
+</p>
+<h1><a name="name">NAME</a></h1>
+<p>htmllink - Test HTML links</p>
+<p>
+</p>
+<hr />
+<h1><a name="links">LINKS</a></h1>
+<p><a href="#section1">section1</a></p>
+<p><a href="#section_2">section 2</a></p>
+<p><a href="#section_three">section three</a></p>
+<p><a href="#item_item1">item1</a></p>
+<p><a href="#item_item_2">item 2</a></p>
+<p><a href="#item_item_three">item three</a></p>
+<p><a href="#section1">section1</a></p>
+<p><a href="#section_2">section 2</a></p>
+<p><a href="#section_three">section three</a></p>
+<p><a href="#item_item1">item1</a></p>
+<p><a href="#item_item_2">item 2</a></p>
+<p><a href="#item_item_three">item three</a></p>
+<p><a href="#section1">section1</a></p>
+<p><a href="#section_2">section 2</a></p>
+<p><a href="#section_three">section three</a></p>
+<p><a href="#item_item1">item1</a></p>
+<p><a href="#item_item_2">item 2</a></p>
+<p><a href="#item_item_three">item three</a></p>
+<p><a href="#section1">text</a></p>
+<p><a href="#section_2">text</a></p>
+<p><a href="#section_three">text</a></p>
+<p><a href="#item_item1">text</a></p>
+<p><a href="#item_item_2">text</a></p>
+<p><a href="#item_item_three">text</a></p>
+<p><a href="#section1">text</a></p>
+<p><a href="#section_2">text</a></p>
+<p><a href="#section_three">text</a></p>
+<p><a href="#item_item1">text</a></p>
+<p><a href="#item_item_2">text</a></p>
+<p><a href="#item_item_three">text</a></p>
+<p><a href="#section1">text</a></p>
+<p><a href="#section_2">text</a></p>
+<p><a href="#section_three">text</a></p>
+<p><a href="#item_item1">text</a></p>
+<p><a href="#item_item_2">text</a></p>
+<p><a href="#item_item_three">text</a></p>
+<p>
+</p>
+<hr />
+<h1><a name="targets">TARGETS</a></h1>
+<p>
+</p>
+<h2><a name="section1">section1</a></h2>
+<p>This is section one.</p>
+<p>
+</p>
+<h2><a name="section_2">section 2</a></h2>
+<p>This is section two.</p>
+<p>
+</p>
+<h2><a name="section_three">section three</a></h2>
+<p>This is section three.</p>
+<dl>
+<dt><strong><a name="item_item1">item1</a></strong><br />
+</dt>
+<dd>
+This is item one.
+</dd>
+<p></p>
+<dt><strong><a name="item_item_2">item 2</a></strong><br />
+</dt>
+<dd>
+This is item two.
+</dd>
+<p></p>
+<dt><strong><a name="item_item_three">item three</a></strong><br />
+</dt>
+<dd>
+This is item three.
+</dd>
+<p></p></dl>
+
+</body>
+
+</html>
diff --git a/gnu/usr.bin/perl/lib/Pod/t/htmlview.t b/gnu/usr.bin/perl/lib/Pod/t/htmlview.t
index 739d3003fbf..50cbc2ac790 100644
--- a/gnu/usr.bin/perl/lib/Pod/t/htmlview.t
+++ b/gnu/usr.bin/perl/lib/Pod/t/htmlview.t
@@ -13,10 +13,12 @@ use Test::More tests => 1;
convert_n_test("htmlview", "html rendering");
__DATA__
+<?xml version="1.0" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>NAME</title>
+<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<link rev="made" href="mailto:[PERLADMIN]" />
</head>
@@ -80,66 +82,69 @@ other <strong>cool </strong></em>&gt; stuff &gt;&gt;</p>
<h2><a name="new__"><code>new()</code></a></h2>
<p>Constructor method. Accepts the following config options:</p>
<dl>
-<dt><strong><a name="item_foo">foo</a></strong><br />
-</dt>
+<dt><strong><a name="item_foo">foo</a></strong>
+
<dd>
-The foo item.
+<p>The foo item.</p>
</dd>
-<p></p>
-<dt><strong><a name="item_bar">bar</a></strong><br />
-</dt>
+</li>
+<dt><strong><a name="item_bar">bar</a></strong>
+
<dd>
-The bar item.
+<p>The bar item.</p>
</dd>
<p>This is a list within a list</p>
<ul>
-<li></li>
-The wiz item.
-<p></p>
-<li></li>
-The waz item.
-<p></p></ul>
-<dt><strong><a name="item_baz">baz</a></strong><br />
-</dt>
+<li>
+<p>The wiz item.</p>
+</li>
+<li>
+<p>The waz item.</p>
+</li>
+</ul>
+<dt><strong><a name="item_baz">baz</a></strong>
+
<dd>
-The baz item.
+<p>The baz item.</p>
</dd>
-<p></p></dl>
+</li>
+</dl>
<p>Title on the same line as the =item + * bullets</p>
<ul>
-<li><strong><a name="item_black_cat"><code>Black</code> Cat</a></strong><br />
-</li>
-<li><strong><a name="item_sat_on_the">Sat <em>on</em>&nbsp;the</a></strong><br />
-</li>
-<li><strong><a name="item_mat_3c_21_3e">Mat&lt;!&gt;</a></strong><br />
-</li>
+<li><strong><a name="item_black_cat"><code>Black</code> Cat</a></strong>
+
+<li><strong><a name="item_sat_on_the">Sat <em>on</em>&nbsp;the</a></strong>
+
+<li><strong><a name="item_mat_3c_21_3e">Mat&lt;!&gt;</a></strong>
+
</ul>
<p>Title on the same line as the =item + numerical bullets</p>
<ol>
-<li><strong><a name="item_cat">Cat</a></strong><br />
-</li>
-<li><strong><a name="item_sat">Sat</a></strong><br />
-</li>
-<li><strong><a name="item_mat">Mat</a></strong><br />
-</li>
+<li><strong><a name="item_cat">Cat</a></strong>
+
+<li><strong><a name="item_sat">Sat</a></strong>
+
+<li><strong><a name="item_mat">Mat</a></strong>
+
</ol>
<p>No bullets, no title</p>
<dl>
-<dt></dt>
+<dt>
<dd>
-Cat
+<p>Cat</p>
</dd>
-<p></p>
-<dt></dt>
+</li>
+<dt>
<dd>
-Sat
+<p>Sat</p>
</dd>
-<p></p>
-<dt></dt>
+</li>
+<dt>
<dd>
-Mat
+<p>Mat</p>
</dd>
-<p></p></dl>
+</li>
+</dl>
<p>
</p>
<h2><a name="old__"><code>old()</code></a></h2>
diff --git a/gnu/usr.bin/perl/lib/Test/Builder/Module.pm b/gnu/usr.bin/perl/lib/Test/Builder/Module.pm
new file mode 100644
index 00000000000..b3ccce63292
--- /dev/null
+++ b/gnu/usr.bin/perl/lib/Test/Builder/Module.pm
@@ -0,0 +1,182 @@
+package Test::Builder::Module;
+
+use Test::Builder;
+
+require Exporter;
+@ISA = qw(Exporter);
+
+$VERSION = '0.02';
+
+use strict;
+
+# 5.004's Exporter doesn't have export_to_level.
+my $_export_to_level = sub {
+ my $pkg = shift;
+ my $level = shift;
+ (undef) = shift; # redundant arg
+ my $callpkg = caller($level);
+ $pkg->export($callpkg, @_);
+};
+
+
+=head1 NAME
+
+Test::Builder::Module - Base class for test modules
+
+=head1 SYNOPSIS
+
+ # Emulates Test::Simple
+ package Your::Module;
+
+ my $CLASS = __PACKAGE__;
+
+ use base 'Test::Builder::Module';
+ @EXPORT = qw(ok);
+
+ sub ok ($;$) {
+ my $tb = $CLASS->builder;
+ return $tb->ok(@_);
+ }
+
+ 1;
+
+
+=head1 DESCRIPTION
+
+This is a superclass for Test::Builder-based modules. It provides a
+handful of common functionality and a method of getting at the underlying
+Test::Builder object.
+
+
+=head2 Importing
+
+Test::Builder::Module is a subclass of Exporter which means your
+module is also a subclass of Exporter. @EXPORT, @EXPORT_OK, etc...
+all act normally.
+
+A few methods are provided to do the C<use Your::Module tests => 23> part
+for you.
+
+=head3 import
+
+Test::Builder::Module provides an import() method which acts in the
+same basic way as Test::More's, setting the plan and controling
+exporting of functions and variables. This allows your module to set
+the plan independent of Test::More.
+
+All arguments passed to import() are passed onto
+C<< Your::Module->builder->plan() >> with the exception of
+C<import =>[qw(things to import)]>.
+
+ use Your::Module import => [qw(this that)], tests => 23;
+
+says to import the functions this() and that() as well as set the plan
+to be 23 tests.
+
+import() also sets the exported_to() attribute of your builder to be
+the caller of the import() function.
+
+Additional behaviors can be added to your import() method by overriding
+import_extra().
+
+=cut
+
+sub import {
+ my($class) = shift;
+
+ my $test = $class->builder;
+
+ my $caller = caller;
+
+ $test->exported_to($caller);
+
+ $class->import_extra(\@_);
+ my(@imports) = $class->_strip_imports(\@_);
+
+ $test->plan(@_);
+
+ $class->$_export_to_level(1, $class, @imports);
+}
+
+
+sub _strip_imports {
+ my $class = shift;
+ my $list = shift;
+
+ my @imports = ();
+ my @other = ();
+ my $idx = 0;
+ while( $idx <= $#{$list} ) {
+ my $item = $list->[$idx];
+
+ if( defined $item and $item eq 'import' ) {
+ push @imports, @{$list->[$idx+1]};
+ $idx++;
+ }
+ else {
+ push @other, $item;
+ }
+
+ $idx++;
+ }
+
+ @$list = @other;
+
+ return @imports;
+}
+
+
+=head3 import_extra
+
+ Your::Module->import_extra(\@import_args);
+
+import_extra() is called by import(). It provides an opportunity for you
+to add behaviors to your module based on its import list.
+
+Any extra arguments which shouldn't be passed on to plan() should be
+stripped off by this method.
+
+See Test::More for an example of its use.
+
+B<NOTE> This mechanism is I<VERY ALPHA AND LIKELY TO CHANGE> as it
+feels like a bit of an ugly hack in its current form.
+
+=cut
+
+sub import_extra {}
+
+
+=head2 Builder
+
+Test::Builder::Module provides some methods of getting at the underlying
+Test::Builder object.
+
+=head3 builder
+
+ my $builder = Your::Class->builder;
+
+This method returns the Test::Builder object associated with Your::Class.
+It is not a constructor so you can call it as often as you like.
+
+This is the preferred way to get the Test::Builder object. You should
+I<not> get it via C<< Test::Builder->new >> as was previously
+recommended.
+
+The object returned by builder() may change at runtime so you should
+call builder() inside each function rather than store it in a global.
+
+ sub ok {
+ my $builder = Your::Class->builder;
+
+ return $builder->ok(@_);
+ }
+
+
+=cut
+
+sub builder {
+ return Test::Builder->new;
+}
+
+
+1;
diff --git a/gnu/usr.bin/perl/lib/Test/Builder/Tester.pm b/gnu/usr.bin/perl/lib/Test/Builder/Tester.pm
new file mode 100644
index 00000000000..9e3b9c7b329
--- /dev/null
+++ b/gnu/usr.bin/perl/lib/Test/Builder/Tester.pm
@@ -0,0 +1,640 @@
+package Test::Builder::Tester;
+
+use strict;
+use vars qw(@EXPORT $VERSION @ISA);
+$VERSION = "1.02";
+
+use Test::Builder;
+use Symbol;
+use Carp;
+
+=head1 NAME
+
+Test::Builder::Tester - test testsuites that have been built with
+Test::Builder
+
+=head1 SYNOPSIS
+
+ use Test::Builder::Tester tests => 1;
+ use Test::More;
+
+ test_out("not ok 1 - foo");
+ test_fail(+1);
+ fail("foo");
+ test_test("fail works");
+
+=head1 DESCRIPTION
+
+A module that helps you test testing modules that are built with
+B<Test::Builder>.
+
+The testing system is designed to be used by performing a three step
+process for each test you wish to test. This process starts with using
+C<test_out> and C<test_err> in advance to declare what the testsuite you
+are testing will output with B<Test::Builder> to stdout and stderr.
+
+You then can run the test(s) from your test suite that call
+B<Test::Builder>. At this point the output of B<Test::Builder> is
+safely captured by B<Test::Builder::Tester> rather than being
+interpreted as real test output.
+
+The final stage is to call C<test_test> that will simply compare what you
+predeclared to what B<Test::Builder> actually outputted, and report the
+results back with a "ok" or "not ok" (with debugging) to the normal
+output.
+
+=cut
+
+####
+# set up testing
+####
+
+my $t = Test::Builder->new;
+
+###
+# make us an exporter
+###
+
+use Exporter;
+@ISA = qw(Exporter);
+
+@EXPORT = qw(test_out test_err test_fail test_diag test_test line_num);
+
+# _export_to_level and import stolen directly from Test::More. I am
+# the king of cargo cult programming ;-)
+
+# 5.004's Exporter doesn't have export_to_level.
+sub _export_to_level
+{
+ my $pkg = shift;
+ my $level = shift;
+ (undef) = shift; # XXX redundant arg
+ my $callpkg = caller($level);
+ $pkg->export($callpkg, @_);
+}
+
+sub import {
+ my $class = shift;
+ my(@plan) = @_;
+
+ my $caller = caller;
+
+ $t->exported_to($caller);
+ $t->plan(@plan);
+
+ my @imports = ();
+ foreach my $idx (0..$#plan) {
+ if( $plan[$idx] eq 'import' ) {
+ @imports = @{$plan[$idx+1]};
+ last;
+ }
+ }
+
+ __PACKAGE__->_export_to_level(1, __PACKAGE__, @imports);
+}
+
+###
+# set up file handles
+###
+
+# create some private file handles
+my $output_handle = gensym;
+my $error_handle = gensym;
+
+# and tie them to this package
+my $out = tie *$output_handle, "Test::Tester::Tie", "STDOUT";
+my $err = tie *$error_handle, "Test::Tester::Tie", "STDERR";
+
+####
+# exported functions
+####
+
+# for remembering that we're testing and where we're testing at
+my $testing = 0;
+my $testing_num;
+
+# remembering where the file handles were originally connected
+my $original_output_handle;
+my $original_failure_handle;
+my $original_todo_handle;
+
+my $original_test_number;
+my $original_harness_state;
+
+my $original_harness_env;
+
+# function that starts testing and redirects the filehandles for now
+sub _start_testing
+{
+ # even if we're running under Test::Harness pretend we're not
+ # for now. This needed so Test::Builder doesn't add extra spaces
+ $original_harness_env = $ENV{HARNESS_ACTIVE} || 0;
+ $ENV{HARNESS_ACTIVE} = 0;
+
+ # remember what the handles were set to
+ $original_output_handle = $t->output();
+ $original_failure_handle = $t->failure_output();
+ $original_todo_handle = $t->todo_output();
+
+ # switch out to our own handles
+ $t->output($output_handle);
+ $t->failure_output($error_handle);
+ $t->todo_output($error_handle);
+
+ # clear the expected list
+ $out->reset();
+ $err->reset();
+
+ # remeber that we're testing
+ $testing = 1;
+ $testing_num = $t->current_test;
+ $t->current_test(0);
+
+ # look, we shouldn't do the ending stuff
+ $t->no_ending(1);
+}
+
+=head2 Methods
+
+These are the six methods that are exported as default.
+
+=over 4
+
+=item test_out
+
+=item test_err
+
+Procedures for predeclaring the output that your test suite is
+expected to produce until C<test_test> is called. These procedures
+automatically assume that each line terminates with "\n". So
+
+ test_out("ok 1","ok 2");
+
+is the same as
+
+ test_out("ok 1\nok 2");
+
+which is even the same as
+
+ test_out("ok 1");
+ test_out("ok 2");
+
+Once C<test_out> or C<test_err> (or C<test_fail> or C<test_diag>) have
+been called once all further output from B<Test::Builder> will be
+captured by B<Test::Builder::Tester>. This means that your will not
+be able perform further tests to the normal output in the normal way
+until you call C<test_test> (well, unless you manually meddle with the
+output filehandles)
+
+=cut
+
+sub test_out(@)
+{
+ # do we need to do any setup?
+ _start_testing() unless $testing;
+
+ $out->expect(@_)
+}
+
+sub test_err(@)
+{
+ # do we need to do any setup?
+ _start_testing() unless $testing;
+
+ $err->expect(@_)
+}
+
+=item test_fail
+
+Because the standard failure message that B<Test::Builder> produces
+whenever a test fails will be a common occurrence in your test error
+output, and because has changed between Test::Builder versions, rather
+than forcing you to call C<test_err> with the string all the time like
+so
+
+ test_err("# Failed test ($0 at line ".line_num(+1).")");
+
+C<test_fail> exists as a convenience method that can be called
+instead. It takes one argument, the offset from the current line that
+the line that causes the fail is on.
+
+ test_fail(+1);
+
+This means that the example in the synopsis could be rewritten
+more simply as:
+
+ test_out("not ok 1 - foo");
+ test_fail(+1);
+ fail("foo");
+ test_test("fail works");
+
+=cut
+
+sub test_fail
+{
+ # do we need to do any setup?
+ _start_testing() unless $testing;
+
+ # work out what line we should be on
+ my ($package, $filename, $line) = caller;
+ $line = $line + (shift() || 0); # prevent warnings
+
+ # expect that on stderr
+ $err->expect("# Failed test ($0 at line $line)");
+}
+
+=item test_diag
+
+As most of the remaining expected output to the error stream will be
+created by Test::Builder's C<diag> function, B<Test::Builder::Tester>
+provides a convience function C<test_diag> that you can use instead of
+C<test_err>.
+
+The C<test_diag> function prepends comment hashes and spacing to the
+start and newlines to the end of the expected output passed to it and
+adds it to the list of expected error output. So, instead of writing
+
+ test_err("# Couldn't open file");
+
+you can write
+
+ test_diag("Couldn't open file");
+
+Remember that B<Test::Builder>'s diag function will not add newlines to
+the end of output and test_diag will. So to check
+
+ Test::Builder->new->diag("foo\n","bar\n");
+
+You would do
+
+ test_diag("foo","bar")
+
+without the newlines.
+
+=cut
+
+sub test_diag
+{
+ # do we need to do any setup?
+ _start_testing() unless $testing;
+
+ # expect the same thing, but prepended with "# "
+ local $_;
+ $err->expect(map {"# $_"} @_)
+}
+
+=item test_test
+
+Actually performs the output check testing the tests, comparing the
+data (with C<eq>) that we have captured from B<Test::Builder> against
+that that was declared with C<test_out> and C<test_err>.
+
+This takes name/value pairs that effect how the test is run.
+
+=over
+
+=item title (synonym 'name', 'label')
+
+The name of the test that will be displayed after the C<ok> or C<not
+ok>.
+
+=item skip_out
+
+Setting this to a true value will cause the test to ignore if the
+output sent by the test to the output stream does not match that
+declared with C<test_out>.
+
+=item skip_err
+
+Setting this to a true value will cause the test to ignore if the
+output sent by the test to the error stream does not match that
+declared with C<test_err>.
+
+=back
+
+As a convience, if only one argument is passed then this argument
+is assumed to be the name of the test (as in the above examples.)
+
+Once C<test_test> has been run test output will be redirected back to
+the original filehandles that B<Test::Builder> was connected to
+(probably STDOUT and STDERR,) meaning any further tests you run
+will function normally and cause success/errors for B<Test::Harness>.
+
+=cut
+
+sub test_test
+{
+ # decode the arguements as described in the pod
+ my $mess;
+ my %args;
+ if (@_ == 1)
+ { $mess = shift }
+ else
+ {
+ %args = @_;
+ $mess = $args{name} if exists($args{name});
+ $mess = $args{title} if exists($args{title});
+ $mess = $args{label} if exists($args{label});
+ }
+
+ # er, are we testing?
+ croak "Not testing. You must declare output with a test function first."
+ unless $testing;
+
+ # okay, reconnect the test suite back to the saved handles
+ $t->output($original_output_handle);
+ $t->failure_output($original_failure_handle);
+ $t->todo_output($original_todo_handle);
+
+ # restore the test no, etc, back to the original point
+ $t->current_test($testing_num);
+ $testing = 0;
+
+ # re-enable the original setting of the harness
+ $ENV{HARNESS_ACTIVE} = $original_harness_env;
+
+ # check the output we've stashed
+ unless ($t->ok( ($args{skip_out} || $out->check)
+ && ($args{skip_err} || $err->check),
+ $mess))
+ {
+ # print out the diagnostic information about why this
+ # test failed
+
+ local $_;
+
+ $t->diag(map {"$_\n"} $out->complaint)
+ unless $args{skip_out} || $out->check;
+
+ $t->diag(map {"$_\n"} $err->complaint)
+ unless $args{skip_err} || $err->check;
+ }
+}
+
+=item line_num
+
+A utility function that returns the line number that the function was
+called on. You can pass it an offset which will be added to the
+result. This is very useful for working out the correct text of
+diagnostic methods that contain line numbers.
+
+Essentially this is the same as the C<__LINE__> macro, but the
+C<line_num(+3)> idiom is arguably nicer.
+
+=cut
+
+sub line_num
+{
+ my ($package, $filename, $line) = caller;
+ return $line + (shift() || 0); # prevent warnings
+}
+
+=back
+
+In addition to the six exported functions there there exists one
+function that can only be accessed with a fully qualified function
+call.
+
+=over 4
+
+=item color
+
+When C<test_test> is called and the output that your tests generate
+does not match that which you declared, C<test_test> will print out
+debug information showing the two conflicting versions. As this
+output itself is debug information it can be confusing which part of
+the output is from C<test_test> and which was the original output from
+your original tests. Also, it may be hard to spot things like
+extraneous whitespace at the end of lines that may cause your test to
+fail even though the output looks similar.
+
+To assist you, if you have the B<Term::ANSIColor> module installed
+(which you should do by default from perl 5.005 onwards), C<test_test>
+can colour the background of the debug information to disambiguate the
+different types of output. The debug output will have it's background
+coloured green and red. The green part represents the text which is
+the same between the executed and actual output, the red shows which
+part differs.
+
+The C<color> function determines if colouring should occur or not.
+Passing it a true or false value will enable or disable colouring
+respectively, and the function called with no argument will return the
+current setting.
+
+To enable colouring from the command line, you can use the
+B<Text::Builder::Tester::Color> module like so:
+
+ perl -Mlib=Text::Builder::Tester::Color test.t
+
+Or by including the B<Test::Builder::Tester::Color> module directly in
+the PERL5LIB.
+
+=cut
+
+my $color;
+sub color
+{
+ $color = shift if @_;
+ $color;
+}
+
+=back
+
+=head1 BUGS
+
+Calls B<Test::Builder>'s C<no_ending> method turning off the ending
+tests. This is needed as otherwise it will trip out because we've run
+more tests than we strictly should have and it'll register any
+failures we had that we were testing for as real failures.
+
+The color function doesn't work unless B<Term::ANSIColor> is installed
+and is compatible with your terminal.
+
+Bugs (and requests for new features) can be reported to the author
+though the CPAN RT system:
+L<http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Test-Builder-Tester>
+
+=head1 AUTHOR
+
+Copyright Mark Fowler E<lt>mark@twoshortplanks.comE<gt> 2002, 2004.
+
+Some code taken from B<Test::More> and B<Test::Catch>, written by by
+Michael G Schwern E<lt>schwern@pobox.comE<gt>. Hence, those parts
+Copyright Micheal G Schwern 2001. Used and distributed with
+permission.
+
+This program is free software; you can redistribute it
+and/or modify it under the same terms as Perl itself.
+
+=head1 NOTES
+
+This code has been tested explicitly on the following versions
+of perl: 5.7.3, 5.6.1, 5.6.0, 5.005_03, 5.004_05 and 5.004.
+
+Thanks to Richard Clamp E<lt>richardc@unixbeard.netE<gt> for letting
+me use his testing system to try this module out on.
+
+=head1 SEE ALSO
+
+L<Test::Builder>, L<Test::Builder::Tester::Color>, L<Test::More>.
+
+=cut
+
+1;
+
+####################################################################
+# Helper class that is used to remember expected and received data
+
+package Test::Tester::Tie;
+
+##
+# add line(s) to be expected
+
+sub expect
+{
+ my $self = shift;
+
+ my @checks = @_;
+ foreach my $check (@checks) {
+ $check = $self->_translate_Failed_check($check);
+ push @{$self->[2]}, ref $check ? $check : "$check\n";
+ }
+}
+
+
+sub _translate_Failed_check
+{
+ my($self, $check) = @_;
+
+ if( $check =~ /\A(.*)# (Failed .*test) \((.*?) at line (\d+)\)\z/ ) {
+ $check = qr/\Q$1\E#\s+\Q$2\E.*?\n?.*?\Q$3\E at line \Q$4\E.*\n?/;
+ }
+
+ return $check;
+}
+
+
+##
+# return true iff the expected data matches the got data
+
+sub check
+{
+ my $self = shift;
+
+ # turn off warnings as these might be undef
+ local $^W = 0;
+
+ my @checks = @{$self->[2]};
+ my $got = $self->[1];
+ foreach my $check (@checks) {
+ $check = qr/^\Q$check\E/ unless ref $check;
+ return 0 unless $got =~ s/^$check//;
+ }
+
+ return length $got == 0;
+}
+
+##
+# a complaint message about the inputs not matching (to be
+# used for debugging messages)
+
+sub complaint
+{
+ my $self = shift;
+ my $type = $self->type;
+ my $got = $self->got;
+ my $wanted = join "\n", @{$self->wanted};
+
+ # are we running in colour mode?
+ if (Test::Builder::Tester::color)
+ {
+ # get color
+ eval "require Term::ANSIColor";
+ unless ($@)
+ {
+ # colours
+
+ my $green = Term::ANSIColor::color("black").
+ Term::ANSIColor::color("on_green");
+ my $red = Term::ANSIColor::color("black").
+ Term::ANSIColor::color("on_red");
+ my $reset = Term::ANSIColor::color("reset");
+
+ # work out where the two strings start to differ
+ my $char = 0;
+ $char++ while substr($got, $char, 1) eq substr($wanted, $char, 1);
+
+ # get the start string and the two end strings
+ my $start = $green . substr($wanted, 0, $char);
+ my $gotend = $red . substr($got , $char) . $reset;
+ my $wantedend = $red . substr($wanted, $char) . $reset;
+
+ # make the start turn green on and off
+ $start =~ s/\n/$reset\n$green/g;
+
+ # make the ends turn red on and off
+ $gotend =~ s/\n/$reset\n$red/g;
+ $wantedend =~ s/\n/$reset\n$red/g;
+
+ # rebuild the strings
+ $got = $start . $gotend;
+ $wanted = $start . $wantedend;
+ }
+ }
+
+ return "$type is:\n" .
+ "$got\nnot:\n$wanted\nas expected"
+}
+
+##
+# forget all expected and got data
+
+sub reset
+{
+ my $self = shift;
+ @$self = ($self->[0], '', []);
+}
+
+
+sub got
+{
+ my $self = shift;
+ return $self->[1];
+}
+
+sub wanted
+{
+ my $self = shift;
+ return $self->[2];
+}
+
+sub type
+{
+ my $self = shift;
+ return $self->[0];
+}
+
+###
+# tie interface
+###
+
+sub PRINT {
+ my $self = shift;
+ $self->[1] .= join '', @_;
+}
+
+sub TIEHANDLE {
+ my($class, $type) = @_;
+
+ my $self = bless [$type], $class;
+ $self->reset;
+
+ return $self;
+}
+
+sub READ {}
+sub READLINE {}
+sub GETC {}
+sub FILENO {}
+
+1;
diff --git a/gnu/usr.bin/perl/lib/Test/Builder/Tester/Color.pm b/gnu/usr.bin/perl/lib/Test/Builder/Tester/Color.pm
new file mode 100644
index 00000000000..b479e71a946
--- /dev/null
+++ b/gnu/usr.bin/perl/lib/Test/Builder/Tester/Color.pm
@@ -0,0 +1,50 @@
+package Test::Builder::Tester::Color;
+
+use strict;
+
+require Test::Builder::Tester;
+
+=head1 NAME
+
+Test::Builder::Tester::Color - turn on colour in Test::Builder::Tester
+
+=head1 SYNOPSIS
+
+ When running a test script
+
+ perl -MTest::Builder::Tester::Color test.t
+
+=head1 DESCRIPTION
+
+Importing this module causes the subroutine color in Test::Builder::Tester
+to be called with a true value causing colour highlighting to be turned
+on in debug output.
+
+The sole purpose of this module is to enable colour highlighting
+from the command line.
+
+=cut
+
+sub import
+{
+ Test::Builder::Tester::color(1);
+}
+
+=head1 AUTHOR
+
+Copyright Mark Fowler E<lt>mark@twoshortplanks.comE<gt> 2002.
+
+This program is free software; you can redistribute it
+and/or modify it under the same terms as Perl itself.
+
+=head1 BUGS
+
+This module will have no effect unless Term::ANSIColor is installed.
+
+=head1 SEE ALSO
+
+L<Test::Builder::Tester>, L<Term::ANSIColor>
+
+=cut
+
+1;
diff --git a/gnu/usr.bin/perl/lib/Test/Harness/Point.pm b/gnu/usr.bin/perl/lib/Test/Harness/Point.pm
new file mode 100644
index 00000000000..9f82fe9fc98
--- /dev/null
+++ b/gnu/usr.bin/perl/lib/Test/Harness/Point.pm
@@ -0,0 +1,152 @@
+# -*- Mode: cperl; cperl-indent-level: 4 -*-
+package Test::Harness::Point;
+
+use strict;
+use vars qw($VERSION);
+$VERSION = '0.01';
+
+=head1 NAME
+
+Test::Harness::Point - object for tracking a single test point
+
+=head1 SYNOPSIS
+
+One Test::Harness::Point object represents a single test point.
+
+=head1 CONSTRUCTION
+
+=head2 new()
+
+ my $point = new Test::Harness::Point;
+
+Create a test point object.
+
+=cut
+
+sub new {
+ my $class = shift;
+ my $self = bless {}, $class;
+
+ return $self;
+}
+
+my $test_line_regex = qr/
+ ^
+ (not\ )? # failure?
+ ok\b
+ (?:\s+(\d+))? # optional test number
+ \s*
+ (.*) # and the rest
+/ox;
+
+=head1 from_test_line( $line )
+
+Constructor from a TAP test line, or empty return if the test line
+is not a test line.
+
+=cut
+
+sub from_test_line {
+ my $class = shift;
+ my $line = shift or return;
+
+ # We pulverize the line down into pieces in three parts.
+ my ($not, $number, $extra) = ($line =~ $test_line_regex ) or return;
+
+ my $point = $class->new;
+ $point->set_number( $number );
+ $point->set_ok( !$not );
+
+ if ( $extra ) {
+ my ($description,$directive) = split( /(?:[^\\]|^)#/, $extra, 2 );
+ $description =~ s/^- //; # Test::More puts it in there
+ $point->set_description( $description );
+ if ( $directive ) {
+ $point->set_directive( $directive );
+ }
+ } # if $extra
+
+ return $point;
+} # from_test_line()
+
+=head1 ACCESSORS
+
+Each of the following fields has a getter and setter method.
+
+=over 4
+
+=item * ok
+
+=item * number
+
+=cut
+
+sub ok { my $self = shift; $self->{ok} }
+sub set_ok {
+ my $self = shift;
+ my $ok = shift;
+ $self->{ok} = $ok ? 1 : 0;
+}
+sub pass {
+ my $self = shift;
+
+ return ($self->ok || $self->is_todo || $self->is_skip) ? 1 : 0;
+}
+
+sub number { my $self = shift; $self->{number} }
+sub set_number { my $self = shift; $self->{number} = shift }
+
+sub description { my $self = shift; $self->{description} }
+sub set_description {
+ my $self = shift;
+ $self->{description} = shift;
+ $self->{name} = $self->{description}; # history
+}
+
+sub directive { my $self = shift; $self->{directive} }
+sub set_directive {
+ my $self = shift;
+ my $directive = shift;
+
+ $directive =~ s/^\s+//;
+ $directive =~ s/\s+$//;
+ $self->{directive} = $directive;
+
+ my ($type,$reason) = ($directive =~ /^\s*(\S+)(?:\s+(.*))?$/);
+ $self->set_directive_type( $type );
+ $reason = "" unless defined $reason;
+ $self->{directive_reason} = $reason;
+}
+sub set_directive_type {
+ my $self = shift;
+ $self->{directive_type} = lc shift;
+ $self->{type} = $self->{directive_type}; # History
+}
+sub set_directive_reason {
+ my $self = shift;
+ $self->{directive_reason} = shift;
+}
+sub directive_type { my $self = shift; $self->{directive_type} }
+sub type { my $self = shift; $self->{directive_type} }
+sub directive_reason{ my $self = shift; $self->{directive_reason} }
+sub reason { my $self = shift; $self->{directive_reason} }
+sub is_todo {
+ my $self = shift;
+ my $type = $self->directive_type;
+ return $type && ( $type eq 'todo' );
+}
+sub is_skip {
+ my $self = shift;
+ my $type = $self->directive_type;
+ return $type && ( $type eq 'skip' );
+}
+
+sub diagnostics {
+ my $self = shift;
+ return @{$self->{diagnostics}} if wantarray;
+ return join( "\n", @{$self->{diagnostics}} );
+}
+sub add_diagnostic { my $self = shift; push @{$self->{diagnostics}}, @_ }
+
+
+1;
diff --git a/gnu/usr.bin/perl/lib/Test/Harness/TAP.pod b/gnu/usr.bin/perl/lib/Test/Harness/TAP.pod
new file mode 100644
index 00000000000..6dd0a96cf2a
--- /dev/null
+++ b/gnu/usr.bin/perl/lib/Test/Harness/TAP.pod
@@ -0,0 +1,366 @@
+=head1 NAME
+
+Test::Harness::TAP - Documentation for the TAP format
+
+=head1 SYNOPSIS
+
+TAP, the Test Anything Protocol, is Perl's simple text-based interface
+between testing modules such as Test::More and the test harness
+Test::Harness.
+
+=head1 TODO
+
+Exit code of the process.
+
+=head1 THE TAP FORMAT
+
+TAP's general format is:
+
+ 1..N
+ ok 1 Description # Directive
+ # Diagnostic
+ ....
+ ok 47 Description
+ ok 48 Description
+ more tests....
+
+For example, a test file's output might look like:
+
+ 1..4
+ ok 1 - Input file opened
+ not ok 2 - First line of the input valid
+ ok 3 - Read the rest of the file
+ not ok 4 - Summarized correctly # TODO Not written yet
+
+=head1 HARNESS BEHAVIOR
+
+In this document, the "harness" is any program analyzing TAP output.
+Typically this will be Perl's I<prove> program, or the underlying
+C<Test::Harness::runtests> subroutine.
+
+A harness must only read TAP output from standard output and not
+from standard error. Lines written to standard output matching
+C</^(not )?ok\b/> must be interpreted as test lines. All other
+lines must not be considered test output.
+
+=head1 TESTS LINES AND THE PLAN
+
+=head2 The plan
+
+The plan tells how many tests will be run, or how many tests have
+run. It's a check that the test file hasn't stopped prematurely.
+It must appear once, whether at the beginning or end of the output.
+
+The plan is usually the first line of TAP output and it specifies how
+many test points are to follow. For example,
+
+ 1..10
+
+means you plan on running 10 tests. This is a safeguard in case your test
+file dies silently in the middle of its run. The plan is optional but if
+there is a plan before the test points it must be the first non-diagnostic
+line output by the test file.
+
+In certain instances a test file may not know how many test points
+it will ultimately be running. In this case the plan can be the last
+non-diagnostic line in the output.
+
+The plan cannot appear in the middle of the output, nor can it appear more
+than once.
+
+=head2 The test line
+
+The core of TAP is the test line. A test file prints one test line test
+point executed. There must be at least one test line in TAP output. Each
+test line comprises the following elements:
+
+=over 4
+
+=item * C<ok> or C<not ok>
+
+This tells whether the test point passed or failed. It must be
+at the beginning of the line. C</^not ok/> indicates a failed test
+point. C</^ok/> is a successful test point. This is the only mandatory
+part of the line.
+
+Note that unlike the Directives below, C<ok> and C<not ok> are
+case-sensitive.
+
+=item * Test number
+
+TAP expects the C<ok> or C<not ok> to be followed by a test point
+number. If there is no number the harness must maintain
+its own counter until the script supplies test numbers again. So
+the following test output
+
+ 1..6
+ not ok
+ ok
+ not ok
+ ok
+ ok
+
+has five tests. The sixth is missing. Test::Harness will generate
+
+ FAILED tests 1, 3, 6
+ Failed 3/6 tests, 50.00% okay
+
+=item * Description
+
+Any text after the test number but before a C<#> is the description of
+the test point.
+
+ ok 42 this is the description of the test
+
+Descriptions should not begin with a digit so that they are not confused
+with the test point number.
+
+The harness may do whatever it wants with the description.
+
+=item * Directive
+
+The test point may include a directive, following a hash on the
+test line. There are currently two directives allowed: C<TODO> and
+C<SKIP>. These are discussed below.
+
+=back
+
+To summarize:
+
+=over 4
+
+=item * ok/not ok (required)
+
+=item * Test number (recommended)
+
+=item * Description (recommended)
+
+=item * Directive (only when necessary)
+
+=back
+
+=head1 DIRECTIVES
+
+Directives are special notes that follow a C<#> on the test line.
+Only two are currently defined: C<TODO> and C<SKIP>. Note that
+these two keywords are not case-sensitive.
+
+=head2 TODO tests
+
+If the directive starts with C<# TODO>, the test is counted as a
+todo test, and the text after C<TODO> is the explanation.
+
+ not ok 13 # TODO bend space and time
+
+Note that if the TODO has an explanation it must be separated from
+C<TODO> by a space.
+
+These tests represent a feature to be implemented or a bug to be fixed
+and act as something of an executable "things to do" list. They are
+B<not> expected to succeed. Should a todo test point begin succeeding,
+the harness should report it as a bonus. This indicates that whatever
+you were supposed to do has been done and you should promote this to a
+normal test point.
+
+=head2 Skipping tests
+
+If the directive starts with C<# SKIP>, the test is counted as having
+been skipped. If the whole test file succeeds, the count of skipped
+tests is included in the generated output. The harness should report
+the text after C< # SKIP\S*\s+> as a reason for skipping.
+
+ ok 23 # skip Insufficient flogiston pressure.
+
+Similarly, one can include an explanation in a plan line,
+emitted if the test file is skipped completely:
+
+ 1..0 # Skipped: WWW::Mechanize not installed
+
+=head1 OTHER LINES
+
+=head2 Bail out!
+
+As an emergency measure a test script can decide that further tests
+are useless (e.g. missing dependencies) and testing should stop
+immediately. In that case the test script prints the magic words
+
+ Bail out!
+
+to standard output. Any message after these words must be displayed
+by the interpreter as the reason why testing must be stopped, as
+in
+
+ Bail out! MySQL is not running.
+
+=head2 Diagnostics
+
+Additional information may be put into the testing output on separate
+lines. Diagnostic lines should begin with a C<#>, which the harness must
+ignore, at least as far as analyzing the test results. The harness is
+free, however, to display the diagnostics. Typically diagnostics are
+used to provide information about the environment in which test file is
+running, or to delineate a group of tests.
+
+ ...
+ ok 18 - Closed database connection
+ # End of database section.
+ # This starts the network part of the test.
+ # Daemon started on port 2112
+ ok 19 - Opened socket
+ ...
+ ok 47 - Closed socket
+ # End of network tests
+
+=head2 Anything else
+
+Any output line that is not a plan, a test line or a diagnostic is
+incorrect. How a harness handles the incorrect line is undefined.
+Test::Harness silently ignores incorrect lines, but will become more
+stringent in the future.
+
+=head1 EXAMPLES
+
+All names, places, and events depicted in any example are wholly
+fictitious and bear no resemblance to, connection with, or relation to any
+real entity. Any such similarity is purely coincidental, unintentional,
+and unintended.
+
+=head2 Common with explanation
+
+The following TAP listing declares that six tests follow as well as
+provides handy feedback as to what the test is about to do. All six
+tests pass.
+
+ 1..6
+ #
+ # Create a new Board and Tile, then place
+ # the Tile onto the board.
+ #
+ ok 1 - The object isa Board
+ ok 2 - Board size is zero
+ ok 3 - The object isa Tile
+ ok 4 - Get possible places to put the Tile
+ ok 5 - Placing the tile produces no error
+ ok 6 - Board size is 1
+
+=head2 Unknown amount and failures
+
+This hypothetical test program ensures that a handful of servers are
+online and network-accessible. Because it retrieves the hypothetical
+servers from a database, it doesn't know exactly how many servers it
+will need to ping. Thus, the test count is declared at the bottom after
+all the test points have run. Also, two of the tests fail.
+
+ ok 1 - retrieving servers from the database
+ # need to ping 6 servers
+ ok 2 - pinged diamond
+ ok 3 - pinged ruby
+ not ok 4 - pinged saphire
+ ok 5 - pinged onyx
+ not ok 6 - pinged quartz
+ ok 7 - pinged gold
+ 1..7
+
+=head2 Giving up
+
+This listing reports that a pile of tests are going to be run. However,
+the first test fails, reportedly because a connection to the database
+could not be established. The program decided that continuing was
+pointless and exited.
+
+ 1..573
+ not ok 1 - database handle
+ Bail out! Couldn't connect to database.
+
+=head2 Skipping a few
+
+The following listing plans on running 5 tests. However, our program
+decided to not run tests 2 thru 5 at all. To properly report this,
+the tests are marked as being skipped.
+
+ 1..5
+ ok 1 - approved operating system
+ # $^0 is solaris
+ ok 2 - # SKIP no /sys directory
+ ok 3 - # SKIP no /sys directory
+ ok 4 - # SKIP no /sys directory
+ ok 5 - # SKIP no /sys directory
+
+=head2 Skipping everything
+
+This listing shows that the entire listing is a skip. No tests were run.
+
+ 1..0 # skip because English-to-French translator isn't installed
+
+=head2 Got spare tuits?
+
+The following example reports that four tests are run and the last two
+tests failed. However, because the failing tests are marked as things
+to do later, they are considered successes. Thus, a harness should report
+this entire listing as a success.
+
+ 1..4
+ ok 1 - Creating test program
+ ok 2 - Test program runs, no error
+ not ok 3 - infinite loop # TODO halting problem unsolved
+ not ok 4 - infinite loop 2 # TODO halting problem unsolved
+
+=head2 Creative liberties
+
+This listing shows an alternate output where the test numbers aren't
+provided. The test also reports the state of a ficticious board game in
+diagnostic form. Finally, the test count is reported at the end.
+
+ ok - created Board
+ ok
+ ok
+ ok
+ ok
+ ok
+ ok
+ ok
+ # +------+------+------+------+
+ # | |16G | |05C |
+ # | |G N C | |C C G |
+ # | | G | | C +|
+ # +------+------+------+------+
+ # |10C |01G | |03C |
+ # |R N G |G A G | |C C C |
+ # | R | G | | C +|
+ # +------+------+------+------+
+ # | |01G |17C |00C |
+ # | |G A G |G N R |R N R |
+ # | | G | R | G |
+ # +------+------+------+------+
+ ok - board has 7 tiles + starter tile
+ 1..9
+
+=head1 AUTHORS
+
+Andy Lester, based on the original Test::Harness documentation by Michael Schwern.
+
+=head1 ACKNOWLEDGEMENTS
+
+Thanks to
+Pete Krawczyk,
+Paul Johnson,
+Ian Langworth
+and Nik Clayton
+for help and contributions on this document.
+
+The basis for the TAP format was created by Larry Wall in the
+original test script for Perl 1. Tim Bunce and Andreas Koenig
+developed it further with their modifications to Test::Harness.
+
+=head1 COPYRIGHT
+
+Copyright 2003-2005 by
+Michael G Schwern C<< <schwern@pobox.com> >>,
+Andy Lester C<< <andy@petdance.com> >>.
+
+This program is free software; you can redistribute it and/or
+modify it under the same terms as Perl itself.
+
+See L<http://www.perl.com/perl/misc/Artistic.html>.
+
+=cut
diff --git a/gnu/usr.bin/perl/lib/Test/Harness/t/from_line.t b/gnu/usr.bin/perl/lib/Test/Harness/t/from_line.t
new file mode 100755
index 00000000000..b9e726449f1
--- /dev/null
+++ b/gnu/usr.bin/perl/lib/Test/Harness/t/from_line.t
@@ -0,0 +1,64 @@
+#!perl -Tw
+
+BEGIN {
+ if ( $ENV{PERL_CORE} ) {
+ chdir 't';
+ @INC = '../lib';
+ }
+ else {
+ unshift @INC, 't/lib';
+ }
+}
+
+use strict;
+use Test::More tests => 23;
+
+BEGIN {
+ use_ok( 'Test::Harness::Point' );
+}
+
+BASIC_OK: {
+ my $line = "ok 14 - Blah blah";
+ my $point = Test::Harness::Point->from_test_line( $line );
+ isa_ok( $point, 'Test::Harness::Point', 'BASIC_OK' );
+ is( $point->number, 14 );
+ ok( $point->ok );
+ is( $point->description, 'Blah blah' );
+}
+
+BASIC_NOT_OK: {
+ my $line = "not ok 267 Yada";
+ my $point = Test::Harness::Point->from_test_line( $line );
+ isa_ok( $point, 'Test::Harness::Point', 'BASIC_NOT_OK' );
+ is( $point->number, 267 );
+ ok( !$point->ok );
+ is( $point->description, 'Yada' );
+}
+
+CRAP: {
+ my $point = Test::Harness::Point->from_test_line( 'ok14 - Blah' );
+ ok( !defined $point, 'CRAP 1' );
+
+ $point = Test::Harness::Point->from_test_line( 'notok 14' );
+ ok( !defined $point, 'CRAP 2' );
+}
+
+PARSE_TODO: {
+ my $point = Test::Harness::Point->from_test_line( 'not ok 14 - Calculate sqrt(-1) # TODO Still too rational' );
+ isa_ok( $point, 'Test::Harness::Point', 'PARSE_TODO' );
+ is( $point->description, 'Calculate sqrt(-1)' );
+ is( $point->directive_type, 'todo' );
+ is( $point->directive_reason, 'Still too rational' );
+ ok( !$point->is_skip );
+ ok( $point->is_todo );
+}
+
+PARSE_SKIP: {
+ my $point = Test::Harness::Point->from_test_line( 'ok 14 # skip Not on bucket #6' );
+ isa_ok( $point, 'Test::Harness::Point', 'PARSE_SKIP' );
+ is( $point->description, '' );
+ is( $point->directive_type, 'skip' );
+ is( $point->directive_reason, 'Not on bucket #6' );
+ ok( $point->is_skip );
+ ok( !$point->is_todo );
+}
diff --git a/gnu/usr.bin/perl/lib/Test/Harness/t/harness.t b/gnu/usr.bin/perl/lib/Test/Harness/t/harness.t
new file mode 100755
index 00000000000..33b8d247958
--- /dev/null
+++ b/gnu/usr.bin/perl/lib/Test/Harness/t/harness.t
@@ -0,0 +1,22 @@
+#!/usr/bin/perl -Tw
+
+BEGIN {
+ if ( $ENV{PERL_CORE} ) {
+ chdir 't';
+ @INC = ('../lib', 'lib');
+ }
+ else {
+ unshift @INC, 't/lib';
+ }
+}
+
+use strict;
+
+use Test::More tests => 2;
+
+BEGIN {
+ use_ok( 'Test::Harness' );
+}
+
+my $strap = Test::Harness->strap;
+isa_ok( $strap, 'Test::Harness::Straps' );
diff --git a/gnu/usr.bin/perl/lib/Test/Harness/t/point-parse.t b/gnu/usr.bin/perl/lib/Test/Harness/t/point-parse.t
new file mode 100755
index 00000000000..e4de491a77f
--- /dev/null
+++ b/gnu/usr.bin/perl/lib/Test/Harness/t/point-parse.t
@@ -0,0 +1,106 @@
+#!/usr/bin/perl -w
+
+BEGIN {
+ if ( $ENV{PERL_CORE} ) {
+ chdir 't';
+ @INC = ('../lib', 'lib');
+ }
+ else {
+ unshift @INC, 't/lib';
+ }
+}
+
+use strict;
+
+use Test::More tests => 52;
+
+BEGIN {
+ use_ok( 'Test::Harness::Point' );
+ use_ok( 'Test::Harness::Straps' );
+}
+
+my $strap = Test::Harness::Straps->new;
+isa_ok( $strap, 'Test::Harness::Straps', 'new()' );
+
+
+my $testlines = {
+ 'not ok' => {
+ ok => 0
+ },
+ 'not ok # TODO' => {
+ ok => 0,
+ reason => '',
+ type => 'todo'
+ },
+ 'not ok 1' => {
+ number => 1,
+ ok => 0
+ },
+ 'not ok 11 - this is \\# all the name # skip this is not' => {
+ description => 'this is \\# all the name',
+ number => 11,
+ ok => 0,
+ reason => 'this is not',
+ type => 'skip'
+ },
+ 'not ok 23 # TODO world peace' => {
+ number => 23,
+ ok => 0,
+ reason => 'world peace',
+ type => 'todo'
+ },
+ 'not ok 42 - universal constant' => {
+ description => 'universal constant',
+ number => 42,
+ ok => 0
+ },
+ ok => {
+ ok => 1
+ },
+ 'ok # skip' => {
+ ok => 1,
+ type => 'skip'
+ },
+ 'ok 1' => {
+ number => 1,
+ ok => 1
+ },
+ 'ok 1066 - and all that' => {
+ description => 'and all that',
+ number => 1066,
+ ok => 1
+ },
+ 'ok 11 - have life # TODO get a life' => {
+ description => 'have life',
+ number => 11,
+ ok => 1,
+ reason => 'get a life',
+ type => 'todo'
+ },
+ 'ok 2938' => {
+ number => 2938,
+ ok => 1
+ },
+ 'ok 42 - _is_header() is a header \'1..192 todo 4 2 13 192 \\# Skip skip skip because' => {
+ description => '_is_header() is a header \'1..192 todo 4 2 13 192 \\# Skip skip skip because',
+ number => 42,
+ ok => 1
+ }
+};
+my @untests = (
+ ' ok',
+ 'not',
+ 'okay 23',
+ );
+
+for my $line ( sort keys %$testlines ) {
+ my $point = Test::Harness::Point->from_test_line( $line );
+ isa_ok( $point, 'Test::Harness::Point' );
+
+ my $fields = $testlines->{$line};
+ for my $property ( sort keys %$fields ) {
+ my $value = $fields->{$property};
+ is( eval "\$point->$property", $value, "$property on $line" );
+ # Perls pre-5.6 can't handle $point->$property, and must be eval()d
+ }
+}
diff --git a/gnu/usr.bin/perl/lib/Test/Harness/t/point.t b/gnu/usr.bin/perl/lib/Test/Harness/t/point.t
new file mode 100755
index 00000000000..1c8cf9da737
--- /dev/null
+++ b/gnu/usr.bin/perl/lib/Test/Harness/t/point.t
@@ -0,0 +1,58 @@
+#!perl -Tw
+
+BEGIN {
+ if ( $ENV{PERL_CORE} ) {
+ chdir 't';
+ @INC = ('../lib', 'lib');
+ }
+ else {
+ unshift @INC, 't/lib';
+ }
+}
+
+use strict;
+use Test::More tests => 11;
+
+BEGIN {
+ use_ok( 'Test::Harness::Point' );
+}
+
+my $point = Test::Harness::Point->new;
+isa_ok( $point, 'Test::Harness::Point' );
+ok( !$point->ok, "Should start out not OK" );
+
+$point->set_ok( 1 );
+ok( $point->ok, "should have turned to true" );
+
+$point->set_ok( 0 );
+ok( !$point->ok, "should have turned false" );
+
+$point->set_number( 2112 );
+is( $point->number, 2112, "Number is set" );
+
+$point->set_description( "Blah blah" );
+is( $point->description, "Blah blah", "Description set" );
+
+$point->set_directive( "Go now" );
+is( $point->directive, "Go now", "Directive set" );
+
+$point->add_diagnostic( "# Line 1" );
+$point->add_diagnostic( "# Line two" );
+$point->add_diagnostic( "# Third line" );
+my @diags = $point->diagnostics;
+is( @diags, 3, "Three lines" );
+is_deeply(
+ \@diags,
+ [ "# Line 1", "# Line two", "# Third line" ],
+ "Diagnostics in list context"
+);
+
+my $diagstr = <<EOF;
+# Line 1
+# Line two
+# Third line
+EOF
+
+chomp $diagstr;
+my $string_diagnostics = $point->diagnostics;
+is( $string_diagnostics, $diagstr, "Diagnostics in scalar context" );
diff --git a/gnu/usr.bin/perl/lib/Test/Harness/t/prove-globbing.t b/gnu/usr.bin/perl/lib/Test/Harness/t/prove-globbing.t
new file mode 100755
index 00000000000..e0f3c864a64
--- /dev/null
+++ b/gnu/usr.bin/perl/lib/Test/Harness/t/prove-globbing.t
@@ -0,0 +1,31 @@
+BEGIN {
+ if( $ENV{PERL_CORE} ) {
+ chdir 't';
+ @INC = ('../lib', 'lib');
+ }
+ else {
+ unshift @INC, 't/lib';
+ }
+}
+
+use strict;
+use File::Spec;
+use Test::More;
+plan skip_all => "Not adapted to perl core" if $ENV{PERL_CORE};
+plan skip_all => "Not installing prove" if -e "t/SKIP-PROVE";
+
+plan tests => 1;
+
+my $prove = File::Spec->catfile( File::Spec->curdir, "blib", "script", "prove" );
+my $tests = File::Spec->catfile( 't', 'prove*.t' );
+
+GLOBBAGE: {
+ my @actual = sort qx/$prove --dry $tests/;
+ chomp @actual;
+
+ my @expected = (
+ File::Spec->catfile( "t", "prove-globbing.t" ),
+ File::Spec->catfile( "t", "prove-switches.t" ),
+ );
+ is_deeply( \@actual, \@expected, "Expands the wildcards" );
+}
diff --git a/gnu/usr.bin/perl/lib/Test/Harness/t/version.t b/gnu/usr.bin/perl/lib/Test/Harness/t/version.t
new file mode 100755
index 00000000000..c67bcedf27c
--- /dev/null
+++ b/gnu/usr.bin/perl/lib/Test/Harness/t/version.t
@@ -0,0 +1,23 @@
+#!/usr/bin/perl -Tw
+
+BEGIN {
+ if( $ENV{PERL_CORE} ) {
+ chdir 't';
+ @INC = ('../lib', 'lib');
+ }
+ else {
+ unshift @INC, 't/lib';
+ }
+}
+
+use strict;
+
+use Test::More tests => 3;
+
+BEGIN {
+ use_ok('Test::Harness');
+}
+
+my $ver = $ENV{HARNESS_VERSION} or die "HARNESS_VERSION not set";
+like( $ver, qr/^2.\d\d(_\d\d)?$/, "Version is proper format" );
+is( $ver, $Test::Harness::VERSION );
diff --git a/gnu/usr.bin/perl/lib/Test/Simple/TODO b/gnu/usr.bin/perl/lib/Test/Simple/TODO
new file mode 100644
index 00000000000..6bf12862791
--- /dev/null
+++ b/gnu/usr.bin/perl/lib/Test/Simple/TODO
@@ -0,0 +1,20 @@
+See https://rt.cpan.org/NoAuth/Bugs.html?Dist=Test-Simple plus here's
+a few more I haven't put in RT yet.
+
+ Finish (start?) Test::FAQ
+
+ Expand the Test::Tutorial
+
+ $^C exception control?
+
+ Document that everything goes through Test::Builder->ok()
+
+ Add test name to diagnostic output
+
+ Add diag() to details().
+
+ Add at_end() callback?
+
+ Combine all *output methods into outputs().
+
+ Change *output* to return the old FH, not the new one when setting.
diff --git a/gnu/usr.bin/perl/lib/Test/Simple/t/00test_harness_check.t b/gnu/usr.bin/perl/lib/Test/Simple/t/00test_harness_check.t
new file mode 100755
index 00000000000..d50c8b5ffd5
--- /dev/null
+++ b/gnu/usr.bin/perl/lib/Test/Simple/t/00test_harness_check.t
@@ -0,0 +1,26 @@
+#!/usr/bin/perl -w
+
+# A test to make sure the new Test::Harness was installed properly.
+
+use Test::More;
+plan tests => 1;
+
+my $TH_Version = 2.03;
+
+require Test::Harness;
+unless( cmp_ok( $Test::Harness::VERSION, '>', $TH_Version, "T::H version" ) ) {
+ diag <<INSTRUCTIONS;
+
+Test::Simple/More/Builder has features which depend on a version of
+Test::Harness greater than $TH_Version. You have $Test::Harness::VERSION.
+Please install a new version from CPAN.
+
+If you've already tried to upgrade Test::Harness and still get this
+message, the new version may be "shadowed" by the old. Check the
+output of Test::Harness's "make install" for "## Differing version"
+messages. You can delete the old version by running
+"make install UNINST=1".
+
+INSTRUCTIONS
+}
+
diff --git a/gnu/usr.bin/perl/lib/Test/Simple/t/bail_out.t b/gnu/usr.bin/perl/lib/Test/Simple/t/bail_out.t
new file mode 100755
index 00000000000..c05d0283d1c
--- /dev/null
+++ b/gnu/usr.bin/perl/lib/Test/Simple/t/bail_out.t
@@ -0,0 +1,49 @@
+#!/usr/bin/perl -w
+
+BEGIN {
+ if( $ENV{PERL_CORE} ) {
+ chdir 't';
+ @INC = ('../lib', 'lib');
+ }
+ else {
+ unshift @INC, 't/lib';
+ }
+}
+
+my $Exit_Code;
+BEGIN {
+ *CORE::GLOBAL::exit = sub { $Exit_Code = shift; };
+}
+
+
+use Test::Builder;
+use Test::More;
+use TieOut;
+
+my $output = tie *FAKEOUT, 'TieOut';
+my $TB = Test::More->builder;
+$TB->output(\*FAKEOUT);
+
+my $Test = Test::Builder->create;
+$Test->level(0);
+
+if( $] >= 5.005 ) {
+ $Test->plan(tests => 2);
+}
+else {
+ $Test->plan(skip_all =>
+ 'CORE::GLOBAL::exit, introduced in 5.005, is needed for testing');
+}
+
+
+plan tests => 4;
+
+BAIL_OUT("ROCKS FALL! EVERYONE DIES!");
+
+
+$Test->is_eq( $output->read, <<'OUT' );
+1..4
+Bail out! ROCKS FALL! EVERYONE DIES!
+OUT
+
+$Test->is_eq( $Exit_Code, 255 );
diff --git a/gnu/usr.bin/perl/lib/Test/Simple/t/circular_data.t b/gnu/usr.bin/perl/lib/Test/Simple/t/circular_data.t
new file mode 100755
index 00000000000..2fd819e1f4a
--- /dev/null
+++ b/gnu/usr.bin/perl/lib/Test/Simple/t/circular_data.t
@@ -0,0 +1,71 @@
+#!/usr/bin/perl -w
+
+# Test is_deeply and friends with circular data structures [rt.cpan.org 7289]
+
+BEGIN {
+ if( $ENV{PERL_CORE} ) {
+ chdir 't';
+ @INC = ('../lib', 'lib');
+ }
+ else {
+ unshift @INC, 't/lib';
+ }
+}
+
+use strict;
+use Test::More tests => 11;
+
+my $a1 = [ 1, 2, 3 ];
+push @$a1, $a1;
+my $a2 = [ 1, 2, 3 ];
+push @$a2, $a2;
+
+is_deeply $a1, $a2;
+ok( eq_array ($a1, $a2) );
+ok( eq_set ($a1, $a2) );
+
+my $h1 = { 1=>1, 2=>2, 3=>3 };
+$h1->{4} = $h1;
+my $h2 = { 1=>1, 2=>2, 3=>3 };
+$h2->{4} = $h2;
+
+is_deeply $h1, $h2;
+ok( eq_hash ($h1, $h2) );
+
+my ($r, $s);
+
+$r = \$r;
+$s = \$s;
+
+ok( eq_array ([$s], [$r]) );
+
+
+{
+ # Classic set of circular scalar refs.
+ my($a,$b,$c);
+ $a = \$b;
+ $b = \$c;
+ $c = \$a;
+
+ my($d,$e,$f);
+ $d = \$e;
+ $e = \$f;
+ $f = \$d;
+
+ is_deeply( $a, $a );
+ is_deeply( $a, $d );
+}
+
+
+{
+ # rt.cpan.org 11623
+ # Make sure the circular ref checks don't get confused by a reference
+ # which is simply repeating.
+ my $a = {};
+ my $b = {};
+ my $c = {};
+
+ is_deeply( [$a, $a], [$b, $c] );
+ is_deeply( { foo => $a, bar => $a }, { foo => $b, bar => $c } );
+ is_deeply( [\$a, \$a], [\$b, \$c] );
+}
diff --git a/gnu/usr.bin/perl/lib/Test/Simple/t/create.t b/gnu/usr.bin/perl/lib/Test/Simple/t/create.t
new file mode 100755
index 00000000000..5600d6830a5
--- /dev/null
+++ b/gnu/usr.bin/perl/lib/Test/Simple/t/create.t
@@ -0,0 +1,45 @@
+#!/usr/bin/perl -w
+
+#!perl -w
+
+BEGIN {
+ if( $ENV{PERL_CORE} ) {
+ chdir 't';
+ @INC = ('../lib', 'lib');
+ }
+ else {
+ unshift @INC, 't/lib';
+ }
+}
+
+use Test::More tests => 8;
+use Test::Builder;
+
+my $more_tb = Test::More->builder;
+isa_ok $more_tb, 'Test::Builder';
+
+is $more_tb, Test::More->builder, 'create does not interfere with ->builder';
+is $more_tb, Test::Builder->new, ' does not interfere with ->new';
+
+{
+ my $new_tb = Test::Builder->create;
+
+ isa_ok $new_tb, 'Test::Builder';
+ isnt $more_tb, $new_tb, 'Test::Builder->create makes a new object';
+
+ $new_tb->output("some_file");
+ END { 1 while unlink "some_file" }
+
+ $new_tb->plan(tests => 1);
+ $new_tb->ok(1);
+}
+
+pass("Changing output() of new TB doesn't interfere with singleton");
+
+ok open FILE, "some_file";
+is join("", <FILE>), <<OUT;
+1..1
+ok 1
+OUT
+
+close FILE;
diff --git a/gnu/usr.bin/perl/lib/Test/Simple/t/eq_set.t b/gnu/usr.bin/perl/lib/Test/Simple/t/eq_set.t
new file mode 100755
index 00000000000..fbdc52db1fa
--- /dev/null
+++ b/gnu/usr.bin/perl/lib/Test/Simple/t/eq_set.t
@@ -0,0 +1,34 @@
+#!perl -w
+
+BEGIN {
+ if( $ENV{PERL_CORE} ) {
+ chdir 't';
+ @INC = ('../lib', 'lib');
+ }
+ else {
+ unshift @INC, 't/lib';
+ }
+}
+chdir 't';
+
+use strict;
+use Test::More;
+
+plan tests => 4;
+
+# RT 3747
+ok( eq_set([1, 2, [3]], [[3], 1, 2]) );
+ok( eq_set([1,2,[3]], [1,[3],2]) );
+
+# bugs.perl.org 36354
+my $ref = \2;
+ok( eq_set( [$ref, "$ref", "$ref", $ref],
+ ["$ref", $ref, $ref, "$ref"]
+ ) );
+
+TODO: {
+ local $TODO = q[eq_set() doesn't really handle references];
+
+ ok( eq_set( [\1, \2, \3], [\2, \3, \1] ) );
+}
+
diff --git a/gnu/usr.bin/perl/lib/Test/Simple/t/extra_one.t b/gnu/usr.bin/perl/lib/Test/Simple/t/extra_one.t
new file mode 100755
index 00000000000..30830d3e378
--- /dev/null
+++ b/gnu/usr.bin/perl/lib/Test/Simple/t/extra_one.t
@@ -0,0 +1,52 @@
+#!/usr/bin/perl -w
+
+BEGIN {
+ if( $ENV{PERL_CORE} ) {
+ chdir 't';
+ @INC = ('../lib', 'lib');
+ }
+ else {
+ unshift @INC, 't/lib';
+ }
+}
+
+use strict;
+
+require Test::Simple::Catch;
+my($out, $err) = Test::Simple::Catch::caught();
+
+# Can't use Test.pm, that's a 5.005 thing.
+package My::Test;
+
+# This has to be a require or else the END block below runs before
+# Test::Builder's own and the ending diagnostics don't come out right.
+require Test::Builder;
+my $TB = Test::Builder->create;
+$TB->plan(tests => 2);
+
+sub is { $TB->is_eq(@_) }
+
+
+package main;
+
+require Test::Simple;
+Test::Simple->import(tests => 1);
+ok(1);
+ok(1);
+ok(1);
+
+END {
+ My::Test::is($$out, <<OUT);
+1..1
+ok 1
+ok 2
+ok 3
+OUT
+
+ My::Test::is($$err, <<ERR);
+# Looks like you planned 1 test but ran 2 extra.
+ERR
+
+ # Prevent Test::Simple from existing with non-zero
+ exit 0;
+}
diff --git a/gnu/usr.bin/perl/lib/Test/Simple/t/fail_one.t b/gnu/usr.bin/perl/lib/Test/Simple/t/fail_one.t
new file mode 100755
index 00000000000..fe226247410
--- /dev/null
+++ b/gnu/usr.bin/perl/lib/Test/Simple/t/fail_one.t
@@ -0,0 +1,62 @@
+#!/usr/bin/perl -w
+
+BEGIN {
+ if( $ENV{PERL_CORE} ) {
+ chdir 't';
+ @INC = ('../lib', 'lib');
+ }
+ else {
+ unshift @INC, 't/lib';
+ }
+}
+
+use strict;
+
+require Test::Simple::Catch;
+my($out, $err) = Test::Simple::Catch::caught();
+local $ENV{HARNESS_ACTIVE} = 0;
+
+
+# Can't use Test.pm, that's a 5.005 thing.
+package My::Test;
+
+print "1..2\n";
+
+my $test_num = 1;
+# Utility testing functions.
+sub ok ($;$) {
+ my($test, $name) = @_;
+ my $ok = '';
+ $ok .= "not " unless $test;
+ $ok .= "ok $test_num";
+ $ok .= " - $name" if defined $name;
+ $ok .= "\n";
+ print $ok;
+ $test_num++;
+
+ return $test ? 1 : 0;
+}
+
+
+package main;
+
+require Test::Simple;
+Test::Simple->import(tests => 1);
+
+#line 45
+ok(0);
+
+END {
+ My::Test::ok($$out eq <<OUT);
+1..1
+not ok 1
+OUT
+
+ My::Test::ok($$err eq <<ERR) || print $$err;
+# Failed test in $0 at line 45.
+# Looks like you failed 1 test of 1.
+ERR
+
+ # Prevent Test::Simple from existing with non-zero
+ exit 0;
+}
diff --git a/gnu/usr.bin/perl/lib/Test/Simple/t/harness_active.t b/gnu/usr.bin/perl/lib/Test/Simple/t/harness_active.t
new file mode 100755
index 00000000000..d3ae56a8282
--- /dev/null
+++ b/gnu/usr.bin/perl/lib/Test/Simple/t/harness_active.t
@@ -0,0 +1,88 @@
+#!perl -w
+
+BEGIN {
+ if( $ENV{PERL_CORE} ) {
+ chdir 't';
+ @INC = ('../lib', 'lib');
+ }
+ else {
+ unshift @INC, 't/lib';
+ }
+}
+
+use strict;
+
+use Test::Simple::Catch;
+my($out, $err) = Test::Simple::Catch::caught();
+
+
+# Can't use Test.pm, that's a 5.005 thing.
+package My::Test;
+
+# This has to be a require or else the END block below runs before
+# Test::Builder's own and the ending diagnostics don't come out right.
+require Test::Builder;
+my $TB = Test::Builder->create;
+$TB->plan(tests => 4);
+
+# Utility testing functions.
+sub ok ($;$) {
+ return $TB->ok(@_);
+}
+
+
+sub main::err_ok ($) {
+ my($expect) = @_;
+ my $got = $err->read;
+
+ return $TB->is_eq( $got, $expect );
+}
+
+
+package main;
+
+require Test::More;
+Test::More->import(tests => 4);
+Test::More->builder->no_ending(1);
+
+{
+ local $ENV{HARNESS_ACTIVE} = 0;
+
+#line 62
+ fail( "this fails" );
+ err_ok( <<ERR );
+# Failed test 'this fails'
+# in $0 at line 62.
+ERR
+
+#line 72
+ is( 1, 0 );
+ err_ok( <<ERR );
+# Failed test in $0 at line 72.
+# got: '1'
+# expected: '0'
+ERR
+}
+
+{
+ local $ENV{HARNESS_ACTIVE} = 1;
+
+#line 71
+ fail( "this fails" );
+ err_ok( <<ERR );
+
+# Failed test 'this fails'
+# in $0 at line 71.
+ERR
+
+
+#line 84
+ is( 1, 0 );
+ err_ok( <<ERR );
+
+# Failed test in $0 at line 84.
+# got: '1'
+# expected: '0'
+ERR
+
+}
diff --git a/gnu/usr.bin/perl/lib/Test/Simple/t/is_deeply_fail.t b/gnu/usr.bin/perl/lib/Test/Simple/t/is_deeply_fail.t
new file mode 100755
index 00000000000..efbbddd7b2e
--- /dev/null
+++ b/gnu/usr.bin/perl/lib/Test/Simple/t/is_deeply_fail.t
@@ -0,0 +1,373 @@
+#!/usr/bin/perl -w
+
+BEGIN {
+ if( $ENV{PERL_CORE} ) {
+ chdir 't';
+ @INC = ('../lib', 'lib');
+ }
+ else {
+ unshift @INC, 't/lib';
+ }
+}
+
+use strict;
+
+use Test::Builder;
+require Test::Simple::Catch;
+my($out, $err) = Test::Simple::Catch::caught();
+Test::Builder->new->no_header(1);
+Test::Builder->new->no_ending(1);
+local $ENV{HARNESS_ACTIVE} = 0;
+
+
+# Can't use Test.pm, that's a 5.005 thing.
+package main;
+
+
+my $TB = Test::Builder->create;
+$TB->plan(tests => 73);
+
+# Utility testing functions.
+sub ok ($;$) {
+ return $TB->ok(@_);
+}
+
+sub is ($$;$) {
+ my($this, $that, $name) = @_;
+
+ my $ok = $TB->is_eq($$this, $that, $name);
+
+ $$this = '';
+
+ return $ok;
+}
+
+sub like ($$;$) {
+ my($this, $regex, $name) = @_;
+ $regex = "/$regex/" if !ref $regex and $regex !~ m{^/.*/$}s;
+
+ my $ok = $TB->like($$this, $regex, $name);
+
+ $$this = '';
+
+ return $ok;
+}
+
+
+require Test::More;
+Test::More->import(tests => 11, import => ['is_deeply']);
+
+my $Filename = quotemeta $0;
+
+#line 68
+ok !is_deeply('foo', 'bar', 'plain strings');
+is( $out, "not ok 1 - plain strings\n", 'plain strings' );
+is( $err, <<ERR, ' right diagnostic' );
+# Failed test 'plain strings'
+# in $0 at line 68.
+# got: 'foo'
+# expected: 'bar'
+ERR
+
+
+#line 78
+ok !is_deeply({}, [], 'different types');
+is( $out, "not ok 2 - different types\n", 'different types' );
+like( $err, <<ERR, ' right diagnostic' );
+# Failed test 'different types'
+# in $Filename at line 78.
+# Structures begin differing at:
+# \\\$got = HASH\\(0x[0-9a-f]+\\)
+# \\\$expected = ARRAY\\(0x[0-9a-f]+\\)
+ERR
+
+#line 88
+ok !is_deeply({ this => 42 }, { this => 43 }, 'hashes with different values');
+is( $out, "not ok 3 - hashes with different values\n",
+ 'hashes with different values' );
+is( $err, <<ERR, ' right diagnostic' );
+# Failed test 'hashes with different values'
+# in $0 at line 88.
+# Structures begin differing at:
+# \$got->{this} = '42'
+# \$expected->{this} = '43'
+ERR
+
+#line 99
+ok !is_deeply({ that => 42 }, { this => 42 }, 'hashes with different keys');
+is( $out, "not ok 4 - hashes with different keys\n",
+ 'hashes with different keys' );
+is( $err, <<ERR, ' right diagnostic' );
+# Failed test 'hashes with different keys'
+# in $0 at line 99.
+# Structures begin differing at:
+# \$got->{this} = Does not exist
+# \$expected->{this} = '42'
+ERR
+
+#line 110
+ok !is_deeply([1..9], [1..10], 'arrays of different length');
+is( $out, "not ok 5 - arrays of different length\n",
+ 'arrays of different length' );
+is( $err, <<ERR, ' right diagnostic' );
+# Failed test 'arrays of different length'
+# in $0 at line 110.
+# Structures begin differing at:
+# \$got->[9] = Does not exist
+# \$expected->[9] = '10'
+ERR
+
+#line 121
+ok !is_deeply([undef, undef], [undef], 'arrays of undefs' );
+is( $out, "not ok 6 - arrays of undefs\n", 'arrays of undefs' );
+is( $err, <<ERR, ' right diagnostic' );
+# Failed test 'arrays of undefs'
+# in $0 at line 121.
+# Structures begin differing at:
+# \$got->[1] = undef
+# \$expected->[1] = Does not exist
+ERR
+
+#line 131
+ok !is_deeply({ foo => undef }, {}, 'hashes of undefs' );
+is( $out, "not ok 7 - hashes of undefs\n", 'hashes of undefs' );
+is( $err, <<ERR, ' right diagnostic' );
+# Failed test 'hashes of undefs'
+# in $0 at line 131.
+# Structures begin differing at:
+# \$got->{foo} = undef
+# \$expected->{foo} = Does not exist
+ERR
+
+#line 141
+ok !is_deeply(\42, \23, 'scalar refs');
+is( $out, "not ok 8 - scalar refs\n", 'scalar refs' );
+is( $err, <<ERR, ' right diagnostic' );
+# Failed test 'scalar refs'
+# in $0 at line 141.
+# Structures begin differing at:
+# \${ \$got} = '42'
+# \${\$expected} = '23'
+ERR
+
+#line 151
+ok !is_deeply([], \23, 'mixed scalar and array refs');
+is( $out, "not ok 9 - mixed scalar and array refs\n",
+ 'mixed scalar and array refs' );
+like( $err, <<ERR, ' right diagnostic' );
+# Failed test 'mixed scalar and array refs'
+# in $Filename at line 151.
+# Structures begin differing at:
+# \\\$got = ARRAY\\(0x[0-9a-f]+\\)
+# \\\$expected = SCALAR\\(0x[0-9a-f]+\\)
+ERR
+
+
+my($a1, $a2, $a3);
+$a1 = \$a2; $a2 = \$a3;
+$a3 = 42;
+
+my($b1, $b2, $b3);
+$b1 = \$b2; $b2 = \$b3;
+$b3 = 23;
+
+#line 173
+ok !is_deeply($a1, $b1, 'deep scalar refs');
+is( $out, "not ok 10 - deep scalar refs\n", 'deep scalar refs' );
+is( $err, <<ERR, ' right diagnostic' );
+# Failed test 'deep scalar refs'
+# in $0 at line 173.
+# Structures begin differing at:
+# \${\${ \$got}} = '42'
+# \${\${\$expected}} = '23'
+ERR
+
+# I don't know how to properly display this structure.
+# $a2 = { foo => \$a3 };
+# $b2 = { foo => \$b3 };
+# is_deeply([$a1], [$b1], 'deep mixed scalar refs');
+
+my $foo = {
+ this => [1..10],
+ that => { up => "down", left => "right" },
+ };
+
+my $bar = {
+ this => [1..10],
+ that => { up => "down", left => "right", foo => 42 },
+ };
+
+#line 198
+ok !is_deeply( $foo, $bar, 'deep structures' );
+ok( @Test::More::Data_Stack == 0, '@Data_Stack not holding onto things' );
+is( $out, "not ok 11 - deep structures\n", 'deep structures' );
+is( $err, <<ERR, ' right diagnostic' );
+# Failed test 'deep structures'
+# in $0 at line 198.
+# Structures begin differing at:
+# \$got->{that}{foo} = Does not exist
+# \$expected->{that}{foo} = '42'
+ERR
+
+
+#line 221
+my @tests = ([],
+ [qw(42)],
+ [qw(42 23), qw(42 23)]
+ );
+
+foreach my $test (@tests) {
+ my $num_args = @$test;
+
+ my $warning;
+ local $SIG{__WARN__} = sub { $warning .= join '', @_; };
+ ok !is_deeply(@$test);
+
+ like \$warning,
+ "/^is_deeply\\(\\) takes two or three args, you gave $num_args\.\n/";
+}
+
+
+#line 240
+# [rt.cpan.org 6837]
+ok !is_deeply([{Foo => undef}],[{Foo => ""}]), 'undef != ""';
+ok( @Test::More::Data_Stack == 0, '@Data_Stack not holding onto things' );
+
+
+#line 258
+# [rt.cpan.org 7031]
+my $a = [];
+ok !is_deeply($a, $a.''), "don't compare refs like strings";
+ok !is_deeply([$a], [$a.'']), " even deep inside";
+
+
+#line 265
+# [rt.cpan.org 7030]
+ok !is_deeply( {}, {key => []} ), '[] could match non-existent values';
+ok !is_deeply( [], [[]] );
+
+
+#line 273
+$$err = $$out = '';
+ok !is_deeply( [\'a', 'b'], [\'a', 'c'] );
+is( $out, "not ok 20\n", 'scalar refs in an array' );
+is( $err, <<ERR, ' right diagnostic' );
+# Failed test in $0 at line 274.
+# Structures begin differing at:
+# \$got->[1] = 'b'
+# \$expected->[1] = 'c'
+ERR
+
+
+#line 285
+my $ref = \23;
+ok !is_deeply( 23, $ref );
+is( $out, "not ok 21\n", 'scalar vs ref' );
+is( $err, <<ERR, ' right diagnostic');
+# Failed test in $0 at line 286.
+# Structures begin differing at:
+# \$got = '23'
+# \$expected = $ref
+ERR
+
+#line 296
+ok !is_deeply( $ref, 23 );
+is( $out, "not ok 22\n", 'ref vs scalar' );
+is( $err, <<ERR, ' right diagnostic');
+# Failed test in $0 at line 296.
+# Structures begin differing at:
+# \$got = $ref
+# \$expected = '23'
+ERR
+
+#line 306
+ok !is_deeply( undef, [] );
+is( $out, "not ok 23\n", 'is_deeply and undef [RT 9441]' );
+like( $err, <<ERR, ' right diagnostic' );
+# Failed test in $Filename at line 306\\.
+# Structures begin differing at:
+# \\\$got = undef
+# \\\$expected = ARRAY\\(0x[0-9a-f]+\\)
+ERR
+
+
+# rt.cpan.org 8865
+{
+ my $array = [];
+ my $hash = {};
+
+#line 321
+ ok !is_deeply( $array, $hash );
+ is( $out, "not ok 24\n", 'is_deeply and different reference types' );
+ is( $err, <<ERR, ' right diagnostic' );
+# Failed test in $0 at line 321.
+# Structures begin differing at:
+# \$got = $array
+# \$expected = $hash
+ERR
+
+#line 332
+ ok !is_deeply( [$array], [$hash] );
+ is( $out, "not ok 25\n", 'nested different ref types' );
+ is( $err, <<ERR, ' right diagnostic' );
+# Failed test in $0 at line 332.
+# Structures begin differing at:
+# \$got->[0] = $array
+# \$expected->[0] = $hash
+ERR
+
+
+ if( eval { require overload } ) {
+ my $foo = bless [], "Foo";
+ my $bar = bless {}, "Bar";
+
+ {
+ package Bar;
+ "overload"->import(q[""] => sub { "wibble" });
+ }
+
+#line 353
+ ok !is_deeply( [$foo], [$bar] );
+ is( $out, "not ok 26\n", 'string overloaded refs respected in diag' );
+ is( $err, <<ERR, ' right diagnostic' );
+# Failed test in $0 at line 353.
+# Structures begin differing at:
+# \$got->[0] = $foo
+# \$expected->[0] = 'wibble'
+ERR
+
+ }
+ else {
+ $TB->skip("Needs overload.pm") for 1..3;
+ }
+}
+
+
+# rt.cpan.org 14746
+{
+# line 349
+ ok !is_deeply( sub {"foo"}, sub {"bar"} ), 'function refs';
+ is( $out, "not ok 27\n" );
+ like( $err, <<ERR, ' right diagnostic' );
+# Failed test in $Filename at line 349.
+# Structures begin differing at:
+# \\\$got = CODE\\(0x[0-9a-f]+\\)
+# \\\$expected = CODE\\(0x[0-9a-f]+\\)
+ERR
+
+
+ use Symbol;
+ my $glob1 = gensym;
+ my $glob2 = gensym;
+
+#line 357
+ ok !is_deeply( $glob1, $glob2 ), 'typeglobs';
+ is( $out, "not ok 28\n" );
+ like( $err, <<ERR, ' right diagnostic' );
+# Failed test in $0 at line 357.
+# Structures begin differing at:
+# \\\$got = GLOB\\(0x[0-9a-f]+\\)
+# \\\$expected = GLOB\\(0x[0-9a-f]+\\)
+ERR
+
+}
diff --git a/gnu/usr.bin/perl/lib/Test/Simple/t/is_fh.t b/gnu/usr.bin/perl/lib/Test/Simple/t/is_fh.t
new file mode 100755
index 00000000000..a1c201c2cc8
--- /dev/null
+++ b/gnu/usr.bin/perl/lib/Test/Simple/t/is_fh.t
@@ -0,0 +1,29 @@
+#!/usr/bin/perl -w
+
+BEGIN {
+ if( $ENV{PERL_CORE} ) {
+ chdir 't';
+ @INC = ('../lib', 'lib');
+ }
+ else {
+ unshift @INC, 't/lib';
+ }
+}
+
+use strict;
+use Test::More tests => 8;
+use TieOut;
+
+ok( !Test::Builder::_is_fh("foo"), 'string is not a filehandle' );
+ok( !Test::Builder::_is_fh(''), 'empty string' );
+ok( !Test::Builder::_is_fh(undef), 'undef' );
+
+ok( open(FILE, '>foo') );
+END { close FILE; unlink 'foo' }
+
+ok( Test::Builder::_is_fh(*FILE) );
+ok( Test::Builder::_is_fh(\*FILE) );
+ok( Test::Builder::_is_fh(*FILE{IO}) );
+
+tie *OUT, 'TieOut';
+ok( Test::Builder::_is_fh(*OUT) );
diff --git a/gnu/usr.bin/perl/lib/Test/Simple/t/no_diag.t b/gnu/usr.bin/perl/lib/Test/Simple/t/no_diag.t
new file mode 100755
index 00000000000..6fa538a82ea
--- /dev/null
+++ b/gnu/usr.bin/perl/lib/Test/Simple/t/no_diag.t
@@ -0,0 +1,8 @@
+#!/usr/bin/perl -w
+
+use Test::More 'no_diag', tests => 2;
+
+pass('foo');
+diag('This should not be displayed');
+
+is(Test::More->builder->no_diag, 1);
diff --git a/gnu/usr.bin/perl/lib/Test/Simple/t/overload.t b/gnu/usr.bin/perl/lib/Test/Simple/t/overload.t
new file mode 100755
index 00000000000..e0e70d42296
--- /dev/null
+++ b/gnu/usr.bin/perl/lib/Test/Simple/t/overload.t
@@ -0,0 +1,68 @@
+#!/usr/bin/perl -w
+
+BEGIN {
+ if( $ENV{PERL_CORE} ) {
+ chdir 't';
+ @INC = ('../lib', 'lib');
+ }
+ else {
+ unshift @INC, 't/lib';
+ }
+}
+
+use strict;
+use Test::More;
+
+BEGIN {
+ if( !eval "require overload" ) {
+ plan skip_all => "needs overload.pm";
+ }
+ else {
+ plan tests => 13;
+ }
+}
+
+
+package Overloaded;
+
+use overload
+ q{""} => sub { $_[0]->{string} },
+ q{0+} => sub { $_[0]->{num} };
+
+sub new {
+ my $class = shift;
+ bless { string => shift, num => shift }, $class;
+}
+
+
+package main;
+
+my $obj = Overloaded->new('foo', 42);
+isa_ok $obj, 'Overloaded';
+
+is $obj, 'foo', 'is() with string overloading';
+cmp_ok $obj, 'eq', 'foo', 'cmp_ok() ...';
+cmp_ok $obj, '==', 42, 'cmp_ok() with number overloading';
+
+is_deeply [$obj], ['foo'], 'is_deeply with string overloading';
+ok eq_array([$obj], ['foo']), 'eq_array ...';
+ok eq_hash({foo => $obj}, {foo => 'foo'}), 'eq_hash ...';
+
+# rt.cpan.org 13506
+is_deeply $obj, 'foo', 'is_deeply with string overloading at the top';
+
+Test::More->builder->is_num($obj, 42);
+Test::More->builder->is_eq ($obj, "foo");
+
+
+{
+ # rt.cpan.org 14675
+ package TestPackage;
+ use overload q{""} => sub { ::fail("This should not be called") };
+
+ package Foo;
+ ::is_deeply(['TestPackage'], ['TestPackage']);
+ ::is_deeply({'TestPackage' => 'TestPackage'},
+ {'TestPackage' => 'TestPackage'});
+ ::is_deeply('TestPackage', 'TestPackage');
+}
diff --git a/gnu/usr.bin/perl/lib/Test/Simple/t/overload_threads.t b/gnu/usr.bin/perl/lib/Test/Simple/t/overload_threads.t
new file mode 100755
index 00000000000..8ba78c1d9e7
--- /dev/null
+++ b/gnu/usr.bin/perl/lib/Test/Simple/t/overload_threads.t
@@ -0,0 +1,69 @@
+#!perl -w
+
+BEGIN {
+ if( $ENV{PERL_CORE} ) {
+ chdir 't';
+ @INC = ('../lib', 'lib');
+ }
+ else {
+ unshift @INC, 't/lib';
+ }
+}
+chdir 't';
+
+BEGIN {
+ # There was a bug with overloaded objects and threads.
+ # See rt.cpan.org 4218
+ eval { require threads; 'threads'->import; 1; };
+}
+
+use Test::More;
+
+BEGIN {
+ if( !eval "require overload" ) {
+ plan skip_all => "needs overload.pm";
+ }
+ else {
+ plan tests => 5;
+ }
+}
+
+
+package Overloaded;
+
+use overload
+ q{""} => sub { $_[0]->{string} };
+
+sub new {
+ my $class = shift;
+ bless { string => shift }, $class;
+}
+
+
+package main;
+
+my $warnings = '';
+local $SIG{__WARN__} = sub { $warnings = join '', @_ };
+
+# overloaded object as name
+my $obj = Overloaded->new('foo');
+ok( 1, $obj );
+
+# overloaded object which returns undef as name
+my $undef = Overloaded->new(undef);
+pass( $undef );
+
+is( $warnings, '' );
+
+
+TODO: {
+ my $obj = Overloaded->new('not really todo, testing overloaded reason');
+ local $TODO = $obj;
+ fail("Just checking todo as an overloaded value");
+}
+
+
+SKIP: {
+ my $obj = Overloaded->new('not really skipped, testing overloaded reason');
+ skip $obj, 1;
+}
diff --git a/gnu/usr.bin/perl/lib/Test/Simple/t/plan_bad.t b/gnu/usr.bin/perl/lib/Test/Simple/t/plan_bad.t
new file mode 100755
index 00000000000..cc1295a8f9a
--- /dev/null
+++ b/gnu/usr.bin/perl/lib/Test/Simple/t/plan_bad.t
@@ -0,0 +1,64 @@
+#!/usr/bin/perl -w
+
+BEGIN {
+ if( $ENV{PERL_CORE} ) {
+ chdir 't';
+ @INC = '../lib';
+ }
+}
+
+
+# Can't use Test.pm, that's a 5.005 thing.
+package My::Test;
+
+print "1..7\n";
+
+my $test_num = 1;
+# Utility testing functions.
+sub ok ($;$) {
+ my($test, $name) = @_;
+ my $ok = '';
+ $ok .= "not " unless $test;
+ $ok .= "ok $test_num";
+ $ok .= " - $name" if defined $name;
+ $ok .= "\n";
+ print $ok;
+ $test_num++;
+
+ return $test;
+}
+
+
+sub is ($$;$) {
+ my($this, $that, $name) = @_;
+ my $test = $this eq $that;
+ my $ok = '';
+ $ok .= "not " unless $test;
+ $ok .= "ok $test_num";
+ $ok .= " - $name" if defined $name;
+ $ok .= "\n";
+ print $ok;
+
+ unless( $test ) {
+ print "# got \n$this";
+ print "# expected \n$that";
+ }
+ $test_num++;
+
+ return $test;
+}
+
+
+use Test::More import => ['plan'];
+
+ok !eval { plan tests => 'no_plan'; };
+is $@, "Number of tests must be a postive integer. You gave it 'no_plan'.\n";
+
+my $foo = [];
+my @foo = ($foo, 2, 3);
+ok !eval { plan tests => @foo };
+is $@, "Number of tests must be a postive integer. You gave it '$foo'.\n";
+
+ok !eval { plan tests => 0 };
+ok !eval { plan tests => -1 };
+ok !eval { plan tests => '' };
diff --git a/gnu/usr.bin/perl/lib/Test/Simple/t/plan_shouldnt_import.t b/gnu/usr.bin/perl/lib/Test/Simple/t/plan_shouldnt_import.t
new file mode 100755
index 00000000000..b6eb0642446
--- /dev/null
+++ b/gnu/usr.bin/perl/lib/Test/Simple/t/plan_shouldnt_import.t
@@ -0,0 +1,16 @@
+#!/usr/bin/perl -w
+
+# plan() used to export functions by mistake [rt.cpan.org 8385]
+
+BEGIN {
+ if( $ENV{PERL_CORE} ) {
+ chdir 't';
+ @INC = '../lib';
+ }
+}
+
+
+use Test::More ();
+Test::More::plan(tests => 1);
+
+Test::More::ok( !__PACKAGE__->can('ok'), 'plan should not export' );
diff --git a/gnu/usr.bin/perl/lib/Test/Simple/t/require_ok.t b/gnu/usr.bin/perl/lib/Test/Simple/t/require_ok.t
new file mode 100755
index 00000000000..463a007599c
--- /dev/null
+++ b/gnu/usr.bin/perl/lib/Test/Simple/t/require_ok.t
@@ -0,0 +1,29 @@
+#!/usr/bin/perl -w
+
+BEGIN {
+ if( $ENV{PERL_CORE} ) {
+ chdir 't';
+ @INC = ('../lib', 'lib');
+ }
+ else {
+ unshift @INC, 't/lib';
+ }
+}
+
+use strict;
+use Test::More tests => 8;
+
+# Symbol and Class::Struct are both non-XS core modules back to 5.004.
+# So they'll always be there.
+require_ok("Symbol");
+ok( $INC{'Symbol.pm'}, "require_ok MODULE" );
+
+require_ok("Class/Struct.pm");
+ok( $INC{'Class/Struct.pm'}, "require_ok FILE" );
+
+# Its more trouble than its worth to try to create these filepaths to test
+# through require_ok() so we cheat and use the internal logic.
+ok !Test::More::_is_module_name('foo:bar');
+ok !Test::More::_is_module_name('foo/bar.thing');
+ok !Test::More::_is_module_name('Foo::Bar::');
+ok Test::More::_is_module_name('V');
diff --git a/gnu/usr.bin/perl/lib/Test/Simple/t/reset.t b/gnu/usr.bin/perl/lib/Test/Simple/t/reset.t
new file mode 100755
index 00000000000..320fd86a53f
--- /dev/null
+++ b/gnu/usr.bin/perl/lib/Test/Simple/t/reset.t
@@ -0,0 +1,84 @@
+#!/usr/bin/perl -w
+
+# Test Test::Builder->reset;
+
+BEGIN {
+ if( $ENV{PERL_CORE} ) {
+ chdir 't';
+ @INC = ('../lib', 'lib');
+ }
+ else {
+ unshift @INC, 't/lib';
+ }
+}
+chdir 't';
+
+
+use Test::Builder;
+my $tb = Test::Builder->new;
+$tb->plan(tests => 14);
+$tb->level(0);
+
+# Alter the state of Test::Builder as much as possible.
+$tb->ok(1, "Running a test to alter TB's state");
+
+my $tmpfile = 'foo.tmp';
+
+$tb->output($tmpfile);
+$tb->failure_output($tmpfile);
+$tb->todo_output($tmpfile);
+END { 1 while unlink $tmpfile }
+
+# This won't print since we just sent output off to oblivion.
+$tb->ok(0, "And a failure for fun");
+
+$Test::Builder::Level = 3;
+
+$tb->exported_to('Foofer');
+
+$tb->use_numbers(0);
+$tb->no_header(1);
+$tb->no_ending(1);
+
+
+# Now reset it.
+$tb->reset;
+
+my $test_num = 2; # since we already printed 1
+# Utility testing functions.
+sub ok ($;$) {
+ my($test, $name) = @_;
+ my $ok = '';
+ $ok .= "not " unless $test;
+ $ok .= "ok $test_num";
+ $ok .= " - $name" if defined $name;
+ $ok .= "\n";
+ print $ok;
+ $test_num++;
+
+ return $test;
+}
+
+
+ok( !defined $tb->exported_to, 'exported_to' );
+ok( $tb->expected_tests == 0, 'expected_tests' );
+ok( $tb->level == 1, 'level' );
+ok( $tb->use_numbers == 1, 'use_numbers' );
+ok( $tb->no_header == 0, 'no_header' );
+ok( $tb->no_ending == 0, 'no_ending' );
+ok( fileno $tb->output == fileno *Test::Builder::TESTOUT,
+ 'output' );
+ok( fileno $tb->failure_output == fileno *Test::Builder::TESTERR,
+ 'failure_output' );
+ok( fileno $tb->todo_output == fileno *Test::Builder::TESTOUT,
+ 'todo_output' );
+ok( $tb->current_test == 0, 'current_test' );
+ok( $tb->summary == 0, 'summary' );
+ok( $tb->details == 0, 'details' );
+
+$tb->no_ending(1);
+$tb->no_header(1);
+$tb->plan(tests => 14);
+$tb->current_test(13);
+$tb->level(0);
+$tb->ok(1, 'final test to make sure output was reset');
diff --git a/gnu/usr.bin/perl/lib/Test/Simple/t/sort_bug.t b/gnu/usr.bin/perl/lib/Test/Simple/t/sort_bug.t
new file mode 100755
index 00000000000..aad806c279a
--- /dev/null
+++ b/gnu/usr.bin/perl/lib/Test/Simple/t/sort_bug.t
@@ -0,0 +1,64 @@
+#!/usr/bin/perl -w
+
+# Test to see if we've worked around some wacky sort/threading bug
+# See [rt.cpan.org 6782]
+
+BEGIN {
+ if( $ENV{PERL_CORE} ) {
+ chdir 't';
+ @INC = ('../lib', 'lib');
+ }
+ else {
+ unshift @INC, 't/lib';
+ }
+}
+
+use strict;
+use Config;
+
+BEGIN {
+ unless ( $] >= 5.008 && $Config{'useithreads'} &&
+ eval { require threads; 'threads'->import; 1; })
+ {
+ print "1..0 # Skip: no threads\n";
+ exit 0;
+ }
+}
+use Test::More;
+
+# Passes with $nthreads = 1 and with eq_set().
+# Passes with $nthreads = 2 and with eq_array().
+# Fails with $nthreads = 2 and with eq_set().
+my $Num_Threads = 2;
+
+plan tests => $Num_Threads;
+
+
+sub do_one_thread {
+ my $kid = shift;
+ my @list = ( 'x', 'yy', 'zzz', 'a', 'bb', 'ccc', 'aaaaa', 'z',
+ 'hello', 's', 'thisisalongname', '1', '2', '3',
+ 'abc', 'xyz', '1234567890', 'm', 'n', 'p' );
+ my @list2 = @list;
+ print "# kid $kid before eq_set\n";
+
+ for my $j (1..99) {
+ # With eq_set, either crashes or panics
+ eq_set(\@list, \@list2);
+ eq_array(\@list, \@list2);
+ }
+ print "# kid $kid exit\n";
+ return 42;
+}
+
+my @kids = ();
+for my $i (1..$Num_Threads) {
+ my $t = threads->new(\&do_one_thread, $i);
+ print "# parent $$: continue\n";
+ push(@kids, $t);
+}
+for my $t (@kids) {
+ print "# parent $$: waiting for join\n";
+ my $rc = $t->join();
+ cmp_ok( $rc, '==', 42, "threads exit status is $rc" );
+}
diff --git a/gnu/usr.bin/perl/lib/Test/Simple/t/tbt_01basic.t b/gnu/usr.bin/perl/lib/Test/Simple/t/tbt_01basic.t
new file mode 100755
index 00000000000..77d10814b79
--- /dev/null
+++ b/gnu/usr.bin/perl/lib/Test/Simple/t/tbt_01basic.t
@@ -0,0 +1,62 @@
+#!/usr/bin/perl
+
+BEGIN {
+ if( $ENV{PERL_CORE} ) {
+ chdir 't';
+ @INC = '../lib';
+ }
+}
+
+use Test::Builder::Tester tests => 9;
+use Test::More;
+
+ok(1,"This is a basic test");
+
+test_out("ok 1 - tested");
+ok(1,"tested");
+test_test("captured okay on basic");
+
+test_out("ok 1 - tested");
+ok(1,"tested");
+test_test("captured okay again without changing number");
+
+ok(1,"test unrelated to Test::Builder::Tester");
+
+test_out("ok 1 - one");
+test_out("ok 2 - two");
+ok(1,"one");
+ok(2,"two");
+test_test("multiple tests");
+
+test_out("not ok 1 - should fail");
+test_err("# Failed test ($0 at line 35)");
+test_err("# got: 'foo'");
+test_err("# expected: 'bar'");
+is("foo","bar","should fail");
+test_test("testing failing");
+
+
+test_out("not ok 1");
+test_out("not ok 2");
+test_fail(+2);
+test_fail(+1);
+fail(); fail();
+test_test("testing failing on the same line with no name");
+
+
+test_out("not ok 1 - name");
+test_out("not ok 2 - name");
+test_fail(+2);
+test_fail(+1);
+fail("name"); fail("name");
+test_test("testing failing on the same line with the same name");
+
+
+test_out("not ok 1 - name # TODO Something");
+test_err("# Failed (TODO) test ($0 at line 59)");
+TODO: {
+ local $TODO = "Something";
+ fail("name");
+}
+test_test("testing failing with todo");
+
diff --git a/gnu/usr.bin/perl/lib/Test/Simple/t/tbt_02fhrestore.t b/gnu/usr.bin/perl/lib/Test/Simple/t/tbt_02fhrestore.t
new file mode 100755
index 00000000000..a9cf36edf2a
--- /dev/null
+++ b/gnu/usr.bin/perl/lib/Test/Simple/t/tbt_02fhrestore.t
@@ -0,0 +1,65 @@
+#!/usr/bin/perl
+
+BEGIN {
+ if( $ENV{PERL_CORE} ) {
+ chdir 't';
+ @INC = '../lib';
+ }
+}
+
+use Test::Builder::Tester tests => 4;
+use Test::More;
+use Symbol;
+
+# create temporary file handles that still point indirectly
+# to the right place
+
+my $orig_o = gensym;
+my $orig_t = gensym;
+my $orig_f = gensym;
+
+tie *$orig_o, "My::Passthru", \*STDOUT;
+tie *$orig_t, "My::Passthru", \*STDERR;
+tie *$orig_f, "My::Passthru", \*STDERR;
+
+# redirect the file handles to somewhere else for a mo
+
+use Test::Builder;
+my $t = Test::Builder->new();
+
+$t->output($orig_o);
+$t->failure_output($orig_f);
+$t->todo_output($orig_t);
+
+# run a test
+
+test_out("ok 1 - tested");
+ok(1,"tested");
+test_test("standard test okay");
+
+# now check that they were restored okay
+
+ok($orig_o == $t->output(), "output file reconnected");
+ok($orig_t == $t->todo_output(), "todo output file reconnected");
+ok($orig_f == $t->failure_output(), "failure output file reconnected");
+
+#####################################################################
+
+package My::Passthru;
+
+sub PRINT {
+ my $self = shift;
+ my $handle = $self->[0];
+ print $handle @_;
+}
+
+sub TIEHANDLE {
+ my $class = shift;
+ my $self = [shift()];
+ return bless $self, $class;
+}
+
+sub READ {}
+sub READLINE {}
+sub GETC {}
+sub FILENO {}
diff --git a/gnu/usr.bin/perl/lib/Test/Simple/t/tbt_03die.t b/gnu/usr.bin/perl/lib/Test/Simple/t/tbt_03die.t
new file mode 100755
index 00000000000..ad40ac49fe8
--- /dev/null
+++ b/gnu/usr.bin/perl/lib/Test/Simple/t/tbt_03die.t
@@ -0,0 +1,19 @@
+#!/usr/bin/perl
+
+BEGIN {
+ if( $ENV{PERL_CORE} ) {
+ chdir 't';
+ @INC = '../lib';
+ }
+}
+
+use Test::Builder::Tester tests => 1;
+use Test::More;
+
+eval {
+ test_test("foo");
+};
+like($@,
+ "/Not testing\. You must declare output with a test function first\./",
+ "dies correctly on error");
+
diff --git a/gnu/usr.bin/perl/lib/Test/Simple/t/tbt_04line_num.t b/gnu/usr.bin/perl/lib/Test/Simple/t/tbt_04line_num.t
new file mode 100755
index 00000000000..0155cda661b
--- /dev/null
+++ b/gnu/usr.bin/perl/lib/Test/Simple/t/tbt_04line_num.t
@@ -0,0 +1,15 @@
+#!/usr/bin/perl
+
+BEGIN {
+ if( $ENV{PERL_CORE} ) {
+ chdir 't';
+ @INC = '../lib';
+ }
+}
+
+use Test::More tests => 3;
+use Test::Builder::Tester;
+
+is(line_num(),13,"normal line num");
+is(line_num(-1),13,"line number minus one");
+is(line_num(+2),17,"line number plus two");
diff --git a/gnu/usr.bin/perl/lib/Test/Simple/t/tbt_05faildiag.t b/gnu/usr.bin/perl/lib/Test/Simple/t/tbt_05faildiag.t
new file mode 100755
index 00000000000..0ae875a3211
--- /dev/null
+++ b/gnu/usr.bin/perl/lib/Test/Simple/t/tbt_05faildiag.t
@@ -0,0 +1,51 @@
+#!/usr/bin/perl
+
+BEGIN {
+ if( $ENV{PERL_CORE} ) {
+ chdir 't';
+ @INC = '../lib';
+ }
+}
+
+use Test::Builder::Tester tests => 5;
+use Test::More;
+
+# test_fail
+
+test_out("not ok 1 - one");
+test_fail(+1);
+ok(0,"one");
+
+test_out("not ok 2 - two");
+test_fail(+2);
+
+ok(0,"two");
+
+test_test("test fail");
+
+test_fail(+2);
+test_out("not ok 1 - one");
+ok(0,"one");
+test_test("test_fail first");
+
+# test_diag
+
+use Test::Builder;
+my $test = new Test::Builder;
+
+test_diag("this is a test string","so is this");
+$test->diag("this is a test string\n", "so is this\n");
+test_test("test diag");
+
+test_diag("this is a test string","so is this");
+$test->diag("this is a test string\n");
+$test->diag("so is this\n");
+test_test("test diag multi line");
+
+test_diag("this is a test string");
+test_diag("so is this");
+$test->diag("this is a test string\n");
+$test->diag("so is this\n");
+test_test("test diag multiple");
+
+
diff --git a/gnu/usr.bin/perl/lib/Test/Simple/t/tbt_06errormess.t b/gnu/usr.bin/perl/lib/Test/Simple/t/tbt_06errormess.t
new file mode 100755
index 00000000000..e7625ea8184
--- /dev/null
+++ b/gnu/usr.bin/perl/lib/Test/Simple/t/tbt_06errormess.t
@@ -0,0 +1,127 @@
+#!/usr/bin/perl -w
+
+BEGIN {
+ if( $ENV{PERL_CORE} ) {
+ chdir 't';
+ @INC = '../lib';
+ }
+}
+
+use Test::More tests => 8;
+use Symbol;
+use Test::Builder;
+use Test::Builder::Tester;
+
+use strict;
+
+# argh! now we need to test the thing we're testing. Basically we need
+# to pretty much reimplement the whole code again. This is very
+# annoying but can't be avoided. And onwards with the cut and paste
+
+# My brain is melting. My brain is melting. ETOOMANYLAYERSOFTESTING
+
+# create some private file handles
+my $output_handle = gensym;
+my $error_handle = gensym;
+
+# and tie them to this package
+my $out = tie *$output_handle, "Test::Tester::Tie", "STDOUT";
+my $err = tie *$error_handle, "Test::Tester::Tie", "STDERR";
+
+# ooooh, use the test suite
+my $t = Test::Builder->new;
+
+# remember the testing outputs
+my $original_output_handle;
+my $original_failure_handle;
+my $original_todo_handle;
+my $original_harness_env;
+my $testing_num;
+
+sub start_testing
+{
+ # remember what the handles were set to
+ $original_output_handle = $t->output();
+ $original_failure_handle = $t->failure_output();
+ $original_todo_handle = $t->todo_output();
+ $original_harness_env = $ENV{HARNESS_ACTIVE};
+
+ # switch out to our own handles
+ $t->output($output_handle);
+ $t->failure_output($error_handle);
+ $t->todo_output($error_handle);
+
+ $ENV{HARNESS_ACTIVE} = 0;
+
+ # clear the expected list
+ $out->reset();
+ $err->reset();
+
+ # remeber that we're testing
+ $testing_num = $t->current_test;
+ $t->current_test(0);
+}
+
+# each test test is actually two tests. This is bad and wrong
+# but makes blood come out of my ears if I don't at least simplify
+# it a little this way
+
+sub my_test_test
+{
+ my $text = shift;
+ local $^W = 0;
+
+ # reset the outputs
+ $t->output($original_output_handle);
+ $t->failure_output($original_failure_handle);
+ $t->todo_output($original_todo_handle);
+ $ENV{HARNESS_ACTIVE} = $original_harness_env;
+
+ # reset the number of tests
+ $t->current_test($testing_num);
+
+ # check we got the same values
+ my $got;
+ my $wanted;
+
+ # stdout
+ $t->ok($out->check, "STDOUT $text");
+
+ # stderr
+ $t->ok($err->check, "STDERR $text");
+}
+
+####################################################################
+# Meta meta tests
+####################################################################
+
+# this is a quick test to check the hack that I've just implemented
+# actually does a cut down version of Test::Builder::Tester
+
+start_testing();
+$out->expect("ok 1 - foo");
+pass("foo");
+my_test_test("basic meta meta test");
+
+start_testing();
+$out->expect("not ok 1 - foo");
+$err->expect("# Failed test ($0 at line ".line_num(+1).")");
+fail("foo");
+my_test_test("basic meta meta test 2");
+
+start_testing();
+$out->expect("ok 1 - bar");
+test_out("ok 1 - foo");
+pass("foo");
+test_test("bar");
+my_test_test("meta meta test with tbt");
+
+start_testing();
+$out->expect("ok 1 - bar");
+test_out("not ok 1 - foo");
+test_err("# Failed test ($0 at line ".line_num(+1).")");
+fail("foo");
+test_test("bar");
+my_test_test("meta meta test with tbt2 ");
+
+####################################################################
diff --git a/gnu/usr.bin/perl/lib/Test/Simple/t/tbt_07args.t b/gnu/usr.bin/perl/lib/Test/Simple/t/tbt_07args.t
new file mode 100755
index 00000000000..8e802348b03
--- /dev/null
+++ b/gnu/usr.bin/perl/lib/Test/Simple/t/tbt_07args.t
@@ -0,0 +1,222 @@
+#!/usr/bin/perl -w
+
+BEGIN {
+ if( $ENV{PERL_CORE} ) {
+ chdir 't';
+ @INC = '../lib';
+ }
+}
+
+use Test::More tests => 18;
+use Symbol;
+use Test::Builder;
+use Test::Builder::Tester;
+
+use strict;
+
+# argh! now we need to test the thing we're testing. Basically we need
+# to pretty much reimplement the whole code again. This is very
+# annoying but can't be avoided. And onwards with the cut and paste
+
+# My brain is melting. My brain is melting. ETOOMANYLAYERSOFTESTING
+
+# create some private file handles
+my $output_handle = gensym;
+my $error_handle = gensym;
+
+# and tie them to this package
+my $out = tie *$output_handle, "Test::Tester::Tie", "STDOUT";
+my $err = tie *$error_handle, "Test::Tester::Tie", "STDERR";
+
+# ooooh, use the test suite
+my $t = Test::Builder->new;
+
+# remember the testing outputs
+my $original_output_handle;
+my $original_failure_handle;
+my $original_todo_handle;
+my $testing_num;
+my $original_harness_env;
+
+sub start_testing
+{
+ # remember what the handles were set to
+ $original_output_handle = $t->output();
+ $original_failure_handle = $t->failure_output();
+ $original_todo_handle = $t->todo_output();
+ $original_harness_env = $ENV{HARNESS_ACTIVE};
+
+ # switch out to our own handles
+ $t->output($output_handle);
+ $t->failure_output($error_handle);
+ $t->todo_output($error_handle);
+
+ $ENV{HARNESS_ACTIVE} = 0;
+
+ # clear the expected list
+ $out->reset();
+ $err->reset();
+
+ # remeber that we're testing
+ $testing_num = $t->current_test;
+ $t->current_test(0);
+}
+
+# each test test is actually two tests. This is bad and wrong
+# but makes blood come out of my ears if I don't at least simplify
+# it a little this way
+
+sub my_test_test
+{
+ my $text = shift;
+ local $^W = 0;
+
+ # reset the outputs
+ $t->output($original_output_handle);
+ $t->failure_output($original_failure_handle);
+ $t->todo_output($original_todo_handle);
+ $ENV{HARNESS_ACTIVE} = $original_harness_env;
+
+ # reset the number of tests
+ $t->current_test($testing_num);
+
+ # check we got the same values
+ my $got;
+ my $wanted;
+
+ # stdout
+ $t->ok($out->check, "STDOUT $text");
+
+ # stderr
+ $t->ok($err->check, "STDERR $text");
+}
+
+####################################################################
+# Meta meta tests
+####################################################################
+
+# this is a quick test to check the hack that I've just implemented
+# actually does a cut down version of Test::Builder::Tester
+
+start_testing();
+$out->expect("ok 1 - foo");
+pass("foo");
+my_test_test("basic meta meta test");
+
+start_testing();
+$out->expect("not ok 1 - foo");
+$err->expect("# Failed test ($0 at line ".line_num(+1).")");
+fail("foo");
+my_test_test("basic meta meta test 2");
+
+start_testing();
+$out->expect("ok 1 - bar");
+test_out("ok 1 - foo");
+pass("foo");
+test_test("bar");
+my_test_test("meta meta test with tbt");
+
+start_testing();
+$out->expect("ok 1 - bar");
+test_out("not ok 1 - foo");
+test_err("# Failed test ($0 at line ".line_num(+1).")");
+fail("foo");
+test_test("bar");
+my_test_test("meta meta test with tbt2 ");
+
+####################################################################
+# Actual meta tests
+####################################################################
+
+# set up the outer wrapper again
+start_testing();
+$out->expect("ok 1 - bar");
+
+# set up what the inner wrapper expects
+test_out("ok 1 - foo");
+
+# the actual test function that we are testing
+ok("1","foo");
+
+# test the name
+test_test(name => "bar");
+
+# check that passed
+my_test_test("meta test name");
+
+####################################################################
+
+# set up the outer wrapper again
+start_testing();
+$out->expect("ok 1 - bar");
+
+# set up what the inner wrapper expects
+test_out("ok 1 - foo");
+
+# the actual test function that we are testing
+ok("1","foo");
+
+# test the name
+test_test(title => "bar");
+
+# check that passed
+my_test_test("meta test title");
+
+####################################################################
+
+# set up the outer wrapper again
+start_testing();
+$out->expect("ok 1 - bar");
+
+# set up what the inner wrapper expects
+test_out("ok 1 - foo");
+
+# the actual test function that we are testing
+ok("1","foo");
+
+# test the name
+test_test(label => "bar");
+
+# check that passed
+my_test_test("meta test title");
+
+####################################################################
+
+# set up the outer wrapper again
+start_testing();
+$out->expect("ok 1 - bar");
+
+# set up what the inner wrapper expects
+test_out("not ok 1 - foo this is wrong");
+test_fail(+3);
+
+# the actual test function that we are testing
+ok("0","foo");
+
+# test that we got what we expect, ignoring our is wrong
+test_test(skip_out => 1, name => "bar");
+
+# check that that passed
+my_test_test("meta test skip_out");
+
+####################################################################
+
+# set up the outer wrapper again
+start_testing();
+$out->expect("ok 1 - bar");
+
+# set up what the inner wrapper expects
+test_out("not ok 1 - foo");
+test_err("this is wrong");
+
+# the actual test function that we are testing
+ok("0","foo");
+
+# test that we got what we expect, ignoring err is wrong
+test_test(skip_err => 1, name => "bar");
+
+# diagnostics failing out
+# check that that passed
+my_test_test("meta test skip_err");
+
+####################################################################
diff --git a/gnu/usr.bin/perl/lib/Test/Simple/t/thread_taint.t b/gnu/usr.bin/perl/lib/Test/Simple/t/thread_taint.t
new file mode 100755
index 00000000000..d547e6d8c4e
--- /dev/null
+++ b/gnu/usr.bin/perl/lib/Test/Simple/t/thread_taint.t
@@ -0,0 +1,5 @@
+#!/usr/bin/perl -w
+
+use Test::More tests => 1;
+
+ok( !$INC{'threads.pm'}, 'Loading Test::More does not load threads.pm' ); \ No newline at end of file
diff --git a/gnu/usr.bin/perl/lib/Text/ParseWords/taint.t b/gnu/usr.bin/perl/lib/Text/ParseWords/taint.t
new file mode 100755
index 00000000000..27f6de50cb5
--- /dev/null
+++ b/gnu/usr.bin/perl/lib/Text/ParseWords/taint.t
@@ -0,0 +1,23 @@
+#!./perl -Tw
+# [perl #33173] shellwords.pl and tainting
+
+BEGIN {
+ chdir 't' if -d 't';
+ @INC = '../lib';
+ require Config;
+ if ($Config::Config{extensions} !~ /\bList\/Util\b/) {
+ print "1..0 # Skip: Scalar::Util was not built\n";
+ exit 0;
+ }
+}
+
+use Text::ParseWords qw(shellwords old_shellwords);
+use Scalar::Util qw(tainted);
+
+print "1..2\n";
+
+print "not " if grep { not tainted($_) } shellwords("$0$^X");
+print "ok 1\n";
+
+print "not " if grep { not tainted($_) } old_shellwords("$0$^X");
+print "ok 2\n";
diff --git a/gnu/usr.bin/perl/lib/Unicode/Collate/t/cjkrange.t b/gnu/usr.bin/perl/lib/Unicode/Collate/t/cjkrange.t
new file mode 100755
index 00000000000..5a39bb8a576
--- /dev/null
+++ b/gnu/usr.bin/perl/lib/Unicode/Collate/t/cjkrange.t
@@ -0,0 +1,94 @@
+
+BEGIN {
+ unless ("A" eq pack('U', 0x41)) {
+ print "1..0 # Unicode::Collate " .
+ "cannot stringify a Unicode code point\n";
+ exit 0;
+ }
+ if ($ENV{PERL_CORE}) {
+ chdir('t') if -d 't';
+ @INC = $^O eq 'MacOS' ? qw(::lib) : qw(../lib);
+ }
+}
+
+use Test;
+BEGIN { plan tests => 51 };
+
+use strict;
+use warnings;
+use Unicode::Collate;
+
+ok(1);
+
+my $Collator = Unicode::Collate->new(
+ table => 'keys.txt',
+ normalization => undef,
+);
+
+# U+9FA6..U+9FBB are CJK UI since Unicode 4.1.0.
+# U+3400 is CJK UI ExtA, then greater than any CJK UI.
+
+##### 2..11
+ok($Collator->lt("\x{9FA5}", "\x{3400}")); # UI < ExtA
+ok($Collator->lt("\x{9FA6}", "\x{3400}")); # new UI < ExtA
+ok($Collator->lt("\x{9FBB}", "\x{3400}")); # new UI < ExtA
+ok($Collator->gt("\x{9FBC}", "\x{3400}")); # Unassigned > ExtA
+ok($Collator->gt("\x{9FFF}", "\x{3400}")); # Unassigned > ExtA
+ok($Collator->lt("\x{9FA6}", "\x{9FBB}")); # new UI > new UI
+ok($Collator->lt("\x{3400}","\x{20000}")); # ExtA < ExtB
+ok($Collator->lt("\x{3400}","\x{2A6D6}")); # ExtA < ExtB
+ok($Collator->gt("\x{9FFF}","\x{20000}")); # Unassigned > ExtB
+ok($Collator->gt("\x{9FFF}","\x{2A6D6}")); # Unassigned > ExtB
+
+##### 12..21
+$Collator->change(UCA_Version => 11);
+ok($Collator->lt("\x{9FA5}", "\x{3400}")); # UI < ExtA
+ok($Collator->gt("\x{9FA6}", "\x{3400}")); # Unassigned > ExtA
+ok($Collator->gt("\x{9FBB}", "\x{3400}")); # Unassigned > ExtA
+ok($Collator->gt("\x{9FBC}", "\x{3400}")); # Unassigned > ExtA
+ok($Collator->gt("\x{9FFF}", "\x{3400}")); # Unassigned > ExtA
+ok($Collator->lt("\x{9FA6}", "\x{9FBB}")); # Unassigned > Unassigned
+ok($Collator->lt("\x{3400}","\x{20000}")); # ExtA < ExtB
+ok($Collator->lt("\x{3400}","\x{2A6D6}")); # ExtA < ExtB
+ok($Collator->gt("\x{9FFF}","\x{20000}")); # Unassigned > ExtB
+ok($Collator->gt("\x{9FFF}","\x{2A6D6}")); # Unassigned > ExtB
+
+##### 22..31
+$Collator->change(UCA_Version => 9);
+ok($Collator->lt("\x{9FA5}", "\x{3400}")); # UI < ExtA
+ok($Collator->gt("\x{9FA6}", "\x{3400}")); # Unassigned > ExtA
+ok($Collator->gt("\x{9FBB}", "\x{3400}")); # Unassigned > ExtA
+ok($Collator->gt("\x{9FBC}", "\x{3400}")); # Unassigned > ExtA
+ok($Collator->gt("\x{9FFF}", "\x{3400}")); # Unassigned > ExtA
+ok($Collator->lt("\x{9FA6}", "\x{9FBB}")); # Unassigned > Unassigned
+ok($Collator->lt("\x{3400}","\x{20000}")); # ExtA < ExtB
+ok($Collator->lt("\x{3400}","\x{2A6D6}")); # ExtA < ExtB
+ok($Collator->gt("\x{9FFF}","\x{20000}")); # Unassigned > ExtB
+ok($Collator->gt("\x{9FFF}","\x{2A6D6}")); # Unassigned > ExtB
+
+##### 32..41
+$Collator->change(UCA_Version => 8);
+ok($Collator->gt("\x{9FA5}", "\x{3400}")); # UI > ExtA
+ok($Collator->gt("\x{9FA6}", "\x{3400}")); # Unassigned > ExtA
+ok($Collator->gt("\x{9FBB}", "\x{3400}")); # Unassigned > ExtA
+ok($Collator->gt("\x{9FBC}", "\x{3400}")); # Unassigned > ExtA
+ok($Collator->gt("\x{9FFF}", "\x{3400}")); # Unassigned > ExtA
+ok($Collator->lt("\x{9FA6}", "\x{9FBB}")); # new UI > new UI
+ok($Collator->lt("\x{3400}","\x{20000}")); # ExtA < Unassigned(ExtB)
+ok($Collator->lt("\x{3400}","\x{2A6D6}")); # ExtA < Unassigned(ExtB)
+ok($Collator->lt("\x{9FFF}","\x{20000}")); # Unassigned < Unassigned(ExtB)
+ok($Collator->lt("\x{9FFF}","\x{2A6D6}")); # Unassigned < Unassigned(ExtB)
+
+##### 42..51
+$Collator->change(UCA_Version => 14);
+ok($Collator->lt("\x{9FA5}", "\x{3400}")); # UI < ExtA
+ok($Collator->lt("\x{9FA6}", "\x{3400}")); # new UI < ExtA
+ok($Collator->lt("\x{9FBB}", "\x{3400}")); # new UI < ExtA
+ok($Collator->gt("\x{9FBC}", "\x{3400}")); # Unassigned > ExtA
+ok($Collator->gt("\x{9FFF}", "\x{3400}")); # Unassigned > ExtA
+ok($Collator->lt("\x{9FA6}", "\x{9FBB}")); # new UI > new UI
+ok($Collator->lt("\x{3400}","\x{20000}")); # ExtA < ExtB
+ok($Collator->lt("\x{3400}","\x{2A6D6}")); # ExtA < ExtB
+ok($Collator->gt("\x{9FFF}","\x{20000}")); # Unassigned > ExtB
+ok($Collator->gt("\x{9FFF}","\x{2A6D6}")); # Unassigned > ExtB
+
diff --git a/gnu/usr.bin/perl/lib/Unicode/Collate/t/ignor.t b/gnu/usr.bin/perl/lib/Unicode/Collate/t/ignor.t
new file mode 100755
index 00000000000..4ee47c6f124
--- /dev/null
+++ b/gnu/usr.bin/perl/lib/Unicode/Collate/t/ignor.t
@@ -0,0 +1,158 @@
+BEGIN {
+ unless ("A" eq pack('U', 0x41)) {
+ print "1..0 # Unicode::Collate " .
+ "cannot stringify a Unicode code point\n";
+ exit 0;
+ }
+ if ($ENV{PERL_CORE}) {
+ chdir('t') if -d 't';
+ @INC = $^O eq 'MacOS' ? qw(::lib) : qw(../lib);
+ }
+}
+
+use Test;
+BEGIN { plan tests => 41 };
+
+use strict;
+use warnings;
+use Unicode::Collate;
+
+ok(1);
+
+my $trad = Unicode::Collate->new(
+ table => 'keys.txt',
+ normalization => undef,
+ ignoreName => qr/HANGUL|HIRAGANA|KATAKANA|BOPOMOFO/,
+ level => 3,
+ entry => << 'ENTRIES',
+ 0063 0068 ; [.0A3F.0020.0002.0063] % "ch" in traditional Spanish
+ 0043 0068 ; [.0A3F.0020.0007.0043] # "Ch" in traditional Spanish
+ 0043 0048 ; [.0A3F.0020.0008.0043] # "CH" in traditional Spanish
+ENTRIES
+);
+# 0063 ; [.0A3D.0020.0002.0063] # LATIN SMALL LETTER C
+# 0064 ; [.0A49.0020.0002.0064] # LATIN SMALL LETTER D
+
+##### 2..3
+
+ok(
+ join(':', $trad->sort( qw/ acha aca ada acia acka / ) ),
+ join(':', qw/ aca acia acka acha ada / ),
+);
+
+ok(
+ join(':', $trad->sort( qw/ ACHA ACA ADA ACIA ACKA / ) ),
+ join(':', qw/ ACA ACIA ACKA ACHA ADA / ),
+);
+
+##### 4..7
+
+ok($trad->gt("ocho", "oc\cAho")); # UCA v14
+ok($trad->gt("ocho", "oc\0\cA\0\cBho")); # UCA v14
+ok($trad->eq("-", ""));
+ok($trad->gt("ocho", "oc-ho"));
+
+##### 8..11
+
+$trad->change(UCA_Version => 9);
+
+ok($trad->eq("ocho", "oc\cAho")); # UCA v9
+ok($trad->eq("ocho", "oc\0\cA\0\cBho")); # UCA v9
+ok($trad->eq("-", ""));
+ok($trad->gt("ocho", "oc-ho"));
+
+##### 12..15
+
+$trad->change(UCA_Version => 8);
+
+ok($trad->gt("ocho", "oc\cAho"));
+ok($trad->gt("ocho", "oc\0\cA\0\cBho"));
+ok($trad->eq("-", ""));
+ok($trad->gt("ocho", "oc-ho"));
+
+
+##### 16..19
+
+$trad->change(UCA_Version => 9);
+
+my $hiragana = "\x{3042}\x{3044}";
+my $katakana = "\x{30A2}\x{30A4}";
+
+# HIRAGANA and KATAKANA are ignorable via ignoreName
+ok($trad->eq($hiragana, ""));
+ok($trad->eq("", $katakana));
+ok($trad->eq($hiragana, $katakana));
+ok($trad->eq($katakana, $hiragana));
+
+
+##### 20..31
+
+# According to Conformance Test (UCA_Version == 9 or 11),
+# a L3-ignorable is treated as a completely ignorable.
+
+my $L3ignorable = Unicode::Collate->new(
+ alternate => 'Non-ignorable',
+ level => 3,
+ table => undef,
+ normalization => undef,
+ UCA_Version => 9,
+ entry => <<'ENTRIES',
+0000 ; [.0000.0000.0000.0000] # [0000] NULL (in 6429)
+0001 ; [.0000.0000.0000.0000] # [0001] START OF HEADING (in 6429)
+0591 ; [.0000.0000.0000.0591] # HEBREW ACCENT ETNAHTA
+1D165 ; [.0000.0000.0000.1D165] # MUSICAL SYMBOL COMBINING STEM
+0021 ; [*024B.0020.0002.0021] # EXCLAMATION MARK
+09BE ; [.114E.0020.0002.09BE] # BENGALI VOWEL SIGN AA
+09C7 ; [.1157.0020.0002.09C7] # BENGALI VOWEL SIGN E
+09CB ; [.1159.0020.0002.09CB] # BENGALI VOWEL SIGN O
+09C7 09BE ; [.1159.0020.0002.09CB] # BENGALI VOWEL SIGN O
+1D1B9 ; [*098A.0020.0002.1D1B9] # MUSICAL SYMBOL SEMIBREVIS WHITE
+1D1BA ; [*098B.0020.0002.1D1BA] # MUSICAL SYMBOL SEMIBREVIS BLACK
+1D1BB ; [*098A.0020.0002.1D1B9][.0000.0000.0000.1D165] # M.S. MINIMA
+1D1BC ; [*098B.0020.0002.1D1BA][.0000.0000.0000.1D165] # M.S. MINIMA BLACK
+ENTRIES
+);
+
+ok($L3ignorable->lt("\cA", "!"));
+ok($L3ignorable->lt("\x{591}", "!"));
+ok($L3ignorable->eq("\cA", "\x{591}"));
+ok($L3ignorable->eq("\x{09C7}\x{09BE}A", "\x{09C7}\cA\x{09BE}A"));
+ok($L3ignorable->eq("\x{09C7}\x{09BE}A", "\x{09C7}\x{0591}\x{09BE}A"));
+ok($L3ignorable->eq("\x{09C7}\x{09BE}A", "\x{09C7}\x{1D165}\x{09BE}A"));
+ok($L3ignorable->eq("\x{09C7}\x{09BE}A", "\x{09CB}A"));
+ok($L3ignorable->lt("\x{1D1BB}", "\x{1D1BC}"));
+ok($L3ignorable->eq("\x{1D1BB}", "\x{1D1B9}"));
+ok($L3ignorable->eq("\x{1D1BC}", "\x{1D1BA}"));
+ok($L3ignorable->eq("\x{1D1BB}", "\x{1D1B9}\x{1D165}"));
+ok($L3ignorable->eq("\x{1D1BC}", "\x{1D1BA}\x{1D165}"));
+
+##### 32..41
+
+my $c = Unicode::Collate->new(
+ table => 'keys.txt',
+ normalization => undef,
+ level => 1,
+ UCA_Version => 14,
+ entry => << 'ENTRIES',
+034F ; [.0000.0000.0000.034F] # COMBINING GRAPHEME JOINER
+0063 0068 ; [.0A3F.0020.0002.0063] % "ch" in traditional Spanish
+0043 0068 ; [.0A3F.0020.0007.0043] # "Ch" in traditional Spanish
+0043 0048 ; [.0A3F.0020.0008.0043] # "CH" in traditional Spanish
+ENTRIES
+);
+# 0063 ; [.0A3D.0020.0002.0063] # LATIN SMALL LETTER C
+# 0064 ; [.0A49.0020.0002.0064] # LATIN SMALL LETTER D
+
+ok($c->gt("ocho", "oc\x00\x00ho"));
+ok($c->gt("ocho", "oc\cAho"));
+ok($c->gt("ocho", "oc\x{034F}ho"));
+ok($c->gt("ocio", "oc\x{034F}ho"));
+ok($c->lt("ocgo", "oc\x{034F}ho"));
+ok($c->lt("oceo", "oc\x{034F}ho"));
+
+ok($c->viewSortKey("ocho"), "[0B4B 0A3F 0B4B | | |]");
+ok($c->viewSortKey("oc\x00\x00ho"), "[0B4B 0A3D 0AB9 0B4B | | |]");
+ok($c->viewSortKey("oc\cAho"), "[0B4B 0A3D 0AB9 0B4B | | |]");
+ok($c->viewSortKey("oc\x{034F}ho"), "[0B4B 0A3D 0AB9 0B4B | | |]");
+
+
diff --git a/gnu/usr.bin/perl/lib/Unicode/Collate/t/override.t b/gnu/usr.bin/perl/lib/Unicode/Collate/t/override.t
new file mode 100755
index 00000000000..3e48e15f29e
--- /dev/null
+++ b/gnu/usr.bin/perl/lib/Unicode/Collate/t/override.t
@@ -0,0 +1,187 @@
+BEGIN {
+ unless ("A" eq pack('U', 0x41)) {
+ print "1..0 # Unicode::Collate " .
+ "cannot stringify a Unicode code point\n";
+ exit 0;
+ }
+ if ($ENV{PERL_CORE}) {
+ chdir('t') if -d 't';
+ @INC = $^O eq 'MacOS' ? qw(::lib) : qw(../lib);
+ }
+}
+
+use Test;
+BEGIN { plan tests => 76 };
+
+use strict;
+use warnings;
+use Unicode::Collate;
+
+ok(1);
+
+##### 2..6
+
+my $all_undef_8 = Unicode::Collate->new(
+ table => undef,
+ normalization => undef,
+ overrideCJK => undef,
+ overrideHangul => undef,
+ UCA_Version => 8,
+);
+
+# All in the Unicode code point order.
+# No hangul decomposition.
+
+ok($all_undef_8->lt("\x{3402}", "\x{4E00}"));
+ok($all_undef_8->lt("\x{4DFF}", "\x{4E00}"));
+ok($all_undef_8->lt("\x{4E00}", "\x{AC00}"));
+ok($all_undef_8->gt("\x{AC00}", "\x{1100}\x{1161}"));
+ok($all_undef_8->gt("\x{AC00}", "\x{ABFF}"));
+
+
+##### 7..11
+
+my $all_undef_9 = Unicode::Collate->new(
+ table => undef,
+ normalization => undef,
+ overrideCJK => undef,
+ overrideHangul => undef,
+ UCA_Version => 9,
+);
+
+# CJK Ideo. < CJK ext A/B < Others.
+# No hangul decomposition.
+
+ok($all_undef_9->lt("\x{4E00}", "\x{3402}"));
+ok($all_undef_9->lt("\x{3402}", "\x{20000}"));
+ok($all_undef_9->lt("\x{20000}", "\x{AC00}"));
+ok($all_undef_9->gt("\x{AC00}", "\x{1100}\x{1161}"));
+ok($all_undef_9->gt("\x{AC00}", "\x{ABFF}")); # U+ABFF: not assigned
+
+##### 12..16
+
+my $ignoreHangul = Unicode::Collate->new(
+ table => undef,
+ normalization => undef,
+ overrideHangul => sub {()},
+ entry => <<'ENTRIES',
+AE00 ; [.0100.0020.0002.AE00] # Hangul GEUL
+ENTRIES
+);
+
+# All Hangul Syllables except U+AE00 are ignored.
+
+ok($ignoreHangul->eq("\x{AC00}", ""));
+ok($ignoreHangul->lt("\x{AC00}", "\0"));
+ok($ignoreHangul->lt("\x{AC00}", "\x{AE00}"));
+ok($ignoreHangul->lt("\x{AC00}", "\x{1100}\x{1161}")); # Jamo are not ignored.
+ok($ignoreHangul->lt("Pe\x{AE00}rl", "Perl")); # 'r' is unassigned.
+
+
+my $ignoreCJK = Unicode::Collate->new(
+ table => undef,
+ normalization => undef,
+ overrideCJK => sub {()},
+ entry => <<'ENTRIES',
+5B57 ; [.0107.0020.0002.5B57] # CJK Ideograph "Letter"
+ENTRIES
+);
+
+# All CJK Unified Ideographs except U+5B57 are ignored.
+
+##### 17..21
+ok($ignoreCJK->eq("\x{4E00}", ""));
+ok($ignoreCJK->lt("\x{4E00}", "\0"));
+ok($ignoreCJK->eq("Pe\x{4E00}rl", "Perl")); # U+4E00 is a CJK.
+ok($ignoreCJK->gt("\x{4DFF}", "\x{4E00}")); # U+4DFF is not CJK.
+ok($ignoreCJK->lt("Pe\x{5B57}rl", "Perl")); # 'r' is unassigned.
+
+##### 22..29
+ok($ignoreCJK->eq("\x{3400}", ""));
+ok($ignoreCJK->eq("\x{4DB5}", ""));
+ok($ignoreCJK->eq("\x{9FA5}", ""));
+ok($ignoreCJK->eq("\x{9FA6}", "")); # UI since Unicode 4.1.0
+ok($ignoreCJK->eq("\x{9FBB}", "")); # UI since Unicode 4.1.0
+ok($ignoreCJK->gt("\x{9FBC}", "Perl"));
+ok($ignoreCJK->eq("\x{20000}", ""));
+ok($ignoreCJK->eq("\x{2A6D6}", ""));
+
+##### 30..37
+$ignoreCJK->change(UCA_Version => 9);
+ok($ignoreCJK->eq("\x{3400}", ""));
+ok($ignoreCJK->eq("\x{4DB5}", ""));
+ok($ignoreCJK->eq("\x{9FA5}", ""));
+ok($ignoreCJK->gt("\x{9FA6}", "Perl"));
+ok($ignoreCJK->gt("\x{9FBB}", "Perl"));
+ok($ignoreCJK->gt("\x{9FBC}", "Perl"));
+ok($ignoreCJK->eq("\x{20000}", ""));
+ok($ignoreCJK->eq("\x{2A6D6}", ""));
+
+##### 38..45
+$ignoreCJK->change(UCA_Version => 8);
+ok($ignoreCJK->eq("\x{3400}", ""));
+ok($ignoreCJK->eq("\x{4DB5}", ""));
+ok($ignoreCJK->eq("\x{9FA5}", ""));
+ok($ignoreCJK->gt("\x{9FA6}", "Perl"));
+ok($ignoreCJK->gt("\x{9FBB}", "Perl"));
+ok($ignoreCJK->gt("\x{9FBC}", "Perl"));
+ok($ignoreCJK->eq("\x{20000}", ""));
+ok($ignoreCJK->eq("\x{2A6D6}", ""));
+
+##### 46..53
+$ignoreCJK->change(UCA_Version => 14);
+ok($ignoreCJK->eq("\x{3400}", ""));
+ok($ignoreCJK->eq("\x{4DB5}", ""));
+ok($ignoreCJK->eq("\x{9FA5}", ""));
+ok($ignoreCJK->eq("\x{9FA6}", "")); # UI since Unicode 4.1.0
+ok($ignoreCJK->eq("\x{9FBB}", "")); # UI since Unicode 4.1.0
+ok($ignoreCJK->gt("\x{9FBC}", "Perl"));
+ok($ignoreCJK->eq("\x{20000}", ""));
+ok($ignoreCJK->eq("\x{2A6D6}", ""));
+
+##### 54..76
+my $overCJK = Unicode::Collate->new(
+ table => undef,
+ normalization => undef,
+ entry => <<'ENTRIES',
+0061 ; [.0101.0020.0002.0061] # latin a
+0041 ; [.0101.0020.0008.0041] # LATIN A
+4E00 ; [.B1FC.0030.0004.4E00] # Ideograph; B1FC = FFFF - 4E03.
+ENTRIES
+ overrideCJK => sub {
+ my $u = 0xFFFF - $_[0]; # reversed
+ [$u, 0x20, 0x2, $u];
+ },
+);
+
+ok($overCJK->lt("a", "A")); # diff. at level 3.
+ok($overCJK->lt( "\x{4E03}", "\x{4E00}")); # diff. at level 2.
+ok($overCJK->lt("A\x{4E03}", "A\x{4E00}"));
+ok($overCJK->lt("A\x{4E03}", "a\x{4E00}"));
+ok($overCJK->lt("a\x{4E03}", "A\x{4E00}"));
+
+ok($overCJK->gt("a\x{3400}", "A\x{4DB5}"));
+ok($overCJK->gt("a\x{4DB5}", "A\x{9FA5}"));
+ok($overCJK->gt("a\x{9FA5}", "A\x{9FA6}"));
+ok($overCJK->gt("a\x{9FA6}", "A\x{9FBB}"));
+ok($overCJK->lt("a\x{9FBB}", "A\x{9FBC}"));
+ok($overCJK->lt("a\x{9FBC}", "A\x{9FBF}"));
+
+$overCJK->change(UCA_Version => 9);
+
+ok($overCJK->gt("a\x{3400}", "A\x{4DB5}"));
+ok($overCJK->gt("a\x{4DB5}", "A\x{9FA5}"));
+ok($overCJK->lt("a\x{9FA5}", "A\x{9FA6}"));
+ok($overCJK->lt("a\x{9FA6}", "A\x{9FBB}"));
+ok($overCJK->lt("a\x{9FBB}", "A\x{9FBC}"));
+ok($overCJK->lt("a\x{9FBC}", "A\x{9FBF}"));
+
+$overCJK->change(UCA_Version => 14);
+
+ok($overCJK->gt("a\x{3400}", "A\x{4DB5}"));
+ok($overCJK->gt("a\x{4DB5}", "A\x{9FA5}"));
+ok($overCJK->gt("a\x{9FA5}", "A\x{9FA6}"));
+ok($overCJK->gt("a\x{9FA6}", "A\x{9FBB}"));
+ok($overCJK->lt("a\x{9FBB}", "A\x{9FBC}"));
+ok($overCJK->lt("a\x{9FBC}", "A\x{9FBF}"));
+
diff --git a/gnu/usr.bin/perl/lib/Unicode/UCD.pm b/gnu/usr.bin/perl/lib/Unicode/UCD.pm
index dfdd2dcb519..6a2b5e13844 100644
--- a/gnu/usr.bin/perl/lib/Unicode/UCD.pm
+++ b/gnu/usr.bin/perl/lib/Unicode/UCD.pm
@@ -3,7 +3,7 @@ package Unicode::UCD;
use strict;
use warnings;
-our $VERSION = '0.22';
+our $VERSION = '0.24';
use Storable qw(dclone);
@@ -16,7 +16,8 @@ our @EXPORT_OK = qw(charinfo
charblocks charscripts
charinrange
compexcl
- casefold casespec);
+ casefold casespec
+ namedseq);
use Carp;
@@ -48,6 +49,9 @@ Unicode::UCD - Unicode character database
use Unicode::UCD 'compexcl';
my $compexcl = compexcl($codepoint);
+ use Unicode::UCD 'namedseq';
+ my $namedseq = namedseq($named_sequence_name);
+
my $unicode_version = Unicode::UCD::UnicodeVersion();
=head1 DESCRIPTION
@@ -64,6 +68,7 @@ my $VERSIONFH;
my $COMPEXCLFH;
my $CASEFOLDFH;
my $CASESPECFH;
+my $NAMEDSEQFH;
sub openunicode {
my ($rfh, @path) = @_;
@@ -287,9 +292,9 @@ See also L</Blocks versus Scripts>.
If supplied with an argument that can't be a code point, charblock() tries
to do the opposite and interpret the argument as a character block. The
return value is a I<range>: an anonymous list of lists that contain
-I<start-of-range>, I<end-of-range> code point pairs. You can test whether a
-code point is in a range using the L</charinrange> function. If the
-argument is not a known charater block, C<undef> is returned.
+I<start-of-range>, I<end-of-range> code point pairs. You can test whether
+a code point is in a range using the L</charinrange> function. If the
+argument is not a known character block, C<undef> is returned.
=cut
@@ -351,7 +356,7 @@ to do the opposite and interpret the argument as a character script. The
return value is a I<range>: an anonymous list of lists that contain
I<start-of-range>, I<end-of-range> code point pairs. You can test whether a
code point is in a range using the L</charinrange> function. If the
-argument is not a known charater script, C<undef> is returned.
+argument is not a known character script, C<undef> is returned.
=cut
@@ -716,6 +721,63 @@ sub casespec {
return ref $CASESPEC{$code} ? dclone $CASESPEC{$code} : $CASESPEC{$code};
}
+=head2 namedseq()
+
+ use Unicode::UCD 'namedseq';
+
+ my $namedseq = namedseq("KATAKANA LETTER AINU P");
+ my @namedseq = namedseq("KATAKANA LETTER AINU P");
+ my %namedseq = namedseq();
+
+If used with a single argument in a scalar context, returns the string
+consisting of the code points of the named sequence, or C<undef> if no
+named sequence by that name exists. If used with a single argument in
+a list context, returns list of the code points. If used with no
+arguments in a list context, returns a hash with the names of the
+named sequences as the keys and the named sequences as strings as
+the values. Otherwise, returns C<undef> or empty list depending
+on the context.
+
+(New from Unicode 4.1.0)
+
+=cut
+
+my %NAMEDSEQ;
+
+sub _namedseq {
+ unless (%NAMEDSEQ) {
+ if (openunicode(\$NAMEDSEQFH, "NamedSequences.txt")) {
+ local $_;
+ while (<$NAMEDSEQFH>) {
+ if (/^(.+)\s*;\s*([0-9A-F]+(?: [0-9A-F]+)*)$/) {
+ my ($n, $s) = ($1, $2);
+ my @s = map { chr(hex($_)) } split(' ', $s);
+ $NAMEDSEQ{$n} = join("", @s);
+ }
+ }
+ close($NAMEDSEQFH);
+ }
+ }
+}
+
+sub namedseq {
+ _namedseq() unless %NAMEDSEQ;
+ my $wantarray = wantarray();
+ if (defined $wantarray) {
+ if ($wantarray) {
+ if (@_ == 0) {
+ return %NAMEDSEQ;
+ } elsif (@_ == 1) {
+ my $s = $NAMEDSEQ{ $_[0] };
+ return defined $s ? map { ord($_) } split('', $s) : ();
+ }
+ } elsif (@_ == 1) {
+ return $NAMEDSEQ{ $_[0] };
+ }
+ }
+ return;
+}
+
=head2 Unicode::UCD::UnicodeVersion
Unicode::UCD::UnicodeVersion() returns the version of the Unicode
diff --git a/gnu/usr.bin/perl/lib/Unicode/UCD.t b/gnu/usr.bin/perl/lib/Unicode/UCD.t
index c4046bcdcab..c9903e57434 100644
--- a/gnu/usr.bin/perl/lib/Unicode/UCD.t
+++ b/gnu/usr.bin/perl/lib/Unicode/UCD.t
@@ -18,7 +18,7 @@ use strict;
use Unicode::UCD;
use Test::More;
-BEGIN { plan tests => 179 };
+BEGIN { plan tests => 188 };
use Unicode::UCD 'charinfo';
@@ -238,7 +238,7 @@ ok( charinrange($ranges, "13a0"));
ok( charinrange($ranges, "13f4"));
ok(!charinrange($ranges, "13f5"));
-is(Unicode::UCD::UnicodeVersion, '4.0.1', 'UnicodeVersion');
+is(Unicode::UCD::UnicodeVersion, '4.1.0', 'UnicodeVersion');
use Unicode::UCD qw(compexcl);
@@ -309,7 +309,7 @@ is(Unicode::UCD::_getcode('U+123x'), undef, "_getcode(x123)");
{
my $r1 = charscript('Latin');
my $n1 = @$r1;
- is($n1, 26, "26 ranges in Latin script (Unicode 4.0.0)");
+ is($n1, 29, "29 ranges in Latin script (Unicode 4.1.0)");
shift @$r1 while @$r1;
my $r2 = charscript('Latin');
is(@$r2, $n1, "modifying results should not mess up internal caches");
@@ -318,3 +318,19 @@ is(Unicode::UCD::_getcode('U+123x'), undef, "_getcode(x123)");
{
is(charinfo(0xdeadbeef), undef, "[perl #23273] warnings in Unicode::UCD");
}
+
+use Unicode::UCD qw(namedseq);
+
+is(namedseq("KATAKANA LETTER AINU P"), "\x{31F7}\x{309A}", "namedseq");
+is(namedseq("KATAKANA LETTER AINU Q"), undef);
+is(namedseq(), undef);
+is(namedseq(qw(foo bar)), undef);
+my @ns = namedseq("KATAKANA LETTER AINU P");
+is(scalar @ns, 2);
+is($ns[0], 0x31F7);
+is($ns[1], 0x309A);
+my %ns = namedseq();
+is($ns{"KATAKANA LETTER AINU P"}, "\x{31F7}\x{309A}");
+@ns = namedseq(42);
+is(@ns, 0);
+
diff --git a/gnu/usr.bin/perl/lib/bignum/t/ratopt_a.t b/gnu/usr.bin/perl/lib/bignum/t/ratopt_a.t
new file mode 100755
index 00000000000..f004afe428c
--- /dev/null
+++ b/gnu/usr.bin/perl/lib/bignum/t/ratopt_a.t
@@ -0,0 +1,34 @@
+#!/usr/bin/perl -w
+
+###############################################################################
+
+use Test::More;
+use strict;
+
+BEGIN
+ {
+ $| = 1;
+ chdir 't' if -d 't';
+ unshift @INC, '../lib';
+ plan tests => 7;
+ }
+
+my @C = qw/Math::BigInt Math::BigFloat Math::BigRat/;
+
+# bigrat (bug until v0.15)
+use bigrat a => 2;
+
+foreach my $c (@C)
+ {
+ is ($c->accuracy(), 2, "$c accuracy = 2");
+ }
+
+eval { bigrat->import( accuracy => '42') };
+
+is ($@, '', 'no error');
+
+foreach my $c (@C)
+ {
+ is ($c->accuracy(), 42, "$c accuracy = 42");
+ }
+
diff --git a/gnu/usr.bin/perl/lib/bytes.pm b/gnu/usr.bin/perl/lib/bytes.pm
index 9a04491daf1..a8222794ddf 100644
--- a/gnu/usr.bin/perl/lib/bytes.pm
+++ b/gnu/usr.bin/perl/lib/bytes.pm
@@ -1,6 +1,6 @@
package bytes;
-our $VERSION = '1.01';
+our $VERSION = '1.02';
$bytes::hint_bits = 0x00000008;
@@ -14,7 +14,9 @@ sub unimport {
sub AUTOLOAD {
require "bytes_heavy.pl";
- goto &$AUTOLOAD;
+ goto &$AUTOLOAD if defined &$AUTOLOAD;
+ require Carp;
+ Carp::croak("Undefined subroutine $AUTOLOAD called");
}
sub length ($);
diff --git a/gnu/usr.bin/perl/lib/bytes.t b/gnu/usr.bin/perl/lib/bytes.t
index 6b66a554b27..ea1b9f629b9 100644
--- a/gnu/usr.bin/perl/lib/bytes.t
+++ b/gnu/usr.bin/perl/lib/bytes.t
@@ -4,7 +4,7 @@ BEGIN {
require './test.pl';
}
-plan tests => 19;
+plan tests => 20;
my $a = chr(0x100);
@@ -46,3 +46,9 @@ my $c = chr(0x100);
is(bytes::index($c, "\x80"), 1, "bytes::index under use bytes looks at bytes");
is(bytes::rindex($c, "\xc4"), 0, "bytes::rindex under use bytes looks at bytes");
}
+
+{
+ fresh_perl_like ('use bytes; bytes::moo()',
+ qr/Undefined subroutine bytes::moo/, {stderr=>1},
+ "Check Carp is loaded for AUTOLOADing errors")
+}
diff --git a/gnu/usr.bin/perl/lib/charnames.pm b/gnu/usr.bin/perl/lib/charnames.pm
index f895d379673..8d4c0eef04d 100644
--- a/gnu/usr.bin/perl/lib/charnames.pm
+++ b/gnu/usr.bin/perl/lib/charnames.pm
@@ -3,7 +3,7 @@ use strict;
use warnings;
use Carp;
use File::Spec;
-our $VERSION = '1.04';
+our $VERSION = '1.05';
use bytes (); # for $bytes::hint_bits
$charnames::hint_bits = 0x20000; # HINT_LOCALIZE_HH
@@ -238,42 +238,31 @@ sub import
}
} # import
-# this comes actually from Unicode::UCD, but it avoids the
-# overhead of loading it
-sub _getcode {
- my $arg = shift;
-
- if ($arg =~ /^[1-9]\d*$/) {
- return $arg;
- } elsif ($arg =~ /^(?:[Uu]\+|0[xX])?([[:xdigit:]]+)$/) {
- return hex($1);
- }
-
- return;
-}
-
my %viacode;
sub viacode
{
if (@_ != 1) {
carp "charnames::viacode() expects one argument";
- return ()
+ return;
}
my $arg = shift;
- my $code = _getcode($arg);
+ # this comes actually from Unicode::UCD, where it is the named
+ # function _getcode (), but it avoids the overhead of loading it
my $hex;
-
- if (defined $code) {
+ if ($arg =~ /^[1-9]\d*$/) {
$hex = sprintf "%04X", $arg;
+ } elsif ($arg =~ /^(?:[Uu]\+|0[xX])?([[:xdigit:]]+)$/) {
+ $hex = $1;
} else {
carp("unexpected arg \"$arg\" to charnames::viacode()");
return;
}
- if ($code > 0x10FFFF) {
+ # checking the length first is slightly faster
+ if (length($hex) > 5 && hex($hex) > 0x10FFFF) {
carp sprintf "Unicode characters only allocated up to U+10FFFF (you asked for U+%X)", $hex;
return;
}
@@ -282,11 +271,9 @@ sub viacode
$txt = do "unicore/Name.pl" unless $txt;
- if ($txt =~ m/^$hex\t\t(.+)/m) {
- return $viacode{$hex} = $1;
- } else {
- return;
- }
+ return unless $txt =~ m/^$hex\t\t(.+)/m;
+
+ $viacode{$hex} = $1;
} # viacode
my %vianame;
diff --git a/gnu/usr.bin/perl/lib/h2xs.t b/gnu/usr.bin/perl/lib/h2xs.t
index e6c75c091d6..a59afa2f58b 100644
--- a/gnu/usr.bin/perl/lib/h2xs.t
+++ b/gnu/usr.bin/perl/lib/h2xs.t
@@ -57,6 +57,9 @@ my $name = 'h2xst';
my $header = "$name.h";
my $thisversion = sprintf "%vd", $^V;
+# If this test has failed previously a copy may be left.
+rmtree($name);
+
my @tests = (
"-f -n $name", $], <<"EOXSFILES",
Defaulting to backwards compatibility with perl $thisversion
diff --git a/gnu/usr.bin/perl/lib/locale.t b/gnu/usr.bin/perl/lib/locale.t
index 037e2710e6b..b6fac997198 100644
--- a/gnu/usr.bin/perl/lib/locale.t
+++ b/gnu/usr.bin/perl/lib/locale.t
@@ -437,6 +437,15 @@ if (-x "/usr/bin/locale" && open(LOCALES, "/usr/bin/locale -a 2>/dev/null|")) {
setlocale(LC_ALL, "C");
+if ($^O eq 'darwin') {
+ # Darwin 8/Mac OS X 10.4 has bad Basque locales: perl bug #35895,
+ # Apple bug ID# 4139653. It also has a problem in Byelorussian.
+ if ($Config{osvers} ge '8' and $Config{osvers} lt '9') {
+ debug "# Skipping eu_ES, be_BY locales -- buggy in Darwin\n";
+ @Locale = grep ! m/^(eu_ES|be_BY.CP1131$)/, @Locale;
+ }
+}
+
@Locale = sort @Locale;
debug "# Locales =\n";
diff --git a/gnu/usr.bin/perl/lib/open.pm b/gnu/usr.bin/perl/lib/open.pm
index 45158994619..673f617b6eb 100644
--- a/gnu/usr.bin/perl/lib/open.pm
+++ b/gnu/usr.bin/perl/lib/open.pm
@@ -3,7 +3,7 @@ use warnings;
use Carp;
$open::hint_bits = 0x20000; # HINT_LOCALIZE_HH
-our $VERSION = '1.04';
+our $VERSION = '1.05';
require 5.008001; # for PerlIO::get_layers()
@@ -168,9 +168,8 @@ The C<open> pragma serves as one of the interfaces to declare default
"layers" (also known as "disciplines") for all I/O. Any two-argument
open(), readpipe() (aka qx//) and similar operators found within the
lexical scope of this pragma will use the declared defaults.
-Three-argument opens are not affected by this pragma since there you
-(can) explicitly specify the layers and are supposed to know what you
-are doing.
+Even three-argument opens may be affected by this pragma
+when they don't specify IO layers in MODE.
With the C<IN> subpragma you can declare the default layers
of input streams, and with the C<OUT> subpragma you can declare
@@ -179,7 +178,7 @@ you can control both input and output streams simultaneously.
If you have a legacy encoding, you can use the C<:encoding(...)> tag.
-if you want to set your encoding layers based on your
+If you want to set your encoding layers based on your
locale environment variables, you can use the C<:locale> tag.
For example:
@@ -215,8 +214,8 @@ details and the list of supported locales.
Note that C<:utf8> PerlIO layer must always be specified exactly like
that, it is not subject to the loose matching of encoding names.
-When open() is given an explicit list of layers they are appended to
-the list declared using this pragma.
+When open() is given an explicit list of layers (with the three-arg
+syntax), they override the list declared using this pragma.
The C<:std> subpragma on its own has no effect, but if combined with
the C<:utf8> or C<:encoding> subpragmas, it converts the standard
@@ -228,7 +227,7 @@ chosen to be in C<< :encoding(koi8r) >>, a C<:std> will cause only the
STDOUT and STDERR to be in C<koi8r>. The C<:locale> subpragma
implicitly turns on C<:std>.
-The logic of C<:locale> is described in full in L</encoding>,
+The logic of C<:locale> is described in full in L<encoding>,
but in short it is first trying nl_langinfo(CODESET) and then
guessing from the LC_ALL and LANG locale environment variables.
diff --git a/gnu/usr.bin/perl/lib/overload.t b/gnu/usr.bin/perl/lib/overload.t
index 519c6d8810d..050a80ad079 100644
--- a/gnu/usr.bin/perl/lib/overload.t
+++ b/gnu/usr.bin/perl/lib/overload.t
@@ -1097,8 +1097,6 @@ test ($a->xet('b'), 42);
test (!defined eval { $a->{b} });
test ($@ =~ /zap/);
-test (overload::StrVal(qr/a/) =~ /^Regexp=SCALAR\(0x[0-9a-f]+\)$/);
-
{
package t229;
use overload '=' => sub { 42 },
@@ -1139,6 +1137,27 @@ test (overload::StrVal(qr/a/) =~ /^Regexp=SCALAR\(0x[0-9a-f]+\)$/);
sub numify { ${$_[0]} }
}
+{
+ package perl31793;
+ use overload cmp => sub { 0 };
+ package perl31793_fb;
+ use overload cmp => sub { 0 }, fallback => 1;
+ package main;
+ my $o = bless [], 'perl31793';
+ my $of = bless [], 'perl31793_fb';
+ my $no = bless [], 'no_overload';
+ test (overload::StrVal(\"scalar") =~ /^SCALAR\(0x[0-9a-f]+\)$/);
+ test (overload::StrVal([]) =~ /^ARRAY\(0x[0-9a-f]+\)$/);
+ test (overload::StrVal({}) =~ /^HASH\(0x[0-9a-f]+\)$/);
+ test (overload::StrVal(sub{1}) =~ /^CODE\(0x[0-9a-f]+\)$/);
+ test (overload::StrVal(\*GLOB) =~ /^GLOB\(0x[0-9a-f]+\)$/);
+ test (overload::StrVal(\$o) =~ /^REF\(0x[0-9a-f]+\)$/);
+ test (overload::StrVal(qr/a/) =~ /^Regexp=SCALAR\(0x[0-9a-f]+\)$/);
+ test (overload::StrVal($o) =~ /^perl31793=ARRAY\(0x[0-9a-f]+\)$/);
+ test (overload::StrVal($of) =~ /^perl31793_fb=ARRAY\(0x[0-9a-f]+\)$/);
+ test (overload::StrVal($no) =~ /^no_overload=ARRAY\(0x[0-9a-f]+\)$/);
+}
+
# These are all check that overloaded values rather than reference addressess
# are what is getting tested.
my ($two, $one, $un, $deux) = map {new Numify $_} 2, 1, 1, 2;
@@ -1160,4 +1179,4 @@ foreach my $op (qw(<=> == != < <= > >=)) {
}
}
# Last test is:
-sub last {484}
+sub last {493}
diff --git a/gnu/usr.bin/perl/lib/shellwords.pl b/gnu/usr.bin/perl/lib/shellwords.pl
index ca7dc7ec235..b3ef33ebd9f 100644
--- a/gnu/usr.bin/perl/lib/shellwords.pl
+++ b/gnu/usr.bin/perl/lib/shellwords.pl
@@ -2,48 +2,13 @@
;#
;# Usage:
;# require 'shellwords.pl';
-;# @words = &shellwords($line);
+;# @words = shellwords($line);
;# or
-;# @words = &shellwords(@lines);
+;# @words = shellwords(@lines);
;# or
-;# @words = &shellwords; # defaults to $_ (and clobbers it)
+;# @words = shellwords(); # defaults to $_ (and clobbers it)
-sub shellwords {
- package shellwords;
- local($_) = join('', @_) if @_;
- local(@words,$snippet,$field);
+require Text::ParseWords;
+*shellwords = \&Text::ParseWords::old_shellwords;
- s/^\s+//;
- while ($_ ne '') {
- $field = '';
- for (;;) {
- use re 'taint'; # leave strings tainted
- if (s/^"(([^"\\]|\\.)*)"//) {
- ($snippet = $1) =~ s#\\(.)#$1#g;
- }
- elsif (/^"/) {
- die "Unmatched double quote: $_\n";
- }
- elsif (s/^'(([^'\\]|\\.)*)'//) {
- ($snippet = $1) =~ s#\\(.)#$1#g;
- }
- elsif (/^'/) {
- die "Unmatched single quote: $_\n";
- }
- elsif (s/^\\(.)//) {
- $snippet = $1;
- }
- elsif (s/^([^\s\\'"]+)//) {
- $snippet = $1;
- }
- else {
- s/^\s+//;
- last;
- }
- $field .= $snippet;
- }
- push(@words, $field);
- }
- @words;
-}
1;
diff --git a/gnu/usr.bin/perl/lib/unicore/ArabicShaping.txt b/gnu/usr.bin/perl/lib/unicore/ArabicShaping.txt
index 84c308ac8a2..ec2e0241012 100644
--- a/gnu/usr.bin/perl/lib/unicore/ArabicShaping.txt
+++ b/gnu/usr.bin/perl/lib/unicore/ArabicShaping.txt
@@ -1,8 +1,12 @@
-# ArabicShaping-4.0.1.txt
+# ArabicShaping-4.1.0.txt
+# Date: 2005-03-17, 15:21:00 PST [KW]
#
# This file is a normative contributory data file in the
# Unicode Character Database.
#
+# Copyright (c) 1991-2005 Unicode, Inc.
+# For terms of use, see http://www.unicode.org/terms_of_use.html
+#
# This file defines the shaping classes for Arabic and Syriac
# positional shaping, repeating in machine readable form the
# information printed in Tables 8-3, 8-7, 8-8, 8-11, 8-12, and
@@ -17,21 +21,42 @@
# form, of an Arabic or Syriac character.
# Field 1: gives a short schematic name for that character,
# abbreviated from the normative Unicode character name.
-# Field 2: defines the joining type
-# R right-joining,
-# L left-joining,
-# D dual-joining,
-# C join-causing
-# U non-joining
-# T transparent
+# Field 2: defines the joining type (property name: Joining_Type)
+# R Right_Joining
+# L Left_Joining
+# D Dual_Joining
+# C Join_Causing
+# U Non_Joining
+# T Transparent
# See the Arabic block description for more information on these types.
-# Field 3: defines the joining group.
+# Field 3: defines the joining group (property name: Joining_Group)
+#
+# The values of the joining group are based schematically on character
+# names. Where a schematic character name consists of two or more parts separated
+# by spaces, the formal Joining_Group property value, as specified in
+# PropertyValueAliases.txt, consists of the same name parts joined by
+# underscores. Hence, the entry:
+#
+# 0629; TEH MARBUTA; R; TEH MARBUTA
+#
+# corresponds to [Joining_Group = Teh_Marbuta].
#
+# Note: For historical reasons, the property value [Joining_Group = Hamza_On_Heh_Goal]
+# is anachronistically named. It used to apply to both of the following characters
+# in earlier versions of the standard:
+#
+# U+06C2 ARABIC LETTER HEH GOAL WITH HAMZA ABOVE
+# U+06C3 ARABIC LETTER TEH MARBUTA GOAL
+#
+# However, it currently applies only to U+06C3, and *not* to U+06C2.
+# To avoid destabilizing existing Joining_Group property aliases, the
+# value Hamza_On_Heh_Goal has not been changed, despite the fact that it
+# no longer applies to Hamza On Heh Goal, but only to Teh Marbuta Goal.
#
# Note: Code points that are not explicitly listed in this file are
-# either of type T or U:
+# either of joining type T or U:
#
-# - Those that not explicitly listed that are of General Category Mn or Cf
+# - Those that not explicitly listed that are of General Category Mn, Me, or Cf
# have joining type T.
# - All others not explicitly listed have type U.
#
@@ -46,11 +71,12 @@
# Arabic characters
-0600; ARABIC NUMBER SIGN; U; <no shaping>
-0601; ARABIC SIGN SANAH; U; <no shaping>
-0602; ARABIC FOOTNOTE MARKER; U; <no shaping>
-0603; ARABIC SIGN SAFHA; U; <no shaping>
-0621; HAMZA; U; <no shaping>
+0600; ARABIC NUMBER SIGN; U; No_Joining_Group
+0601; ARABIC SIGN SANAH; U; No_Joining_Group
+0602; ARABIC FOOTNOTE MARKER; U; No_Joining_Group
+0603; ARABIC SIGN SAFHA; U; No_Joining_Group
+060B; AFGHANI SIGN; U; No_Joining_Group
+0621; HAMZA; U; No_Joining_Group
0622; MADDA ON ALEF; R; ALEF
0623; HAMZA ON ALEF; R; ALEF
0624; HAMZA ON WAW; R; WAW
@@ -76,7 +102,7 @@
0638; ZAH; D; TAH
0639; AIN; D; AIN
063A; GHAIN; D; AIN
-0640; TATWEEL; C; <no shaping>
+0640; TATWEEL; C; No_Joining_Group
0641; FEH; D; FEH
0642; QAF; D; QAF
0643; KAF; D; KAF
@@ -92,7 +118,7 @@
0671; HAMZAT WASL ON ALEF; R; ALEF
0672; WAVY HAMZA ON ALEF; R; ALEF
0673; WAVY HAMZA UNDER ALEF; R; ALEF
-0674; HIGH HAMZA; U; <no shaping>
+0674; HIGH HAMZA; U; No_Joining_Group
0675; HIGH HAMZA ALEF; R; ALEF
0676; HIGH HAMZA WAW; R; WAW
0677; HIGH HAMZA WAW WITH DAMMA; R; WAW
@@ -145,7 +171,7 @@
06A6; FEH WITH 4 DOTS ABOVE; D; FEH
06A7; QAF WITH DOT ABOVE; D; QAF
06A8; QAF WITH 3 DOTS ABOVE; D; QAF
-06A9; OPEN KAF; D; GAF
+06A9; KEHEH; D; GAF
06AA; SWASH KAF; D; SWASH KAF
06AB; KAF WITH RING; D; GAF
06AC; KAF WITH DOT ABOVE; D; KAF
@@ -170,7 +196,7 @@
06BF; HAH WITH MIDDLE 3 DOTS DOWNWARD AND DOT ABOVE; D; HAH
06C0; HAMZA ON HEH; R; TEH MARBUTA
06C1; HEH GOAL; D; HEH GOAL
-06C2; HAMZA ON HEH GOAL; R; HAMZA ON HEH GOAL
+06C2; HAMZA ON HEH GOAL; D; HEH GOAL
06C3; TEH MARBUTA GOAL; R; HAMZA ON HEH GOAL
06C4; WAW WITH RING; R; WAW
06C5; WAW WITH BAR; R; WAW
@@ -189,7 +215,7 @@
06D2; YEH BARREE; R; YEH BARREE
06D3; HAMZA ON YEH BARREE; R; YEH BARREE
06D5; AE; R; TEH MARBUTA
-06DD; ARABIC END OF AYAH; U; <no shaping>
+06DD; ARABIC END OF AYAH; U; No_Joining_Group
06EE; DAL WITH INVERTED V; R; DAL
06EF; REH WITH INVERTED V; R; REH
06FA; SEEN WITH DOT BELOW AND 3 DOTS ABOVE; D; SEEN
@@ -234,7 +260,40 @@
074E; SOGDIAN KHAPH; D; KHAPH
074F; SOGDIAN FE; D; FE
+# Arabic supplement characters
+
+0750; BEH WITH 3 DOTS HORIZONTALLY BELOW; D; BEH
+0751; BEH WITH DOT BELOW AND 3 DOTS ABOVE; D; BEH
+0752; BEH WITH 3 DOTS POINTING UPWARDS BELOW; D; BEH
+0753; BEH WITH 3 DOTS POINTING UPWARDS BELOW AND 2 DOTS ABOVE; D; BEH
+0754; BEH WITH 2 DOTS BELOW AND DOT ABOVE; D; BEH
+0755; BEH WITH INVERTED SMALL V BELOW; D; BEH
+0756; BEH WITH SMALL V; D; BEH
+0757; HAH WITH 2 DOTS ABOVE; D; HAH
+0758; HAH WITH 3 DOTS POINTING UPWARDS BELOW; D; HAH
+0759; DAL WITH 2 DOTS VERTICALLY BELOW AND SMALL TAH; R; DAL
+075A; DAL WITH INVERTED SMALL V BELOW; R; DAL
+075B; REH WITH STROKE; R; REH
+075C; SEEN WITH 4 DOTS ABOVE; D; SEEN
+075D; AIN WITH 2 DOTS ABOVE; D; AIN
+075E; AIN WITH 3 DOTS POINTING DOWNWARDS ABOVE; D; AIN
+075F; AIN WITH 2 DOTS VERTICALLY ABOVE; D; AIN
+0760; FEH WITH 2 DOTS BELOW; D; FEH
+0761; FEH WITH 3 DOTS POINTING UPWARDS BELOW; D; FEH
+0762; KEHEH WITH DOT ABOVE; D; GAF
+0763; KEHEH WITH 3 DOTS ABOVE; D; GAF
+0764; KEHEH WITH 3 DOTS POINTING UPWARDS BELOW; D; GAF
+0765; MEEM WITH DOT ABOVE; D; MEEM
+0766; MEEM WITH DOT BELOW; D; MEEM
+0767; NOON WITH 2 DOTS BELOW; D; NOON
+0768; NOON WITH SMALL TAH; D; NOON
+0769; NOON WITH SMALL V; D; NOON
+076A; LAM WITH BAR; D; LAM
+076B; REH WITH 2 DOTS VERTICALLY ABOVE; R; REH
+076C; REH WITH HAMZA ABOVE; R; REH
+076D; SEEN WITH 2 DOTS VERTICALLY ABOVE; D; SEEN
+
# Other
-200D; ZERO WIDTH JOINER; C; <no shaping>
-200C; ZERO WIDTH NON-JOINER; U; <no shaping>
+200D; ZERO WIDTH JOINER; C; No_Joining_Group
+200C; ZERO WIDTH NON-JOINER; U; No_Joining_Group
diff --git a/gnu/usr.bin/perl/lib/unicore/BidiMirroring.txt b/gnu/usr.bin/perl/lib/unicore/BidiMirroring.txt
index f799da12a17..45167fbb99c 100644
--- a/gnu/usr.bin/perl/lib/unicore/BidiMirroring.txt
+++ b/gnu/usr.bin/perl/lib/unicore/BidiMirroring.txt
@@ -1,10 +1,18 @@
-# BidiMirroring-4.0.0.txt
+# BidiMirroring-4.1.0.txt
+# Date: 2005-03-17, 15:21:00 PST [KW]
+#
+# Bidi_Mirroring_Glyph Property
#
-# This file is an informative supplement to the UnicodeData file. It
-# lists characters that have the mirrored property
+# This file is an informative contributory data file in the
+# Unicode Character Database.
+#
+# Copyright (c) 1991-2005 Unicode, Inc.
+# For terms of use, see http://www.unicode.org/terms_of_use.html
+#
+# This data file lists characters that have the mirrored property
# where 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 4.0.0.
+# The repertoire covered by the file is Unicode 4.1.0.
#
# The file contains a list of lines with mappings from one code point
# to another one for character-based mirroring.
@@ -24,7 +32,7 @@
# at http://www.unicode.org/unicode/reports/tr9/
#
# This file was originally created by Markus Scherer.
-# Extended for Unicode 3.2 and 4.0 by Ken Whistler.
+# Extended for Unicode 3.2, 4.0, and 4.1 by Ken Whistler.
#
# ############################################################
@@ -180,6 +188,10 @@
2773; 2772 # LIGHT RIGHT TORTOISE SHELL BRACKET
2774; 2775 # MEDIUM LEFT CURLY BRACKET ORNAMENT
2775; 2774 # MEDIUM RIGHT CURLY BRACKET ORNAMENT
+27C3; 27C4 # OPEN SUBSET
+27C4; 27C3 # OPEN SUPERSET
+27C5; 27C6 # LEFT S-SHAPED BAG DELIMITER
+27C6; 27C5 # RIGHT S-SHAPED BAG DELIMITER
27D5; 27D6 # LEFT OUTER JOIN
27D6; 27D5 # RIGHT OUTER JOIN
27DD; 27DE # LONG RIGHT TACK
@@ -238,7 +250,7 @@
29FD; 29FC # RIGHT-POINTING CURVED ANGLE BRACKET
2A2B; 2A2C # MINUS SIGN WITH FALLING DOTS
2A2C; 2A2B # MINUS SIGN WITH RISING DOTS
-2A2D; 2A2C # PLUS SIGN IN LEFT HALF CIRCLE
+2A2D; 2A2E # PLUS SIGN IN LEFT HALF CIRCLE
2A2E; 2A2D # PLUS SIGN IN RIGHT HALF CIRCLE
2A34; 2A35 # MULTIPLICATION SIGN IN LEFT HALF CIRCLE
2A35; 2A34 # MULTIPLICATION SIGN IN RIGHT HALF CIRCLE
@@ -316,6 +328,16 @@
2AF8; 2AF7 # TRIPLE NESTED GREATER-THAN
2AF9; 2AFA # DOUBLE-LINE SLANTED LESS-THAN OR EQUAL TO
2AFA; 2AF9 # DOUBLE-LINE SLANTED GREATER-THAN OR EQUAL TO
+2E02; 2E03 # LEFT SUBSTITUTION BRACKET
+2E03; 2E02 # RIGHT SUBSTITUTION BRACKET
+2E04; 2E05 # LEFT DOTTED SUBSTITUTION BRACKET
+2E05; 2E04 # RIGHT DOTTED SUBSTITUTION BRACKET
+2E09; 2E0A # LEFT TRANSPOSITION BRACKET
+2E0A; 2E09 # RIGHT TRANSPOSITION BRACKET
+2E0C; 2E0D # LEFT RAISED OMISSION BRACKET
+2E0D; 2E0C # RIGHT RAISED OMISSION BRACKET
+2E1C; 2E1D # LEFT LOW PARAPHRASE BRACKET
+2E1D; 2E1C # RIGHT LOW PARAPHRASE BRACKET
3008; 3009 # LEFT ANGLE BRACKET
3009; 3008 # RIGHT ANGLE BRACKET
300A; 300B # LEFT DOUBLE ANGLE BRACKET
@@ -347,7 +369,9 @@ FF60; FF5F # FULLWIDTH RIGHT WHITE PARENTHESIS
FF62; FF63 # [BEST FIT] HALFWIDTH LEFT CORNER BRACKET
FF63; FF62 # [BEST FIT] HALFWIDTH RIGHT CORNER BRACKET
-# The following characters have no appropriate mirroring character
+# The following characters have no appropriate mirroring character.
+# For these characters it is up to the rendering system
+# to provide mirrored glyphs.
# 2140; DOUBLE-STRUCK N-ARY SUMMATION
# 2201; COMPLEMENT
@@ -410,6 +434,7 @@ FF63; FF62 # [BEST FIT] HALFWIDTH RIGHT CORNER BRACKET
# 22FF; Z NOTATION BAG MEMBERSHIP
# 2320; TOP HALF INTEGRAL
# 2321; BOTTOM HALF INTEGRAL
+# 27C0; THREE DIMENSIONAL ANGLE
# 27D3; LOWER RIGHT CORNER WITH DOT
# 27D4; UPPER LEFT CORNER WITH DOT
# 27DC; LEFT MULTIMAP
diff --git a/gnu/usr.bin/perl/lib/unicore/Blocks.txt b/gnu/usr.bin/perl/lib/unicore/Blocks.txt
index aeed970ac5f..f2b95662745 100644
--- a/gnu/usr.bin/perl/lib/unicore/Blocks.txt
+++ b/gnu/usr.bin/perl/lib/unicore/Blocks.txt
@@ -1,22 +1,27 @@
-# Blocks-4.0.1.txt
-# Date: 2004-03-01, 15:52 [KW]
+# Blocks-4.1.0.txt
+# Date: 2005-1-31, 16:50 [KW]
#
# Unicode Character Database
-# Copyright (c) 1991-2004 Unicode, Inc.
+# Copyright (c) 1991-2005 Unicode, Inc.
# For terms of use, see http://www.unicode.org/terms_of_use.html
# For documentation, see UCD.html
#
+# Note: The casing of block names is not normative.
+# For example, "Basic Latin" and "BASIC LATIN" are equivalent.
+#
+# Format:
+# Start Code..End Code; Block Name
+
+# ================================================
+
# Note: When comparing block names, casing, whitespace, hyphens,
# and underbars are ignored.
# For example, "Latin Extended-A" and "latin extended a" are equivalent.
# For more information on the comparison of property values,
# see UCD.html.
#
-# Code points not explicitly listed in this file are given the value No_Block.
-# Format:
-# Start Code..End Code; Block Name
-
-# ================================================
+# All code points not explicitly listed for Block
+# have the value No_Block.
# Property: Block
@@ -34,6 +39,7 @@
0590..05FF; Hebrew
0600..06FF; Arabic
0700..074F; Syriac
+0750..077F; Arabic Supplement
0780..07BF; Thaana
0900..097F; Devanagari
0980..09FF; Bengali
@@ -52,6 +58,7 @@
10A0..10FF; Georgian
1100..11FF; Hangul Jamo
1200..137F; Ethiopic
+1380..139F; Ethiopic Supplement
13A0..13FF; Cherokee
1400..167F; Unified Canadian Aboriginal Syllabics
1680..169F; Ogham
@@ -64,8 +71,12 @@
1800..18AF; Mongolian
1900..194F; Limbu
1950..197F; Tai Le
+1980..19DF; New Tai Lue
19E0..19FF; Khmer Symbols
+1A00..1A1F; Buginese
1D00..1D7F; Phonetic Extensions
+1D80..1DBF; Phonetic Extensions Supplement
+1DC0..1DFF; Combining Diacritical Marks Supplement
1E00..1EFF; Latin Extended Additional
1F00..1FFF; Greek Extended
2000..206F; General Punctuation
@@ -92,6 +103,12 @@
2980..29FF; Miscellaneous Mathematical Symbols-B
2A00..2AFF; Supplemental Mathematical Operators
2B00..2BFF; Miscellaneous Symbols and Arrows
+2C00..2C5F; Glagolitic
+2C80..2CFF; Coptic
+2D00..2D2F; Georgian Supplement
+2D30..2D7F; Tifinagh
+2D80..2DDF; Ethiopic Extended
+2E00..2E7F; Supplemental Punctuation
2E80..2EFF; CJK Radicals Supplement
2F00..2FDF; Kangxi Radicals
2FF0..2FFF; Ideographic Description Characters
@@ -102,6 +119,7 @@
3130..318F; Hangul Compatibility Jamo
3190..319F; Kanbun
31A0..31BF; Bopomofo Extended
+31C0..31EF; CJK Strokes
31F0..31FF; Katakana Phonetic Extensions
3200..32FF; Enclosed CJK Letters and Months
3300..33FF; CJK Compatibility
@@ -110,6 +128,8 @@
4E00..9FFF; CJK Unified Ideographs
A000..A48F; Yi Syllables
A490..A4CF; Yi Radicals
+A700..A71F; Modifier Tone Letters
+A800..A82F; Syloti Nagri
AC00..D7AF; Hangul Syllables
D800..DB7F; High Surrogates
DB80..DBFF; High Private Use Surrogates
@@ -119,6 +139,7 @@ F900..FAFF; CJK Compatibility Ideographs
FB00..FB4F; Alphabetic Presentation Forms
FB50..FDFF; Arabic Presentation Forms-A
FE00..FE0F; Variation Selectors
+FE10..FE1F; Vertical Forms
FE20..FE2F; Combining Half Marks
FE30..FE4F; CJK Compatibility Forms
FE50..FE6F; Small Form Variants
@@ -128,15 +149,19 @@ FFF0..FFFF; Specials
10000..1007F; Linear B Syllabary
10080..100FF; Linear B Ideograms
10100..1013F; Aegean Numbers
+10140..1018F; Ancient Greek Numbers
10300..1032F; Old Italic
10330..1034F; Gothic
10380..1039F; Ugaritic
+103A0..103DF; Old Persian
10400..1044F; Deseret
10450..1047F; Shavian
10480..104AF; Osmanya
10800..1083F; Cypriot Syllabary
+10A00..10A5F; Kharoshthi
1D000..1D0FF; Byzantine Musical Symbols
1D100..1D1FF; Musical Symbols
+1D200..1D24F; Ancient Greek Musical Notation
1D300..1D35F; Tai Xuan Jing Symbols
1D400..1D7FF; Mathematical Alphanumeric Symbols
20000..2A6DF; CJK Unified Ideographs Extension B
diff --git a/gnu/usr.bin/perl/lib/unicore/CaseFolding.txt b/gnu/usr.bin/perl/lib/unicore/CaseFolding.txt
index 65f78ffdeec..f25d9bfed4d 100644
--- a/gnu/usr.bin/perl/lib/unicore/CaseFolding.txt
+++ b/gnu/usr.bin/perl/lib/unicore/CaseFolding.txt
@@ -1,10 +1,11 @@
-# CaseFolding-4.0.1.txt
-# Date: 2004-03-02, 02:41:24 GMT [MD]
+# CaseFolding-4.1.0.txt
+# Date: 2005-03-26, 00:24:43 GMT [MD]
#
# Unicode Character Database
-# Copyright (c) 1991-2004 Unicode, Inc.
+# Copyright (c) 1991-2005 Unicode, Inc.
# For terms of use, see http://www.unicode.org/terms_of_use.html
# For documentation, see UCD.html
+#
# Case Folding Properties
#
# This file is a supplement to the UnicodeData file.
@@ -16,7 +17,7 @@
# The data supports both implementations that require simple case foldings
# (where string lengths don't change), and implementations that allow full case folding
# (where string lengths may grow). Note that where they can be supported, the
-# full case foldings are superior: for example, they allow "MASSE" and "Maße" to match.
+# full case foldings are superior: for example, they allow "MASSE" and "Maße" to match.
#
# All code points not listed in this file map to themselves.
#
@@ -271,6 +272,9 @@
022E; C; 022F; # LATIN CAPITAL LETTER O WITH DOT ABOVE
0230; C; 0231; # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON
0232; C; 0233; # LATIN CAPITAL LETTER Y WITH MACRON
+023B; C; 023C; # LATIN CAPITAL LETTER C WITH STROKE
+023D; C; 019A; # LATIN CAPITAL LETTER L WITH BAR
+0241; C; 0294; # LATIN CAPITAL LETTER GLOTTAL STOP
0345; C; 03B9; # COMBINING GREEK YPOGEGRAMMENI
0386; C; 03AC; # GREEK CAPITAL LETTER ALPHA WITH TONOS
0388; C; 03AD; # GREEK CAPITAL LETTER EPSILON WITH TONOS
@@ -449,6 +453,7 @@
04F0; C; 04F1; # CYRILLIC CAPITAL LETTER U WITH DIAERESIS
04F2; C; 04F3; # CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE
04F4; C; 04F5; # CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS
+04F6; C; 04F7; # CYRILLIC CAPITAL LETTER GHE WITH DESCENDER
04F8; C; 04F9; # CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS
0500; C; 0501; # CYRILLIC CAPITAL LETTER KOMI DE
0502; C; 0503; # CYRILLIC CAPITAL LETTER KOMI DJE
@@ -497,6 +502,44 @@
0555; C; 0585; # ARMENIAN CAPITAL LETTER OH
0556; C; 0586; # ARMENIAN CAPITAL LETTER FEH
0587; F; 0565 0582; # ARMENIAN SMALL LIGATURE ECH YIWN
+10A0; C; 2D00; # GEORGIAN CAPITAL LETTER AN
+10A1; C; 2D01; # GEORGIAN CAPITAL LETTER BAN
+10A2; C; 2D02; # GEORGIAN CAPITAL LETTER GAN
+10A3; C; 2D03; # GEORGIAN CAPITAL LETTER DON
+10A4; C; 2D04; # GEORGIAN CAPITAL LETTER EN
+10A5; C; 2D05; # GEORGIAN CAPITAL LETTER VIN
+10A6; C; 2D06; # GEORGIAN CAPITAL LETTER ZEN
+10A7; C; 2D07; # GEORGIAN CAPITAL LETTER TAN
+10A8; C; 2D08; # GEORGIAN CAPITAL LETTER IN
+10A9; C; 2D09; # GEORGIAN CAPITAL LETTER KAN
+10AA; C; 2D0A; # GEORGIAN CAPITAL LETTER LAS
+10AB; C; 2D0B; # GEORGIAN CAPITAL LETTER MAN
+10AC; C; 2D0C; # GEORGIAN CAPITAL LETTER NAR
+10AD; C; 2D0D; # GEORGIAN CAPITAL LETTER ON
+10AE; C; 2D0E; # GEORGIAN CAPITAL LETTER PAR
+10AF; C; 2D0F; # GEORGIAN CAPITAL LETTER ZHAR
+10B0; C; 2D10; # GEORGIAN CAPITAL LETTER RAE
+10B1; C; 2D11; # GEORGIAN CAPITAL LETTER SAN
+10B2; C; 2D12; # GEORGIAN CAPITAL LETTER TAR
+10B3; C; 2D13; # GEORGIAN CAPITAL LETTER UN
+10B4; C; 2D14; # GEORGIAN CAPITAL LETTER PHAR
+10B5; C; 2D15; # GEORGIAN CAPITAL LETTER KHAR
+10B6; C; 2D16; # GEORGIAN CAPITAL LETTER GHAN
+10B7; C; 2D17; # GEORGIAN CAPITAL LETTER QAR
+10B8; C; 2D18; # GEORGIAN CAPITAL LETTER SHIN
+10B9; C; 2D19; # GEORGIAN CAPITAL LETTER CHIN
+10BA; C; 2D1A; # GEORGIAN CAPITAL LETTER CAN
+10BB; C; 2D1B; # GEORGIAN CAPITAL LETTER JIL
+10BC; C; 2D1C; # GEORGIAN CAPITAL LETTER CIL
+10BD; C; 2D1D; # GEORGIAN CAPITAL LETTER CHAR
+10BE; C; 2D1E; # GEORGIAN CAPITAL LETTER XAN
+10BF; C; 2D1F; # GEORGIAN CAPITAL LETTER JHAN
+10C0; C; 2D20; # GEORGIAN CAPITAL LETTER HAE
+10C1; C; 2D21; # GEORGIAN CAPITAL LETTER HE
+10C2; C; 2D22; # GEORGIAN CAPITAL LETTER HIE
+10C3; C; 2D23; # GEORGIAN CAPITAL LETTER WE
+10C4; C; 2D24; # GEORGIAN CAPITAL LETTER HAR
+10C5; C; 2D25; # GEORGIAN CAPITAL LETTER HOE
1E00; C; 1E01; # LATIN CAPITAL LETTER A WITH RING BELOW
1E02; C; 1E03; # LATIN CAPITAL LETTER B WITH DOT ABOVE
1E04; C; 1E05; # LATIN CAPITAL LETTER B WITH DOT BELOW
@@ -844,6 +887,103 @@
24CD; C; 24E7; # CIRCLED LATIN CAPITAL LETTER X
24CE; C; 24E8; # CIRCLED LATIN CAPITAL LETTER Y
24CF; C; 24E9; # CIRCLED LATIN CAPITAL LETTER Z
+2C00; C; 2C30; # GLAGOLITIC CAPITAL LETTER AZU
+2C01; C; 2C31; # GLAGOLITIC CAPITAL LETTER BUKY
+2C02; C; 2C32; # GLAGOLITIC CAPITAL LETTER VEDE
+2C03; C; 2C33; # GLAGOLITIC CAPITAL LETTER GLAGOLI
+2C04; C; 2C34; # GLAGOLITIC CAPITAL LETTER DOBRO
+2C05; C; 2C35; # GLAGOLITIC CAPITAL LETTER YESTU
+2C06; C; 2C36; # GLAGOLITIC CAPITAL LETTER ZHIVETE
+2C07; C; 2C37; # GLAGOLITIC CAPITAL LETTER DZELO
+2C08; C; 2C38; # GLAGOLITIC CAPITAL LETTER ZEMLJA
+2C09; C; 2C39; # GLAGOLITIC CAPITAL LETTER IZHE
+2C0A; C; 2C3A; # GLAGOLITIC CAPITAL LETTER INITIAL IZHE
+2C0B; C; 2C3B; # GLAGOLITIC CAPITAL LETTER I
+2C0C; C; 2C3C; # GLAGOLITIC CAPITAL LETTER DJERVI
+2C0D; C; 2C3D; # GLAGOLITIC CAPITAL LETTER KAKO
+2C0E; C; 2C3E; # GLAGOLITIC CAPITAL LETTER LJUDIJE
+2C0F; C; 2C3F; # GLAGOLITIC CAPITAL LETTER MYSLITE
+2C10; C; 2C40; # GLAGOLITIC CAPITAL LETTER NASHI
+2C11; C; 2C41; # GLAGOLITIC CAPITAL LETTER ONU
+2C12; C; 2C42; # GLAGOLITIC CAPITAL LETTER POKOJI
+2C13; C; 2C43; # GLAGOLITIC CAPITAL LETTER RITSI
+2C14; C; 2C44; # GLAGOLITIC CAPITAL LETTER SLOVO
+2C15; C; 2C45; # GLAGOLITIC CAPITAL LETTER TVRIDO
+2C16; C; 2C46; # GLAGOLITIC CAPITAL LETTER UKU
+2C17; C; 2C47; # GLAGOLITIC CAPITAL LETTER FRITU
+2C18; C; 2C48; # GLAGOLITIC CAPITAL LETTER HERU
+2C19; C; 2C49; # GLAGOLITIC CAPITAL LETTER OTU
+2C1A; C; 2C4A; # GLAGOLITIC CAPITAL LETTER PE
+2C1B; C; 2C4B; # GLAGOLITIC CAPITAL LETTER SHTA
+2C1C; C; 2C4C; # GLAGOLITIC CAPITAL LETTER TSI
+2C1D; C; 2C4D; # GLAGOLITIC CAPITAL LETTER CHRIVI
+2C1E; C; 2C4E; # GLAGOLITIC CAPITAL LETTER SHA
+2C1F; C; 2C4F; # GLAGOLITIC CAPITAL LETTER YERU
+2C20; C; 2C50; # GLAGOLITIC CAPITAL LETTER YERI
+2C21; C; 2C51; # GLAGOLITIC CAPITAL LETTER YATI
+2C22; C; 2C52; # GLAGOLITIC CAPITAL LETTER SPIDERY HA
+2C23; C; 2C53; # GLAGOLITIC CAPITAL LETTER YU
+2C24; C; 2C54; # GLAGOLITIC CAPITAL LETTER SMALL YUS
+2C25; C; 2C55; # GLAGOLITIC CAPITAL LETTER SMALL YUS WITH TAIL
+2C26; C; 2C56; # GLAGOLITIC CAPITAL LETTER YO
+2C27; C; 2C57; # GLAGOLITIC CAPITAL LETTER IOTATED SMALL YUS
+2C28; C; 2C58; # GLAGOLITIC CAPITAL LETTER BIG YUS
+2C29; C; 2C59; # GLAGOLITIC CAPITAL LETTER IOTATED BIG YUS
+2C2A; C; 2C5A; # GLAGOLITIC CAPITAL LETTER FITA
+2C2B; C; 2C5B; # GLAGOLITIC CAPITAL LETTER IZHITSA
+2C2C; C; 2C5C; # GLAGOLITIC CAPITAL LETTER SHTAPIC
+2C2D; C; 2C5D; # GLAGOLITIC CAPITAL LETTER TROKUTASTI A
+2C2E; C; 2C5E; # GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE
+2C80; C; 2C81; # COPTIC CAPITAL LETTER ALFA
+2C82; C; 2C83; # COPTIC CAPITAL LETTER VIDA
+2C84; C; 2C85; # COPTIC CAPITAL LETTER GAMMA
+2C86; C; 2C87; # COPTIC CAPITAL LETTER DALDA
+2C88; C; 2C89; # COPTIC CAPITAL LETTER EIE
+2C8A; C; 2C8B; # COPTIC CAPITAL LETTER SOU
+2C8C; C; 2C8D; # COPTIC CAPITAL LETTER ZATA
+2C8E; C; 2C8F; # COPTIC CAPITAL LETTER HATE
+2C90; C; 2C91; # COPTIC CAPITAL LETTER THETHE
+2C92; C; 2C93; # COPTIC CAPITAL LETTER IAUDA
+2C94; C; 2C95; # COPTIC CAPITAL LETTER KAPA
+2C96; C; 2C97; # COPTIC CAPITAL LETTER LAULA
+2C98; C; 2C99; # COPTIC CAPITAL LETTER MI
+2C9A; C; 2C9B; # COPTIC CAPITAL LETTER NI
+2C9C; C; 2C9D; # COPTIC CAPITAL LETTER KSI
+2C9E; C; 2C9F; # COPTIC CAPITAL LETTER O
+2CA0; C; 2CA1; # COPTIC CAPITAL LETTER PI
+2CA2; C; 2CA3; # COPTIC CAPITAL LETTER RO
+2CA4; C; 2CA5; # COPTIC CAPITAL LETTER SIMA
+2CA6; C; 2CA7; # COPTIC CAPITAL LETTER TAU
+2CA8; C; 2CA9; # COPTIC CAPITAL LETTER UA
+2CAA; C; 2CAB; # COPTIC CAPITAL LETTER FI
+2CAC; C; 2CAD; # COPTIC CAPITAL LETTER KHI
+2CAE; C; 2CAF; # COPTIC CAPITAL LETTER PSI
+2CB0; C; 2CB1; # COPTIC CAPITAL LETTER OOU
+2CB2; C; 2CB3; # COPTIC CAPITAL LETTER DIALECT-P ALEF
+2CB4; C; 2CB5; # COPTIC CAPITAL LETTER OLD COPTIC AIN
+2CB6; C; 2CB7; # COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE
+2CB8; C; 2CB9; # COPTIC CAPITAL LETTER DIALECT-P KAPA
+2CBA; C; 2CBB; # COPTIC CAPITAL LETTER DIALECT-P NI
+2CBC; C; 2CBD; # COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI
+2CBE; C; 2CBF; # COPTIC CAPITAL LETTER OLD COPTIC OOU
+2CC0; C; 2CC1; # COPTIC CAPITAL LETTER SAMPI
+2CC2; C; 2CC3; # COPTIC CAPITAL LETTER CROSSED SHEI
+2CC4; C; 2CC5; # COPTIC CAPITAL LETTER OLD COPTIC SHEI
+2CC6; C; 2CC7; # COPTIC CAPITAL LETTER OLD COPTIC ESH
+2CC8; C; 2CC9; # COPTIC CAPITAL LETTER AKHMIMIC KHEI
+2CCA; C; 2CCB; # COPTIC CAPITAL LETTER DIALECT-P HORI
+2CCC; C; 2CCD; # COPTIC CAPITAL LETTER OLD COPTIC HORI
+2CCE; C; 2CCF; # COPTIC CAPITAL LETTER OLD COPTIC HA
+2CD0; C; 2CD1; # COPTIC CAPITAL LETTER L-SHAPED HA
+2CD2; C; 2CD3; # COPTIC CAPITAL LETTER OLD COPTIC HEI
+2CD4; C; 2CD5; # COPTIC CAPITAL LETTER OLD COPTIC HAT
+2CD6; C; 2CD7; # COPTIC CAPITAL LETTER OLD COPTIC GANGIA
+2CD8; C; 2CD9; # COPTIC CAPITAL LETTER OLD COPTIC DJA
+2CDA; C; 2CDB; # COPTIC CAPITAL LETTER OLD COPTIC SHIMA
+2CDC; C; 2CDD; # COPTIC CAPITAL LETTER OLD NUBIAN SHIMA
+2CDE; C; 2CDF; # COPTIC CAPITAL LETTER OLD NUBIAN NGI
+2CE0; C; 2CE1; # COPTIC CAPITAL LETTER OLD NUBIAN NYI
+2CE2; C; 2CE3; # COPTIC CAPITAL LETTER OLD NUBIAN WAU
FB00; F; 0066 0066; # LATIN SMALL LIGATURE FF
FB01; F; 0066 0069; # LATIN SMALL LIGATURE FI
FB02; F; 0066 006C; # LATIN SMALL LIGATURE FL
diff --git a/gnu/usr.bin/perl/lib/unicore/CompositionExclusions.txt b/gnu/usr.bin/perl/lib/unicore/CompositionExclusions.txt
index ef558e58364..f20528b091e 100644
--- a/gnu/usr.bin/perl/lib/unicore/CompositionExclusions.txt
+++ b/gnu/usr.bin/perl/lib/unicore/CompositionExclusions.txt
@@ -1,8 +1,14 @@
-# CompositionExclusions-4.0.0.txt
-# Date: 2003-02-14,16:49:03 GMT [MD]
+# CompositionExclusions-4.1.0.txt
+# Date: 2005-03-17, 15:21:00 PST [KW]
#
# This file lists the characters from the UAX #15 Composition Exclusion Table.
#
+# This file is a normative contributory data file in the
+# Unicode Character Database.
+#
+# Copyright (c) 1991-2005 Unicode, Inc.
+# For terms of use, see http://www.unicode.org/terms_of_use.html
+#
# For more information, see
# http://www.unicode.org/unicode/reports/tr15/#Primary Exclusion List Table
# ================================================
@@ -150,6 +156,7 @@ FB4E # HEBREW LETTER PE WITH RAFE
# FA25..FA26 [2] CJK COMPATIBILITY IDEOGRAPH-FA25..CJK COMPATIBILITY IDEOGRAPH-FA26
# FA2A..FA2D [4] CJK COMPATIBILITY IDEOGRAPH-FA2A..CJK COMPATIBILITY IDEOGRAPH-FA2D
# FA30..FA6A [59] CJK COMPATIBILITY IDEOGRAPH-FA30..CJK COMPATIBILITY IDEOGRAPH-FA6A
+# FA70..FAD9 [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9
# 2F800..2FA1D [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D
# Total code points: 924
diff --git a/gnu/usr.bin/perl/lib/unicore/EastAsianWidth.txt b/gnu/usr.bin/perl/lib/unicore/EastAsianWidth.txt
index 9e117d8d6c8..935d041eacd 100644
--- a/gnu/usr.bin/perl/lib/unicore/EastAsianWidth.txt
+++ b/gnu/usr.bin/perl/lib/unicore/EastAsianWidth.txt
@@ -1,12 +1,17 @@
-# EastAsianWidth-4.0.0.txt
+# EastAsianWidth-4.1.0.txt
+# Date: 2005-03-17, 15:21:00 PST [KW]
#
# East Asian Width Properties
#
-# This file is a supplement to the UnicodeData.txt file.
-# It contains informative data only.
+# This file is an informative contributory data file in the
+# Unicode Character Database.
+#
+# Copyright (c) 1991-2005 Unicode, Inc.
+# For terms of use, see http://www.unicode.org/terms_of_use.html
+#
# The format is two fields separated by a semicolon.
-# Field 1: Unicode value
-# Field 2: East Asian Width property, consisting of one of the following values:
+# Field 0: Unicode value
+# Field 1: East Asian Width property, consisting of one of the following values:
# "N", "A", "H", "W", "F", "Na"
# - All code points, assigned or unassigned, that are not listed
# explicitly are given the value "N".
@@ -16,7 +21,7 @@
# The Unicode name of each character is provided in a comment for help
# in identifying the characters.
#
-# See UTR #11: East Asian Character Width, for more information
+# See UAX #11: East Asian Character Width, for more information.
0000;N # <control>
0001;N # <control>
0002;N # <control>
@@ -584,6 +589,17 @@
0234;N # LATIN SMALL LETTER L WITH CURL
0235;N # LATIN SMALL LETTER N WITH CURL
0236;N # LATIN SMALL LETTER T WITH CURL
+0237;N # LATIN SMALL LETTER DOTLESS J
+0238;N # LATIN SMALL LETTER DB DIGRAPH
+0239;N # LATIN SMALL LETTER QP DIGRAPH
+023A;N # LATIN CAPITAL LETTER A WITH STROKE
+023B;N # LATIN CAPITAL LETTER C WITH STROKE
+023C;N # LATIN SMALL LETTER C WITH STROKE
+023D;N # LATIN CAPITAL LETTER L WITH BAR
+023E;N # LATIN CAPITAL LETTER T WITH DIAGONAL STROKE
+023F;N # LATIN SMALL LETTER S WITH SWASH TAIL
+0240;N # LATIN SMALL LETTER Z WITH SWASH TAIL
+0241;N # LATIN CAPITAL LETTER GLOTTAL STOP
0250;N # LATIN SMALL LETTER TURNED A
0251;A # LATIN SMALL LETTER ALPHA
0252;N # LATIN SMALL LETTER TURNED ALPHA
@@ -678,7 +694,7 @@
02AB;N # LATIN SMALL LETTER LZ DIGRAPH
02AC;N # LATIN LETTER BILABIAL PERCUSSIVE
02AD;N # LATIN LETTER BIDENTAL PERCUSSIVE
-02AE;N # LATIN SMALL LETTER TURNED H WITH FISHHOOK
+02AE;N # LATIN SMALL LETTER TURNED H WITH FISHHOOK
02AF;N # LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL
02B0;N # MODIFIER LETTER SMALL H
02B1;N # MODIFIER LETTER SMALL H WITH HOOK
@@ -848,6 +864,11 @@
0355;A # COMBINING RIGHT ARROWHEAD BELOW
0356;A # COMBINING RIGHT ARROWHEAD AND UP ARROWHEAD BELOW
0357;A # COMBINING RIGHT HALF RING ABOVE
+0358;A # COMBINING DOT ABOVE RIGHT
+0359;A # COMBINING ASTERISK BELOW
+035A;A # COMBINING DOUBLE RING BELOW
+035B;A # COMBINING ZIGZAG ABOVE
+035C;A # COMBINING DOUBLE BREVE BELOW
035D;A # COMBINING DOUBLE BREVE
035E;A # COMBINING DOUBLE MACRON
035F;A # COMBINING DOUBLE MACRON BELOW
@@ -987,6 +1008,10 @@
03F9;N # GREEK CAPITAL LUNATE SIGMA SYMBOL
03FA;N # GREEK CAPITAL LETTER SAN
03FB;N # GREEK SMALL LETTER SAN
+03FC;N # GREEK RHO WITH STROKE SYMBOL
+03FD;N # GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL
+03FE;N # GREEK CAPITAL DOTTED LUNATE SIGMA SYMBOL
+03FF;N # GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL
0400;N # CYRILLIC CAPITAL LETTER IE WITH GRAVE
0401;A # CYRILLIC CAPITAL LETTER IO
0402;N # CYRILLIC CAPITAL LETTER DJE
@@ -1231,6 +1256,8 @@
04F3;N # CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE
04F4;N # CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS
04F5;N # CYRILLIC SMALL LETTER CHE WITH DIAERESIS
+04F6;N # CYRILLIC CAPITAL LETTER GHE WITH DESCENDER
+04F7;N # CYRILLIC SMALL LETTER GHE WITH DESCENDER
04F8;N # CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS
04F9;N # CYRILLIC SMALL LETTER YERU WITH DIAERESIS
0500;N # CYRILLIC CAPITAL LETTER KOMI DE
@@ -1352,6 +1379,7 @@
059F;N # HEBREW ACCENT QARNEY PARA
05A0;N # HEBREW ACCENT TELISHA GEDOLA
05A1;N # HEBREW ACCENT PAZER
+05A2;N # HEBREW ACCENT ATNAH HAFUKH
05A3;N # HEBREW ACCENT MUNAH
05A4;N # HEBREW ACCENT MAHAPAKH
05A5;N # HEBREW ACCENT MERKHA
@@ -1385,6 +1413,9 @@
05C2;N # HEBREW POINT SIN DOT
05C3;N # HEBREW PUNCTUATION SOF PASUQ
05C4;N # HEBREW MARK UPPER DOT
+05C5;N # HEBREW MARK LOWER DOT
+05C6;N # HEBREW PUNCTUATION NUN HAFUKHA
+05C7;N # HEBREW POINT QAMATS QATAN
05D0;N # HEBREW LETTER ALEF
05D1;N # HEBREW LETTER BET
05D2;N # HEBREW LETTER GIMEL
@@ -1421,6 +1452,7 @@
0601;N # ARABIC SIGN SANAH
0602;N # ARABIC FOOTNOTE MARKER
0603;N # ARABIC SIGN SAFHA
+060B;N # AFGHANI SIGN
060C;N # ARABIC COMMA
060D;N # ARABIC DATE SEPARATOR
060E;N # ARABIC POETIC VERSE SIGN
@@ -1430,8 +1462,9 @@
0612;N # ARABIC SIGN RAHMATULLAH ALAYHE
0613;N # ARABIC SIGN RADI ALLAHOU ANHU
0614;N # ARABIC SIGN TAKHALLUS
-0615;N # ARABIC SMALL HIGH TAH
+0615;N # ARABIC SMALL HIGH TAH
061B;N # ARABIC SEMICOLON
+061E;N # ARABIC TRIPLE DOT PUNCTUATION MARK
061F;N # ARABIC QUESTION MARK
0621;N # ARABIC LETTER HAMZA
0622;N # ARABIC LETTER ALEF WITH MADDA ABOVE
@@ -1484,6 +1517,12 @@
0656;N # ARABIC SUBSCRIPT ALEF
0657;N # ARABIC INVERTED DAMMA
0658;N # ARABIC MARK NOON GHUNNA
+0659;N # ARABIC ZWARAKAY
+065A;N # ARABIC VOWEL SIGN SMALL V ABOVE
+065B;N # ARABIC VOWEL SIGN INVERTED SMALL V ABOVE
+065C;N # ARABIC VOWEL SIGN DOT BELOW
+065D;N # ARABIC REVERSED DAMMA
+065E;N # ARABIC FATHA WITH TWO DOTS
0660;N # ARABIC-INDIC DIGIT ZERO
0661;N # ARABIC-INDIC DIGIT ONE
0662;N # ARABIC-INDIC DIGIT TWO
@@ -1721,6 +1760,36 @@
074D;N # SYRIAC LETTER SOGDIAN ZHAIN
074E;N # SYRIAC LETTER SOGDIAN KHAPH
074F;N # SYRIAC LETTER SOGDIAN FE
+0750;N # ARABIC LETTER BEH WITH THREE DOTS HORIZONTALLY BELOW
+0751;N # ARABIC LETTER BEH WITH DOT BELOW AND THREE DOTS ABOVE
+0752;N # ARABIC LETTER BEH WITH THREE DOTS POINTING UPWARDS BELOW
+0753;N # ARABIC LETTER BEH WITH THREE DOTS POINTING UPWARDS BELOW AND TWO DOTS ABOVE
+0754;N # ARABIC LETTER BEH WITH TWO DOTS BELOW AND DOT ABOVE
+0755;N # ARABIC LETTER BEH WITH INVERTED SMALL V BELOW
+0756;N # ARABIC LETTER BEH WITH SMALL V
+0757;N # ARABIC LETTER HAH WITH TWO DOTS ABOVE
+0758;N # ARABIC LETTER HAH WITH THREE DOTS POINTING UPWARDS BELOW
+0759;N # ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW AND SMALL TAH
+075A;N # ARABIC LETTER DAL WITH INVERTED SMALL V BELOW
+075B;N # ARABIC LETTER REH WITH STROKE
+075C;N # ARABIC LETTER SEEN WITH FOUR DOTS ABOVE
+075D;N # ARABIC LETTER AIN WITH TWO DOTS ABOVE
+075E;N # ARABIC LETTER AIN WITH THREE DOTS POINTING DOWNWARDS ABOVE
+075F;N # ARABIC LETTER AIN WITH TWO DOTS VERTICALLY ABOVE
+0760;N # ARABIC LETTER FEH WITH TWO DOTS BELOW
+0761;N # ARABIC LETTER FEH WITH THREE DOTS POINTING UPWARDS BELOW
+0762;N # ARABIC LETTER KEHEH WITH DOT ABOVE
+0763;N # ARABIC LETTER KEHEH WITH THREE DOTS ABOVE
+0764;N # ARABIC LETTER KEHEH WITH THREE DOTS POINTING UPWARDS BELOW
+0765;N # ARABIC LETTER MEEM WITH DOT ABOVE
+0766;N # ARABIC LETTER MEEM WITH DOT BELOW
+0767;N # ARABIC LETTER NOON WITH TWO DOTS BELOW
+0768;N # ARABIC LETTER NOON WITH SMALL TAH
+0769;N # ARABIC LETTER NOON WITH SMALL V
+076A;N # ARABIC LETTER LAM WITH BAR
+076B;N # ARABIC LETTER REH WITH TWO DOTS VERTICALLY ABOVE
+076C;N # ARABIC LETTER REH WITH HAMZA ABOVE
+076D;N # ARABIC LETTER SEEN WITH TWO DOTS VERTICALLY ABOVE
0780;N # THAANA LETTER HAA
0781;N # THAANA LETTER SHAVIYANI
0782;N # THAANA LETTER NOONU
@@ -1876,6 +1945,7 @@
096E;N # DEVANAGARI DIGIT EIGHT
096F;N # DEVANAGARI DIGIT NINE
0970;N # DEVANAGARI ABBREVIATION SIGN
+097D;N # DEVANAGARI LETTER GLOTTAL STOP
0981;N # BENGALI SIGN CANDRABINDU
0982;N # BENGALI SIGN ANUSVARA
0983;N # BENGALI SIGN VISARGA
@@ -1937,6 +2007,7 @@
09CB;N # BENGALI VOWEL SIGN O
09CC;N # BENGALI VOWEL SIGN AU
09CD;N # BENGALI SIGN VIRAMA
+09CE;N # BENGALI LETTER KHANDA TA
09D7;N # BENGALI AU LENGTH MARK
09DC;N # BENGALI LETTER RRA
09DD;N # BENGALI LETTER RHA
@@ -2240,6 +2311,7 @@
0BB3;N # TAMIL LETTER LLA
0BB4;N # TAMIL LETTER LLLA
0BB5;N # TAMIL LETTER VA
+0BB6;N # TAMIL LETTER SHA
0BB7;N # TAMIL LETTER SSA
0BB8;N # TAMIL LETTER SA
0BB9;N # TAMIL LETTER HA
@@ -2256,6 +2328,7 @@
0BCC;N # TAMIL VOWEL SIGN AU
0BCD;N # TAMIL SIGN VIRAMA
0BD7;N # TAMIL AU LENGTH MARK
+0BE6;N # TAMIL DIGIT ZERO
0BE7;N # TAMIL DIGIT ONE
0BE8;N # TAMIL DIGIT TWO
0BE9;N # TAMIL DIGIT THREE
@@ -2941,6 +3014,8 @@
0FCB;N # TIBETAN SYMBOL NOR BU GSUM -KHYIL
0FCC;N # TIBETAN SYMBOL NOR BU BZHI -KHYIL
0FCF;N # TIBETAN SIGN RDEL NAG GSUM
+0FD0;N # TIBETAN MARK BSKA- SHOG GI MGO RGYAN
+0FD1;N # TIBETAN MARK MNYAM YIG GI MGO RGYAN
1000;N # MYANMAR LETTER KA
1001;N # MYANMAR LETTER KHA
1002;N # MYANMAR LETTER GA
@@ -3098,7 +3173,10 @@
10F6;N # GEORGIAN LETTER FI
10F7;N # GEORGIAN LETTER YN
10F8;N # GEORGIAN LETTER ELIFI
+10F9;N # GEORGIAN LETTER TURNED GAN
+10FA;N # GEORGIAN LETTER AIN
10FB;N # GEORGIAN PARAGRAPH SEPARATOR
+10FC;N # MODIFIER LETTER GEORGIAN NAR
1100;W # HANGUL CHOSEONG KIYEOK
1101;W # HANGUL CHOSEONG SSANGKIYEOK
1102;W # HANGUL CHOSEONG NIEUN
@@ -3346,6 +3424,7 @@
1204;N # ETHIOPIC SYLLABLE HEE
1205;N # ETHIOPIC SYLLABLE HE
1206;N # ETHIOPIC SYLLABLE HO
+1207;N # ETHIOPIC SYLLABLE HOA
1208;N # ETHIOPIC SYLLABLE LA
1209;N # ETHIOPIC SYLLABLE LU
120A;N # ETHIOPIC SYLLABLE LI
@@ -3409,6 +3488,7 @@
1244;N # ETHIOPIC SYLLABLE QEE
1245;N # ETHIOPIC SYLLABLE QE
1246;N # ETHIOPIC SYLLABLE QO
+1247;N # ETHIOPIC SYLLABLE QOA
1248;N # ETHIOPIC SYLLABLE QWA
124A;N # ETHIOPIC SYLLABLE QWI
124B;N # ETHIOPIC SYLLABLE QWAA
@@ -3465,6 +3545,7 @@
1284;N # ETHIOPIC SYLLABLE XEE
1285;N # ETHIOPIC SYLLABLE XE
1286;N # ETHIOPIC SYLLABLE XO
+1287;N # ETHIOPIC SYLLABLE XOA
1288;N # ETHIOPIC SYLLABLE XWA
128A;N # ETHIOPIC SYLLABLE XWI
128B;N # ETHIOPIC SYLLABLE XWAA
@@ -3501,6 +3582,7 @@
12AC;N # ETHIOPIC SYLLABLE KEE
12AD;N # ETHIOPIC SYLLABLE KE
12AE;N # ETHIOPIC SYLLABLE KO
+12AF;N # ETHIOPIC SYLLABLE KOA
12B0;N # ETHIOPIC SYLLABLE KWA
12B2;N # ETHIOPIC SYLLABLE KWI
12B3;N # ETHIOPIC SYLLABLE KWAA
@@ -3525,6 +3607,7 @@
12CC;N # ETHIOPIC SYLLABLE WEE
12CD;N # ETHIOPIC SYLLABLE WE
12CE;N # ETHIOPIC SYLLABLE WO
+12CF;N # ETHIOPIC SYLLABLE WOA
12D0;N # ETHIOPIC SYLLABLE PHARYNGEAL A
12D1;N # ETHIOPIC SYLLABLE PHARYNGEAL U
12D2;N # ETHIOPIC SYLLABLE PHARYNGEAL I
@@ -3555,6 +3638,7 @@
12EC;N # ETHIOPIC SYLLABLE YEE
12ED;N # ETHIOPIC SYLLABLE YE
12EE;N # ETHIOPIC SYLLABLE YO
+12EF;N # ETHIOPIC SYLLABLE YOA
12F0;N # ETHIOPIC SYLLABLE DA
12F1;N # ETHIOPIC SYLLABLE DU
12F2;N # ETHIOPIC SYLLABLE DI
@@ -3586,6 +3670,7 @@
130C;N # ETHIOPIC SYLLABLE GEE
130D;N # ETHIOPIC SYLLABLE GE
130E;N # ETHIOPIC SYLLABLE GO
+130F;N # ETHIOPIC SYLLABLE GOA
1310;N # ETHIOPIC SYLLABLE GWA
1312;N # ETHIOPIC SYLLABLE GWI
1313;N # ETHIOPIC SYLLABLE GWAA
@@ -3598,6 +3683,7 @@
131C;N # ETHIOPIC SYLLABLE GGEE
131D;N # ETHIOPIC SYLLABLE GGE
131E;N # ETHIOPIC SYLLABLE GGO
+131F;N # ETHIOPIC SYLLABLE GGWAA
1320;N # ETHIOPIC SYLLABLE THA
1321;N # ETHIOPIC SYLLABLE THU
1322;N # ETHIOPIC SYLLABLE THI
@@ -3637,6 +3723,7 @@
1344;N # ETHIOPIC SYLLABLE TZEE
1345;N # ETHIOPIC SYLLABLE TZE
1346;N # ETHIOPIC SYLLABLE TZO
+1347;N # ETHIOPIC SYLLABLE TZOA
1348;N # ETHIOPIC SYLLABLE FA
1349;N # ETHIOPIC SYLLABLE FU
134A;N # ETHIOPIC SYLLABLE FI
@@ -3656,6 +3743,8 @@
1358;N # ETHIOPIC SYLLABLE RYA
1359;N # ETHIOPIC SYLLABLE MYA
135A;N # ETHIOPIC SYLLABLE FYA
+135F;N # ETHIOPIC COMBINING GEMINATION MARK
+1360;N # ETHIOPIC SECTION MARK
1361;N # ETHIOPIC WORDSPACE
1362;N # ETHIOPIC FULL STOP
1363;N # ETHIOPIC COMMA
@@ -3684,6 +3773,32 @@
137A;N # ETHIOPIC NUMBER NINETY
137B;N # ETHIOPIC NUMBER HUNDRED
137C;N # ETHIOPIC NUMBER TEN THOUSAND
+1380;N # ETHIOPIC SYLLABLE SEBATBEIT MWA
+1381;N # ETHIOPIC SYLLABLE MWI
+1382;N # ETHIOPIC SYLLABLE MWEE
+1383;N # ETHIOPIC SYLLABLE MWE
+1384;N # ETHIOPIC SYLLABLE SEBATBEIT BWA
+1385;N # ETHIOPIC SYLLABLE BWI
+1386;N # ETHIOPIC SYLLABLE BWEE
+1387;N # ETHIOPIC SYLLABLE BWE
+1388;N # ETHIOPIC SYLLABLE SEBATBEIT FWA
+1389;N # ETHIOPIC SYLLABLE FWI
+138A;N # ETHIOPIC SYLLABLE FWEE
+138B;N # ETHIOPIC SYLLABLE FWE
+138C;N # ETHIOPIC SYLLABLE SEBATBEIT PWA
+138D;N # ETHIOPIC SYLLABLE PWI
+138E;N # ETHIOPIC SYLLABLE PWEE
+138F;N # ETHIOPIC SYLLABLE PWE
+1390;N # ETHIOPIC TONAL MARK YIZET
+1391;N # ETHIOPIC TONAL MARK DERET
+1392;N # ETHIOPIC TONAL MARK RIKRIK
+1393;N # ETHIOPIC TONAL MARK SHORT RIKRIK
+1394;N # ETHIOPIC TONAL MARK DIFAT
+1395;N # ETHIOPIC TONAL MARK KENAT
+1396;N # ETHIOPIC TONAL MARK CHIRET
+1397;N # ETHIOPIC TONAL MARK HIDET
+1398;N # ETHIOPIC TONAL MARK DERET-HIDET
+1399;N # ETHIOPIC TONAL MARK KURT
13A0;N # CHEROKEE LETTER A
13A1;N # CHEROKEE LETTER E
13A2;N # CHEROKEE LETTER I
@@ -4960,6 +5075,86 @@
1972;N # TAI LE LETTER TONE-4
1973;N # TAI LE LETTER TONE-5
1974;N # TAI LE LETTER TONE-6
+1980;N # NEW TAI LUE LETTER HIGH QA
+1981;N # NEW TAI LUE LETTER LOW QA
+1982;N # NEW TAI LUE LETTER HIGH KA
+1983;N # NEW TAI LUE LETTER HIGH XA
+1984;N # NEW TAI LUE LETTER HIGH NGA
+1985;N # NEW TAI LUE LETTER LOW KA
+1986;N # NEW TAI LUE LETTER LOW XA
+1987;N # NEW TAI LUE LETTER LOW NGA
+1988;N # NEW TAI LUE LETTER HIGH TSA
+1989;N # NEW TAI LUE LETTER HIGH SA
+198A;N # NEW TAI LUE LETTER HIGH YA
+198B;N # NEW TAI LUE LETTER LOW TSA
+198C;N # NEW TAI LUE LETTER LOW SA
+198D;N # NEW TAI LUE LETTER LOW YA
+198E;N # NEW TAI LUE LETTER HIGH TA
+198F;N # NEW TAI LUE LETTER HIGH THA
+1990;N # NEW TAI LUE LETTER HIGH NA
+1991;N # NEW TAI LUE LETTER LOW TA
+1992;N # NEW TAI LUE LETTER LOW THA
+1993;N # NEW TAI LUE LETTER LOW NA
+1994;N # NEW TAI LUE LETTER HIGH PA
+1995;N # NEW TAI LUE LETTER HIGH PHA
+1996;N # NEW TAI LUE LETTER HIGH MA
+1997;N # NEW TAI LUE LETTER LOW PA
+1998;N # NEW TAI LUE LETTER LOW PHA
+1999;N # NEW TAI LUE LETTER LOW MA
+199A;N # NEW TAI LUE LETTER HIGH FA
+199B;N # NEW TAI LUE LETTER HIGH VA
+199C;N # NEW TAI LUE LETTER HIGH LA
+199D;N # NEW TAI LUE LETTER LOW FA
+199E;N # NEW TAI LUE LETTER LOW VA
+199F;N # NEW TAI LUE LETTER LOW LA
+19A0;N # NEW TAI LUE LETTER HIGH HA
+19A1;N # NEW TAI LUE LETTER HIGH DA
+19A2;N # NEW TAI LUE LETTER HIGH BA
+19A3;N # NEW TAI LUE LETTER LOW HA
+19A4;N # NEW TAI LUE LETTER LOW DA
+19A5;N # NEW TAI LUE LETTER LOW BA
+19A6;N # NEW TAI LUE LETTER HIGH KVA
+19A7;N # NEW TAI LUE LETTER HIGH XVA
+19A8;N # NEW TAI LUE LETTER LOW KVA
+19A9;N # NEW TAI LUE LETTER LOW XVA
+19B0;N # NEW TAI LUE VOWEL SIGN VOWEL SHORTENER
+19B1;N # NEW TAI LUE VOWEL SIGN AA
+19B2;N # NEW TAI LUE VOWEL SIGN II
+19B3;N # NEW TAI LUE VOWEL SIGN U
+19B4;N # NEW TAI LUE VOWEL SIGN UU
+19B5;N # NEW TAI LUE VOWEL SIGN E
+19B6;N # NEW TAI LUE VOWEL SIGN AE
+19B7;N # NEW TAI LUE VOWEL SIGN O
+19B8;N # NEW TAI LUE VOWEL SIGN OA
+19B9;N # NEW TAI LUE VOWEL SIGN UE
+19BA;N # NEW TAI LUE VOWEL SIGN AY
+19BB;N # NEW TAI LUE VOWEL SIGN AAY
+19BC;N # NEW TAI LUE VOWEL SIGN UY
+19BD;N # NEW TAI LUE VOWEL SIGN OY
+19BE;N # NEW TAI LUE VOWEL SIGN OAY
+19BF;N # NEW TAI LUE VOWEL SIGN UEY
+19C0;N # NEW TAI LUE VOWEL SIGN IY
+19C1;N # NEW TAI LUE LETTER FINAL V
+19C2;N # NEW TAI LUE LETTER FINAL NG
+19C3;N # NEW TAI LUE LETTER FINAL N
+19C4;N # NEW TAI LUE LETTER FINAL M
+19C5;N # NEW TAI LUE LETTER FINAL K
+19C6;N # NEW TAI LUE LETTER FINAL D
+19C7;N # NEW TAI LUE LETTER FINAL B
+19C8;N # NEW TAI LUE TONE MARK-1
+19C9;N # NEW TAI LUE TONE MARK-2
+19D0;N # NEW TAI LUE DIGIT ZERO
+19D1;N # NEW TAI LUE DIGIT ONE
+19D2;N # NEW TAI LUE DIGIT TWO
+19D3;N # NEW TAI LUE DIGIT THREE
+19D4;N # NEW TAI LUE DIGIT FOUR
+19D5;N # NEW TAI LUE DIGIT FIVE
+19D6;N # NEW TAI LUE DIGIT SIX
+19D7;N # NEW TAI LUE DIGIT SEVEN
+19D8;N # NEW TAI LUE DIGIT EIGHT
+19D9;N # NEW TAI LUE DIGIT NINE
+19DE;N # NEW TAI LUE SIGN LAE
+19DF;N # NEW TAI LUE SIGN LAEV
19E0;N # KHMER SYMBOL PATHAMASAT
19E1;N # KHMER SYMBOL MUOY KOET
19E2;N # KHMER SYMBOL PII KOET
@@ -4992,6 +5187,36 @@
19FD;N # KHMER SYMBOL DAP-BEI ROC
19FE;N # KHMER SYMBOL DAP-BUON ROC
19FF;N # KHMER SYMBOL DAP-PRAM ROC
+1A00;N # BUGINESE LETTER KA
+1A01;N # BUGINESE LETTER GA
+1A02;N # BUGINESE LETTER NGA
+1A03;N # BUGINESE LETTER NGKA
+1A04;N # BUGINESE LETTER PA
+1A05;N # BUGINESE LETTER BA
+1A06;N # BUGINESE LETTER MA
+1A07;N # BUGINESE LETTER MPA
+1A08;N # BUGINESE LETTER TA
+1A09;N # BUGINESE LETTER DA
+1A0A;N # BUGINESE LETTER NA
+1A0B;N # BUGINESE LETTER NRA
+1A0C;N # BUGINESE LETTER CA
+1A0D;N # BUGINESE LETTER JA
+1A0E;N # BUGINESE LETTER NYA
+1A0F;N # BUGINESE LETTER NYCA
+1A10;N # BUGINESE LETTER YA
+1A11;N # BUGINESE LETTER RA
+1A12;N # BUGINESE LETTER LA
+1A13;N # BUGINESE LETTER VA
+1A14;N # BUGINESE LETTER SA
+1A15;N # BUGINESE LETTER A
+1A16;N # BUGINESE LETTER HA
+1A17;N # BUGINESE VOWEL SIGN I
+1A18;N # BUGINESE VOWEL SIGN U
+1A19;N # BUGINESE VOWEL SIGN E
+1A1A;N # BUGINESE VOWEL SIGN O
+1A1B;N # BUGINESE VOWEL SIGN AE
+1A1E;N # BUGINESE PALLAWA
+1A1F;N # BUGINESE END OF SECTION
1D00;N # LATIN LETTER SMALL CAPITAL A
1D01;N # LATIN LETTER SMALL CAPITAL AE
1D02;N # LATIN SMALL LETTER TURNED AE
@@ -5100,6 +5325,94 @@
1D69;N # GREEK SUBSCRIPT SMALL LETTER PHI
1D6A;N # GREEK SUBSCRIPT SMALL LETTER CHI
1D6B;N # LATIN SMALL LETTER UE
+1D6C;N # LATIN SMALL LETTER B WITH MIDDLE TILDE
+1D6D;N # LATIN SMALL LETTER D WITH MIDDLE TILDE
+1D6E;N # LATIN SMALL LETTER F WITH MIDDLE TILDE
+1D6F;N # LATIN SMALL LETTER M WITH MIDDLE TILDE
+1D70;N # LATIN SMALL LETTER N WITH MIDDLE TILDE
+1D71;N # LATIN SMALL LETTER P WITH MIDDLE TILDE
+1D72;N # LATIN SMALL LETTER R WITH MIDDLE TILDE
+1D73;N # LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE
+1D74;N # LATIN SMALL LETTER S WITH MIDDLE TILDE
+1D75;N # LATIN SMALL LETTER T WITH MIDDLE TILDE
+1D76;N # LATIN SMALL LETTER Z WITH MIDDLE TILDE
+1D77;N # LATIN SMALL LETTER TURNED G
+1D78;N # MODIFIER LETTER CYRILLIC EN
+1D79;N # LATIN SMALL LETTER INSULAR G
+1D7A;N # LATIN SMALL LETTER TH WITH STRIKETHROUGH
+1D7B;N # LATIN SMALL CAPITAL LETTER I WITH STROKE
+1D7C;N # LATIN SMALL LETTER IOTA WITH STROKE
+1D7D;N # LATIN SMALL LETTER P WITH STROKE
+1D7E;N # LATIN SMALL CAPITAL LETTER U WITH STROKE
+1D7F;N # LATIN SMALL LETTER UPSILON WITH STROKE
+1D80;N # LATIN SMALL LETTER B WITH PALATAL HOOK
+1D81;N # LATIN SMALL LETTER D WITH PALATAL HOOK
+1D82;N # LATIN SMALL LETTER F WITH PALATAL HOOK
+1D83;N # LATIN SMALL LETTER G WITH PALATAL HOOK
+1D84;N # LATIN SMALL LETTER K WITH PALATAL HOOK
+1D85;N # LATIN SMALL LETTER L WITH PALATAL HOOK
+1D86;N # LATIN SMALL LETTER M WITH PALATAL HOOK
+1D87;N # LATIN SMALL LETTER N WITH PALATAL HOOK
+1D88;N # LATIN SMALL LETTER P WITH PALATAL HOOK
+1D89;N # LATIN SMALL LETTER R WITH PALATAL HOOK
+1D8A;N # LATIN SMALL LETTER S WITH PALATAL HOOK
+1D8B;N # LATIN SMALL LETTER ESH WITH PALATAL HOOK
+1D8C;N # LATIN SMALL LETTER V WITH PALATAL HOOK
+1D8D;N # LATIN SMALL LETTER X WITH PALATAL HOOK
+1D8E;N # LATIN SMALL LETTER Z WITH PALATAL HOOK
+1D8F;N # LATIN SMALL LETTER A WITH RETROFLEX HOOK
+1D90;N # LATIN SMALL LETTER ALPHA WITH RETROFLEX HOOK
+1D91;N # LATIN SMALL LETTER D WITH HOOK AND TAIL
+1D92;N # LATIN SMALL LETTER E WITH RETROFLEX HOOK
+1D93;N # LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK
+1D94;N # LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK
+1D95;N # LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK
+1D96;N # LATIN SMALL LETTER I WITH RETROFLEX HOOK
+1D97;N # LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK
+1D98;N # LATIN SMALL LETTER ESH WITH RETROFLEX HOOK
+1D99;N # LATIN SMALL LETTER U WITH RETROFLEX HOOK
+1D9A;N # LATIN SMALL LETTER EZH WITH RETROFLEX HOOK
+1D9B;N # MODIFIER LETTER SMALL TURNED ALPHA
+1D9C;N # MODIFIER LETTER SMALL C
+1D9D;N # MODIFIER LETTER SMALL C WITH CURL
+1D9E;N # MODIFIER LETTER SMALL ETH
+1D9F;N # MODIFIER LETTER SMALL REVERSED OPEN E
+1DA0;N # MODIFIER LETTER SMALL F
+1DA1;N # MODIFIER LETTER SMALL DOTLESS J WITH STROKE
+1DA2;N # MODIFIER LETTER SMALL SCRIPT G
+1DA3;N # MODIFIER LETTER SMALL TURNED H
+1DA4;N # MODIFIER LETTER SMALL I WITH STROKE
+1DA5;N # MODIFIER LETTER SMALL IOTA
+1DA6;N # MODIFIER LETTER SMALL CAPITAL I
+1DA7;N # MODIFIER LETTER SMALL CAPITAL I WITH STROKE
+1DA8;N # MODIFIER LETTER SMALL J WITH CROSSED-TAIL
+1DA9;N # MODIFIER LETTER SMALL L WITH RETROFLEX HOOK
+1DAA;N # MODIFIER LETTER SMALL L WITH PALATAL HOOK
+1DAB;N # MODIFIER LETTER SMALL CAPITAL L
+1DAC;N # MODIFIER LETTER SMALL M WITH HOOK
+1DAD;N # MODIFIER LETTER SMALL TURNED M WITH LONG LEG
+1DAE;N # MODIFIER LETTER SMALL N WITH LEFT HOOK
+1DAF;N # MODIFIER LETTER SMALL N WITH RETROFLEX HOOK
+1DB0;N # MODIFIER LETTER SMALL CAPITAL N
+1DB1;N # MODIFIER LETTER SMALL BARRED O
+1DB2;N # MODIFIER LETTER SMALL PHI
+1DB3;N # MODIFIER LETTER SMALL S WITH HOOK
+1DB4;N # MODIFIER LETTER SMALL ESH
+1DB5;N # MODIFIER LETTER SMALL T WITH PALATAL HOOK
+1DB6;N # MODIFIER LETTER SMALL U BAR
+1DB7;N # MODIFIER LETTER SMALL UPSILON
+1DB8;N # MODIFIER LETTER SMALL CAPITAL U
+1DB9;N # MODIFIER LETTER SMALL V WITH HOOK
+1DBA;N # MODIFIER LETTER SMALL TURNED V
+1DBB;N # MODIFIER LETTER SMALL Z
+1DBC;N # MODIFIER LETTER SMALL Z WITH RETROFLEX HOOK
+1DBD;N # MODIFIER LETTER SMALL Z WITH CURL
+1DBE;N # MODIFIER LETTER SMALL EZH
+1DBF;N # MODIFIER LETTER SMALL THETA
+1DC0;N # COMBINING DOTTED GRAVE ACCENT
+1DC1;N # COMBINING DOTTED ACUTE ACCENT
+1DC2;N # COMBINING SNAKE BELOW
+1DC3;N # COMBINING SUSPENSION MARK
1E00;N # LATIN CAPITAL LETTER A WITH RING BELOW
1E01;N # LATIN SMALL LETTER A WITH RING BELOW
1E02;N # LATIN CAPITAL LETTER B WITH DOT ABOVE
@@ -5664,7 +5977,16 @@
2052;N # COMMERCIAL MINUS SIGN
2053;N # SWUNG DASH
2054;N # INVERTED UNDERTIE
+2055;N # FLOWER PUNCTUATION MARK
+2056;N # THREE DOT PUNCTUATION
2057;N # QUADRUPLE PRIME
+2058;N # FOUR DOT PUNCTUATION
+2059;N # FIVE DOT PUNCTUATION
+205A;N # TWO DOT PUNCTUATION
+205B;N # FOUR DOT MARK
+205C;N # DOTTED CROSS
+205D;N # TRICOLON
+205E;N # VERTICAL FOUR DOTS
205F;N # MEDIUM MATHEMATICAL SPACE
2060;N # WORD JOINER
2061;N # FUNCTION APPLICATION
@@ -5705,6 +6027,11 @@
208C;N # SUBSCRIPT EQUALS SIGN
208D;N # SUBSCRIPT LEFT PARENTHESIS
208E;N # SUBSCRIPT RIGHT PARENTHESIS
+2090;N # LATIN SUBSCRIPT SMALL LETTER A
+2091;N # LATIN SUBSCRIPT SMALL LETTER E
+2092;N # LATIN SUBSCRIPT SMALL LETTER O
+2093;N # LATIN SUBSCRIPT SMALL LETTER X
+2094;N # LATIN SUBSCRIPT SMALL LETTER SCHWA
20A0;N # EURO-CURRENCY SIGN
20A1;N # COLON SIGN
20A2;N # CRUZEIRO SIGN
@@ -5723,6 +6050,10 @@
20AF;N # DRACHMA SIGN
20B0;N # GERMAN PENNY SIGN
20B1;N # PESO SIGN
+20B2;N # GUARANI SIGN
+20B3;N # AUSTRAL SIGN
+20B4;N # HRYVNIA SIGN
+20B5;N # CEDI SIGN
20D0;N # COMBINING LEFT HARPOON ABOVE
20D1;N # COMBINING RIGHT HARPOON ABOVE
20D2;N # COMBINING LONG VERTICAL LINE OVERLAY
@@ -5750,6 +6081,7 @@
20E8;N # COMBINING TRIPLE UNDERDOT
20E9;N # COMBINING WIDE BRIDGE ABOVE
20EA;N # COMBINING LEFTWARDS ARROW OVERLAY
+20EB;N # COMBINING LONG DOUBLE SOLIDUS OVERLAY
2100;N # ACCOUNT OF
2101;N # ADDRESSED TO THE SUBJECT
2102;N # DOUBLE-STRUCK CAPITAL C
@@ -5810,6 +6142,7 @@
2139;N # INFORMATION SOURCE
213A;N # ROTATED CAPITAL Q
213B;N # FACSIMILE SIGN
+213C;N # DOUBLE-STRUCK SMALL PI
213D;N # DOUBLE-STRUCK SMALL GAMMA
213E;N # DOUBLE-STRUCK CAPITAL GAMMA
213F;N # DOUBLE-STRUCK CAPITAL PI
@@ -5825,6 +6158,7 @@
2149;N # DOUBLE-STRUCK ITALIC SMALL J
214A;N # PROPERTY LINE
214B;N # TURNED AMPERSAND
+214C;N # PER SIGN
2153;A # VULGAR FRACTION ONE THIRD
2154;A # VULGAR FRACTION TWO THIRDS
2155;N # VULGAR FRACTION ONE FIFTH
@@ -6451,6 +6785,17 @@
23CE;N # RETURN SYMBOL
23CF;N # EJECT SYMBOL
23D0;N # VERTICAL LINE EXTENSION
+23D1;N # METRICAL BREVE
+23D2;N # METRICAL LONG OVER SHORT
+23D3;N # METRICAL SHORT OVER LONG
+23D4;N # METRICAL LONG OVER TWO SHORTS
+23D5;N # METRICAL TWO SHORTS OVER LONG
+23D6;N # METRICAL TWO SHORTS JOINED
+23D7;N # METRICAL TRISEME
+23D8;N # METRICAL TETRASEME
+23D9;N # METRICAL PENTASEME
+23DA;N # EARTH GROUND
+23DB;N # FUSE
2400;N # SYMBOL FOR NULL
2401;N # SYMBOL FOR START OF HEADING
2402;N # SYMBOL FOR START OF TEXT
@@ -6941,6 +7286,7 @@
2615;A # HOT BEVERAGE
2616;N # WHITE SHOGI PIECE
2617;N # BLACK SHOGI PIECE
+2618;N # SHAMROCK
2619;N # REVERSED ROTATED FLORAL HEART BULLET
261A;N # BLACK LEFT POINTING INDEX
261B;N # BLACK RIGHT POINTING INDEX
@@ -7042,6 +7388,8 @@
267B;N # BLACK UNIVERSAL RECYCLING SYMBOL
267C;N # RECYCLED PAPER SYMBOL
267D;N # PARTIALLY-RECYCLED PAPER SYMBOL
+267E;N # PERMANENT PAPER SIGN
+267F;N # WHEELCHAIR SYMBOL
2680;N # DIE FACE-1
2681;N # DIE FACE-2
2682;N # DIE FACE-3
@@ -7060,8 +7408,35 @@
268F;N # DIGRAM FOR GREATER YIN
2690;N # WHITE FLAG
2691;N # BLACK FLAG
+2692;N # HAMMER AND PICK
+2693;N # ANCHOR
+2694;N # CROSSED SWORDS
+2695;N # STAFF OF AESCULAPIUS
+2696;N # SCALES
+2697;N # ALEMBIC
+2698;N # FLOWER
+2699;N # GEAR
+269A;N # STAFF OF HERMES
+269B;N # ATOM SYMBOL
+269C;N # FLEUR-DE-LIS
26A0;N # WARNING SIGN
26A1;N # HIGH VOLTAGE SIGN
+26A2;N # DOUBLED FEMALE SIGN
+26A3;N # DOUBLED MALE SIGN
+26A4;N # INTERLOCKED FEMALE AND MALE SIGN
+26A5;N # MALE AND FEMALE SIGN
+26A6;N # MALE WITH STROKE SIGN
+26A7;N # MALE WITH STROKE AND MALE AND FEMALE SIGN
+26A8;N # VERTICAL MALE WITH STROKE SIGN
+26A9;N # HORIZONTAL MALE WITH STROKE SIGN
+26AA;N # MEDIUM WHITE CIRCLE
+26AB;N # MEDIUM BLACK CIRCLE
+26AC;N # MEDIUM SMALL WHITE CIRCLE
+26AD;N # MARRIAGE SYMBOL
+26AE;N # DIVORCE SYMBOL
+26AF;N # UNMARRIED PARTNERSHIP SYMBOL
+26B0;N # COFFIN
+26B1;N # FUNERAL URN
2701;N # UPPER BLADE SCISSORS
2702;N # BLACK SCISSORS
2703;N # LOWER BLADE SCISSORS
@@ -7236,6 +7611,13 @@
27BC;N # WEDGE-TAILED RIGHTWARDS ARROW
27BD;N # HEAVY WEDGE-TAILED RIGHTWARDS ARROW
27BE;N # OPEN-OUTLINED RIGHTWARDS ARROW
+27C0;N # THREE DIMENSIONAL ANGLE
+27C1;N # WHITE TRIANGLE CONTAINING SMALL WHITE TRIANGLE
+27C2;N # PERPENDICULAR
+27C3;N # OPEN SUBSET
+27C4;N # OPEN SUPERSET
+27C5;N # LEFT S-SHAPED BAG DELIMITER
+27C6;N # RIGHT S-SHAPED BAG DELIMITER
27D0;N # WHITE DIAMOND WITH CENTRED DOT
27D1;N # AND WITH DOT
27D2;N # ELEMENT OF OPENING UPWARDS
@@ -8062,6 +8444,418 @@
2B0B;N # SOUTH WEST BLACK ARROW
2B0C;N # LEFT RIGHT BLACK ARROW
2B0D;N # UP DOWN BLACK ARROW
+2B0E;N # RIGHTWARDS ARROW WITH TIP DOWNWARDS
+2B0F;N # RIGHTWARDS ARROW WITH TIP UPWARDS
+2B10;N # LEFTWARDS ARROW WITH TIP DOWNWARDS
+2B11;N # LEFTWARDS ARROW WITH TIP UPWARDS
+2B12;N # SQUARE WITH TOP HALF BLACK
+2B13;N # SQUARE WITH BOTTOM HALF BLACK
+2C00;N # GLAGOLITIC CAPITAL LETTER AZU
+2C01;N # GLAGOLITIC CAPITAL LETTER BUKY
+2C02;N # GLAGOLITIC CAPITAL LETTER VEDE
+2C03;N # GLAGOLITIC CAPITAL LETTER GLAGOLI
+2C04;N # GLAGOLITIC CAPITAL LETTER DOBRO
+2C05;N # GLAGOLITIC CAPITAL LETTER YESTU
+2C06;N # GLAGOLITIC CAPITAL LETTER ZHIVETE
+2C07;N # GLAGOLITIC CAPITAL LETTER DZELO
+2C08;N # GLAGOLITIC CAPITAL LETTER ZEMLJA
+2C09;N # GLAGOLITIC CAPITAL LETTER IZHE
+2C0A;N # GLAGOLITIC CAPITAL LETTER INITIAL IZHE
+2C0B;N # GLAGOLITIC CAPITAL LETTER I
+2C0C;N # GLAGOLITIC CAPITAL LETTER DJERVI
+2C0D;N # GLAGOLITIC CAPITAL LETTER KAKO
+2C0E;N # GLAGOLITIC CAPITAL LETTER LJUDIJE
+2C0F;N # GLAGOLITIC CAPITAL LETTER MYSLITE
+2C10;N # GLAGOLITIC CAPITAL LETTER NASHI
+2C11;N # GLAGOLITIC CAPITAL LETTER ONU
+2C12;N # GLAGOLITIC CAPITAL LETTER POKOJI
+2C13;N # GLAGOLITIC CAPITAL LETTER RITSI
+2C14;N # GLAGOLITIC CAPITAL LETTER SLOVO
+2C15;N # GLAGOLITIC CAPITAL LETTER TVRIDO
+2C16;N # GLAGOLITIC CAPITAL LETTER UKU
+2C17;N # GLAGOLITIC CAPITAL LETTER FRITU
+2C18;N # GLAGOLITIC CAPITAL LETTER HERU
+2C19;N # GLAGOLITIC CAPITAL LETTER OTU
+2C1A;N # GLAGOLITIC CAPITAL LETTER PE
+2C1B;N # GLAGOLITIC CAPITAL LETTER SHTA
+2C1C;N # GLAGOLITIC CAPITAL LETTER TSI
+2C1D;N # GLAGOLITIC CAPITAL LETTER CHRIVI
+2C1E;N # GLAGOLITIC CAPITAL LETTER SHA
+2C1F;N # GLAGOLITIC CAPITAL LETTER YERU
+2C20;N # GLAGOLITIC CAPITAL LETTER YERI
+2C21;N # GLAGOLITIC CAPITAL LETTER YATI
+2C22;N # GLAGOLITIC CAPITAL LETTER SPIDERY HA
+2C23;N # GLAGOLITIC CAPITAL LETTER YU
+2C24;N # GLAGOLITIC CAPITAL LETTER SMALL YUS
+2C25;N # GLAGOLITIC CAPITAL LETTER SMALL YUS WITH TAIL
+2C26;N # GLAGOLITIC CAPITAL LETTER YO
+2C27;N # GLAGOLITIC CAPITAL LETTER IOTATED SMALL YUS
+2C28;N # GLAGOLITIC CAPITAL LETTER BIG YUS
+2C29;N # GLAGOLITIC CAPITAL LETTER IOTATED BIG YUS
+2C2A;N # GLAGOLITIC CAPITAL LETTER FITA
+2C2B;N # GLAGOLITIC CAPITAL LETTER IZHITSA
+2C2C;N # GLAGOLITIC CAPITAL LETTER SHTAPIC
+2C2D;N # GLAGOLITIC CAPITAL LETTER TROKUTASTI A
+2C2E;N # GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE
+2C30;N # GLAGOLITIC SMALL LETTER AZU
+2C31;N # GLAGOLITIC SMALL LETTER BUKY
+2C32;N # GLAGOLITIC SMALL LETTER VEDE
+2C33;N # GLAGOLITIC SMALL LETTER GLAGOLI
+2C34;N # GLAGOLITIC SMALL LETTER DOBRO
+2C35;N # GLAGOLITIC SMALL LETTER YESTU
+2C36;N # GLAGOLITIC SMALL LETTER ZHIVETE
+2C37;N # GLAGOLITIC SMALL LETTER DZELO
+2C38;N # GLAGOLITIC SMALL LETTER ZEMLJA
+2C39;N # GLAGOLITIC SMALL LETTER IZHE
+2C3A;N # GLAGOLITIC SMALL LETTER INITIAL IZHE
+2C3B;N # GLAGOLITIC SMALL LETTER I
+2C3C;N # GLAGOLITIC SMALL LETTER DJERVI
+2C3D;N # GLAGOLITIC SMALL LETTER KAKO
+2C3E;N # GLAGOLITIC SMALL LETTER LJUDIJE
+2C3F;N # GLAGOLITIC SMALL LETTER MYSLITE
+2C40;N # GLAGOLITIC SMALL LETTER NASHI
+2C41;N # GLAGOLITIC SMALL LETTER ONU
+2C42;N # GLAGOLITIC SMALL LETTER POKOJI
+2C43;N # GLAGOLITIC SMALL LETTER RITSI
+2C44;N # GLAGOLITIC SMALL LETTER SLOVO
+2C45;N # GLAGOLITIC SMALL LETTER TVRIDO
+2C46;N # GLAGOLITIC SMALL LETTER UKU
+2C47;N # GLAGOLITIC SMALL LETTER FRITU
+2C48;N # GLAGOLITIC SMALL LETTER HERU
+2C49;N # GLAGOLITIC SMALL LETTER OTU
+2C4A;N # GLAGOLITIC SMALL LETTER PE
+2C4B;N # GLAGOLITIC SMALL LETTER SHTA
+2C4C;N # GLAGOLITIC SMALL LETTER TSI
+2C4D;N # GLAGOLITIC SMALL LETTER CHRIVI
+2C4E;N # GLAGOLITIC SMALL LETTER SHA
+2C4F;N # GLAGOLITIC SMALL LETTER YERU
+2C50;N # GLAGOLITIC SMALL LETTER YERI
+2C51;N # GLAGOLITIC SMALL LETTER YATI
+2C52;N # GLAGOLITIC SMALL LETTER SPIDERY HA
+2C53;N # GLAGOLITIC SMALL LETTER YU
+2C54;N # GLAGOLITIC SMALL LETTER SMALL YUS
+2C55;N # GLAGOLITIC SMALL LETTER SMALL YUS WITH TAIL
+2C56;N # GLAGOLITIC SMALL LETTER YO
+2C57;N # GLAGOLITIC SMALL LETTER IOTATED SMALL YUS
+2C58;N # GLAGOLITIC SMALL LETTER BIG YUS
+2C59;N # GLAGOLITIC SMALL LETTER IOTATED BIG YUS
+2C5A;N # GLAGOLITIC SMALL LETTER FITA
+2C5B;N # GLAGOLITIC SMALL LETTER IZHITSA
+2C5C;N # GLAGOLITIC SMALL LETTER SHTAPIC
+2C5D;N # GLAGOLITIC SMALL LETTER TROKUTASTI A
+2C5E;N # GLAGOLITIC SMALL LETTER LATINATE MYSLITE
+2C80;N # COPTIC CAPITAL LETTER ALFA
+2C81;N # COPTIC SMALL LETTER ALFA
+2C82;N # COPTIC CAPITAL LETTER VIDA
+2C83;N # COPTIC SMALL LETTER VIDA
+2C84;N # COPTIC CAPITAL LETTER GAMMA
+2C85;N # COPTIC SMALL LETTER GAMMA
+2C86;N # COPTIC CAPITAL LETTER DALDA
+2C87;N # COPTIC SMALL LETTER DALDA
+2C88;N # COPTIC CAPITAL LETTER EIE
+2C89;N # COPTIC SMALL LETTER EIE
+2C8A;N # COPTIC CAPITAL LETTER SOU
+2C8B;N # COPTIC SMALL LETTER SOU
+2C8C;N # COPTIC CAPITAL LETTER ZATA
+2C8D;N # COPTIC SMALL LETTER ZATA
+2C8E;N # COPTIC CAPITAL LETTER HATE
+2C8F;N # COPTIC SMALL LETTER HATE
+2C90;N # COPTIC CAPITAL LETTER THETHE
+2C91;N # COPTIC SMALL LETTER THETHE
+2C92;N # COPTIC CAPITAL LETTER IAUDA
+2C93;N # COPTIC SMALL LETTER IAUDA
+2C94;N # COPTIC CAPITAL LETTER KAPA
+2C95;N # COPTIC SMALL LETTER KAPA
+2C96;N # COPTIC CAPITAL LETTER LAULA
+2C97;N # COPTIC SMALL LETTER LAULA
+2C98;N # COPTIC CAPITAL LETTER MI
+2C99;N # COPTIC SMALL LETTER MI
+2C9A;N # COPTIC CAPITAL LETTER NI
+2C9B;N # COPTIC SMALL LETTER NI
+2C9C;N # COPTIC CAPITAL LETTER KSI
+2C9D;N # COPTIC SMALL LETTER KSI
+2C9E;N # COPTIC CAPITAL LETTER O
+2C9F;N # COPTIC SMALL LETTER O
+2CA0;N # COPTIC CAPITAL LETTER PI
+2CA1;N # COPTIC SMALL LETTER PI
+2CA2;N # COPTIC CAPITAL LETTER RO
+2CA3;N # COPTIC SMALL LETTER RO
+2CA4;N # COPTIC CAPITAL LETTER SIMA
+2CA5;N # COPTIC SMALL LETTER SIMA
+2CA6;N # COPTIC CAPITAL LETTER TAU
+2CA7;N # COPTIC SMALL LETTER TAU
+2CA8;N # COPTIC CAPITAL LETTER UA
+2CA9;N # COPTIC SMALL LETTER UA
+2CAA;N # COPTIC CAPITAL LETTER FI
+2CAB;N # COPTIC SMALL LETTER FI
+2CAC;N # COPTIC CAPITAL LETTER KHI
+2CAD;N # COPTIC SMALL LETTER KHI
+2CAE;N # COPTIC CAPITAL LETTER PSI
+2CAF;N # COPTIC SMALL LETTER PSI
+2CB0;N # COPTIC CAPITAL LETTER OOU
+2CB1;N # COPTIC SMALL LETTER OOU
+2CB2;N # COPTIC CAPITAL LETTER DIALECT-P ALEF
+2CB3;N # COPTIC SMALL LETTER DIALECT-P ALEF
+2CB4;N # COPTIC CAPITAL LETTER OLD COPTIC AIN
+2CB5;N # COPTIC SMALL LETTER OLD COPTIC AIN
+2CB6;N # COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE
+2CB7;N # COPTIC SMALL LETTER CRYPTOGRAMMIC EIE
+2CB8;N # COPTIC CAPITAL LETTER DIALECT-P KAPA
+2CB9;N # COPTIC SMALL LETTER DIALECT-P KAPA
+2CBA;N # COPTIC CAPITAL LETTER DIALECT-P NI
+2CBB;N # COPTIC SMALL LETTER DIALECT-P NI
+2CBC;N # COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI
+2CBD;N # COPTIC SMALL LETTER CRYPTOGRAMMIC NI
+2CBE;N # COPTIC CAPITAL LETTER OLD COPTIC OOU
+2CBF;N # COPTIC SMALL LETTER OLD COPTIC OOU
+2CC0;N # COPTIC CAPITAL LETTER SAMPI
+2CC1;N # COPTIC SMALL LETTER SAMPI
+2CC2;N # COPTIC CAPITAL LETTER CROSSED SHEI
+2CC3;N # COPTIC SMALL LETTER CROSSED SHEI
+2CC4;N # COPTIC CAPITAL LETTER OLD COPTIC SHEI
+2CC5;N # COPTIC SMALL LETTER OLD COPTIC SHEI
+2CC6;N # COPTIC CAPITAL LETTER OLD COPTIC ESH
+2CC7;N # COPTIC SMALL LETTER OLD COPTIC ESH
+2CC8;N # COPTIC CAPITAL LETTER AKHMIMIC KHEI
+2CC9;N # COPTIC SMALL LETTER AKHMIMIC KHEI
+2CCA;N # COPTIC CAPITAL LETTER DIALECT-P HORI
+2CCB;N # COPTIC SMALL LETTER DIALECT-P HORI
+2CCC;N # COPTIC CAPITAL LETTER OLD COPTIC HORI
+2CCD;N # COPTIC SMALL LETTER OLD COPTIC HORI
+2CCE;N # COPTIC CAPITAL LETTER OLD COPTIC HA
+2CCF;N # COPTIC SMALL LETTER OLD COPTIC HA
+2CD0;N # COPTIC CAPITAL LETTER L-SHAPED HA
+2CD1;N # COPTIC SMALL LETTER L-SHAPED HA
+2CD2;N # COPTIC CAPITAL LETTER OLD COPTIC HEI
+2CD3;N # COPTIC SMALL LETTER OLD COPTIC HEI
+2CD4;N # COPTIC CAPITAL LETTER OLD COPTIC HAT
+2CD5;N # COPTIC SMALL LETTER OLD COPTIC HAT
+2CD6;N # COPTIC CAPITAL LETTER OLD COPTIC GANGIA
+2CD7;N # COPTIC SMALL LETTER OLD COPTIC GANGIA
+2CD8;N # COPTIC CAPITAL LETTER OLD COPTIC DJA
+2CD9;N # COPTIC SMALL LETTER OLD COPTIC DJA
+2CDA;N # COPTIC CAPITAL LETTER OLD COPTIC SHIMA
+2CDB;N # COPTIC SMALL LETTER OLD COPTIC SHIMA
+2CDC;N # COPTIC CAPITAL LETTER OLD NUBIAN SHIMA
+2CDD;N # COPTIC SMALL LETTER OLD NUBIAN SHIMA
+2CDE;N # COPTIC CAPITAL LETTER OLD NUBIAN NGI
+2CDF;N # COPTIC SMALL LETTER OLD NUBIAN NGI
+2CE0;N # COPTIC CAPITAL LETTER OLD NUBIAN NYI
+2CE1;N # COPTIC SMALL LETTER OLD NUBIAN NYI
+2CE2;N # COPTIC CAPITAL LETTER OLD NUBIAN WAU
+2CE3;N # COPTIC SMALL LETTER OLD NUBIAN WAU
+2CE4;N # COPTIC SYMBOL KAI
+2CE5;N # COPTIC SYMBOL MI RO
+2CE6;N # COPTIC SYMBOL PI RO
+2CE7;N # COPTIC SYMBOL STAUROS
+2CE8;N # COPTIC SYMBOL TAU RO
+2CE9;N # COPTIC SYMBOL KHI RO
+2CEA;N # COPTIC SYMBOL SHIMA SIMA
+2CF9;N # COPTIC OLD NUBIAN FULL STOP
+2CFA;N # COPTIC OLD NUBIAN DIRECT QUESTION MARK
+2CFB;N # COPTIC OLD NUBIAN INDIRECT QUESTION MARK
+2CFC;N # COPTIC OLD NUBIAN VERSE DIVIDER
+2CFD;N # COPTIC FRACTION ONE HALF
+2CFE;N # COPTIC FULL STOP
+2CFF;N # COPTIC MORPHOLOGICAL DIVIDER
+2D00;N # GEORGIAN SMALL LETTER AN
+2D01;N # GEORGIAN SMALL LETTER BAN
+2D02;N # GEORGIAN SMALL LETTER GAN
+2D03;N # GEORGIAN SMALL LETTER DON
+2D04;N # GEORGIAN SMALL LETTER EN
+2D05;N # GEORGIAN SMALL LETTER VIN
+2D06;N # GEORGIAN SMALL LETTER ZEN
+2D07;N # GEORGIAN SMALL LETTER TAN
+2D08;N # GEORGIAN SMALL LETTER IN
+2D09;N # GEORGIAN SMALL LETTER KAN
+2D0A;N # GEORGIAN SMALL LETTER LAS
+2D0B;N # GEORGIAN SMALL LETTER MAN
+2D0C;N # GEORGIAN SMALL LETTER NAR
+2D0D;N # GEORGIAN SMALL LETTER ON
+2D0E;N # GEORGIAN SMALL LETTER PAR
+2D0F;N # GEORGIAN SMALL LETTER ZHAR
+2D10;N # GEORGIAN SMALL LETTER RAE
+2D11;N # GEORGIAN SMALL LETTER SAN
+2D12;N # GEORGIAN SMALL LETTER TAR
+2D13;N # GEORGIAN SMALL LETTER UN
+2D14;N # GEORGIAN SMALL LETTER PHAR
+2D15;N # GEORGIAN SMALL LETTER KHAR
+2D16;N # GEORGIAN SMALL LETTER GHAN
+2D17;N # GEORGIAN SMALL LETTER QAR
+2D18;N # GEORGIAN SMALL LETTER SHIN
+2D19;N # GEORGIAN SMALL LETTER CHIN
+2D1A;N # GEORGIAN SMALL LETTER CAN
+2D1B;N # GEORGIAN SMALL LETTER JIL
+2D1C;N # GEORGIAN SMALL LETTER CIL
+2D1D;N # GEORGIAN SMALL LETTER CHAR
+2D1E;N # GEORGIAN SMALL LETTER XAN
+2D1F;N # GEORGIAN SMALL LETTER JHAN
+2D20;N # GEORGIAN SMALL LETTER HAE
+2D21;N # GEORGIAN SMALL LETTER HE
+2D22;N # GEORGIAN SMALL LETTER HIE
+2D23;N # GEORGIAN SMALL LETTER WE
+2D24;N # GEORGIAN SMALL LETTER HAR
+2D25;N # GEORGIAN SMALL LETTER HOE
+2D30;N # TIFINAGH LETTER YA
+2D31;N # TIFINAGH LETTER YAB
+2D32;N # TIFINAGH LETTER YABH
+2D33;N # TIFINAGH LETTER YAG
+2D34;N # TIFINAGH LETTER YAGHH
+2D35;N # TIFINAGH LETTER BERBER ACADEMY YAJ
+2D36;N # TIFINAGH LETTER YAJ
+2D37;N # TIFINAGH LETTER YAD
+2D38;N # TIFINAGH LETTER YADH
+2D39;N # TIFINAGH LETTER YADD
+2D3A;N # TIFINAGH LETTER YADDH
+2D3B;N # TIFINAGH LETTER YEY
+2D3C;N # TIFINAGH LETTER YAF
+2D3D;N # TIFINAGH LETTER YAK
+2D3E;N # TIFINAGH LETTER TUAREG YAK
+2D3F;N # TIFINAGH LETTER YAKHH
+2D40;N # TIFINAGH LETTER YAH
+2D41;N # TIFINAGH LETTER BERBER ACADEMY YAH
+2D42;N # TIFINAGH LETTER TUAREG YAH
+2D43;N # TIFINAGH LETTER YAHH
+2D44;N # TIFINAGH LETTER YAA
+2D45;N # TIFINAGH LETTER YAKH
+2D46;N # TIFINAGH LETTER TUAREG YAKH
+2D47;N # TIFINAGH LETTER YAQ
+2D48;N # TIFINAGH LETTER TUAREG YAQ
+2D49;N # TIFINAGH LETTER YI
+2D4A;N # TIFINAGH LETTER YAZH
+2D4B;N # TIFINAGH LETTER AHAGGAR YAZH
+2D4C;N # TIFINAGH LETTER TUAREG YAZH
+2D4D;N # TIFINAGH LETTER YAL
+2D4E;N # TIFINAGH LETTER YAM
+2D4F;N # TIFINAGH LETTER YAN
+2D50;N # TIFINAGH LETTER TUAREG YAGN
+2D51;N # TIFINAGH LETTER TUAREG YANG
+2D52;N # TIFINAGH LETTER YAP
+2D53;N # TIFINAGH LETTER YU
+2D54;N # TIFINAGH LETTER YAR
+2D55;N # TIFINAGH LETTER YARR
+2D56;N # TIFINAGH LETTER YAGH
+2D57;N # TIFINAGH LETTER TUAREG YAGH
+2D58;N # TIFINAGH LETTER AYER YAGH
+2D59;N # TIFINAGH LETTER YAS
+2D5A;N # TIFINAGH LETTER YASS
+2D5B;N # TIFINAGH LETTER YASH
+2D5C;N # TIFINAGH LETTER YAT
+2D5D;N # TIFINAGH LETTER YATH
+2D5E;N # TIFINAGH LETTER YACH
+2D5F;N # TIFINAGH LETTER YATT
+2D60;N # TIFINAGH LETTER YAV
+2D61;N # TIFINAGH LETTER YAW
+2D62;N # TIFINAGH LETTER YAY
+2D63;N # TIFINAGH LETTER YAZ
+2D64;N # TIFINAGH LETTER TAWELLEMET YAZ
+2D65;N # TIFINAGH LETTER YAZZ
+2D6F;N # TIFINAGH MODIFIER LETTER LABIALIZATION MARK
+2D80;N # ETHIOPIC SYLLABLE LOA
+2D81;N # ETHIOPIC SYLLABLE MOA
+2D82;N # ETHIOPIC SYLLABLE ROA
+2D83;N # ETHIOPIC SYLLABLE SOA
+2D84;N # ETHIOPIC SYLLABLE SHOA
+2D85;N # ETHIOPIC SYLLABLE BOA
+2D86;N # ETHIOPIC SYLLABLE TOA
+2D87;N # ETHIOPIC SYLLABLE COA
+2D88;N # ETHIOPIC SYLLABLE NOA
+2D89;N # ETHIOPIC SYLLABLE NYOA
+2D8A;N # ETHIOPIC SYLLABLE GLOTTAL OA
+2D8B;N # ETHIOPIC SYLLABLE ZOA
+2D8C;N # ETHIOPIC SYLLABLE DOA
+2D8D;N # ETHIOPIC SYLLABLE DDOA
+2D8E;N # ETHIOPIC SYLLABLE JOA
+2D8F;N # ETHIOPIC SYLLABLE THOA
+2D90;N # ETHIOPIC SYLLABLE CHOA
+2D91;N # ETHIOPIC SYLLABLE PHOA
+2D92;N # ETHIOPIC SYLLABLE POA
+2D93;N # ETHIOPIC SYLLABLE GGWA
+2D94;N # ETHIOPIC SYLLABLE GGWI
+2D95;N # ETHIOPIC SYLLABLE GGWEE
+2D96;N # ETHIOPIC SYLLABLE GGWE
+2DA0;N # ETHIOPIC SYLLABLE SSA
+2DA1;N # ETHIOPIC SYLLABLE SSU
+2DA2;N # ETHIOPIC SYLLABLE SSI
+2DA3;N # ETHIOPIC SYLLABLE SSAA
+2DA4;N # ETHIOPIC SYLLABLE SSEE
+2DA5;N # ETHIOPIC SYLLABLE SSE
+2DA6;N # ETHIOPIC SYLLABLE SSO
+2DA8;N # ETHIOPIC SYLLABLE CCA
+2DA9;N # ETHIOPIC SYLLABLE CCU
+2DAA;N # ETHIOPIC SYLLABLE CCI
+2DAB;N # ETHIOPIC SYLLABLE CCAA
+2DAC;N # ETHIOPIC SYLLABLE CCEE
+2DAD;N # ETHIOPIC SYLLABLE CCE
+2DAE;N # ETHIOPIC SYLLABLE CCO
+2DB0;N # ETHIOPIC SYLLABLE ZZA
+2DB1;N # ETHIOPIC SYLLABLE ZZU
+2DB2;N # ETHIOPIC SYLLABLE ZZI
+2DB3;N # ETHIOPIC SYLLABLE ZZAA
+2DB4;N # ETHIOPIC SYLLABLE ZZEE
+2DB5;N # ETHIOPIC SYLLABLE ZZE
+2DB6;N # ETHIOPIC SYLLABLE ZZO
+2DB8;N # ETHIOPIC SYLLABLE CCHA
+2DB9;N # ETHIOPIC SYLLABLE CCHU
+2DBA;N # ETHIOPIC SYLLABLE CCHI
+2DBB;N # ETHIOPIC SYLLABLE CCHAA
+2DBC;N # ETHIOPIC SYLLABLE CCHEE
+2DBD;N # ETHIOPIC SYLLABLE CCHE
+2DBE;N # ETHIOPIC SYLLABLE CCHO
+2DC0;N # ETHIOPIC SYLLABLE QYA
+2DC1;N # ETHIOPIC SYLLABLE QYU
+2DC2;N # ETHIOPIC SYLLABLE QYI
+2DC3;N # ETHIOPIC SYLLABLE QYAA
+2DC4;N # ETHIOPIC SYLLABLE QYEE
+2DC5;N # ETHIOPIC SYLLABLE QYE
+2DC6;N # ETHIOPIC SYLLABLE QYO
+2DC8;N # ETHIOPIC SYLLABLE KYA
+2DC9;N # ETHIOPIC SYLLABLE KYU
+2DCA;N # ETHIOPIC SYLLABLE KYI
+2DCB;N # ETHIOPIC SYLLABLE KYAA
+2DCC;N # ETHIOPIC SYLLABLE KYEE
+2DCD;N # ETHIOPIC SYLLABLE KYE
+2DCE;N # ETHIOPIC SYLLABLE KYO
+2DD0;N # ETHIOPIC SYLLABLE XYA
+2DD1;N # ETHIOPIC SYLLABLE XYU
+2DD2;N # ETHIOPIC SYLLABLE XYI
+2DD3;N # ETHIOPIC SYLLABLE XYAA
+2DD4;N # ETHIOPIC SYLLABLE XYEE
+2DD5;N # ETHIOPIC SYLLABLE XYE
+2DD6;N # ETHIOPIC SYLLABLE XYO
+2DD8;N # ETHIOPIC SYLLABLE GYA
+2DD9;N # ETHIOPIC SYLLABLE GYU
+2DDA;N # ETHIOPIC SYLLABLE GYI
+2DDB;N # ETHIOPIC SYLLABLE GYAA
+2DDC;N # ETHIOPIC SYLLABLE GYEE
+2DDD;N # ETHIOPIC SYLLABLE GYE
+2DDE;N # ETHIOPIC SYLLABLE GYO
+2E00;N # RIGHT ANGLE SUBSTITUTION MARKER
+2E01;N # RIGHT ANGLE DOTTED SUBSTITUTION MARKER
+2E02;N # LEFT SUBSTITUTION BRACKET
+2E03;N # RIGHT SUBSTITUTION BRACKET
+2E04;N # LEFT DOTTED SUBSTITUTION BRACKET
+2E05;N # RIGHT DOTTED SUBSTITUTION BRACKET
+2E06;N # RAISED INTERPOLATION MARKER
+2E07;N # RAISED DOTTED INTERPOLATION MARKER
+2E08;N # DOTTED TRANSPOSITION MARKER
+2E09;N # LEFT TRANSPOSITION BRACKET
+2E0A;N # RIGHT TRANSPOSITION BRACKET
+2E0B;N # RAISED SQUARE
+2E0C;N # LEFT RAISED OMISSION BRACKET
+2E0D;N # RIGHT RAISED OMISSION BRACKET
+2E0E;N # EDITORIAL CORONIS
+2E0F;N # PARAGRAPHOS
+2E10;N # FORKED PARAGRAPHOS
+2E11;N # REVERSED FORKED PARAGRAPHOS
+2E12;N # HYPODIASTOLE
+2E13;N # DOTTED OBELOS
+2E14;N # DOWNWARDS ANCORA
+2E15;N # UPWARDS ANCORA
+2E16;N # DOTTED RIGHT-POINTING ANGLE
+2E17;N # DOUBLE OBLIQUE HYPHEN
+2E1C;N # LEFT LOW PARAPHRASE BRACKET
+2E1D;N # RIGHT LOW PARAPHRASE BRACKET
2E80;W # CJK RADICAL REPEAT
2E81;W # CJK RADICAL CLIFF
2E82;W # CJK RADICAL SECOND ONE
@@ -8830,6 +9624,22 @@
31B5;W # BOPOMOFO FINAL LETTER T
31B6;W # BOPOMOFO FINAL LETTER K
31B7;W # BOPOMOFO FINAL LETTER H
+31C0;W # CJK STROKE T
+31C1;W # CJK STROKE WG
+31C2;W # CJK STROKE XG
+31C3;W # CJK STROKE BXG
+31C4;W # CJK STROKE SW
+31C5;W # CJK STROKE HZZ
+31C6;W # CJK STROKE HZG
+31C7;W # CJK STROKE HP
+31C8;W # CJK STROKE HZWG
+31C9;W # CJK STROKE SZWG
+31CA;W # CJK STROKE HZT
+31CB;W # CJK STROKE HZZP
+31CC;W # CJK STROKE HPWG
+31CD;W # CJK STROKE HZW
+31CE;W # CJK STROKE HZZZ
+31CF;W # CJK STROKE N
31F0;W # KATAKANA LETTER SMALL KU
31F1;W # KATAKANA LETTER SMALL SI
31F2;W # KATAKANA LETTER SMALL SU
@@ -8959,6 +9769,7 @@
327B;W # CIRCLED HANGUL HIEUH A
327C;W # CIRCLED KOREAN CHARACTER CHAMKO
327D;W # CIRCLED KOREAN CHARACTER JUEUI
+327E;W # CIRCLED HANGUL IEUNG U
327F;W # KOREAN STANDARD SYMBOL
3280;W # CIRCLED IDEOGRAPH ONE
3281;W # CIRCLED IDEOGRAPH TWO
@@ -9408,7 +10219,7 @@
4DFD;N # HEXAGRAM FOR SMALL PREPONDERANCE
4DFE;N # HEXAGRAM FOR AFTER COMPLETION
4DFF;N # HEXAGRAM FOR BEFORE COMPLETION
-4E00..9FA5;W # <CJK Ideograph, First>..<CJK Ideograph, Last>
+4E00..9FBB;W # <CJK Ideograph, First>..<CJK Ideograph, Last>
A000;W # YI SYLLABLE IT
A001;W # YI SYLLABLE IX
A002;W # YI SYLLABLE I
@@ -10629,6 +11440,73 @@ A4C3;W # YI RADICAL CHE
A4C4;W # YI RADICAL ZZIET
A4C5;W # YI RADICAL NBIE
A4C6;W # YI RADICAL KE
+A700;N # MODIFIER LETTER CHINESE TONE YIN PING
+A701;N # MODIFIER LETTER CHINESE TONE YANG PING
+A702;N # MODIFIER LETTER CHINESE TONE YIN SHANG
+A703;N # MODIFIER LETTER CHINESE TONE YANG SHANG
+A704;N # MODIFIER LETTER CHINESE TONE YIN QU
+A705;N # MODIFIER LETTER CHINESE TONE YANG QU
+A706;N # MODIFIER LETTER CHINESE TONE YIN RU
+A707;N # MODIFIER LETTER CHINESE TONE YANG RU
+A708;N # MODIFIER LETTER EXTRA-HIGH DOTTED TONE BAR
+A709;N # MODIFIER LETTER HIGH DOTTED TONE BAR
+A70A;N # MODIFIER LETTER MID DOTTED TONE BAR
+A70B;N # MODIFIER LETTER LOW DOTTED TONE BAR
+A70C;N # MODIFIER LETTER EXTRA-LOW DOTTED TONE BAR
+A70D;N # MODIFIER LETTER EXTRA-HIGH DOTTED LEFT-STEM TONE BAR
+A70E;N # MODIFIER LETTER HIGH DOTTED LEFT-STEM TONE BAR
+A70F;N # MODIFIER LETTER MID DOTTED LEFT-STEM TONE BAR
+A710;N # MODIFIER LETTER LOW DOTTED LEFT-STEM TONE BAR
+A711;N # MODIFIER LETTER EXTRA-LOW DOTTED LEFT-STEM TONE BAR
+A712;N # MODIFIER LETTER EXTRA-HIGH LEFT-STEM TONE BAR
+A713;N # MODIFIER LETTER HIGH LEFT-STEM TONE BAR
+A714;N # MODIFIER LETTER MID LEFT-STEM TONE BAR
+A715;N # MODIFIER LETTER LOW LEFT-STEM TONE BAR
+A716;N # MODIFIER LETTER EXTRA-LOW LEFT-STEM TONE BAR
+A800;N # SYLOTI NAGRI LETTER A
+A801;N # SYLOTI NAGRI LETTER I
+A802;N # SYLOTI NAGRI SIGN DVISVARA
+A803;N # SYLOTI NAGRI LETTER U
+A804;N # SYLOTI NAGRI LETTER E
+A805;N # SYLOTI NAGRI LETTER O
+A806;N # SYLOTI NAGRI SIGN HASANTA
+A807;N # SYLOTI NAGRI LETTER KO
+A808;N # SYLOTI NAGRI LETTER KHO
+A809;N # SYLOTI NAGRI LETTER GO
+A80A;N # SYLOTI NAGRI LETTER GHO
+A80B;N # SYLOTI NAGRI SIGN ANUSVARA
+A80C;N # SYLOTI NAGRI LETTER CO
+A80D;N # SYLOTI NAGRI LETTER CHO
+A80E;N # SYLOTI NAGRI LETTER JO
+A80F;N # SYLOTI NAGRI LETTER JHO
+A810;N # SYLOTI NAGRI LETTER TTO
+A811;N # SYLOTI NAGRI LETTER TTHO
+A812;N # SYLOTI NAGRI LETTER DDO
+A813;N # SYLOTI NAGRI LETTER DDHO
+A814;N # SYLOTI NAGRI LETTER TO
+A815;N # SYLOTI NAGRI LETTER THO
+A816;N # SYLOTI NAGRI LETTER DO
+A817;N # SYLOTI NAGRI LETTER DHO
+A818;N # SYLOTI NAGRI LETTER NO
+A819;N # SYLOTI NAGRI LETTER PO
+A81A;N # SYLOTI NAGRI LETTER PHO
+A81B;N # SYLOTI NAGRI LETTER BO
+A81C;N # SYLOTI NAGRI LETTER BHO
+A81D;N # SYLOTI NAGRI LETTER MO
+A81E;N # SYLOTI NAGRI LETTER RO
+A81F;N # SYLOTI NAGRI LETTER LO
+A820;N # SYLOTI NAGRI LETTER RRO
+A821;N # SYLOTI NAGRI LETTER SO
+A822;N # SYLOTI NAGRI LETTER HO
+A823;N # SYLOTI NAGRI VOWEL SIGN A
+A824;N # SYLOTI NAGRI VOWEL SIGN I
+A825;N # SYLOTI NAGRI VOWEL SIGN U
+A826;N # SYLOTI NAGRI VOWEL SIGN E
+A827;N # SYLOTI NAGRI VOWEL SIGN OO
+A828;N # SYLOTI NAGRI POETRY MARK-1
+A829;N # SYLOTI NAGRI POETRY MARK-2
+A82A;N # SYLOTI NAGRI POETRY MARK-3
+A82B;N # SYLOTI NAGRI POETRY MARK-4
AC00..D7A3;W # <Hangul Syllable, First>..<Hangul Syllable, Last>
D800..DB7F;N # <Non Private Use High Surrogate, First>..<Non Private Use High Surrogate, Last>
DB80..DBFF;N # <Private Use High Surrogate, First>..<Private Use High Surrogate, Last>
@@ -10995,6 +11873,112 @@ FA67;W # CJK COMPATIBILITY IDEOGRAPH-FA67
FA68;W # CJK COMPATIBILITY IDEOGRAPH-FA68
FA69;W # CJK COMPATIBILITY IDEOGRAPH-FA69
FA6A;W # CJK COMPATIBILITY IDEOGRAPH-FA6A
+FA70;W # CJK COMPATIBILITY IDEOGRAPH-FA70
+FA71;W # CJK COMPATIBILITY IDEOGRAPH-FA71
+FA72;W # CJK COMPATIBILITY IDEOGRAPH-FA72
+FA73;W # CJK COMPATIBILITY IDEOGRAPH-FA73
+FA74;W # CJK COMPATIBILITY IDEOGRAPH-FA74
+FA75;W # CJK COMPATIBILITY IDEOGRAPH-FA75
+FA76;W # CJK COMPATIBILITY IDEOGRAPH-FA76
+FA77;W # CJK COMPATIBILITY IDEOGRAPH-FA77
+FA78;W # CJK COMPATIBILITY IDEOGRAPH-FA78
+FA79;W # CJK COMPATIBILITY IDEOGRAPH-FA79
+FA7A;W # CJK COMPATIBILITY IDEOGRAPH-FA7A
+FA7B;W # CJK COMPATIBILITY IDEOGRAPH-FA7B
+FA7C;W # CJK COMPATIBILITY IDEOGRAPH-FA7C
+FA7D;W # CJK COMPATIBILITY IDEOGRAPH-FA7D
+FA7E;W # CJK COMPATIBILITY IDEOGRAPH-FA7E
+FA7F;W # CJK COMPATIBILITY IDEOGRAPH-FA7F
+FA80;W # CJK COMPATIBILITY IDEOGRAPH-FA80
+FA81;W # CJK COMPATIBILITY IDEOGRAPH-FA81
+FA82;W # CJK COMPATIBILITY IDEOGRAPH-FA82
+FA83;W # CJK COMPATIBILITY IDEOGRAPH-FA83
+FA84;W # CJK COMPATIBILITY IDEOGRAPH-FA84
+FA85;W # CJK COMPATIBILITY IDEOGRAPH-FA85
+FA86;W # CJK COMPATIBILITY IDEOGRAPH-FA86
+FA87;W # CJK COMPATIBILITY IDEOGRAPH-FA87
+FA88;W # CJK COMPATIBILITY IDEOGRAPH-FA88
+FA89;W # CJK COMPATIBILITY IDEOGRAPH-FA89
+FA8A;W # CJK COMPATIBILITY IDEOGRAPH-FA8A
+FA8B;W # CJK COMPATIBILITY IDEOGRAPH-FA8B
+FA8C;W # CJK COMPATIBILITY IDEOGRAPH-FA8C
+FA8D;W # CJK COMPATIBILITY IDEOGRAPH-FA8D
+FA8E;W # CJK COMPATIBILITY IDEOGRAPH-FA8E
+FA8F;W # CJK COMPATIBILITY IDEOGRAPH-FA8F
+FA90;W # CJK COMPATIBILITY IDEOGRAPH-FA90
+FA91;W # CJK COMPATIBILITY IDEOGRAPH-FA91
+FA92;W # CJK COMPATIBILITY IDEOGRAPH-FA92
+FA93;W # CJK COMPATIBILITY IDEOGRAPH-FA93
+FA94;W # CJK COMPATIBILITY IDEOGRAPH-FA94
+FA95;W # CJK COMPATIBILITY IDEOGRAPH-FA95
+FA96;W # CJK COMPATIBILITY IDEOGRAPH-FA96
+FA97;W # CJK COMPATIBILITY IDEOGRAPH-FA97
+FA98;W # CJK COMPATIBILITY IDEOGRAPH-FA98
+FA99;W # CJK COMPATIBILITY IDEOGRAPH-FA99
+FA9A;W # CJK COMPATIBILITY IDEOGRAPH-FA9A
+FA9B;W # CJK COMPATIBILITY IDEOGRAPH-FA9B
+FA9C;W # CJK COMPATIBILITY IDEOGRAPH-FA9C
+FA9D;W # CJK COMPATIBILITY IDEOGRAPH-FA9D
+FA9E;W # CJK COMPATIBILITY IDEOGRAPH-FA9E
+FA9F;W # CJK COMPATIBILITY IDEOGRAPH-FA9F
+FAA0;W # CJK COMPATIBILITY IDEOGRAPH-FAA0
+FAA1;W # CJK COMPATIBILITY IDEOGRAPH-FAA1
+FAA2;W # CJK COMPATIBILITY IDEOGRAPH-FAA2
+FAA3;W # CJK COMPATIBILITY IDEOGRAPH-FAA3
+FAA4;W # CJK COMPATIBILITY IDEOGRAPH-FAA4
+FAA5;W # CJK COMPATIBILITY IDEOGRAPH-FAA5
+FAA6;W # CJK COMPATIBILITY IDEOGRAPH-FAA6
+FAA7;W # CJK COMPATIBILITY IDEOGRAPH-FAA7
+FAA8;W # CJK COMPATIBILITY IDEOGRAPH-FAA8
+FAA9;W # CJK COMPATIBILITY IDEOGRAPH-FAA9
+FAAA;W # CJK COMPATIBILITY IDEOGRAPH-FAAA
+FAAB;W # CJK COMPATIBILITY IDEOGRAPH-FAAB
+FAAC;W # CJK COMPATIBILITY IDEOGRAPH-FAAC
+FAAD;W # CJK COMPATIBILITY IDEOGRAPH-FAAD
+FAAE;W # CJK COMPATIBILITY IDEOGRAPH-FAAE
+FAAF;W # CJK COMPATIBILITY IDEOGRAPH-FAAF
+FAB0;W # CJK COMPATIBILITY IDEOGRAPH-FAB0
+FAB1;W # CJK COMPATIBILITY IDEOGRAPH-FAB1
+FAB2;W # CJK COMPATIBILITY IDEOGRAPH-FAB2
+FAB3;W # CJK COMPATIBILITY IDEOGRAPH-FAB3
+FAB4;W # CJK COMPATIBILITY IDEOGRAPH-FAB4
+FAB5;W # CJK COMPATIBILITY IDEOGRAPH-FAB5
+FAB6;W # CJK COMPATIBILITY IDEOGRAPH-FAB6
+FAB7;W # CJK COMPATIBILITY IDEOGRAPH-FAB7
+FAB8;W # CJK COMPATIBILITY IDEOGRAPH-FAB8
+FAB9;W # CJK COMPATIBILITY IDEOGRAPH-FAB9
+FABA;W # CJK COMPATIBILITY IDEOGRAPH-FABA
+FABB;W # CJK COMPATIBILITY IDEOGRAPH-FABB
+FABC;W # CJK COMPATIBILITY IDEOGRAPH-FABC
+FABD;W # CJK COMPATIBILITY IDEOGRAPH-FABD
+FABE;W # CJK COMPATIBILITY IDEOGRAPH-FABE
+FABF;W # CJK COMPATIBILITY IDEOGRAPH-FABF
+FAC0;W # CJK COMPATIBILITY IDEOGRAPH-FAC0
+FAC1;W # CJK COMPATIBILITY IDEOGRAPH-FAC1
+FAC2;W # CJK COMPATIBILITY IDEOGRAPH-FAC2
+FAC3;W # CJK COMPATIBILITY IDEOGRAPH-FAC3
+FAC4;W # CJK COMPATIBILITY IDEOGRAPH-FAC4
+FAC5;W # CJK COMPATIBILITY IDEOGRAPH-FAC5
+FAC6;W # CJK COMPATIBILITY IDEOGRAPH-FAC6
+FAC7;W # CJK COMPATIBILITY IDEOGRAPH-FAC7
+FAC8;W # CJK COMPATIBILITY IDEOGRAPH-FAC8
+FAC9;W # CJK COMPATIBILITY IDEOGRAPH-FAC9
+FACA;W # CJK COMPATIBILITY IDEOGRAPH-FACA
+FACB;W # CJK COMPATIBILITY IDEOGRAPH-FACB
+FACC;W # CJK COMPATIBILITY IDEOGRAPH-FACC
+FACD;W # CJK COMPATIBILITY IDEOGRAPH-FACD
+FACE;W # CJK COMPATIBILITY IDEOGRAPH-FACE
+FACF;W # CJK COMPATIBILITY IDEOGRAPH-FACF
+FAD0;W # CJK COMPATIBILITY IDEOGRAPH-FAD0
+FAD1;W # CJK COMPATIBILITY IDEOGRAPH-FAD1
+FAD2;W # CJK COMPATIBILITY IDEOGRAPH-FAD2
+FAD3;W # CJK COMPATIBILITY IDEOGRAPH-FAD3
+FAD4;W # CJK COMPATIBILITY IDEOGRAPH-FAD4
+FAD5;W # CJK COMPATIBILITY IDEOGRAPH-FAD5
+FAD6;W # CJK COMPATIBILITY IDEOGRAPH-FAD6
+FAD7;W # CJK COMPATIBILITY IDEOGRAPH-FAD7
+FAD8;W # CJK COMPATIBILITY IDEOGRAPH-FAD8
+FAD9;W # CJK COMPATIBILITY IDEOGRAPH-FAD9
FB00;N # LATIN SMALL LIGATURE FF
FB01;N # LATIN SMALL LIGATURE FI
FB02;N # LATIN SMALL LIGATURE FL
@@ -11664,6 +12648,16 @@ FE0C;A # VARIATION SELECTOR-13
FE0D;A # VARIATION SELECTOR-14
FE0E;A # VARIATION SELECTOR-15
FE0F;A # VARIATION SELECTOR-16
+FE10;W # PRESENTATION FORM FOR VERTICAL COMMA
+FE11;W # PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC COMMA
+FE12;W # PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC FULL STOP
+FE13;W # PRESENTATION FORM FOR VERTICAL COLON
+FE14;W # PRESENTATION FORM FOR VERTICAL SEMICOLON
+FE15;W # PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK
+FE16;W # PRESENTATION FORM FOR VERTICAL QUESTION MARK
+FE17;W # PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET
+FE18;W # PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET
+FE19;W # PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS
FE20;N # COMBINING LIGATURE LEFT HALF
FE21;N # COMBINING LIGATURE RIGHT HALF
FE22;N # COMBINING DOUBLE TILDE LEFT HALF
@@ -12365,6 +13359,81 @@ FFFD;A # REPLACEMENT CHARACTER
1013D;N # AEGEAN LIQUID MEASURE FIRST SUBUNIT
1013E;N # AEGEAN MEASURE SECOND SUBUNIT
1013F;N # AEGEAN MEASURE THIRD SUBUNIT
+10140;N # GREEK ACROPHONIC ATTIC ONE QUARTER
+10141;N # GREEK ACROPHONIC ATTIC ONE HALF
+10142;N # GREEK ACROPHONIC ATTIC ONE DRACHMA
+10143;N # GREEK ACROPHONIC ATTIC FIVE
+10144;N # GREEK ACROPHONIC ATTIC FIFTY
+10145;N # GREEK ACROPHONIC ATTIC FIVE HUNDRED
+10146;N # GREEK ACROPHONIC ATTIC FIVE THOUSAND
+10147;N # GREEK ACROPHONIC ATTIC FIFTY THOUSAND
+10148;N # GREEK ACROPHONIC ATTIC FIVE TALENTS
+10149;N # GREEK ACROPHONIC ATTIC TEN TALENTS
+1014A;N # GREEK ACROPHONIC ATTIC FIFTY TALENTS
+1014B;N # GREEK ACROPHONIC ATTIC ONE HUNDRED TALENTS
+1014C;N # GREEK ACROPHONIC ATTIC FIVE HUNDRED TALENTS
+1014D;N # GREEK ACROPHONIC ATTIC ONE THOUSAND TALENTS
+1014E;N # GREEK ACROPHONIC ATTIC FIVE THOUSAND TALENTS
+1014F;N # GREEK ACROPHONIC ATTIC FIVE STATERS
+10150;N # GREEK ACROPHONIC ATTIC TEN STATERS
+10151;N # GREEK ACROPHONIC ATTIC FIFTY STATERS
+10152;N # GREEK ACROPHONIC ATTIC ONE HUNDRED STATERS
+10153;N # GREEK ACROPHONIC ATTIC FIVE HUNDRED STATERS
+10154;N # GREEK ACROPHONIC ATTIC ONE THOUSAND STATERS
+10155;N # GREEK ACROPHONIC ATTIC TEN THOUSAND STATERS
+10156;N # GREEK ACROPHONIC ATTIC FIFTY THOUSAND STATERS
+10157;N # GREEK ACROPHONIC ATTIC TEN MNAS
+10158;N # GREEK ACROPHONIC HERAEUM ONE PLETHRON
+10159;N # GREEK ACROPHONIC THESPIAN ONE
+1015A;N # GREEK ACROPHONIC HERMIONIAN ONE
+1015B;N # GREEK ACROPHONIC EPIDAUREAN TWO
+1015C;N # GREEK ACROPHONIC THESPIAN TWO
+1015D;N # GREEK ACROPHONIC CYRENAIC TWO DRACHMAS
+1015E;N # GREEK ACROPHONIC EPIDAUREAN TWO DRACHMAS
+1015F;N # GREEK ACROPHONIC TROEZENIAN FIVE
+10160;N # GREEK ACROPHONIC TROEZENIAN TEN
+10161;N # GREEK ACROPHONIC TROEZENIAN TEN ALTERNATE FORM
+10162;N # GREEK ACROPHONIC HERMIONIAN TEN
+10163;N # GREEK ACROPHONIC MESSENIAN TEN
+10164;N # GREEK ACROPHONIC THESPIAN TEN
+10165;N # GREEK ACROPHONIC THESPIAN THIRTY
+10166;N # GREEK ACROPHONIC TROEZENIAN FIFTY
+10167;N # GREEK ACROPHONIC TROEZENIAN FIFTY ALTERNATE FORM
+10168;N # GREEK ACROPHONIC HERMIONIAN FIFTY
+10169;N # GREEK ACROPHONIC THESPIAN FIFTY
+1016A;N # GREEK ACROPHONIC THESPIAN ONE HUNDRED
+1016B;N # GREEK ACROPHONIC THESPIAN THREE HUNDRED
+1016C;N # GREEK ACROPHONIC EPIDAUREAN FIVE HUNDRED
+1016D;N # GREEK ACROPHONIC TROEZENIAN FIVE HUNDRED
+1016E;N # GREEK ACROPHONIC THESPIAN FIVE HUNDRED
+1016F;N # GREEK ACROPHONIC CARYSTIAN FIVE HUNDRED
+10170;N # GREEK ACROPHONIC NAXIAN FIVE HUNDRED
+10171;N # GREEK ACROPHONIC THESPIAN ONE THOUSAND
+10172;N # GREEK ACROPHONIC THESPIAN FIVE THOUSAND
+10173;N # GREEK ACROPHONIC DELPHIC FIVE MNAS
+10174;N # GREEK ACROPHONIC STRATIAN FIFTY MNAS
+10175;N # GREEK ONE HALF SIGN
+10176;N # GREEK ONE HALF SIGN ALTERNATE FORM
+10177;N # GREEK TWO THIRDS SIGN
+10178;N # GREEK THREE QUARTERS SIGN
+10179;N # GREEK YEAR SIGN
+1017A;N # GREEK TALENT SIGN
+1017B;N # GREEK DRACHMA SIGN
+1017C;N # GREEK OBOL SIGN
+1017D;N # GREEK TWO OBOLS SIGN
+1017E;N # GREEK THREE OBOLS SIGN
+1017F;N # GREEK FOUR OBOLS SIGN
+10180;N # GREEK FIVE OBOLS SIGN
+10181;N # GREEK METRETES SIGN
+10182;N # GREEK KYATHOS BASE SIGN
+10183;N # GREEK LITRA SIGN
+10184;N # GREEK OUNKIA SIGN
+10185;N # GREEK XESTES SIGN
+10186;N # GREEK ARTABE SIGN
+10187;N # GREEK AROURA SIGN
+10188;N # GREEK GRAMMA SIGN
+10189;N # GREEK TRYBLION BASE SIGN
+1018A;N # GREEK ZERO SIGN
10300;N # OLD ITALIC LETTER A
10301;N # OLD ITALIC LETTER BE
10302;N # OLD ITALIC LETTER KE
@@ -12458,6 +13527,56 @@ FFFD;A # REPLACEMENT CHARACTER
1039C;N # UGARITIC LETTER U
1039D;N # UGARITIC LETTER SSU
1039F;N # UGARITIC WORD DIVIDER
+103A0;N # OLD PERSIAN SIGN A
+103A1;N # OLD PERSIAN SIGN I
+103A2;N # OLD PERSIAN SIGN U
+103A3;N # OLD PERSIAN SIGN KA
+103A4;N # OLD PERSIAN SIGN KU
+103A5;N # OLD PERSIAN SIGN GA
+103A6;N # OLD PERSIAN SIGN GU
+103A7;N # OLD PERSIAN SIGN XA
+103A8;N # OLD PERSIAN SIGN CA
+103A9;N # OLD PERSIAN SIGN JA
+103AA;N # OLD PERSIAN SIGN JI
+103AB;N # OLD PERSIAN SIGN TA
+103AC;N # OLD PERSIAN SIGN TU
+103AD;N # OLD PERSIAN SIGN DA
+103AE;N # OLD PERSIAN SIGN DI
+103AF;N # OLD PERSIAN SIGN DU
+103B0;N # OLD PERSIAN SIGN THA
+103B1;N # OLD PERSIAN SIGN PA
+103B2;N # OLD PERSIAN SIGN BA
+103B3;N # OLD PERSIAN SIGN FA
+103B4;N # OLD PERSIAN SIGN NA
+103B5;N # OLD PERSIAN SIGN NU
+103B6;N # OLD PERSIAN SIGN MA
+103B7;N # OLD PERSIAN SIGN MI
+103B8;N # OLD PERSIAN SIGN MU
+103B9;N # OLD PERSIAN SIGN YA
+103BA;N # OLD PERSIAN SIGN VA
+103BB;N # OLD PERSIAN SIGN VI
+103BC;N # OLD PERSIAN SIGN RA
+103BD;N # OLD PERSIAN SIGN RU
+103BE;N # OLD PERSIAN SIGN LA
+103BF;N # OLD PERSIAN SIGN SA
+103C0;N # OLD PERSIAN SIGN ZA
+103C1;N # OLD PERSIAN SIGN SHA
+103C2;N # OLD PERSIAN SIGN SSA
+103C3;N # OLD PERSIAN SIGN HA
+103C8;N # OLD PERSIAN SIGN AURAMAZDAA
+103C9;N # OLD PERSIAN SIGN AURAMAZDAA-2
+103CA;N # OLD PERSIAN SIGN AURAMAZDAAHA
+103CB;N # OLD PERSIAN SIGN XSHAAYATHIYA
+103CC;N # OLD PERSIAN SIGN DAHYAAUSH
+103CD;N # OLD PERSIAN SIGN DAHYAAUSH-2
+103CE;N # OLD PERSIAN SIGN BAGA
+103CF;N # OLD PERSIAN SIGN BUUMISH
+103D0;N # OLD PERSIAN WORD DIVIDER
+103D1;N # OLD PERSIAN NUMBER ONE
+103D2;N # OLD PERSIAN NUMBER TWO
+103D3;N # OLD PERSIAN NUMBER TEN
+103D4;N # OLD PERSIAN NUMBER TWENTY
+103D5;N # OLD PERSIAN NUMBER HUNDRED
10400;N # DESERET CAPITAL LETTER LONG I
10401;N # DESERET CAPITAL LETTER LONG E
10402;N # DESERET CAPITAL LETTER LONG A
@@ -12681,6 +13800,71 @@ FFFD;A # REPLACEMENT CHARACTER
10838;N # CYPRIOT SYLLABLE XE
1083C;N # CYPRIOT SYLLABLE ZA
1083F;N # CYPRIOT SYLLABLE ZO
+10A00;N # KHAROSHTHI LETTER A
+10A01;N # KHAROSHTHI VOWEL SIGN I
+10A02;N # KHAROSHTHI VOWEL SIGN U
+10A03;N # KHAROSHTHI VOWEL SIGN VOCALIC R
+10A05;N # KHAROSHTHI VOWEL SIGN E
+10A06;N # KHAROSHTHI VOWEL SIGN O
+10A0C;N # KHAROSHTHI VOWEL LENGTH MARK
+10A0D;N # KHAROSHTHI SIGN DOUBLE RING BELOW
+10A0E;N # KHAROSHTHI SIGN ANUSVARA
+10A0F;N # KHAROSHTHI SIGN VISARGA
+10A10;N # KHAROSHTHI LETTER KA
+10A11;N # KHAROSHTHI LETTER KHA
+10A12;N # KHAROSHTHI LETTER GA
+10A13;N # KHAROSHTHI LETTER GHA
+10A15;N # KHAROSHTHI LETTER CA
+10A16;N # KHAROSHTHI LETTER CHA
+10A17;N # KHAROSHTHI LETTER JA
+10A19;N # KHAROSHTHI LETTER NYA
+10A1A;N # KHAROSHTHI LETTER TTA
+10A1B;N # KHAROSHTHI LETTER TTHA
+10A1C;N # KHAROSHTHI LETTER DDA
+10A1D;N # KHAROSHTHI LETTER DDHA
+10A1E;N # KHAROSHTHI LETTER NNA
+10A1F;N # KHAROSHTHI LETTER TA
+10A20;N # KHAROSHTHI LETTER THA
+10A21;N # KHAROSHTHI LETTER DA
+10A22;N # KHAROSHTHI LETTER DHA
+10A23;N # KHAROSHTHI LETTER NA
+10A24;N # KHAROSHTHI LETTER PA
+10A25;N # KHAROSHTHI LETTER PHA
+10A26;N # KHAROSHTHI LETTER BA
+10A27;N # KHAROSHTHI LETTER BHA
+10A28;N # KHAROSHTHI LETTER MA
+10A29;N # KHAROSHTHI LETTER YA
+10A2A;N # KHAROSHTHI LETTER RA
+10A2B;N # KHAROSHTHI LETTER LA
+10A2C;N # KHAROSHTHI LETTER VA
+10A2D;N # KHAROSHTHI LETTER SHA
+10A2E;N # KHAROSHTHI LETTER SSA
+10A2F;N # KHAROSHTHI LETTER SA
+10A30;N # KHAROSHTHI LETTER ZA
+10A31;N # KHAROSHTHI LETTER HA
+10A32;N # KHAROSHTHI LETTER KKA
+10A33;N # KHAROSHTHI LETTER TTTHA
+10A38;N # KHAROSHTHI SIGN BAR ABOVE
+10A39;N # KHAROSHTHI SIGN CAUDA
+10A3A;N # KHAROSHTHI SIGN DOT BELOW
+10A3F;N # KHAROSHTHI VIRAMA
+10A40;N # KHAROSHTHI DIGIT ONE
+10A41;N # KHAROSHTHI DIGIT TWO
+10A42;N # KHAROSHTHI DIGIT THREE
+10A43;N # KHAROSHTHI DIGIT FOUR
+10A44;N # KHAROSHTHI NUMBER TEN
+10A45;N # KHAROSHTHI NUMBER TWENTY
+10A46;N # KHAROSHTHI NUMBER ONE HUNDRED
+10A47;N # KHAROSHTHI NUMBER ONE THOUSAND
+10A50;N # KHAROSHTHI PUNCTUATION DOT
+10A51;N # KHAROSHTHI PUNCTUATION SMALL CIRCLE
+10A52;N # KHAROSHTHI PUNCTUATION CIRCLE
+10A53;N # KHAROSHTHI PUNCTUATION CRESCENT BAR
+10A54;N # KHAROSHTHI PUNCTUATION MANGALAM
+10A55;N # KHAROSHTHI PUNCTUATION LOTUS
+10A56;N # KHAROSHTHI PUNCTUATION DANDA
+10A57;N # KHAROSHTHI PUNCTUATION DOUBLE DANDA
+10A58;N # KHAROSHTHI PUNCTUATION LINES
1D000;N # BYZANTINE MUSICAL SYMBOL PSILI
1D001;N # BYZANTINE MUSICAL SYMBOL DASEIA
1D002;N # BYZANTINE MUSICAL SYMBOL PERISPOMENI
@@ -13146,6 +14330,76 @@ FFFD;A # REPLACEMENT CHARACTER
1D1DB;N # MUSICAL SYMBOL SCANDICUS FLEXUS
1D1DC;N # MUSICAL SYMBOL TORCULUS RESUPINUS
1D1DD;N # MUSICAL SYMBOL PES SUBPUNCTIS
+1D200;N # GREEK VOCAL NOTATION SYMBOL-1
+1D201;N # GREEK VOCAL NOTATION SYMBOL-2
+1D202;N # GREEK VOCAL NOTATION SYMBOL-3
+1D203;N # GREEK VOCAL NOTATION SYMBOL-4
+1D204;N # GREEK VOCAL NOTATION SYMBOL-5
+1D205;N # GREEK VOCAL NOTATION SYMBOL-6
+1D206;N # GREEK VOCAL NOTATION SYMBOL-7
+1D207;N # GREEK VOCAL NOTATION SYMBOL-8
+1D208;N # GREEK VOCAL NOTATION SYMBOL-9
+1D209;N # GREEK VOCAL NOTATION SYMBOL-10
+1D20A;N # GREEK VOCAL NOTATION SYMBOL-11
+1D20B;N # GREEK VOCAL NOTATION SYMBOL-12
+1D20C;N # GREEK VOCAL NOTATION SYMBOL-13
+1D20D;N # GREEK VOCAL NOTATION SYMBOL-14
+1D20E;N # GREEK VOCAL NOTATION SYMBOL-15
+1D20F;N # GREEK VOCAL NOTATION SYMBOL-16
+1D210;N # GREEK VOCAL NOTATION SYMBOL-17
+1D211;N # GREEK VOCAL NOTATION SYMBOL-18
+1D212;N # GREEK VOCAL NOTATION SYMBOL-19
+1D213;N # GREEK VOCAL NOTATION SYMBOL-20
+1D214;N # GREEK VOCAL NOTATION SYMBOL-21
+1D215;N # GREEK VOCAL NOTATION SYMBOL-22
+1D216;N # GREEK VOCAL NOTATION SYMBOL-23
+1D217;N # GREEK VOCAL NOTATION SYMBOL-24
+1D218;N # GREEK VOCAL NOTATION SYMBOL-50
+1D219;N # GREEK VOCAL NOTATION SYMBOL-51
+1D21A;N # GREEK VOCAL NOTATION SYMBOL-52
+1D21B;N # GREEK VOCAL NOTATION SYMBOL-53
+1D21C;N # GREEK VOCAL NOTATION SYMBOL-54
+1D21D;N # GREEK INSTRUMENTAL NOTATION SYMBOL-1
+1D21E;N # GREEK INSTRUMENTAL NOTATION SYMBOL-2
+1D21F;N # GREEK INSTRUMENTAL NOTATION SYMBOL-4
+1D220;N # GREEK INSTRUMENTAL NOTATION SYMBOL-5
+1D221;N # GREEK INSTRUMENTAL NOTATION SYMBOL-7
+1D222;N # GREEK INSTRUMENTAL NOTATION SYMBOL-8
+1D223;N # GREEK INSTRUMENTAL NOTATION SYMBOL-11
+1D224;N # GREEK INSTRUMENTAL NOTATION SYMBOL-12
+1D225;N # GREEK INSTRUMENTAL NOTATION SYMBOL-13
+1D226;N # GREEK INSTRUMENTAL NOTATION SYMBOL-14
+1D227;N # GREEK INSTRUMENTAL NOTATION SYMBOL-17
+1D228;N # GREEK INSTRUMENTAL NOTATION SYMBOL-18
+1D229;N # GREEK INSTRUMENTAL NOTATION SYMBOL-19
+1D22A;N # GREEK INSTRUMENTAL NOTATION SYMBOL-23
+1D22B;N # GREEK INSTRUMENTAL NOTATION SYMBOL-24
+1D22C;N # GREEK INSTRUMENTAL NOTATION SYMBOL-25
+1D22D;N # GREEK INSTRUMENTAL NOTATION SYMBOL-26
+1D22E;N # GREEK INSTRUMENTAL NOTATION SYMBOL-27
+1D22F;N # GREEK INSTRUMENTAL NOTATION SYMBOL-29
+1D230;N # GREEK INSTRUMENTAL NOTATION SYMBOL-30
+1D231;N # GREEK INSTRUMENTAL NOTATION SYMBOL-32
+1D232;N # GREEK INSTRUMENTAL NOTATION SYMBOL-36
+1D233;N # GREEK INSTRUMENTAL NOTATION SYMBOL-37
+1D234;N # GREEK INSTRUMENTAL NOTATION SYMBOL-38
+1D235;N # GREEK INSTRUMENTAL NOTATION SYMBOL-39
+1D236;N # GREEK INSTRUMENTAL NOTATION SYMBOL-40
+1D237;N # GREEK INSTRUMENTAL NOTATION SYMBOL-42
+1D238;N # GREEK INSTRUMENTAL NOTATION SYMBOL-43
+1D239;N # GREEK INSTRUMENTAL NOTATION SYMBOL-45
+1D23A;N # GREEK INSTRUMENTAL NOTATION SYMBOL-47
+1D23B;N # GREEK INSTRUMENTAL NOTATION SYMBOL-48
+1D23C;N # GREEK INSTRUMENTAL NOTATION SYMBOL-49
+1D23D;N # GREEK INSTRUMENTAL NOTATION SYMBOL-50
+1D23E;N # GREEK INSTRUMENTAL NOTATION SYMBOL-51
+1D23F;N # GREEK INSTRUMENTAL NOTATION SYMBOL-52
+1D240;N # GREEK INSTRUMENTAL NOTATION SYMBOL-53
+1D241;N # GREEK INSTRUMENTAL NOTATION SYMBOL-54
+1D242;N # COMBINING GREEK MUSICAL TRISEME
+1D243;N # COMBINING GREEK MUSICAL TETRASEME
+1D244;N # COMBINING GREEK MUSICAL PENTASEME
+1D245;N # GREEK MUSICAL LEIMMA
1D300;N # MONOGRAM FOR EARTH
1D301;N # DIGRAM FOR HEAVENLY EARTH
1D302;N # DIGRAM FOR HUMAN EARTH
@@ -13885,6 +15139,8 @@ FFFD;A # REPLACEMENT CHARACTER
1D6A1;N # MATHEMATICAL MONOSPACE SMALL X
1D6A2;N # MATHEMATICAL MONOSPACE SMALL Y
1D6A3;N # MATHEMATICAL MONOSPACE SMALL Z
+1D6A4;N # MATHEMATICAL ITALIC SMALL DOTLESS I
+1D6A5;N # MATHEMATICAL ITALIC SMALL DOTLESS J
1D6A8;N # MATHEMATICAL BOLD CAPITAL ALPHA
1D6A9;N # MATHEMATICAL BOLD CAPITAL BETA
1D6AA;N # MATHEMATICAL BOLD CAPITAL GAMMA
diff --git a/gnu/usr.bin/perl/lib/unicore/HangulSyllableType.txt b/gnu/usr.bin/perl/lib/unicore/HangulSyllableType.txt
index d906fb1ac7b..5c4b1f47116 100644
--- a/gnu/usr.bin/perl/lib/unicore/HangulSyllableType.txt
+++ b/gnu/usr.bin/perl/lib/unicore/HangulSyllableType.txt
@@ -1,8 +1,8 @@
-# HangulSyllableType-4.0.1.txt
-# Date: 2004-03-02, 02:42:32 GMT [MD]
+# HangulSyllableType-4.1.0.txt
+# Date: 2004-12-11, 05:44:43 GMT [MD]
#
# Unicode Character Database
-# Copyright (c) 1991-2004 Unicode, Inc.
+# Copyright (c) 1991-2005 Unicode, Inc.
# For terms of use, see http://www.unicode.org/terms_of_use.html
# For documentation, see UCD.html
diff --git a/gnu/usr.bin/perl/lib/unicore/Jamo.txt b/gnu/usr.bin/perl/lib/unicore/Jamo.txt
index c8bcc881398..84f54bea902 100644
--- a/gnu/usr.bin/perl/lib/unicore/Jamo.txt
+++ b/gnu/usr.bin/perl/lib/unicore/Jamo.txt
@@ -1,5 +1,5 @@
-# Jamo-4.0.1.txt
-# Date: 2004-03-02, 18:15 PST [KW]
+# Jamo-4.1.0.txt
+# Date: 2004-12-09, 17:48 PST [KW]
#
# Unicode Character Database
# Copyright (c) 1991-2004 Unicode, Inc.
diff --git a/gnu/usr.bin/perl/lib/unicore/LineBreak.txt b/gnu/usr.bin/perl/lib/unicore/LineBreak.txt
index 43faf4f5f7f..988f1caf866 100644
--- a/gnu/usr.bin/perl/lib/unicore/LineBreak.txt
+++ b/gnu/usr.bin/perl/lib/unicore/LineBreak.txt
@@ -1,15 +1,21 @@
-# LineBreak-4.0.1.txt
+# LineBreak-4.1.0.txt
+# Date: 2005-03-17, 15:21:00 PST [KW]
#
# Line Break Properties
#
-# This file is a supplement to the UnicodeData.txt file.
+# This file is a normative contributory data file in the
+# Unicode Character Database.
# It contains both normative and informative data.
+#
+# Copyright (c) 1991-2005 Unicode, Inc.
+# For terms of use, see http://www.unicode.org/terms_of_use.html
+#
# The format is two fields separated by a semicolon.
-# Field 1: Unicode value
-# Field 2: LineBreak property, consisting of one of the following values:
+# Field 0: Unicode value
+# Field 1: LineBreak property, consisting of one of the following values:
# Normative:
# "BK", "CR", "LF", "CM", "SG", "GL", "CB", "SP", "ZW",
-# "NL", "WJ"
+# "NL", "WJ", "JL", "JV", "JT", "H2", "H3"
# Informative:
# "XX", "OP", "CL", "QU", "NS", "EX", "SY",
# "IS", "PR", "PO", "NU", "AL", "ID", "IN", "HY",
@@ -22,7 +28,7 @@
# The Unicode name of each character is provided in a comment for help
# in identifying the characters.
#
-# See UTR #14: Line Breaking Properties, for more information
+# See UAX #14: Line Breaking Properties, for more information
0000;CM # <control>
0001;CM # <control>
0002;CM # <control>
@@ -590,6 +596,17 @@
0234;AL # LATIN SMALL LETTER L WITH CURL
0235;AL # LATIN SMALL LETTER N WITH CURL
0236;AL # LATIN SMALL LETTER T WITH CURL
+0237;AL # LATIN SMALL LETTER DOTLESS J
+0238;AL # LATIN SMALL LETTER DB DIGRAPH
+0239;AL # LATIN SMALL LETTER QP DIGRAPH
+023A;AL # LATIN CAPITAL LETTER A WITH STROKE
+023B;AL # LATIN CAPITAL LETTER C WITH STROKE
+023C;AL # LATIN SMALL LETTER C WITH STROKE
+023D;AL # LATIN CAPITAL LETTER L WITH BAR
+023E;AL # LATIN CAPITAL LETTER T WITH DIAGONAL STROKE
+023F;AL # LATIN SMALL LETTER S WITH SWASH TAIL
+0240;AL # LATIN SMALL LETTER Z WITH SWASH TAIL
+0241;AL # LATIN CAPITAL LETTER GLOTTAL STOP
0250;AL # LATIN SMALL LETTER TURNED A
0251;AL # LATIN SMALL LETTER ALPHA
0252;AL # LATIN SMALL LETTER TURNED ALPHA
@@ -684,7 +701,7 @@
02AB;AL # LATIN SMALL LETTER LZ DIGRAPH
02AC;AL # LATIN LETTER BILABIAL PERCUSSIVE
02AD;AL # LATIN LETTER BIDENTAL PERCUSSIVE
-02AE;AL # LATIN SMALL LETTER TURNED H WITH FISHHOOK
+02AE;AL # LATIN SMALL LETTER TURNED H WITH FISHHOOK
02AF;AL # LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL
02B0;AL # MODIFIER LETTER SMALL H
02B1;AL # MODIFIER LETTER SMALL H WITH HOOK
@@ -845,7 +862,7 @@
034C;CM # COMBINING ALMOST EQUAL TO ABOVE
034D;CM # COMBINING LEFT RIGHT ARROW BELOW
034E;CM # COMBINING UPWARDS ARROW BELOW
-034F;CM # COMBINING GRAPHEME JOINER
+034F;GL # COMBINING GRAPHEME JOINER
0350;CM # COMBINING RIGHT ARROWHEAD ABOVE
0351;CM # COMBINING LEFT HALF RING ABOVE
0352;CM # COMBINING FERMATA
@@ -854,6 +871,11 @@
0355;CM # COMBINING RIGHT ARROWHEAD BELOW
0356;CM # COMBINING RIGHT ARROWHEAD AND UP ARROWHEAD BELOW
0357;CM # COMBINING RIGHT HALF RING ABOVE
+0358;CM # COMBINING DOT ABOVE RIGHT
+0359;CM # COMBINING ASTERISK BELOW
+035A;CM # COMBINING DOUBLE RING BELOW
+035B;CM # COMBINING ZIGZAG ABOVE
+035C;CM # COMBINING DOUBLE BREVE BELOW
035D;GL # COMBINING DOUBLE BREVE
035E;GL # COMBINING DOUBLE MACRON
035F;GL # COMBINING DOUBLE MACRON BELOW
@@ -993,6 +1015,10 @@
03F9;AL # GREEK CAPITAL LUNATE SIGMA SYMBOL
03FA;AL # GREEK CAPITAL LETTER SAN
03FB;AL # GREEK SMALL LETTER SAN
+03FC;AL # GREEK RHO WITH STROKE SYMBOL
+03FD;AL # GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL
+03FE;AL # GREEK CAPITAL DOTTED LUNATE SIGMA SYMBOL
+03FF;AL # GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL
0400;AL # CYRILLIC CAPITAL LETTER IE WITH GRAVE
0401;AL # CYRILLIC CAPITAL LETTER IO
0402;AL # CYRILLIC CAPITAL LETTER DJE
@@ -1237,6 +1263,8 @@
04F3;AL # CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE
04F4;AL # CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS
04F5;AL # CYRILLIC SMALL LETTER CHE WITH DIAERESIS
+04F6;AL # CYRILLIC CAPITAL LETTER GHE WITH DESCENDER
+04F7;AL # CYRILLIC SMALL LETTER GHE WITH DESCENDER
04F8;AL # CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS
04F9;AL # CYRILLIC SMALL LETTER YERU WITH DIAERESIS
0500;AL # CYRILLIC CAPITAL LETTER KOMI DE
@@ -1358,6 +1386,7 @@
059F;CM # HEBREW ACCENT QARNEY PARA
05A0;CM # HEBREW ACCENT TELISHA GEDOLA
05A1;CM # HEBREW ACCENT PAZER
+05A2;CM # HEBREW ACCENT ATNAH HAFUKH
05A3;CM # HEBREW ACCENT MUNAH
05A4;CM # HEBREW ACCENT MAHAPAKH
05A5;CM # HEBREW ACCENT MERKHA
@@ -1391,6 +1420,9 @@
05C2;CM # HEBREW POINT SIN DOT
05C3;AL # HEBREW PUNCTUATION SOF PASUQ
05C4;CM # HEBREW MARK UPPER DOT
+05C5;CM # HEBREW MARK LOWER DOT
+05C6;EX # HEBREW PUNCTUATION NUN HAFUKHA
+05C7;CM # HEBREW POINT QAMATS QATAN
05D0;AL # HEBREW LETTER ALEF
05D1;AL # HEBREW LETTER BET
05D2;AL # HEBREW LETTER GIMEL
@@ -1427,7 +1459,8 @@
0601;AL # ARABIC SIGN SANAH
0602;AL # ARABIC FOOTNOTE MARKER
0603;AL # ARABIC SIGN SAFHA
-060C;AL # ARABIC COMMA
+060B;PO # AFGHANI SIGN
+060C;EX # ARABIC COMMA
060D;IS # ARABIC DATE SEPARATOR
060E;AL # ARABIC POETIC VERSE SIGN
060F;AL # ARABIC SIGN MISRA
@@ -1436,9 +1469,10 @@
0612;CM # ARABIC SIGN RAHMATULLAH ALAYHE
0613;CM # ARABIC SIGN RADI ALLAHOU ANHU
0614;CM # ARABIC SIGN TAKHALLUS
-0615;CM # ARABIC SMALL HIGH TAH
-061B;AL # ARABIC SEMICOLON
-061F;AL # ARABIC QUESTION MARK
+0615;CM # ARABIC SMALL HIGH TAH
+061B;EX # ARABIC SEMICOLON
+061E;EX # ARABIC TRIPLE DOT PUNCTUATION MARK
+061F;EX # ARABIC QUESTION MARK
0621;AL # ARABIC LETTER HAMZA
0622;AL # ARABIC LETTER ALEF WITH MADDA ABOVE
0623;AL # ARABIC LETTER ALEF WITH HAMZA ABOVE
@@ -1490,6 +1524,12 @@
0656;CM # ARABIC SUBSCRIPT ALEF
0657;CM # ARABIC INVERTED DAMMA
0658;CM # ARABIC MARK NOON GHUNNA
+0659;CM # ARABIC ZWARAKAY
+065A;CM # ARABIC VOWEL SIGN SMALL V ABOVE
+065B;CM # ARABIC VOWEL SIGN INVERTED SMALL V ABOVE
+065C;CM # ARABIC VOWEL SIGN DOT BELOW
+065D;CM # ARABIC REVERSED DAMMA
+065E;CM # ARABIC FATHA WITH TWO DOTS
0660;NU # ARABIC-INDIC DIGIT ZERO
0661;NU # ARABIC-INDIC DIGIT ONE
0662;NU # ARABIC-INDIC DIGIT TWO
@@ -1500,7 +1540,7 @@
0667;NU # ARABIC-INDIC DIGIT SEVEN
0668;NU # ARABIC-INDIC DIGIT EIGHT
0669;NU # ARABIC-INDIC DIGIT NINE
-066A;AL # ARABIC PERCENT SIGN
+066A;EX # ARABIC PERCENT SIGN
066B;NU # ARABIC DECIMAL SEPARATOR
066C;NU # ARABIC THOUSANDS SEPARATOR
066D;AL # ARABIC FIVE POINTED STAR
@@ -1606,7 +1646,7 @@
06D1;AL # ARABIC LETTER YEH WITH THREE DOTS BELOW
06D2;AL # ARABIC LETTER YEH BARREE
06D3;AL # ARABIC LETTER YEH BARREE WITH HAMZA ABOVE
-06D4;AL # ARABIC FULL STOP
+06D4;EX # ARABIC FULL STOP
06D5;AL # ARABIC LETTER AE
06D6;CM # ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA
06D7;CM # ARABIC SMALL HIGH LIGATURE QAF WITH LAM WITH ALEF MAKSURA
@@ -1727,6 +1767,36 @@
074D;AL # SYRIAC LETTER SOGDIAN ZHAIN
074E;AL # SYRIAC LETTER SOGDIAN KHAPH
074F;AL # SYRIAC LETTER SOGDIAN FE
+0750;AL # ARABIC LETTER BEH WITH THREE DOTS HORIZONTALLY BELOW
+0751;AL # ARABIC LETTER BEH WITH DOT BELOW AND THREE DOTS ABOVE
+0752;AL # ARABIC LETTER BEH WITH THREE DOTS POINTING UPWARDS BELOW
+0753;AL # ARABIC LETTER BEH WITH THREE DOTS POINTING UPWARDS BELOW AND TWO DOTS ABOVE
+0754;AL # ARABIC LETTER BEH WITH TWO DOTS BELOW AND DOT ABOVE
+0755;AL # ARABIC LETTER BEH WITH INVERTED SMALL V BELOW
+0756;AL # ARABIC LETTER BEH WITH SMALL V
+0757;AL # ARABIC LETTER HAH WITH TWO DOTS ABOVE
+0758;AL # ARABIC LETTER HAH WITH THREE DOTS POINTING UPWARDS BELOW
+0759;AL # ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW AND SMALL TAH
+075A;AL # ARABIC LETTER DAL WITH INVERTED SMALL V BELOW
+075B;AL # ARABIC LETTER REH WITH STROKE
+075C;AL # ARABIC LETTER SEEN WITH FOUR DOTS ABOVE
+075D;AL # ARABIC LETTER AIN WITH TWO DOTS ABOVE
+075E;AL # ARABIC LETTER AIN WITH THREE DOTS POINTING DOWNWARDS ABOVE
+075F;AL # ARABIC LETTER AIN WITH TWO DOTS VERTICALLY ABOVE
+0760;AL # ARABIC LETTER FEH WITH TWO DOTS BELOW
+0761;AL # ARABIC LETTER FEH WITH THREE DOTS POINTING UPWARDS BELOW
+0762;AL # ARABIC LETTER KEHEH WITH DOT ABOVE
+0763;AL # ARABIC LETTER KEHEH WITH THREE DOTS ABOVE
+0764;AL # ARABIC LETTER KEHEH WITH THREE DOTS POINTING UPWARDS BELOW
+0765;AL # ARABIC LETTER MEEM WITH DOT ABOVE
+0766;AL # ARABIC LETTER MEEM WITH DOT BELOW
+0767;AL # ARABIC LETTER NOON WITH TWO DOTS BELOW
+0768;AL # ARABIC LETTER NOON WITH SMALL TAH
+0769;AL # ARABIC LETTER NOON WITH SMALL V
+076A;AL # ARABIC LETTER LAM WITH BAR
+076B;AL # ARABIC LETTER REH WITH TWO DOTS VERTICALLY ABOVE
+076C;AL # ARABIC LETTER REH WITH HAMZA ABOVE
+076D;AL # ARABIC LETTER SEEN WITH TWO DOTS VERTICALLY ABOVE
0780;AL # THAANA LETTER HAA
0781;AL # THAANA LETTER SHAVIYANI
0782;AL # THAANA LETTER NOONU
@@ -1869,8 +1939,8 @@
0961;AL # DEVANAGARI LETTER VOCALIC LL
0962;CM # DEVANAGARI VOWEL SIGN VOCALIC L
0963;CM # DEVANAGARI VOWEL SIGN VOCALIC LL
-0964;AL # DEVANAGARI DANDA
-0965;AL # DEVANAGARI DOUBLE DANDA
+0964;BA # DEVANAGARI DANDA
+0965;BA # DEVANAGARI DOUBLE DANDA
0966;NU # DEVANAGARI DIGIT ZERO
0967;NU # DEVANAGARI DIGIT ONE
0968;NU # DEVANAGARI DIGIT TWO
@@ -1882,6 +1952,7 @@
096E;NU # DEVANAGARI DIGIT EIGHT
096F;NU # DEVANAGARI DIGIT NINE
0970;AL # DEVANAGARI ABBREVIATION SIGN
+097D;AL # DEVANAGARI LETTER GLOTTAL STOP
0981;CM # BENGALI SIGN CANDRABINDU
0982;CM # BENGALI SIGN ANUSVARA
0983;CM # BENGALI SIGN VISARGA
@@ -1943,6 +2014,7 @@
09CB;CM # BENGALI VOWEL SIGN O
09CC;CM # BENGALI VOWEL SIGN AU
09CD;CM # BENGALI SIGN VIRAMA
+09CE;AL # BENGALI LETTER KHANDA TA
09D7;CM # BENGALI AU LENGTH MARK
09DC;AL # BENGALI LETTER RRA
09DD;AL # BENGALI LETTER RHA
@@ -2246,6 +2318,7 @@
0BB3;AL # TAMIL LETTER LLA
0BB4;AL # TAMIL LETTER LLLA
0BB5;AL # TAMIL LETTER VA
+0BB6;AL # TAMIL LETTER SHA
0BB7;AL # TAMIL LETTER SSA
0BB8;AL # TAMIL LETTER SA
0BB9;AL # TAMIL LETTER HA
@@ -2262,6 +2335,7 @@
0BCC;CM # TAMIL VOWEL SIGN AU
0BCD;CM # TAMIL SIGN VIRAMA
0BD7;CM # TAMIL AU LENGTH MARK
+0BE6;NU # TAMIL DIGIT ZERO
0BE7;NU # TAMIL DIGIT ONE
0BE8;NU # TAMIL DIGIT TWO
0BE9;NU # TAMIL DIGIT THREE
@@ -2687,8 +2761,8 @@
0E57;NU # THAI DIGIT SEVEN
0E58;NU # THAI DIGIT EIGHT
0E59;NU # THAI DIGIT NINE
-0E5A;NS # THAI CHARACTER ANGKHANKHU
-0E5B;NS # THAI CHARACTER KHOMUT
+0E5A;BA # THAI CHARACTER ANGKHANKHU
+0E5B;BA # THAI CHARACTER KHOMUT
0E81;SA # LAO LETTER KO
0E82;SA # LAO LETTER KHO SUNG
0E84;SA # LAO LETTER KHO TAM
@@ -2755,26 +2829,26 @@
0EDC;SA # LAO HO NO
0EDD;SA # LAO HO MO
0F00;AL # TIBETAN SYLLABLE OM
-0F01;AL # TIBETAN MARK GTER YIG MGO TRUNCATED A
-0F02;AL # TIBETAN MARK GTER YIG MGO -UM RNAM BCAD MA
-0F03;AL # TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA
-0F04;AL # TIBETAN MARK INITIAL YIG MGO MDUN MA
+0F01;BB # TIBETAN MARK GTER YIG MGO TRUNCATED A
+0F02;BB # TIBETAN MARK GTER YIG MGO -UM RNAM BCAD MA
+0F03;BB # TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA
+0F04;BB # TIBETAN MARK INITIAL YIG MGO MDUN MA
0F05;AL # TIBETAN MARK CLOSING YIG MGO SGAB MA
-0F06;AL # TIBETAN MARK CARET YIG MGO PHUR SHAD MA
-0F07;AL # TIBETAN MARK YIG MGO TSHEG SHAD MA
-0F08;AL # TIBETAN MARK SBRUL SHAD
-0F09;AL # TIBETAN MARK BSKUR YIG MGO
-0F0A;AL # TIBETAN MARK BKA- SHOG YIG MGO
+0F06;BB # TIBETAN MARK CARET YIG MGO PHUR SHAD MA
+0F07;BB # TIBETAN MARK YIG MGO TSHEG SHAD MA
+0F08;GL # TIBETAN MARK SBRUL SHAD
+0F09;BB # TIBETAN MARK BSKUR YIG MGO
+0F0A;BB # TIBETAN MARK BKA- SHOG YIG MGO
0F0B;BA # TIBETAN MARK INTERSYLLABIC TSHEG
0F0C;GL # TIBETAN MARK DELIMITER TSHEG BSTAR
-0F0D;AL # TIBETAN MARK SHAD
-0F0E;AL # TIBETAN MARK NYIS SHAD
-0F0F;AL # TIBETAN MARK TSHEG SHAD
-0F10;AL # TIBETAN MARK NYIS TSHEG SHAD
-0F11;AL # TIBETAN MARK RIN CHEN SPUNGS SHAD
-0F12;AL # TIBETAN MARK RGYA GRAM SHAD
+0F0D;EX # TIBETAN MARK SHAD
+0F0E;EX # TIBETAN MARK NYIS SHAD
+0F0F;EX # TIBETAN MARK TSHEG SHAD
+0F10;EX # TIBETAN MARK NYIS TSHEG SHAD
+0F11;EX # TIBETAN MARK RIN CHEN SPUNGS SHAD
+0F12;GL # TIBETAN MARK RGYA GRAM SHAD
0F13;AL # TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN
-0F14;AL # TIBETAN MARK GTER TSHEG
+0F14;EX # TIBETAN MARK GTER TSHEG
0F15;AL # TIBETAN LOGOTYPE SIGN CHAD RTAGS
0F16;AL # TIBETAN LOGOTYPE SIGN LHAG RTAGS
0F17;AL # TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS
@@ -2806,7 +2880,7 @@
0F31;AL # TIBETAN DIGIT HALF EIGHT
0F32;AL # TIBETAN DIGIT HALF NINE
0F33;AL # TIBETAN DIGIT HALF ZERO
-0F34;AL # TIBETAN MARK BSDUS RTAGS
+0F34;BA # TIBETAN MARK BSDUS RTAGS
0F35;CM # TIBETAN MARK NGAS BZUNG NYI ZLA
0F36;AL # TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN
0F37;CM # TIBETAN MARK NGAS BZUNG SGOR RTAGS
@@ -2874,13 +2948,13 @@
0F7C;CM # TIBETAN VOWEL SIGN O
0F7D;CM # TIBETAN VOWEL SIGN OO
0F7E;CM # TIBETAN SIGN RJES SU NGA RO
-0F7F;CM # TIBETAN SIGN RNAM BCAD
+0F7F;BA # TIBETAN SIGN RNAM BCAD
0F80;CM # TIBETAN VOWEL SIGN REVERSED I
0F81;CM # TIBETAN VOWEL SIGN REVERSED II
0F82;CM # TIBETAN SIGN NYI ZLA NAA DA
0F83;CM # TIBETAN SIGN SNA LDAN
0F84;CM # TIBETAN MARK HALANTA
-0F85;AL # TIBETAN MARK PALUTA
+0F85;BA # TIBETAN MARK PALUTA
0F86;CM # TIBETAN SIGN LCI RTAGS
0F87;CM # TIBETAN SIGN YANG RTAGS
0F88;AL # TIBETAN SIGN LCE TSA CAN
@@ -2931,8 +3005,8 @@
0FBA;CM # TIBETAN SUBJOINED LETTER FIXED-FORM WA
0FBB;CM # TIBETAN SUBJOINED LETTER FIXED-FORM YA
0FBC;CM # TIBETAN SUBJOINED LETTER FIXED-FORM RA
-0FBE;AL # TIBETAN KU RU KHA
-0FBF;AL # TIBETAN KU RU KHA BZHI MIG CAN
+0FBE;BA # TIBETAN KU RU KHA
+0FBF;BA # TIBETAN KU RU KHA BZHI MIG CAN
0FC0;AL # TIBETAN CANTILLATION SIGN HEAVY BEAT
0FC1;AL # TIBETAN CANTILLATION SIGN LIGHT BEAT
0FC2;AL # TIBETAN CANTILLATION SIGN CANG TE-U
@@ -2947,6 +3021,8 @@
0FCB;AL # TIBETAN SYMBOL NOR BU GSUM -KHYIL
0FCC;AL # TIBETAN SYMBOL NOR BU BZHI -KHYIL
0FCF;AL # TIBETAN SIGN RDEL NAG GSUM
+0FD0;BB # TIBETAN MARK BSKA- SHOG GI MGO RGYAN
+0FD1;BB # TIBETAN MARK MNYAM YIG GI MGO RGYAN
1000;SA # MYANMAR LETTER KA
1001;SA # MYANMAR LETTER KHA
1002;SA # MYANMAR LETTER GA
@@ -3009,8 +3085,8 @@
1047;NU # MYANMAR DIGIT SEVEN
1048;NU # MYANMAR DIGIT EIGHT
1049;NU # MYANMAR DIGIT NINE
-104A;AL # MYANMAR SIGN LITTLE SECTION
-104B;AL # MYANMAR SIGN SECTION
+104A;BA # MYANMAR SIGN LITTLE SECTION
+104B;BA # MYANMAR SIGN SECTION
104C;AL # MYANMAR SYMBOL LOCATIVE
104D;AL # MYANMAR SYMBOL COMPLETED
104E;AL # MYANMAR SYMBOL AFOREMENTIONED
@@ -3104,247 +3180,250 @@
10F6;AL # GEORGIAN LETTER FI
10F7;AL # GEORGIAN LETTER YN
10F8;AL # GEORGIAN LETTER ELIFI
+10F9;AL # GEORGIAN LETTER TURNED GAN
+10FA;AL # GEORGIAN LETTER AIN
10FB;AL # GEORGIAN PARAGRAPH SEPARATOR
-1100;ID # HANGUL CHOSEONG KIYEOK
-1101;ID # HANGUL CHOSEONG SSANGKIYEOK
-1102;ID # HANGUL CHOSEONG NIEUN
-1103;ID # HANGUL CHOSEONG TIKEUT
-1104;ID # HANGUL CHOSEONG SSANGTIKEUT
-1105;ID # HANGUL CHOSEONG RIEUL
-1106;ID # HANGUL CHOSEONG MIEUM
-1107;ID # HANGUL CHOSEONG PIEUP
-1108;ID # HANGUL CHOSEONG SSANGPIEUP
-1109;ID # HANGUL CHOSEONG SIOS
-110A;ID # HANGUL CHOSEONG SSANGSIOS
-110B;ID # HANGUL CHOSEONG IEUNG
-110C;ID # HANGUL CHOSEONG CIEUC
-110D;ID # HANGUL CHOSEONG SSANGCIEUC
-110E;ID # HANGUL CHOSEONG CHIEUCH
-110F;ID # HANGUL CHOSEONG KHIEUKH
-1110;ID # HANGUL CHOSEONG THIEUTH
-1111;ID # HANGUL CHOSEONG PHIEUPH
-1112;ID # HANGUL CHOSEONG HIEUH
-1113;ID # HANGUL CHOSEONG NIEUN-KIYEOK
-1114;ID # HANGUL CHOSEONG SSANGNIEUN
-1115;ID # HANGUL CHOSEONG NIEUN-TIKEUT
-1116;ID # HANGUL CHOSEONG NIEUN-PIEUP
-1117;ID # HANGUL CHOSEONG TIKEUT-KIYEOK
-1118;ID # HANGUL CHOSEONG RIEUL-NIEUN
-1119;ID # HANGUL CHOSEONG SSANGRIEUL
-111A;ID # HANGUL CHOSEONG RIEUL-HIEUH
-111B;ID # HANGUL CHOSEONG KAPYEOUNRIEUL
-111C;ID # HANGUL CHOSEONG MIEUM-PIEUP
-111D;ID # HANGUL CHOSEONG KAPYEOUNMIEUM
-111E;ID # HANGUL CHOSEONG PIEUP-KIYEOK
-111F;ID # HANGUL CHOSEONG PIEUP-NIEUN
-1120;ID # HANGUL CHOSEONG PIEUP-TIKEUT
-1121;ID # HANGUL CHOSEONG PIEUP-SIOS
-1122;ID # HANGUL CHOSEONG PIEUP-SIOS-KIYEOK
-1123;ID # HANGUL CHOSEONG PIEUP-SIOS-TIKEUT
-1124;ID # HANGUL CHOSEONG PIEUP-SIOS-PIEUP
-1125;ID # HANGUL CHOSEONG PIEUP-SSANGSIOS
-1126;ID # HANGUL CHOSEONG PIEUP-SIOS-CIEUC
-1127;ID # HANGUL CHOSEONG PIEUP-CIEUC
-1128;ID # HANGUL CHOSEONG PIEUP-CHIEUCH
-1129;ID # HANGUL CHOSEONG PIEUP-THIEUTH
-112A;ID # HANGUL CHOSEONG PIEUP-PHIEUPH
-112B;ID # HANGUL CHOSEONG KAPYEOUNPIEUP
-112C;ID # HANGUL CHOSEONG KAPYEOUNSSANGPIEUP
-112D;ID # HANGUL CHOSEONG SIOS-KIYEOK
-112E;ID # HANGUL CHOSEONG SIOS-NIEUN
-112F;ID # HANGUL CHOSEONG SIOS-TIKEUT
-1130;ID # HANGUL CHOSEONG SIOS-RIEUL
-1131;ID # HANGUL CHOSEONG SIOS-MIEUM
-1132;ID # HANGUL CHOSEONG SIOS-PIEUP
-1133;ID # HANGUL CHOSEONG SIOS-PIEUP-KIYEOK
-1134;ID # HANGUL CHOSEONG SIOS-SSANGSIOS
-1135;ID # HANGUL CHOSEONG SIOS-IEUNG
-1136;ID # HANGUL CHOSEONG SIOS-CIEUC
-1137;ID # HANGUL CHOSEONG SIOS-CHIEUCH
-1138;ID # HANGUL CHOSEONG SIOS-KHIEUKH
-1139;ID # HANGUL CHOSEONG SIOS-THIEUTH
-113A;ID # HANGUL CHOSEONG SIOS-PHIEUPH
-113B;ID # HANGUL CHOSEONG SIOS-HIEUH
-113C;ID # HANGUL CHOSEONG CHITUEUMSIOS
-113D;ID # HANGUL CHOSEONG CHITUEUMSSANGSIOS
-113E;ID # HANGUL CHOSEONG CEONGCHIEUMSIOS
-113F;ID # HANGUL CHOSEONG CEONGCHIEUMSSANGSIOS
-1140;ID # HANGUL CHOSEONG PANSIOS
-1141;ID # HANGUL CHOSEONG IEUNG-KIYEOK
-1142;ID # HANGUL CHOSEONG IEUNG-TIKEUT
-1143;ID # HANGUL CHOSEONG IEUNG-MIEUM
-1144;ID # HANGUL CHOSEONG IEUNG-PIEUP
-1145;ID # HANGUL CHOSEONG IEUNG-SIOS
-1146;ID # HANGUL CHOSEONG IEUNG-PANSIOS
-1147;ID # HANGUL CHOSEONG SSANGIEUNG
-1148;ID # HANGUL CHOSEONG IEUNG-CIEUC
-1149;ID # HANGUL CHOSEONG IEUNG-CHIEUCH
-114A;ID # HANGUL CHOSEONG IEUNG-THIEUTH
-114B;ID # HANGUL CHOSEONG IEUNG-PHIEUPH
-114C;ID # HANGUL CHOSEONG YESIEUNG
-114D;ID # HANGUL CHOSEONG CIEUC-IEUNG
-114E;ID # HANGUL CHOSEONG CHITUEUMCIEUC
-114F;ID # HANGUL CHOSEONG CHITUEUMSSANGCIEUC
-1150;ID # HANGUL CHOSEONG CEONGCHIEUMCIEUC
-1151;ID # HANGUL CHOSEONG CEONGCHIEUMSSANGCIEUC
-1152;ID # HANGUL CHOSEONG CHIEUCH-KHIEUKH
-1153;ID # HANGUL CHOSEONG CHIEUCH-HIEUH
-1154;ID # HANGUL CHOSEONG CHITUEUMCHIEUCH
-1155;ID # HANGUL CHOSEONG CEONGCHIEUMCHIEUCH
-1156;ID # HANGUL CHOSEONG PHIEUPH-PIEUP
-1157;ID # HANGUL CHOSEONG KAPYEOUNPHIEUPH
-1158;ID # HANGUL CHOSEONG SSANGHIEUH
-1159;ID # HANGUL CHOSEONG YEORINHIEUH
-115F;ID # HANGUL CHOSEONG FILLER
-1160;ID # HANGUL JUNGSEONG FILLER
-1161;ID # HANGUL JUNGSEONG A
-1162;ID # HANGUL JUNGSEONG AE
-1163;ID # HANGUL JUNGSEONG YA
-1164;ID # HANGUL JUNGSEONG YAE
-1165;ID # HANGUL JUNGSEONG EO
-1166;ID # HANGUL JUNGSEONG E
-1167;ID # HANGUL JUNGSEONG YEO
-1168;ID # HANGUL JUNGSEONG YE
-1169;ID # HANGUL JUNGSEONG O
-116A;ID # HANGUL JUNGSEONG WA
-116B;ID # HANGUL JUNGSEONG WAE
-116C;ID # HANGUL JUNGSEONG OE
-116D;ID # HANGUL JUNGSEONG YO
-116E;ID # HANGUL JUNGSEONG U
-116F;ID # HANGUL JUNGSEONG WEO
-1170;ID # HANGUL JUNGSEONG WE
-1171;ID # HANGUL JUNGSEONG WI
-1172;ID # HANGUL JUNGSEONG YU
-1173;ID # HANGUL JUNGSEONG EU
-1174;ID # HANGUL JUNGSEONG YI
-1175;ID # HANGUL JUNGSEONG I
-1176;ID # HANGUL JUNGSEONG A-O
-1177;ID # HANGUL JUNGSEONG A-U
-1178;ID # HANGUL JUNGSEONG YA-O
-1179;ID # HANGUL JUNGSEONG YA-YO
-117A;ID # HANGUL JUNGSEONG EO-O
-117B;ID # HANGUL JUNGSEONG EO-U
-117C;ID # HANGUL JUNGSEONG EO-EU
-117D;ID # HANGUL JUNGSEONG YEO-O
-117E;ID # HANGUL JUNGSEONG YEO-U
-117F;ID # HANGUL JUNGSEONG O-EO
-1180;ID # HANGUL JUNGSEONG O-E
-1181;ID # HANGUL JUNGSEONG O-YE
-1182;ID # HANGUL JUNGSEONG O-O
-1183;ID # HANGUL JUNGSEONG O-U
-1184;ID # HANGUL JUNGSEONG YO-YA
-1185;ID # HANGUL JUNGSEONG YO-YAE
-1186;ID # HANGUL JUNGSEONG YO-YEO
-1187;ID # HANGUL JUNGSEONG YO-O
-1188;ID # HANGUL JUNGSEONG YO-I
-1189;ID # HANGUL JUNGSEONG U-A
-118A;ID # HANGUL JUNGSEONG U-AE
-118B;ID # HANGUL JUNGSEONG U-EO-EU
-118C;ID # HANGUL JUNGSEONG U-YE
-118D;ID # HANGUL JUNGSEONG U-U
-118E;ID # HANGUL JUNGSEONG YU-A
-118F;ID # HANGUL JUNGSEONG YU-EO
-1190;ID # HANGUL JUNGSEONG YU-E
-1191;ID # HANGUL JUNGSEONG YU-YEO
-1192;ID # HANGUL JUNGSEONG YU-YE
-1193;ID # HANGUL JUNGSEONG YU-U
-1194;ID # HANGUL JUNGSEONG YU-I
-1195;ID # HANGUL JUNGSEONG EU-U
-1196;ID # HANGUL JUNGSEONG EU-EU
-1197;ID # HANGUL JUNGSEONG YI-U
-1198;ID # HANGUL JUNGSEONG I-A
-1199;ID # HANGUL JUNGSEONG I-YA
-119A;ID # HANGUL JUNGSEONG I-O
-119B;ID # HANGUL JUNGSEONG I-U
-119C;ID # HANGUL JUNGSEONG I-EU
-119D;ID # HANGUL JUNGSEONG I-ARAEA
-119E;ID # HANGUL JUNGSEONG ARAEA
-119F;ID # HANGUL JUNGSEONG ARAEA-EO
-11A0;ID # HANGUL JUNGSEONG ARAEA-U
-11A1;ID # HANGUL JUNGSEONG ARAEA-I
-11A2;ID # HANGUL JUNGSEONG SSANGARAEA
-11A8;ID # HANGUL JONGSEONG KIYEOK
-11A9;ID # HANGUL JONGSEONG SSANGKIYEOK
-11AA;ID # HANGUL JONGSEONG KIYEOK-SIOS
-11AB;ID # HANGUL JONGSEONG NIEUN
-11AC;ID # HANGUL JONGSEONG NIEUN-CIEUC
-11AD;ID # HANGUL JONGSEONG NIEUN-HIEUH
-11AE;ID # HANGUL JONGSEONG TIKEUT
-11AF;ID # HANGUL JONGSEONG RIEUL
-11B0;ID # HANGUL JONGSEONG RIEUL-KIYEOK
-11B1;ID # HANGUL JONGSEONG RIEUL-MIEUM
-11B2;ID # HANGUL JONGSEONG RIEUL-PIEUP
-11B3;ID # HANGUL JONGSEONG RIEUL-SIOS
-11B4;ID # HANGUL JONGSEONG RIEUL-THIEUTH
-11B5;ID # HANGUL JONGSEONG RIEUL-PHIEUPH
-11B6;ID # HANGUL JONGSEONG RIEUL-HIEUH
-11B7;ID # HANGUL JONGSEONG MIEUM
-11B8;ID # HANGUL JONGSEONG PIEUP
-11B9;ID # HANGUL JONGSEONG PIEUP-SIOS
-11BA;ID # HANGUL JONGSEONG SIOS
-11BB;ID # HANGUL JONGSEONG SSANGSIOS
-11BC;ID # HANGUL JONGSEONG IEUNG
-11BD;ID # HANGUL JONGSEONG CIEUC
-11BE;ID # HANGUL JONGSEONG CHIEUCH
-11BF;ID # HANGUL JONGSEONG KHIEUKH
-11C0;ID # HANGUL JONGSEONG THIEUTH
-11C1;ID # HANGUL JONGSEONG PHIEUPH
-11C2;ID # HANGUL JONGSEONG HIEUH
-11C3;ID # HANGUL JONGSEONG KIYEOK-RIEUL
-11C4;ID # HANGUL JONGSEONG KIYEOK-SIOS-KIYEOK
-11C5;ID # HANGUL JONGSEONG NIEUN-KIYEOK
-11C6;ID # HANGUL JONGSEONG NIEUN-TIKEUT
-11C7;ID # HANGUL JONGSEONG NIEUN-SIOS
-11C8;ID # HANGUL JONGSEONG NIEUN-PANSIOS
-11C9;ID # HANGUL JONGSEONG NIEUN-THIEUTH
-11CA;ID # HANGUL JONGSEONG TIKEUT-KIYEOK
-11CB;ID # HANGUL JONGSEONG TIKEUT-RIEUL
-11CC;ID # HANGUL JONGSEONG RIEUL-KIYEOK-SIOS
-11CD;ID # HANGUL JONGSEONG RIEUL-NIEUN
-11CE;ID # HANGUL JONGSEONG RIEUL-TIKEUT
-11CF;ID # HANGUL JONGSEONG RIEUL-TIKEUT-HIEUH
-11D0;ID # HANGUL JONGSEONG SSANGRIEUL
-11D1;ID # HANGUL JONGSEONG RIEUL-MIEUM-KIYEOK
-11D2;ID # HANGUL JONGSEONG RIEUL-MIEUM-SIOS
-11D3;ID # HANGUL JONGSEONG RIEUL-PIEUP-SIOS
-11D4;ID # HANGUL JONGSEONG RIEUL-PIEUP-HIEUH
-11D5;ID # HANGUL JONGSEONG RIEUL-KAPYEOUNPIEUP
-11D6;ID # HANGUL JONGSEONG RIEUL-SSANGSIOS
-11D7;ID # HANGUL JONGSEONG RIEUL-PANSIOS
-11D8;ID # HANGUL JONGSEONG RIEUL-KHIEUKH
-11D9;ID # HANGUL JONGSEONG RIEUL-YEORINHIEUH
-11DA;ID # HANGUL JONGSEONG MIEUM-KIYEOK
-11DB;ID # HANGUL JONGSEONG MIEUM-RIEUL
-11DC;ID # HANGUL JONGSEONG MIEUM-PIEUP
-11DD;ID # HANGUL JONGSEONG MIEUM-SIOS
-11DE;ID # HANGUL JONGSEONG MIEUM-SSANGSIOS
-11DF;ID # HANGUL JONGSEONG MIEUM-PANSIOS
-11E0;ID # HANGUL JONGSEONG MIEUM-CHIEUCH
-11E1;ID # HANGUL JONGSEONG MIEUM-HIEUH
-11E2;ID # HANGUL JONGSEONG KAPYEOUNMIEUM
-11E3;ID # HANGUL JONGSEONG PIEUP-RIEUL
-11E4;ID # HANGUL JONGSEONG PIEUP-PHIEUPH
-11E5;ID # HANGUL JONGSEONG PIEUP-HIEUH
-11E6;ID # HANGUL JONGSEONG KAPYEOUNPIEUP
-11E7;ID # HANGUL JONGSEONG SIOS-KIYEOK
-11E8;ID # HANGUL JONGSEONG SIOS-TIKEUT
-11E9;ID # HANGUL JONGSEONG SIOS-RIEUL
-11EA;ID # HANGUL JONGSEONG SIOS-PIEUP
-11EB;ID # HANGUL JONGSEONG PANSIOS
-11EC;ID # HANGUL JONGSEONG IEUNG-KIYEOK
-11ED;ID # HANGUL JONGSEONG IEUNG-SSANGKIYEOK
-11EE;ID # HANGUL JONGSEONG SSANGIEUNG
-11EF;ID # HANGUL JONGSEONG IEUNG-KHIEUKH
-11F0;ID # HANGUL JONGSEONG YESIEUNG
-11F1;ID # HANGUL JONGSEONG YESIEUNG-SIOS
-11F2;ID # HANGUL JONGSEONG YESIEUNG-PANSIOS
-11F3;ID # HANGUL JONGSEONG PHIEUPH-PIEUP
-11F4;ID # HANGUL JONGSEONG KAPYEOUNPHIEUPH
-11F5;ID # HANGUL JONGSEONG HIEUH-NIEUN
-11F6;ID # HANGUL JONGSEONG HIEUH-RIEUL
-11F7;ID # HANGUL JONGSEONG HIEUH-MIEUM
-11F8;ID # HANGUL JONGSEONG HIEUH-PIEUP
-11F9;ID # HANGUL JONGSEONG YEORINHIEUH
+10FC;AL # MODIFIER LETTER GEORGIAN NAR
+1100;JL # HANGUL CHOSEONG KIYEOK
+1101;JL # HANGUL CHOSEONG SSANGKIYEOK
+1102;JL # HANGUL CHOSEONG NIEUN
+1103;JL # HANGUL CHOSEONG TIKEUT
+1104;JL # HANGUL CHOSEONG SSANGTIKEUT
+1105;JL # HANGUL CHOSEONG RIEUL
+1106;JL # HANGUL CHOSEONG MIEUM
+1107;JL # HANGUL CHOSEONG PIEUP
+1108;JL # HANGUL CHOSEONG SSANGPIEUP
+1109;JL # HANGUL CHOSEONG SIOS
+110A;JL # HANGUL CHOSEONG SSANGSIOS
+110B;JL # HANGUL CHOSEONG IEUNG
+110C;JL # HANGUL CHOSEONG CIEUC
+110D;JL # HANGUL CHOSEONG SSANGCIEUC
+110E;JL # HANGUL CHOSEONG CHIEUCH
+110F;JL # HANGUL CHOSEONG KHIEUKH
+1110;JL # HANGUL CHOSEONG THIEUTH
+1111;JL # HANGUL CHOSEONG PHIEUPH
+1112;JL # HANGUL CHOSEONG HIEUH
+1113;JL # HANGUL CHOSEONG NIEUN-KIYEOK
+1114;JL # HANGUL CHOSEONG SSANGNIEUN
+1115;JL # HANGUL CHOSEONG NIEUN-TIKEUT
+1116;JL # HANGUL CHOSEONG NIEUN-PIEUP
+1117;JL # HANGUL CHOSEONG TIKEUT-KIYEOK
+1118;JL # HANGUL CHOSEONG RIEUL-NIEUN
+1119;JL # HANGUL CHOSEONG SSANGRIEUL
+111A;JL # HANGUL CHOSEONG RIEUL-HIEUH
+111B;JL # HANGUL CHOSEONG KAPYEOUNRIEUL
+111C;JL # HANGUL CHOSEONG MIEUM-PIEUP
+111D;JL # HANGUL CHOSEONG KAPYEOUNMIEUM
+111E;JL # HANGUL CHOSEONG PIEUP-KIYEOK
+111F;JL # HANGUL CHOSEONG PIEUP-NIEUN
+1120;JL # HANGUL CHOSEONG PIEUP-TIKEUT
+1121;JL # HANGUL CHOSEONG PIEUP-SIOS
+1122;JL # HANGUL CHOSEONG PIEUP-SIOS-KIYEOK
+1123;JL # HANGUL CHOSEONG PIEUP-SIOS-TIKEUT
+1124;JL # HANGUL CHOSEONG PIEUP-SIOS-PIEUP
+1125;JL # HANGUL CHOSEONG PIEUP-SSANGSIOS
+1126;JL # HANGUL CHOSEONG PIEUP-SIOS-CIEUC
+1127;JL # HANGUL CHOSEONG PIEUP-CIEUC
+1128;JL # HANGUL CHOSEONG PIEUP-CHIEUCH
+1129;JL # HANGUL CHOSEONG PIEUP-THIEUTH
+112A;JL # HANGUL CHOSEONG PIEUP-PHIEUPH
+112B;JL # HANGUL CHOSEONG KAPYEOUNPIEUP
+112C;JL # HANGUL CHOSEONG KAPYEOUNSSANGPIEUP
+112D;JL # HANGUL CHOSEONG SIOS-KIYEOK
+112E;JL # HANGUL CHOSEONG SIOS-NIEUN
+112F;JL # HANGUL CHOSEONG SIOS-TIKEUT
+1130;JL # HANGUL CHOSEONG SIOS-RIEUL
+1131;JL # HANGUL CHOSEONG SIOS-MIEUM
+1132;JL # HANGUL CHOSEONG SIOS-PIEUP
+1133;JL # HANGUL CHOSEONG SIOS-PIEUP-KIYEOK
+1134;JL # HANGUL CHOSEONG SIOS-SSANGSIOS
+1135;JL # HANGUL CHOSEONG SIOS-IEUNG
+1136;JL # HANGUL CHOSEONG SIOS-CIEUC
+1137;JL # HANGUL CHOSEONG SIOS-CHIEUCH
+1138;JL # HANGUL CHOSEONG SIOS-KHIEUKH
+1139;JL # HANGUL CHOSEONG SIOS-THIEUTH
+113A;JL # HANGUL CHOSEONG SIOS-PHIEUPH
+113B;JL # HANGUL CHOSEONG SIOS-HIEUH
+113C;JL # HANGUL CHOSEONG CHITUEUMSIOS
+113D;JL # HANGUL CHOSEONG CHITUEUMSSANGSIOS
+113E;JL # HANGUL CHOSEONG CEONGCHIEUMSIOS
+113F;JL # HANGUL CHOSEONG CEONGCHIEUMSSANGSIOS
+1140;JL # HANGUL CHOSEONG PANSIOS
+1141;JL # HANGUL CHOSEONG IEUNG-KIYEOK
+1142;JL # HANGUL CHOSEONG IEUNG-TIKEUT
+1143;JL # HANGUL CHOSEONG IEUNG-MIEUM
+1144;JL # HANGUL CHOSEONG IEUNG-PIEUP
+1145;JL # HANGUL CHOSEONG IEUNG-SIOS
+1146;JL # HANGUL CHOSEONG IEUNG-PANSIOS
+1147;JL # HANGUL CHOSEONG SSANGIEUNG
+1148;JL # HANGUL CHOSEONG IEUNG-CIEUC
+1149;JL # HANGUL CHOSEONG IEUNG-CHIEUCH
+114A;JL # HANGUL CHOSEONG IEUNG-THIEUTH
+114B;JL # HANGUL CHOSEONG IEUNG-PHIEUPH
+114C;JL # HANGUL CHOSEONG YESIEUNG
+114D;JL # HANGUL CHOSEONG CIEUC-IEUNG
+114E;JL # HANGUL CHOSEONG CHITUEUMCIEUC
+114F;JL # HANGUL CHOSEONG CHITUEUMSSANGCIEUC
+1150;JL # HANGUL CHOSEONG CEONGCHIEUMCIEUC
+1151;JL # HANGUL CHOSEONG CEONGCHIEUMSSANGCIEUC
+1152;JL # HANGUL CHOSEONG CHIEUCH-KHIEUKH
+1153;JL # HANGUL CHOSEONG CHIEUCH-HIEUH
+1154;JL # HANGUL CHOSEONG CHITUEUMCHIEUCH
+1155;JL # HANGUL CHOSEONG CEONGCHIEUMCHIEUCH
+1156;JL # HANGUL CHOSEONG PHIEUPH-PIEUP
+1157;JL # HANGUL CHOSEONG KAPYEOUNPHIEUPH
+1158;JL # HANGUL CHOSEONG SSANGHIEUH
+1159;JL # HANGUL CHOSEONG YEORINHIEUH
+115F;JL # HANGUL CHOSEONG FILLER
+1160;JV # HANGUL JUNGSEONG FILLER
+1161;JV # HANGUL JUNGSEONG A
+1162;JV # HANGUL JUNGSEONG AE
+1163;JV # HANGUL JUNGSEONG YA
+1164;JV # HANGUL JUNGSEONG YAE
+1165;JV # HANGUL JUNGSEONG EO
+1166;JV # HANGUL JUNGSEONG E
+1167;JV # HANGUL JUNGSEONG YEO
+1168;JV # HANGUL JUNGSEONG YE
+1169;JV # HANGUL JUNGSEONG O
+116A;JV # HANGUL JUNGSEONG WA
+116B;JV # HANGUL JUNGSEONG WAE
+116C;JV # HANGUL JUNGSEONG OE
+116D;JV # HANGUL JUNGSEONG YO
+116E;JV # HANGUL JUNGSEONG U
+116F;JV # HANGUL JUNGSEONG WEO
+1170;JV # HANGUL JUNGSEONG WE
+1171;JV # HANGUL JUNGSEONG WI
+1172;JV # HANGUL JUNGSEONG YU
+1173;JV # HANGUL JUNGSEONG EU
+1174;JV # HANGUL JUNGSEONG YI
+1175;JV # HANGUL JUNGSEONG I
+1176;JV # HANGUL JUNGSEONG A-O
+1177;JV # HANGUL JUNGSEONG A-U
+1178;JV # HANGUL JUNGSEONG YA-O
+1179;JV # HANGUL JUNGSEONG YA-YO
+117A;JV # HANGUL JUNGSEONG EO-O
+117B;JV # HANGUL JUNGSEONG EO-U
+117C;JV # HANGUL JUNGSEONG EO-EU
+117D;JV # HANGUL JUNGSEONG YEO-O
+117E;JV # HANGUL JUNGSEONG YEO-U
+117F;JV # HANGUL JUNGSEONG O-EO
+1180;JV # HANGUL JUNGSEONG O-E
+1181;JV # HANGUL JUNGSEONG O-YE
+1182;JV # HANGUL JUNGSEONG O-O
+1183;JV # HANGUL JUNGSEONG O-U
+1184;JV # HANGUL JUNGSEONG YO-YA
+1185;JV # HANGUL JUNGSEONG YO-YAE
+1186;JV # HANGUL JUNGSEONG YO-YEO
+1187;JV # HANGUL JUNGSEONG YO-O
+1188;JV # HANGUL JUNGSEONG YO-I
+1189;JV # HANGUL JUNGSEONG U-A
+118A;JV # HANGUL JUNGSEONG U-AE
+118B;JV # HANGUL JUNGSEONG U-EO-EU
+118C;JV # HANGUL JUNGSEONG U-YE
+118D;JV # HANGUL JUNGSEONG U-U
+118E;JV # HANGUL JUNGSEONG YU-A
+118F;JV # HANGUL JUNGSEONG YU-EO
+1190;JV # HANGUL JUNGSEONG YU-E
+1191;JV # HANGUL JUNGSEONG YU-YEO
+1192;JV # HANGUL JUNGSEONG YU-YE
+1193;JV # HANGUL JUNGSEONG YU-U
+1194;JV # HANGUL JUNGSEONG YU-I
+1195;JV # HANGUL JUNGSEONG EU-U
+1196;JV # HANGUL JUNGSEONG EU-EU
+1197;JV # HANGUL JUNGSEONG YI-U
+1198;JV # HANGUL JUNGSEONG I-A
+1199;JV # HANGUL JUNGSEONG I-YA
+119A;JV # HANGUL JUNGSEONG I-O
+119B;JV # HANGUL JUNGSEONG I-U
+119C;JV # HANGUL JUNGSEONG I-EU
+119D;JV # HANGUL JUNGSEONG I-ARAEA
+119E;JV # HANGUL JUNGSEONG ARAEA
+119F;JV # HANGUL JUNGSEONG ARAEA-EO
+11A0;JV # HANGUL JUNGSEONG ARAEA-U
+11A1;JV # HANGUL JUNGSEONG ARAEA-I
+11A2;JV # HANGUL JUNGSEONG SSANGARAEA
+11A8;JT # HANGUL JONGSEONG KIYEOK
+11A9;JT # HANGUL JONGSEONG SSANGKIYEOK
+11AA;JT # HANGUL JONGSEONG KIYEOK-SIOS
+11AB;JT # HANGUL JONGSEONG NIEUN
+11AC;JT # HANGUL JONGSEONG NIEUN-CIEUC
+11AD;JT # HANGUL JONGSEONG NIEUN-HIEUH
+11AE;JT # HANGUL JONGSEONG TIKEUT
+11AF;JT # HANGUL JONGSEONG RIEUL
+11B0;JT # HANGUL JONGSEONG RIEUL-KIYEOK
+11B1;JT # HANGUL JONGSEONG RIEUL-MIEUM
+11B2;JT # HANGUL JONGSEONG RIEUL-PIEUP
+11B3;JT # HANGUL JONGSEONG RIEUL-SIOS
+11B4;JT # HANGUL JONGSEONG RIEUL-THIEUTH
+11B5;JT # HANGUL JONGSEONG RIEUL-PHIEUPH
+11B6;JT # HANGUL JONGSEONG RIEUL-HIEUH
+11B7;JT # HANGUL JONGSEONG MIEUM
+11B8;JT # HANGUL JONGSEONG PIEUP
+11B9;JT # HANGUL JONGSEONG PIEUP-SIOS
+11BA;JT # HANGUL JONGSEONG SIOS
+11BB;JT # HANGUL JONGSEONG SSANGSIOS
+11BC;JT # HANGUL JONGSEONG IEUNG
+11BD;JT # HANGUL JONGSEONG CIEUC
+11BE;JT # HANGUL JONGSEONG CHIEUCH
+11BF;JT # HANGUL JONGSEONG KHIEUKH
+11C0;JT # HANGUL JONGSEONG THIEUTH
+11C1;JT # HANGUL JONGSEONG PHIEUPH
+11C2;JT # HANGUL JONGSEONG HIEUH
+11C3;JT # HANGUL JONGSEONG KIYEOK-RIEUL
+11C4;JT # HANGUL JONGSEONG KIYEOK-SIOS-KIYEOK
+11C5;JT # HANGUL JONGSEONG NIEUN-KIYEOK
+11C6;JT # HANGUL JONGSEONG NIEUN-TIKEUT
+11C7;JT # HANGUL JONGSEONG NIEUN-SIOS
+11C8;JT # HANGUL JONGSEONG NIEUN-PANSIOS
+11C9;JT # HANGUL JONGSEONG NIEUN-THIEUTH
+11CA;JT # HANGUL JONGSEONG TIKEUT-KIYEOK
+11CB;JT # HANGUL JONGSEONG TIKEUT-RIEUL
+11CC;JT # HANGUL JONGSEONG RIEUL-KIYEOK-SIOS
+11CD;JT # HANGUL JONGSEONG RIEUL-NIEUN
+11CE;JT # HANGUL JONGSEONG RIEUL-TIKEUT
+11CF;JT # HANGUL JONGSEONG RIEUL-TIKEUT-HIEUH
+11D0;JT # HANGUL JONGSEONG SSANGRIEUL
+11D1;JT # HANGUL JONGSEONG RIEUL-MIEUM-KIYEOK
+11D2;JT # HANGUL JONGSEONG RIEUL-MIEUM-SIOS
+11D3;JT # HANGUL JONGSEONG RIEUL-PIEUP-SIOS
+11D4;JT # HANGUL JONGSEONG RIEUL-PIEUP-HIEUH
+11D5;JT # HANGUL JONGSEONG RIEUL-KAPYEOUNPIEUP
+11D6;JT # HANGUL JONGSEONG RIEUL-SSANGSIOS
+11D7;JT # HANGUL JONGSEONG RIEUL-PANSIOS
+11D8;JT # HANGUL JONGSEONG RIEUL-KHIEUKH
+11D9;JT # HANGUL JONGSEONG RIEUL-YEORINHIEUH
+11DA;JT # HANGUL JONGSEONG MIEUM-KIYEOK
+11DB;JT # HANGUL JONGSEONG MIEUM-RIEUL
+11DC;JT # HANGUL JONGSEONG MIEUM-PIEUP
+11DD;JT # HANGUL JONGSEONG MIEUM-SIOS
+11DE;JT # HANGUL JONGSEONG MIEUM-SSANGSIOS
+11DF;JT # HANGUL JONGSEONG MIEUM-PANSIOS
+11E0;JT # HANGUL JONGSEONG MIEUM-CHIEUCH
+11E1;JT # HANGUL JONGSEONG MIEUM-HIEUH
+11E2;JT # HANGUL JONGSEONG KAPYEOUNMIEUM
+11E3;JT # HANGUL JONGSEONG PIEUP-RIEUL
+11E4;JT # HANGUL JONGSEONG PIEUP-PHIEUPH
+11E5;JT # HANGUL JONGSEONG PIEUP-HIEUH
+11E6;JT # HANGUL JONGSEONG KAPYEOUNPIEUP
+11E7;JT # HANGUL JONGSEONG SIOS-KIYEOK
+11E8;JT # HANGUL JONGSEONG SIOS-TIKEUT
+11E9;JT # HANGUL JONGSEONG SIOS-RIEUL
+11EA;JT # HANGUL JONGSEONG SIOS-PIEUP
+11EB;JT # HANGUL JONGSEONG PANSIOS
+11EC;JT # HANGUL JONGSEONG IEUNG-KIYEOK
+11ED;JT # HANGUL JONGSEONG IEUNG-SSANGKIYEOK
+11EE;JT # HANGUL JONGSEONG SSANGIEUNG
+11EF;JT # HANGUL JONGSEONG IEUNG-KHIEUKH
+11F0;JT # HANGUL JONGSEONG YESIEUNG
+11F1;JT # HANGUL JONGSEONG YESIEUNG-SIOS
+11F2;JT # HANGUL JONGSEONG YESIEUNG-PANSIOS
+11F3;JT # HANGUL JONGSEONG PHIEUPH-PIEUP
+11F4;JT # HANGUL JONGSEONG KAPYEOUNPHIEUPH
+11F5;JT # HANGUL JONGSEONG HIEUH-NIEUN
+11F6;JT # HANGUL JONGSEONG HIEUH-RIEUL
+11F7;JT # HANGUL JONGSEONG HIEUH-MIEUM
+11F8;JT # HANGUL JONGSEONG HIEUH-PIEUP
+11F9;JT # HANGUL JONGSEONG YEORINHIEUH
1200;AL # ETHIOPIC SYLLABLE HA
1201;AL # ETHIOPIC SYLLABLE HU
1202;AL # ETHIOPIC SYLLABLE HI
@@ -3352,6 +3431,7 @@
1204;AL # ETHIOPIC SYLLABLE HEE
1205;AL # ETHIOPIC SYLLABLE HE
1206;AL # ETHIOPIC SYLLABLE HO
+1207;AL # ETHIOPIC SYLLABLE HOA
1208;AL # ETHIOPIC SYLLABLE LA
1209;AL # ETHIOPIC SYLLABLE LU
120A;AL # ETHIOPIC SYLLABLE LI
@@ -3415,6 +3495,7 @@
1244;AL # ETHIOPIC SYLLABLE QEE
1245;AL # ETHIOPIC SYLLABLE QE
1246;AL # ETHIOPIC SYLLABLE QO
+1247;AL # ETHIOPIC SYLLABLE QOA
1248;AL # ETHIOPIC SYLLABLE QWA
124A;AL # ETHIOPIC SYLLABLE QWI
124B;AL # ETHIOPIC SYLLABLE QWAA
@@ -3471,6 +3552,7 @@
1284;AL # ETHIOPIC SYLLABLE XEE
1285;AL # ETHIOPIC SYLLABLE XE
1286;AL # ETHIOPIC SYLLABLE XO
+1287;AL # ETHIOPIC SYLLABLE XOA
1288;AL # ETHIOPIC SYLLABLE XWA
128A;AL # ETHIOPIC SYLLABLE XWI
128B;AL # ETHIOPIC SYLLABLE XWAA
@@ -3507,6 +3589,7 @@
12AC;AL # ETHIOPIC SYLLABLE KEE
12AD;AL # ETHIOPIC SYLLABLE KE
12AE;AL # ETHIOPIC SYLLABLE KO
+12AF;AL # ETHIOPIC SYLLABLE KOA
12B0;AL # ETHIOPIC SYLLABLE KWA
12B2;AL # ETHIOPIC SYLLABLE KWI
12B3;AL # ETHIOPIC SYLLABLE KWAA
@@ -3531,6 +3614,7 @@
12CC;AL # ETHIOPIC SYLLABLE WEE
12CD;AL # ETHIOPIC SYLLABLE WE
12CE;AL # ETHIOPIC SYLLABLE WO
+12CF;AL # ETHIOPIC SYLLABLE WOA
12D0;AL # ETHIOPIC SYLLABLE PHARYNGEAL A
12D1;AL # ETHIOPIC SYLLABLE PHARYNGEAL U
12D2;AL # ETHIOPIC SYLLABLE PHARYNGEAL I
@@ -3561,6 +3645,7 @@
12EC;AL # ETHIOPIC SYLLABLE YEE
12ED;AL # ETHIOPIC SYLLABLE YE
12EE;AL # ETHIOPIC SYLLABLE YO
+12EF;AL # ETHIOPIC SYLLABLE YOA
12F0;AL # ETHIOPIC SYLLABLE DA
12F1;AL # ETHIOPIC SYLLABLE DU
12F2;AL # ETHIOPIC SYLLABLE DI
@@ -3592,6 +3677,7 @@
130C;AL # ETHIOPIC SYLLABLE GEE
130D;AL # ETHIOPIC SYLLABLE GE
130E;AL # ETHIOPIC SYLLABLE GO
+130F;AL # ETHIOPIC SYLLABLE GOA
1310;AL # ETHIOPIC SYLLABLE GWA
1312;AL # ETHIOPIC SYLLABLE GWI
1313;AL # ETHIOPIC SYLLABLE GWAA
@@ -3604,6 +3690,7 @@
131C;AL # ETHIOPIC SYLLABLE GGEE
131D;AL # ETHIOPIC SYLLABLE GGE
131E;AL # ETHIOPIC SYLLABLE GGO
+131F;AL # ETHIOPIC SYLLABLE GGWAA
1320;AL # ETHIOPIC SYLLABLE THA
1321;AL # ETHIOPIC SYLLABLE THU
1322;AL # ETHIOPIC SYLLABLE THI
@@ -3643,6 +3730,7 @@
1344;AL # ETHIOPIC SYLLABLE TZEE
1345;AL # ETHIOPIC SYLLABLE TZE
1346;AL # ETHIOPIC SYLLABLE TZO
+1347;AL # ETHIOPIC SYLLABLE TZOA
1348;AL # ETHIOPIC SYLLABLE FA
1349;AL # ETHIOPIC SYLLABLE FU
134A;AL # ETHIOPIC SYLLABLE FI
@@ -3662,6 +3750,8 @@
1358;AL # ETHIOPIC SYLLABLE RYA
1359;AL # ETHIOPIC SYLLABLE MYA
135A;AL # ETHIOPIC SYLLABLE FYA
+135F;CM # ETHIOPIC COMBINING GEMINATION MARK
+1360;AL # ETHIOPIC SECTION MARK
1361;BA # ETHIOPIC WORDSPACE
1362;AL # ETHIOPIC FULL STOP
1363;AL # ETHIOPIC COMMA
@@ -3670,15 +3760,15 @@
1366;AL # ETHIOPIC PREFACE COLON
1367;AL # ETHIOPIC QUESTION MARK
1368;AL # ETHIOPIC PARAGRAPH SEPARATOR
-1369;NU # ETHIOPIC DIGIT ONE
-136A;NU # ETHIOPIC DIGIT TWO
-136B;NU # ETHIOPIC DIGIT THREE
-136C;NU # ETHIOPIC DIGIT FOUR
-136D;NU # ETHIOPIC DIGIT FIVE
-136E;NU # ETHIOPIC DIGIT SIX
-136F;NU # ETHIOPIC DIGIT SEVEN
-1370;NU # ETHIOPIC DIGIT EIGHT
-1371;NU # ETHIOPIC DIGIT NINE
+1369;AL # ETHIOPIC DIGIT ONE
+136A;AL # ETHIOPIC DIGIT TWO
+136B;AL # ETHIOPIC DIGIT THREE
+136C;AL # ETHIOPIC DIGIT FOUR
+136D;AL # ETHIOPIC DIGIT FIVE
+136E;AL # ETHIOPIC DIGIT SIX
+136F;AL # ETHIOPIC DIGIT SEVEN
+1370;AL # ETHIOPIC DIGIT EIGHT
+1371;AL # ETHIOPIC DIGIT NINE
1372;AL # ETHIOPIC NUMBER TEN
1373;AL # ETHIOPIC NUMBER TWENTY
1374;AL # ETHIOPIC NUMBER THIRTY
@@ -3690,6 +3780,32 @@
137A;AL # ETHIOPIC NUMBER NINETY
137B;AL # ETHIOPIC NUMBER HUNDRED
137C;AL # ETHIOPIC NUMBER TEN THOUSAND
+1380;AL # ETHIOPIC SYLLABLE SEBATBEIT MWA
+1381;AL # ETHIOPIC SYLLABLE MWI
+1382;AL # ETHIOPIC SYLLABLE MWEE
+1383;AL # ETHIOPIC SYLLABLE MWE
+1384;AL # ETHIOPIC SYLLABLE SEBATBEIT BWA
+1385;AL # ETHIOPIC SYLLABLE BWI
+1386;AL # ETHIOPIC SYLLABLE BWEE
+1387;AL # ETHIOPIC SYLLABLE BWE
+1388;AL # ETHIOPIC SYLLABLE SEBATBEIT FWA
+1389;AL # ETHIOPIC SYLLABLE FWI
+138A;AL # ETHIOPIC SYLLABLE FWEE
+138B;AL # ETHIOPIC SYLLABLE FWE
+138C;AL # ETHIOPIC SYLLABLE SEBATBEIT PWA
+138D;AL # ETHIOPIC SYLLABLE PWI
+138E;AL # ETHIOPIC SYLLABLE PWEE
+138F;AL # ETHIOPIC SYLLABLE PWE
+1390;AL # ETHIOPIC TONAL MARK YIZET
+1391;AL # ETHIOPIC TONAL MARK DERET
+1392;AL # ETHIOPIC TONAL MARK RIKRIK
+1393;AL # ETHIOPIC TONAL MARK SHORT RIKRIK
+1394;AL # ETHIOPIC TONAL MARK DIFAT
+1395;AL # ETHIOPIC TONAL MARK KENAT
+1396;AL # ETHIOPIC TONAL MARK CHIRET
+1397;AL # ETHIOPIC TONAL MARK HIDET
+1398;AL # ETHIOPIC TONAL MARK DERET-HIDET
+1399;AL # ETHIOPIC TONAL MARK KURT
13A0;AL # CHEROKEE LETTER A
13A1;AL # CHEROKEE LETTER E
13A2;AL # CHEROKEE LETTER I
@@ -4509,9 +4625,9 @@
16E8;AL # RUNIC LETTER ICELANDIC-YR
16E9;AL # RUNIC LETTER Q
16EA;AL # RUNIC LETTER X
-16EB;AL # RUNIC SINGLE PUNCTUATION
-16EC;AL # RUNIC MULTIPLE PUNCTUATION
-16ED;AL # RUNIC CROSS PUNCTUATION
+16EB;BA # RUNIC SINGLE PUNCTUATION
+16EC;BA # RUNIC MULTIPLE PUNCTUATION
+16ED;BA # RUNIC CROSS PUNCTUATION
16EE;AL # RUNIC ARLAUG SYMBOL
16EF;AL # RUNIC TVIMADUR SYMBOL
16F0;AL # RUNIC BELGTHOR SYMBOL
@@ -4680,13 +4796,13 @@
17D1;CM # KHMER SIGN VIRIAM
17D2;CM # KHMER SIGN COENG
17D3;CM # KHMER SIGN BATHAMASAT
-17D4;NS # KHMER SIGN KHAN
+17D4;BA # KHMER SIGN KHAN
17D5;BA # KHMER SIGN BARIYOOSAN
17D6;NS # KHMER SIGN CAMNUC PII KUUH
17D7;NS # KHMER SIGN LEK TOO
-17D8;NS # KHMER SIGN BEYYAL
+17D8;BA # KHMER SIGN BEYYAL
17D9;NS # KHMER SIGN PHNAEK MUAN
-17DA;NS # KHMER SIGN KOOMUUT
+17DA;BA # KHMER SIGN KOOMUUT
17DB;PR # KHMER CURRENCY SYMBOL RIEL
17DC;AL # KHMER SIGN AVAKRAHASANYA
17DD;CM # KHMER SIGN ATTHACAN
@@ -4712,14 +4828,14 @@
17F9;AL # KHMER SYMBOL LEK ATTAK PRAM-BUON
1800;AL # MONGOLIAN BIRGA
1801;AL # MONGOLIAN ELLIPSIS
-1802;AL # MONGOLIAN COMMA
-1803;AL # MONGOLIAN FULL STOP
-1804;AL # MONGOLIAN COLON
-1805;AL # MONGOLIAN FOUR DOTS
+1802;BA # MONGOLIAN COMMA
+1803;BA # MONGOLIAN FULL STOP
+1804;BA # MONGOLIAN COLON
+1805;BA # MONGOLIAN FOUR DOTS
1806;BB # MONGOLIAN TODO SOFT HYPHEN
1807;AL # MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER
-1808;AL # MONGOLIAN MANCHU COMMA
-1809;AL # MONGOLIAN MANCHU FULL STOP
+1808;BA # MONGOLIAN MANCHU COMMA
+1809;BA # MONGOLIAN MANCHU FULL STOP
180A;AL # MONGOLIAN NIRUGU
180B;CM # MONGOLIAN FREE VARIATION SELECTOR ONE
180C;CM # MONGOLIAN FREE VARIATION SELECTOR TWO
@@ -4966,6 +5082,86 @@
1972;AL # TAI LE LETTER TONE-4
1973;AL # TAI LE LETTER TONE-5
1974;AL # TAI LE LETTER TONE-6
+1980;AL # NEW TAI LUE LETTER HIGH QA
+1981;AL # NEW TAI LUE LETTER LOW QA
+1982;AL # NEW TAI LUE LETTER HIGH KA
+1983;AL # NEW TAI LUE LETTER HIGH XA
+1984;AL # NEW TAI LUE LETTER HIGH NGA
+1985;AL # NEW TAI LUE LETTER LOW KA
+1986;AL # NEW TAI LUE LETTER LOW XA
+1987;AL # NEW TAI LUE LETTER LOW NGA
+1988;AL # NEW TAI LUE LETTER HIGH TSA
+1989;AL # NEW TAI LUE LETTER HIGH SA
+198A;AL # NEW TAI LUE LETTER HIGH YA
+198B;AL # NEW TAI LUE LETTER LOW TSA
+198C;AL # NEW TAI LUE LETTER LOW SA
+198D;AL # NEW TAI LUE LETTER LOW YA
+198E;AL # NEW TAI LUE LETTER HIGH TA
+198F;AL # NEW TAI LUE LETTER HIGH THA
+1990;AL # NEW TAI LUE LETTER HIGH NA
+1991;AL # NEW TAI LUE LETTER LOW TA
+1992;AL # NEW TAI LUE LETTER LOW THA
+1993;AL # NEW TAI LUE LETTER LOW NA
+1994;AL # NEW TAI LUE LETTER HIGH PA
+1995;AL # NEW TAI LUE LETTER HIGH PHA
+1996;AL # NEW TAI LUE LETTER HIGH MA
+1997;AL # NEW TAI LUE LETTER LOW PA
+1998;AL # NEW TAI LUE LETTER LOW PHA
+1999;AL # NEW TAI LUE LETTER LOW MA
+199A;AL # NEW TAI LUE LETTER HIGH FA
+199B;AL # NEW TAI LUE LETTER HIGH VA
+199C;AL # NEW TAI LUE LETTER HIGH LA
+199D;AL # NEW TAI LUE LETTER LOW FA
+199E;AL # NEW TAI LUE LETTER LOW VA
+199F;AL # NEW TAI LUE LETTER LOW LA
+19A0;AL # NEW TAI LUE LETTER HIGH HA
+19A1;AL # NEW TAI LUE LETTER HIGH DA
+19A2;AL # NEW TAI LUE LETTER HIGH BA
+19A3;AL # NEW TAI LUE LETTER LOW HA
+19A4;AL # NEW TAI LUE LETTER LOW DA
+19A5;AL # NEW TAI LUE LETTER LOW BA
+19A6;AL # NEW TAI LUE LETTER HIGH KVA
+19A7;AL # NEW TAI LUE LETTER HIGH XVA
+19A8;AL # NEW TAI LUE LETTER LOW KVA
+19A9;AL # NEW TAI LUE LETTER LOW XVA
+19B0;CM # NEW TAI LUE VOWEL SIGN VOWEL SHORTENER
+19B1;CM # NEW TAI LUE VOWEL SIGN AA
+19B2;CM # NEW TAI LUE VOWEL SIGN II
+19B3;CM # NEW TAI LUE VOWEL SIGN U
+19B4;CM # NEW TAI LUE VOWEL SIGN UU
+19B5;CM # NEW TAI LUE VOWEL SIGN E
+19B6;CM # NEW TAI LUE VOWEL SIGN AE
+19B7;CM # NEW TAI LUE VOWEL SIGN O
+19B8;CM # NEW TAI LUE VOWEL SIGN OA
+19B9;CM # NEW TAI LUE VOWEL SIGN UE
+19BA;CM # NEW TAI LUE VOWEL SIGN AY
+19BB;CM # NEW TAI LUE VOWEL SIGN AAY
+19BC;CM # NEW TAI LUE VOWEL SIGN UY
+19BD;CM # NEW TAI LUE VOWEL SIGN OY
+19BE;CM # NEW TAI LUE VOWEL SIGN OAY
+19BF;CM # NEW TAI LUE VOWEL SIGN UEY
+19C0;CM # NEW TAI LUE VOWEL SIGN IY
+19C1;AL # NEW TAI LUE LETTER FINAL V
+19C2;AL # NEW TAI LUE LETTER FINAL NG
+19C3;AL # NEW TAI LUE LETTER FINAL N
+19C4;AL # NEW TAI LUE LETTER FINAL M
+19C5;AL # NEW TAI LUE LETTER FINAL K
+19C6;AL # NEW TAI LUE LETTER FINAL D
+19C7;AL # NEW TAI LUE LETTER FINAL B
+19C8;CM # NEW TAI LUE TONE MARK-1
+19C9;CM # NEW TAI LUE TONE MARK-2
+19D0;NU # NEW TAI LUE DIGIT ZERO
+19D1;NU # NEW TAI LUE DIGIT ONE
+19D2;NU # NEW TAI LUE DIGIT TWO
+19D3;NU # NEW TAI LUE DIGIT THREE
+19D4;NU # NEW TAI LUE DIGIT FOUR
+19D5;NU # NEW TAI LUE DIGIT FIVE
+19D6;NU # NEW TAI LUE DIGIT SIX
+19D7;NU # NEW TAI LUE DIGIT SEVEN
+19D8;NU # NEW TAI LUE DIGIT EIGHT
+19D9;NU # NEW TAI LUE DIGIT NINE
+19DE;AL # NEW TAI LUE SIGN LAE
+19DF;AL # NEW TAI LUE SIGN LAEV
19E0;AL # KHMER SYMBOL PATHAMASAT
19E1;AL # KHMER SYMBOL MUOY KOET
19E2;AL # KHMER SYMBOL PII KOET
@@ -4998,6 +5194,36 @@
19FD;AL # KHMER SYMBOL DAP-BEI ROC
19FE;AL # KHMER SYMBOL DAP-BUON ROC
19FF;AL # KHMER SYMBOL DAP-PRAM ROC
+1A00;AL # BUGINESE LETTER KA
+1A01;AL # BUGINESE LETTER GA
+1A02;AL # BUGINESE LETTER NGA
+1A03;AL # BUGINESE LETTER NGKA
+1A04;AL # BUGINESE LETTER PA
+1A05;AL # BUGINESE LETTER BA
+1A06;AL # BUGINESE LETTER MA
+1A07;AL # BUGINESE LETTER MPA
+1A08;AL # BUGINESE LETTER TA
+1A09;AL # BUGINESE LETTER DA
+1A0A;AL # BUGINESE LETTER NA
+1A0B;AL # BUGINESE LETTER NRA
+1A0C;AL # BUGINESE LETTER CA
+1A0D;AL # BUGINESE LETTER JA
+1A0E;AL # BUGINESE LETTER NYA
+1A0F;AL # BUGINESE LETTER NYCA
+1A10;AL # BUGINESE LETTER YA
+1A11;AL # BUGINESE LETTER RA
+1A12;AL # BUGINESE LETTER LA
+1A13;AL # BUGINESE LETTER VA
+1A14;AL # BUGINESE LETTER SA
+1A15;AL # BUGINESE LETTER A
+1A16;AL # BUGINESE LETTER HA
+1A17;CM # BUGINESE VOWEL SIGN I
+1A18;CM # BUGINESE VOWEL SIGN U
+1A19;CM # BUGINESE VOWEL SIGN E
+1A1A;CM # BUGINESE VOWEL SIGN O
+1A1B;CM # BUGINESE VOWEL SIGN AE
+1A1E;BA # BUGINESE PALLAWA
+1A1F;AL # BUGINESE END OF SECTION
1D00;AL # LATIN LETTER SMALL CAPITAL A
1D01;AL # LATIN LETTER SMALL CAPITAL AE
1D02;AL # LATIN SMALL LETTER TURNED AE
@@ -5106,6 +5332,94 @@
1D69;AL # GREEK SUBSCRIPT SMALL LETTER PHI
1D6A;AL # GREEK SUBSCRIPT SMALL LETTER CHI
1D6B;AL # LATIN SMALL LETTER UE
+1D6C;AL # LATIN SMALL LETTER B WITH MIDDLE TILDE
+1D6D;AL # LATIN SMALL LETTER D WITH MIDDLE TILDE
+1D6E;AL # LATIN SMALL LETTER F WITH MIDDLE TILDE
+1D6F;AL # LATIN SMALL LETTER M WITH MIDDLE TILDE
+1D70;AL # LATIN SMALL LETTER N WITH MIDDLE TILDE
+1D71;AL # LATIN SMALL LETTER P WITH MIDDLE TILDE
+1D72;AL # LATIN SMALL LETTER R WITH MIDDLE TILDE
+1D73;AL # LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE
+1D74;AL # LATIN SMALL LETTER S WITH MIDDLE TILDE
+1D75;AL # LATIN SMALL LETTER T WITH MIDDLE TILDE
+1D76;AL # LATIN SMALL LETTER Z WITH MIDDLE TILDE
+1D77;AL # LATIN SMALL LETTER TURNED G
+1D78;AL # MODIFIER LETTER CYRILLIC EN
+1D79;AL # LATIN SMALL LETTER INSULAR G
+1D7A;AL # LATIN SMALL LETTER TH WITH STRIKETHROUGH
+1D7B;AL # LATIN SMALL CAPITAL LETTER I WITH STROKE
+1D7C;AL # LATIN SMALL LETTER IOTA WITH STROKE
+1D7D;AL # LATIN SMALL LETTER P WITH STROKE
+1D7E;AL # LATIN SMALL CAPITAL LETTER U WITH STROKE
+1D7F;AL # LATIN SMALL LETTER UPSILON WITH STROKE
+1D80;AL # LATIN SMALL LETTER B WITH PALATAL HOOK
+1D81;AL # LATIN SMALL LETTER D WITH PALATAL HOOK
+1D82;AL # LATIN SMALL LETTER F WITH PALATAL HOOK
+1D83;AL # LATIN SMALL LETTER G WITH PALATAL HOOK
+1D84;AL # LATIN SMALL LETTER K WITH PALATAL HOOK
+1D85;AL # LATIN SMALL LETTER L WITH PALATAL HOOK
+1D86;AL # LATIN SMALL LETTER M WITH PALATAL HOOK
+1D87;AL # LATIN SMALL LETTER N WITH PALATAL HOOK
+1D88;AL # LATIN SMALL LETTER P WITH PALATAL HOOK
+1D89;AL # LATIN SMALL LETTER R WITH PALATAL HOOK
+1D8A;AL # LATIN SMALL LETTER S WITH PALATAL HOOK
+1D8B;AL # LATIN SMALL LETTER ESH WITH PALATAL HOOK
+1D8C;AL # LATIN SMALL LETTER V WITH PALATAL HOOK
+1D8D;AL # LATIN SMALL LETTER X WITH PALATAL HOOK
+1D8E;AL # LATIN SMALL LETTER Z WITH PALATAL HOOK
+1D8F;AL # LATIN SMALL LETTER A WITH RETROFLEX HOOK
+1D90;AL # LATIN SMALL LETTER ALPHA WITH RETROFLEX HOOK
+1D91;AL # LATIN SMALL LETTER D WITH HOOK AND TAIL
+1D92;AL # LATIN SMALL LETTER E WITH RETROFLEX HOOK
+1D93;AL # LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK
+1D94;AL # LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK
+1D95;AL # LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK
+1D96;AL # LATIN SMALL LETTER I WITH RETROFLEX HOOK
+1D97;AL # LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK
+1D98;AL # LATIN SMALL LETTER ESH WITH RETROFLEX HOOK
+1D99;AL # LATIN SMALL LETTER U WITH RETROFLEX HOOK
+1D9A;AL # LATIN SMALL LETTER EZH WITH RETROFLEX HOOK
+1D9B;AL # MODIFIER LETTER SMALL TURNED ALPHA
+1D9C;AL # MODIFIER LETTER SMALL C
+1D9D;AL # MODIFIER LETTER SMALL C WITH CURL
+1D9E;AL # MODIFIER LETTER SMALL ETH
+1D9F;AL # MODIFIER LETTER SMALL REVERSED OPEN E
+1DA0;AL # MODIFIER LETTER SMALL F
+1DA1;AL # MODIFIER LETTER SMALL DOTLESS J WITH STROKE
+1DA2;AL # MODIFIER LETTER SMALL SCRIPT G
+1DA3;AL # MODIFIER LETTER SMALL TURNED H
+1DA4;AL # MODIFIER LETTER SMALL I WITH STROKE
+1DA5;AL # MODIFIER LETTER SMALL IOTA
+1DA6;AL # MODIFIER LETTER SMALL CAPITAL I
+1DA7;AL # MODIFIER LETTER SMALL CAPITAL I WITH STROKE
+1DA8;AL # MODIFIER LETTER SMALL J WITH CROSSED-TAIL
+1DA9;AL # MODIFIER LETTER SMALL L WITH RETROFLEX HOOK
+1DAA;AL # MODIFIER LETTER SMALL L WITH PALATAL HOOK
+1DAB;AL # MODIFIER LETTER SMALL CAPITAL L
+1DAC;AL # MODIFIER LETTER SMALL M WITH HOOK
+1DAD;AL # MODIFIER LETTER SMALL TURNED M WITH LONG LEG
+1DAE;AL # MODIFIER LETTER SMALL N WITH LEFT HOOK
+1DAF;AL # MODIFIER LETTER SMALL N WITH RETROFLEX HOOK
+1DB0;AL # MODIFIER LETTER SMALL CAPITAL N
+1DB1;AL # MODIFIER LETTER SMALL BARRED O
+1DB2;AL # MODIFIER LETTER SMALL PHI
+1DB3;AL # MODIFIER LETTER SMALL S WITH HOOK
+1DB4;AL # MODIFIER LETTER SMALL ESH
+1DB5;AL # MODIFIER LETTER SMALL T WITH PALATAL HOOK
+1DB6;AL # MODIFIER LETTER SMALL U BAR
+1DB7;AL # MODIFIER LETTER SMALL UPSILON
+1DB8;AL # MODIFIER LETTER SMALL CAPITAL U
+1DB9;AL # MODIFIER LETTER SMALL V WITH HOOK
+1DBA;AL # MODIFIER LETTER SMALL TURNED V
+1DBB;AL # MODIFIER LETTER SMALL Z
+1DBC;AL # MODIFIER LETTER SMALL Z WITH RETROFLEX HOOK
+1DBD;AL # MODIFIER LETTER SMALL Z WITH CURL
+1DBE;AL # MODIFIER LETTER SMALL EZH
+1DBF;AL # MODIFIER LETTER SMALL THETA
+1DC0;CM # COMBINING DOTTED GRAVE ACCENT
+1DC1;CM # COMBINING DOTTED ACUTE ACCENT
+1DC2;CM # COMBINING SNAKE BELOW
+1DC3;CM # COMBINING SUSPENSION MARK
1E00;AL # LATIN CAPITAL LETTER A WITH RING BELOW
1E01;AL # LATIN SMALL LETTER A WITH RING BELOW
1E02;AL # LATIN CAPITAL LETTER B WITH DOT ABOVE
@@ -5670,7 +5984,16 @@
2052;AL # COMMERCIAL MINUS SIGN
2053;AL # SWUNG DASH
2054;AL # INVERTED UNDERTIE
+2055;AL # FLOWER PUNCTUATION MARK
+2056;BA # THREE DOT PUNCTUATION
2057;AL # QUADRUPLE PRIME
+2058;BA # FOUR DOT PUNCTUATION
+2059;BA # FIVE DOT PUNCTUATION
+205A;BA # TWO DOT PUNCTUATION
+205B;BA # FOUR DOT MARK
+205C;AL # DOTTED CROSS
+205D;BA # TRICOLON
+205E;BA # VERTICAL FOUR DOTS
205F;BA # MEDIUM MATHEMATICAL SPACE
2060;WJ # WORD JOINER
2061;AL # FUNCTION APPLICATION
@@ -5711,6 +6034,11 @@
208C;AL # SUBSCRIPT EQUALS SIGN
208D;OP # SUBSCRIPT LEFT PARENTHESIS
208E;CL # SUBSCRIPT RIGHT PARENTHESIS
+2090;AL # LATIN SUBSCRIPT SMALL LETTER A
+2091;AL # LATIN SUBSCRIPT SMALL LETTER E
+2092;AL # LATIN SUBSCRIPT SMALL LETTER O
+2093;AL # LATIN SUBSCRIPT SMALL LETTER X
+2094;AL # LATIN SUBSCRIPT SMALL LETTER SCHWA
20A0;PR # EURO-CURRENCY SIGN
20A1;PR # COLON SIGN
20A2;PR # CRUZEIRO SIGN
@@ -5729,6 +6057,10 @@
20AF;PR # DRACHMA SIGN
20B0;PR # GERMAN PENNY SIGN
20B1;PR # PESO SIGN
+20B2;PR # GUARANI SIGN
+20B3;PR # AUSTRAL SIGN
+20B4;PR # HRYVNIA SIGN
+20B5;PR # CEDI SIGN
20D0;CM # COMBINING LEFT HARPOON ABOVE
20D1;CM # COMBINING RIGHT HARPOON ABOVE
20D2;CM # COMBINING LONG VERTICAL LINE OVERLAY
@@ -5756,6 +6088,7 @@
20E8;CM # COMBINING TRIPLE UNDERDOT
20E9;CM # COMBINING WIDE BRIDGE ABOVE
20EA;CM # COMBINING LEFTWARDS ARROW OVERLAY
+20EB;CM # COMBINING LONG DOUBLE SOLIDUS OVERLAY
2100;AL # ACCOUNT OF
2101;AL # ADDRESSED TO THE SUBJECT
2102;AL # DOUBLE-STRUCK CAPITAL C
@@ -5816,6 +6149,7 @@
2139;AL # INFORMATION SOURCE
213A;AL # ROTATED CAPITAL Q
213B;AL # FACSIMILE SIGN
+213C;AL # DOUBLE-STRUCK SMALL PI
213D;AL # DOUBLE-STRUCK SMALL GAMMA
213E;AL # DOUBLE-STRUCK CAPITAL GAMMA
213F;AL # DOUBLE-STRUCK CAPITAL PI
@@ -5831,6 +6165,7 @@
2149;AL # DOUBLE-STRUCK ITALIC SMALL J
214A;AL # PROPERTY LINE
214B;AL # TURNED AMPERSAND
+214C;AL # PER SIGN
2153;AL # VULGAR FRACTION ONE THIRD
2154;AI # VULGAR FRACTION TWO THIRDS
2155;AI # VULGAR FRACTION ONE FIFTH
@@ -6457,6 +6792,17 @@
23CE;AL # RETURN SYMBOL
23CF;AL # EJECT SYMBOL
23D0;AL # VERTICAL LINE EXTENSION
+23D1;AL # METRICAL BREVE
+23D2;AL # METRICAL LONG OVER SHORT
+23D3;AL # METRICAL SHORT OVER LONG
+23D4;AL # METRICAL LONG OVER TWO SHORTS
+23D5;AL # METRICAL TWO SHORTS OVER LONG
+23D6;AL # METRICAL TWO SHORTS JOINED
+23D7;AL # METRICAL TRISEME
+23D8;AL # METRICAL TETRASEME
+23D9;AL # METRICAL PENTASEME
+23DA;AL # EARTH GROUND
+23DB;AL # FUSE
2400;AL # SYMBOL FOR NULL
2401;AL # SYMBOL FOR START OF HEADING
2402;AL # SYMBOL FOR START OF TEXT
@@ -6947,6 +7293,7 @@
2615;AI # HOT BEVERAGE
2616;AI # WHITE SHOGI PIECE
2617;AI # BLACK SHOGI PIECE
+2618;AL # SHAMROCK
2619;AL # REVERSED ROTATED FLORAL HEART BULLET
261A;AL # BLACK LEFT POINTING INDEX
261B;AL # BLACK RIGHT POINTING INDEX
@@ -7048,6 +7395,8 @@
267B;AL # BLACK UNIVERSAL RECYCLING SYMBOL
267C;AL # RECYCLED PAPER SYMBOL
267D;AL # PARTIALLY-RECYCLED PAPER SYMBOL
+267E;AL # PERMANENT PAPER SIGN
+267F;AL # WHEELCHAIR SYMBOL
2680;AL # DIE FACE-1
2681;AL # DIE FACE-2
2682;AL # DIE FACE-3
@@ -7066,8 +7415,35 @@
268F;AL # DIGRAM FOR GREATER YIN
2690;AL # WHITE FLAG
2691;AL # BLACK FLAG
+2692;AL # HAMMER AND PICK
+2693;AL # ANCHOR
+2694;AL # CROSSED SWORDS
+2695;AL # STAFF OF AESCULAPIUS
+2696;AL # SCALES
+2697;AL # ALEMBIC
+2698;AL # FLOWER
+2699;AL # GEAR
+269A;AL # STAFF OF HERMES
+269B;AL # ATOM SYMBOL
+269C;AL # FLEUR-DE-LIS
26A0;AL # WARNING SIGN
26A1;AL # HIGH VOLTAGE SIGN
+26A2;AL # DOUBLED FEMALE SIGN
+26A3;AL # DOUBLED MALE SIGN
+26A4;AL # INTERLOCKED FEMALE AND MALE SIGN
+26A5;AL # MALE AND FEMALE SIGN
+26A6;AL # MALE WITH STROKE SIGN
+26A7;AL # MALE WITH STROKE AND MALE AND FEMALE SIGN
+26A8;AL # VERTICAL MALE WITH STROKE SIGN
+26A9;AL # HORIZONTAL MALE WITH STROKE SIGN
+26AA;AL # MEDIUM WHITE CIRCLE
+26AB;AL # MEDIUM BLACK CIRCLE
+26AC;AL # MEDIUM SMALL WHITE CIRCLE
+26AD;AL # MARRIAGE SYMBOL
+26AE;AL # DIVORCE SYMBOL
+26AF;AL # UNMARRIED PARTNERSHIP SYMBOL
+26B0;AL # COFFIN
+26B1;AL # FUNERAL URN
2701;AL # UPPER BLADE SCISSORS
2702;AL # BLACK SCISSORS
2703;AL # LOWER BLADE SCISSORS
@@ -7242,6 +7618,13 @@
27BC;AL # WEDGE-TAILED RIGHTWARDS ARROW
27BD;AL # HEAVY WEDGE-TAILED RIGHTWARDS ARROW
27BE;AL # OPEN-OUTLINED RIGHTWARDS ARROW
+27C0;AL # THREE DIMENSIONAL ANGLE
+27C1;AL # WHITE TRIANGLE CONTAINING SMALL WHITE TRIANGLE
+27C2;AL # PERPENDICULAR
+27C3;AL # OPEN SUBSET
+27C4;AL # OPEN SUPERSET
+27C5;OP # LEFT S-SHAPED BAG DELIMITER
+27C6;CL # RIGHT S-SHAPED BAG DELIMITER
27D0;AL # WHITE DIAMOND WITH CENTRED DOT
27D1;AL # AND WITH DOT
27D2;AL # ELEMENT OF OPENING UPWARDS
@@ -8068,6 +8451,418 @@
2B0B;AL # SOUTH WEST BLACK ARROW
2B0C;AL # LEFT RIGHT BLACK ARROW
2B0D;AL # UP DOWN BLACK ARROW
+2B0E;AL # RIGHTWARDS ARROW WITH TIP DOWNWARDS
+2B0F;AL # RIGHTWARDS ARROW WITH TIP UPWARDS
+2B10;AL # LEFTWARDS ARROW WITH TIP DOWNWARDS
+2B11;AL # LEFTWARDS ARROW WITH TIP UPWARDS
+2B12;AL # SQUARE WITH TOP HALF BLACK
+2B13;AL # SQUARE WITH BOTTOM HALF BLACK
+2C00;AL # GLAGOLITIC CAPITAL LETTER AZU
+2C01;AL # GLAGOLITIC CAPITAL LETTER BUKY
+2C02;AL # GLAGOLITIC CAPITAL LETTER VEDE
+2C03;AL # GLAGOLITIC CAPITAL LETTER GLAGOLI
+2C04;AL # GLAGOLITIC CAPITAL LETTER DOBRO
+2C05;AL # GLAGOLITIC CAPITAL LETTER YESTU
+2C06;AL # GLAGOLITIC CAPITAL LETTER ZHIVETE
+2C07;AL # GLAGOLITIC CAPITAL LETTER DZELO
+2C08;AL # GLAGOLITIC CAPITAL LETTER ZEMLJA
+2C09;AL # GLAGOLITIC CAPITAL LETTER IZHE
+2C0A;AL # GLAGOLITIC CAPITAL LETTER INITIAL IZHE
+2C0B;AL # GLAGOLITIC CAPITAL LETTER I
+2C0C;AL # GLAGOLITIC CAPITAL LETTER DJERVI
+2C0D;AL # GLAGOLITIC CAPITAL LETTER KAKO
+2C0E;AL # GLAGOLITIC CAPITAL LETTER LJUDIJE
+2C0F;AL # GLAGOLITIC CAPITAL LETTER MYSLITE
+2C10;AL # GLAGOLITIC CAPITAL LETTER NASHI
+2C11;AL # GLAGOLITIC CAPITAL LETTER ONU
+2C12;AL # GLAGOLITIC CAPITAL LETTER POKOJI
+2C13;AL # GLAGOLITIC CAPITAL LETTER RITSI
+2C14;AL # GLAGOLITIC CAPITAL LETTER SLOVO
+2C15;AL # GLAGOLITIC CAPITAL LETTER TVRIDO
+2C16;AL # GLAGOLITIC CAPITAL LETTER UKU
+2C17;AL # GLAGOLITIC CAPITAL LETTER FRITU
+2C18;AL # GLAGOLITIC CAPITAL LETTER HERU
+2C19;AL # GLAGOLITIC CAPITAL LETTER OTU
+2C1A;AL # GLAGOLITIC CAPITAL LETTER PE
+2C1B;AL # GLAGOLITIC CAPITAL LETTER SHTA
+2C1C;AL # GLAGOLITIC CAPITAL LETTER TSI
+2C1D;AL # GLAGOLITIC CAPITAL LETTER CHRIVI
+2C1E;AL # GLAGOLITIC CAPITAL LETTER SHA
+2C1F;AL # GLAGOLITIC CAPITAL LETTER YERU
+2C20;AL # GLAGOLITIC CAPITAL LETTER YERI
+2C21;AL # GLAGOLITIC CAPITAL LETTER YATI
+2C22;AL # GLAGOLITIC CAPITAL LETTER SPIDERY HA
+2C23;AL # GLAGOLITIC CAPITAL LETTER YU
+2C24;AL # GLAGOLITIC CAPITAL LETTER SMALL YUS
+2C25;AL # GLAGOLITIC CAPITAL LETTER SMALL YUS WITH TAIL
+2C26;AL # GLAGOLITIC CAPITAL LETTER YO
+2C27;AL # GLAGOLITIC CAPITAL LETTER IOTATED SMALL YUS
+2C28;AL # GLAGOLITIC CAPITAL LETTER BIG YUS
+2C29;AL # GLAGOLITIC CAPITAL LETTER IOTATED BIG YUS
+2C2A;AL # GLAGOLITIC CAPITAL LETTER FITA
+2C2B;AL # GLAGOLITIC CAPITAL LETTER IZHITSA
+2C2C;AL # GLAGOLITIC CAPITAL LETTER SHTAPIC
+2C2D;AL # GLAGOLITIC CAPITAL LETTER TROKUTASTI A
+2C2E;AL # GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE
+2C30;AL # GLAGOLITIC SMALL LETTER AZU
+2C31;AL # GLAGOLITIC SMALL LETTER BUKY
+2C32;AL # GLAGOLITIC SMALL LETTER VEDE
+2C33;AL # GLAGOLITIC SMALL LETTER GLAGOLI
+2C34;AL # GLAGOLITIC SMALL LETTER DOBRO
+2C35;AL # GLAGOLITIC SMALL LETTER YESTU
+2C36;AL # GLAGOLITIC SMALL LETTER ZHIVETE
+2C37;AL # GLAGOLITIC SMALL LETTER DZELO
+2C38;AL # GLAGOLITIC SMALL LETTER ZEMLJA
+2C39;AL # GLAGOLITIC SMALL LETTER IZHE
+2C3A;AL # GLAGOLITIC SMALL LETTER INITIAL IZHE
+2C3B;AL # GLAGOLITIC SMALL LETTER I
+2C3C;AL # GLAGOLITIC SMALL LETTER DJERVI
+2C3D;AL # GLAGOLITIC SMALL LETTER KAKO
+2C3E;AL # GLAGOLITIC SMALL LETTER LJUDIJE
+2C3F;AL # GLAGOLITIC SMALL LETTER MYSLITE
+2C40;AL # GLAGOLITIC SMALL LETTER NASHI
+2C41;AL # GLAGOLITIC SMALL LETTER ONU
+2C42;AL # GLAGOLITIC SMALL LETTER POKOJI
+2C43;AL # GLAGOLITIC SMALL LETTER RITSI
+2C44;AL # GLAGOLITIC SMALL LETTER SLOVO
+2C45;AL # GLAGOLITIC SMALL LETTER TVRIDO
+2C46;AL # GLAGOLITIC SMALL LETTER UKU
+2C47;AL # GLAGOLITIC SMALL LETTER FRITU
+2C48;AL # GLAGOLITIC SMALL LETTER HERU
+2C49;AL # GLAGOLITIC SMALL LETTER OTU
+2C4A;AL # GLAGOLITIC SMALL LETTER PE
+2C4B;AL # GLAGOLITIC SMALL LETTER SHTA
+2C4C;AL # GLAGOLITIC SMALL LETTER TSI
+2C4D;AL # GLAGOLITIC SMALL LETTER CHRIVI
+2C4E;AL # GLAGOLITIC SMALL LETTER SHA
+2C4F;AL # GLAGOLITIC SMALL LETTER YERU
+2C50;AL # GLAGOLITIC SMALL LETTER YERI
+2C51;AL # GLAGOLITIC SMALL LETTER YATI
+2C52;AL # GLAGOLITIC SMALL LETTER SPIDERY HA
+2C53;AL # GLAGOLITIC SMALL LETTER YU
+2C54;AL # GLAGOLITIC SMALL LETTER SMALL YUS
+2C55;AL # GLAGOLITIC SMALL LETTER SMALL YUS WITH TAIL
+2C56;AL # GLAGOLITIC SMALL LETTER YO
+2C57;AL # GLAGOLITIC SMALL LETTER IOTATED SMALL YUS
+2C58;AL # GLAGOLITIC SMALL LETTER BIG YUS
+2C59;AL # GLAGOLITIC SMALL LETTER IOTATED BIG YUS
+2C5A;AL # GLAGOLITIC SMALL LETTER FITA
+2C5B;AL # GLAGOLITIC SMALL LETTER IZHITSA
+2C5C;AL # GLAGOLITIC SMALL LETTER SHTAPIC
+2C5D;AL # GLAGOLITIC SMALL LETTER TROKUTASTI A
+2C5E;AL # GLAGOLITIC SMALL LETTER LATINATE MYSLITE
+2C80;AL # COPTIC CAPITAL LETTER ALFA
+2C81;AL # COPTIC SMALL LETTER ALFA
+2C82;AL # COPTIC CAPITAL LETTER VIDA
+2C83;AL # COPTIC SMALL LETTER VIDA
+2C84;AL # COPTIC CAPITAL LETTER GAMMA
+2C85;AL # COPTIC SMALL LETTER GAMMA
+2C86;AL # COPTIC CAPITAL LETTER DALDA
+2C87;AL # COPTIC SMALL LETTER DALDA
+2C88;AL # COPTIC CAPITAL LETTER EIE
+2C89;AL # COPTIC SMALL LETTER EIE
+2C8A;AL # COPTIC CAPITAL LETTER SOU
+2C8B;AL # COPTIC SMALL LETTER SOU
+2C8C;AL # COPTIC CAPITAL LETTER ZATA
+2C8D;AL # COPTIC SMALL LETTER ZATA
+2C8E;AL # COPTIC CAPITAL LETTER HATE
+2C8F;AL # COPTIC SMALL LETTER HATE
+2C90;AL # COPTIC CAPITAL LETTER THETHE
+2C91;AL # COPTIC SMALL LETTER THETHE
+2C92;AL # COPTIC CAPITAL LETTER IAUDA
+2C93;AL # COPTIC SMALL LETTER IAUDA
+2C94;AL # COPTIC CAPITAL LETTER KAPA
+2C95;AL # COPTIC SMALL LETTER KAPA
+2C96;AL # COPTIC CAPITAL LETTER LAULA
+2C97;AL # COPTIC SMALL LETTER LAULA
+2C98;AL # COPTIC CAPITAL LETTER MI
+2C99;AL # COPTIC SMALL LETTER MI
+2C9A;AL # COPTIC CAPITAL LETTER NI
+2C9B;AL # COPTIC SMALL LETTER NI
+2C9C;AL # COPTIC CAPITAL LETTER KSI
+2C9D;AL # COPTIC SMALL LETTER KSI
+2C9E;AL # COPTIC CAPITAL LETTER O
+2C9F;AL # COPTIC SMALL LETTER O
+2CA0;AL # COPTIC CAPITAL LETTER PI
+2CA1;AL # COPTIC SMALL LETTER PI
+2CA2;AL # COPTIC CAPITAL LETTER RO
+2CA3;AL # COPTIC SMALL LETTER RO
+2CA4;AL # COPTIC CAPITAL LETTER SIMA
+2CA5;AL # COPTIC SMALL LETTER SIMA
+2CA6;AL # COPTIC CAPITAL LETTER TAU
+2CA7;AL # COPTIC SMALL LETTER TAU
+2CA8;AL # COPTIC CAPITAL LETTER UA
+2CA9;AL # COPTIC SMALL LETTER UA
+2CAA;AL # COPTIC CAPITAL LETTER FI
+2CAB;AL # COPTIC SMALL LETTER FI
+2CAC;AL # COPTIC CAPITAL LETTER KHI
+2CAD;AL # COPTIC SMALL LETTER KHI
+2CAE;AL # COPTIC CAPITAL LETTER PSI
+2CAF;AL # COPTIC SMALL LETTER PSI
+2CB0;AL # COPTIC CAPITAL LETTER OOU
+2CB1;AL # COPTIC SMALL LETTER OOU
+2CB2;AL # COPTIC CAPITAL LETTER DIALECT-P ALEF
+2CB3;AL # COPTIC SMALL LETTER DIALECT-P ALEF
+2CB4;AL # COPTIC CAPITAL LETTER OLD COPTIC AIN
+2CB5;AL # COPTIC SMALL LETTER OLD COPTIC AIN
+2CB6;AL # COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE
+2CB7;AL # COPTIC SMALL LETTER CRYPTOGRAMMIC EIE
+2CB8;AL # COPTIC CAPITAL LETTER DIALECT-P KAPA
+2CB9;AL # COPTIC SMALL LETTER DIALECT-P KAPA
+2CBA;AL # COPTIC CAPITAL LETTER DIALECT-P NI
+2CBB;AL # COPTIC SMALL LETTER DIALECT-P NI
+2CBC;AL # COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI
+2CBD;AL # COPTIC SMALL LETTER CRYPTOGRAMMIC NI
+2CBE;AL # COPTIC CAPITAL LETTER OLD COPTIC OOU
+2CBF;AL # COPTIC SMALL LETTER OLD COPTIC OOU
+2CC0;AL # COPTIC CAPITAL LETTER SAMPI
+2CC1;AL # COPTIC SMALL LETTER SAMPI
+2CC2;AL # COPTIC CAPITAL LETTER CROSSED SHEI
+2CC3;AL # COPTIC SMALL LETTER CROSSED SHEI
+2CC4;AL # COPTIC CAPITAL LETTER OLD COPTIC SHEI
+2CC5;AL # COPTIC SMALL LETTER OLD COPTIC SHEI
+2CC6;AL # COPTIC CAPITAL LETTER OLD COPTIC ESH
+2CC7;AL # COPTIC SMALL LETTER OLD COPTIC ESH
+2CC8;AL # COPTIC CAPITAL LETTER AKHMIMIC KHEI
+2CC9;AL # COPTIC SMALL LETTER AKHMIMIC KHEI
+2CCA;AL # COPTIC CAPITAL LETTER DIALECT-P HORI
+2CCB;AL # COPTIC SMALL LETTER DIALECT-P HORI
+2CCC;AL # COPTIC CAPITAL LETTER OLD COPTIC HORI
+2CCD;AL # COPTIC SMALL LETTER OLD COPTIC HORI
+2CCE;AL # COPTIC CAPITAL LETTER OLD COPTIC HA
+2CCF;AL # COPTIC SMALL LETTER OLD COPTIC HA
+2CD0;AL # COPTIC CAPITAL LETTER L-SHAPED HA
+2CD1;AL # COPTIC SMALL LETTER L-SHAPED HA
+2CD2;AL # COPTIC CAPITAL LETTER OLD COPTIC HEI
+2CD3;AL # COPTIC SMALL LETTER OLD COPTIC HEI
+2CD4;AL # COPTIC CAPITAL LETTER OLD COPTIC HAT
+2CD5;AL # COPTIC SMALL LETTER OLD COPTIC HAT
+2CD6;AL # COPTIC CAPITAL LETTER OLD COPTIC GANGIA
+2CD7;AL # COPTIC SMALL LETTER OLD COPTIC GANGIA
+2CD8;AL # COPTIC CAPITAL LETTER OLD COPTIC DJA
+2CD9;AL # COPTIC SMALL LETTER OLD COPTIC DJA
+2CDA;AL # COPTIC CAPITAL LETTER OLD COPTIC SHIMA
+2CDB;AL # COPTIC SMALL LETTER OLD COPTIC SHIMA
+2CDC;AL # COPTIC CAPITAL LETTER OLD NUBIAN SHIMA
+2CDD;AL # COPTIC SMALL LETTER OLD NUBIAN SHIMA
+2CDE;AL # COPTIC CAPITAL LETTER OLD NUBIAN NGI
+2CDF;AL # COPTIC SMALL LETTER OLD NUBIAN NGI
+2CE0;AL # COPTIC CAPITAL LETTER OLD NUBIAN NYI
+2CE1;AL # COPTIC SMALL LETTER OLD NUBIAN NYI
+2CE2;AL # COPTIC CAPITAL LETTER OLD NUBIAN WAU
+2CE3;AL # COPTIC SMALL LETTER OLD NUBIAN WAU
+2CE4;AL # COPTIC SYMBOL KAI
+2CE5;AL # COPTIC SYMBOL MI RO
+2CE6;AL # COPTIC SYMBOL PI RO
+2CE7;AL # COPTIC SYMBOL STAUROS
+2CE8;AL # COPTIC SYMBOL TAU RO
+2CE9;AL # COPTIC SYMBOL KHI RO
+2CEA;AL # COPTIC SYMBOL SHIMA SIMA
+2CF9;BA # COPTIC OLD NUBIAN FULL STOP
+2CFA;BA # COPTIC OLD NUBIAN DIRECT QUESTION MARK
+2CFB;BA # COPTIC OLD NUBIAN INDIRECT QUESTION MARK
+2CFC;BA # COPTIC OLD NUBIAN VERSE DIVIDER
+2CFD;AL # COPTIC FRACTION ONE HALF
+2CFE;BA # COPTIC FULL STOP
+2CFF;BA # COPTIC MORPHOLOGICAL DIVIDER
+2D00;AL # GEORGIAN SMALL LETTER AN
+2D01;AL # GEORGIAN SMALL LETTER BAN
+2D02;AL # GEORGIAN SMALL LETTER GAN
+2D03;AL # GEORGIAN SMALL LETTER DON
+2D04;AL # GEORGIAN SMALL LETTER EN
+2D05;AL # GEORGIAN SMALL LETTER VIN
+2D06;AL # GEORGIAN SMALL LETTER ZEN
+2D07;AL # GEORGIAN SMALL LETTER TAN
+2D08;AL # GEORGIAN SMALL LETTER IN
+2D09;AL # GEORGIAN SMALL LETTER KAN
+2D0A;AL # GEORGIAN SMALL LETTER LAS
+2D0B;AL # GEORGIAN SMALL LETTER MAN
+2D0C;AL # GEORGIAN SMALL LETTER NAR
+2D0D;AL # GEORGIAN SMALL LETTER ON
+2D0E;AL # GEORGIAN SMALL LETTER PAR
+2D0F;AL # GEORGIAN SMALL LETTER ZHAR
+2D10;AL # GEORGIAN SMALL LETTER RAE
+2D11;AL # GEORGIAN SMALL LETTER SAN
+2D12;AL # GEORGIAN SMALL LETTER TAR
+2D13;AL # GEORGIAN SMALL LETTER UN
+2D14;AL # GEORGIAN SMALL LETTER PHAR
+2D15;AL # GEORGIAN SMALL LETTER KHAR
+2D16;AL # GEORGIAN SMALL LETTER GHAN
+2D17;AL # GEORGIAN SMALL LETTER QAR
+2D18;AL # GEORGIAN SMALL LETTER SHIN
+2D19;AL # GEORGIAN SMALL LETTER CHIN
+2D1A;AL # GEORGIAN SMALL LETTER CAN
+2D1B;AL # GEORGIAN SMALL LETTER JIL
+2D1C;AL # GEORGIAN SMALL LETTER CIL
+2D1D;AL # GEORGIAN SMALL LETTER CHAR
+2D1E;AL # GEORGIAN SMALL LETTER XAN
+2D1F;AL # GEORGIAN SMALL LETTER JHAN
+2D20;AL # GEORGIAN SMALL LETTER HAE
+2D21;AL # GEORGIAN SMALL LETTER HE
+2D22;AL # GEORGIAN SMALL LETTER HIE
+2D23;AL # GEORGIAN SMALL LETTER WE
+2D24;AL # GEORGIAN SMALL LETTER HAR
+2D25;AL # GEORGIAN SMALL LETTER HOE
+2D30;AL # TIFINAGH LETTER YA
+2D31;AL # TIFINAGH LETTER YAB
+2D32;AL # TIFINAGH LETTER YABH
+2D33;AL # TIFINAGH LETTER YAG
+2D34;AL # TIFINAGH LETTER YAGHH
+2D35;AL # TIFINAGH LETTER BERBER ACADEMY YAJ
+2D36;AL # TIFINAGH LETTER YAJ
+2D37;AL # TIFINAGH LETTER YAD
+2D38;AL # TIFINAGH LETTER YADH
+2D39;AL # TIFINAGH LETTER YADD
+2D3A;AL # TIFINAGH LETTER YADDH
+2D3B;AL # TIFINAGH LETTER YEY
+2D3C;AL # TIFINAGH LETTER YAF
+2D3D;AL # TIFINAGH LETTER YAK
+2D3E;AL # TIFINAGH LETTER TUAREG YAK
+2D3F;AL # TIFINAGH LETTER YAKHH
+2D40;AL # TIFINAGH LETTER YAH
+2D41;AL # TIFINAGH LETTER BERBER ACADEMY YAH
+2D42;AL # TIFINAGH LETTER TUAREG YAH
+2D43;AL # TIFINAGH LETTER YAHH
+2D44;AL # TIFINAGH LETTER YAA
+2D45;AL # TIFINAGH LETTER YAKH
+2D46;AL # TIFINAGH LETTER TUAREG YAKH
+2D47;AL # TIFINAGH LETTER YAQ
+2D48;AL # TIFINAGH LETTER TUAREG YAQ
+2D49;AL # TIFINAGH LETTER YI
+2D4A;AL # TIFINAGH LETTER YAZH
+2D4B;AL # TIFINAGH LETTER AHAGGAR YAZH
+2D4C;AL # TIFINAGH LETTER TUAREG YAZH
+2D4D;AL # TIFINAGH LETTER YAL
+2D4E;AL # TIFINAGH LETTER YAM
+2D4F;AL # TIFINAGH LETTER YAN
+2D50;AL # TIFINAGH LETTER TUAREG YAGN
+2D51;AL # TIFINAGH LETTER TUAREG YANG
+2D52;AL # TIFINAGH LETTER YAP
+2D53;AL # TIFINAGH LETTER YU
+2D54;AL # TIFINAGH LETTER YAR
+2D55;AL # TIFINAGH LETTER YARR
+2D56;AL # TIFINAGH LETTER YAGH
+2D57;AL # TIFINAGH LETTER TUAREG YAGH
+2D58;AL # TIFINAGH LETTER AYER YAGH
+2D59;AL # TIFINAGH LETTER YAS
+2D5A;AL # TIFINAGH LETTER YASS
+2D5B;AL # TIFINAGH LETTER YASH
+2D5C;AL # TIFINAGH LETTER YAT
+2D5D;AL # TIFINAGH LETTER YATH
+2D5E;AL # TIFINAGH LETTER YACH
+2D5F;AL # TIFINAGH LETTER YATT
+2D60;AL # TIFINAGH LETTER YAV
+2D61;AL # TIFINAGH LETTER YAW
+2D62;AL # TIFINAGH LETTER YAY
+2D63;AL # TIFINAGH LETTER YAZ
+2D64;AL # TIFINAGH LETTER TAWELLEMET YAZ
+2D65;AL # TIFINAGH LETTER YAZZ
+2D6F;AL # TIFINAGH MODIFIER LETTER LABIALIZATION MARK
+2D80;AL # ETHIOPIC SYLLABLE LOA
+2D81;AL # ETHIOPIC SYLLABLE MOA
+2D82;AL # ETHIOPIC SYLLABLE ROA
+2D83;AL # ETHIOPIC SYLLABLE SOA
+2D84;AL # ETHIOPIC SYLLABLE SHOA
+2D85;AL # ETHIOPIC SYLLABLE BOA
+2D86;AL # ETHIOPIC SYLLABLE TOA
+2D87;AL # ETHIOPIC SYLLABLE COA
+2D88;AL # ETHIOPIC SYLLABLE NOA
+2D89;AL # ETHIOPIC SYLLABLE NYOA
+2D8A;AL # ETHIOPIC SYLLABLE GLOTTAL OA
+2D8B;AL # ETHIOPIC SYLLABLE ZOA
+2D8C;AL # ETHIOPIC SYLLABLE DOA
+2D8D;AL # ETHIOPIC SYLLABLE DDOA
+2D8E;AL # ETHIOPIC SYLLABLE JOA
+2D8F;AL # ETHIOPIC SYLLABLE THOA
+2D90;AL # ETHIOPIC SYLLABLE CHOA
+2D91;AL # ETHIOPIC SYLLABLE PHOA
+2D92;AL # ETHIOPIC SYLLABLE POA
+2D93;AL # ETHIOPIC SYLLABLE GGWA
+2D94;AL # ETHIOPIC SYLLABLE GGWI
+2D95;AL # ETHIOPIC SYLLABLE GGWEE
+2D96;AL # ETHIOPIC SYLLABLE GGWE
+2DA0;AL # ETHIOPIC SYLLABLE SSA
+2DA1;AL # ETHIOPIC SYLLABLE SSU
+2DA2;AL # ETHIOPIC SYLLABLE SSI
+2DA3;AL # ETHIOPIC SYLLABLE SSAA
+2DA4;AL # ETHIOPIC SYLLABLE SSEE
+2DA5;AL # ETHIOPIC SYLLABLE SSE
+2DA6;AL # ETHIOPIC SYLLABLE SSO
+2DA8;AL # ETHIOPIC SYLLABLE CCA
+2DA9;AL # ETHIOPIC SYLLABLE CCU
+2DAA;AL # ETHIOPIC SYLLABLE CCI
+2DAB;AL # ETHIOPIC SYLLABLE CCAA
+2DAC;AL # ETHIOPIC SYLLABLE CCEE
+2DAD;AL # ETHIOPIC SYLLABLE CCE
+2DAE;AL # ETHIOPIC SYLLABLE CCO
+2DB0;AL # ETHIOPIC SYLLABLE ZZA
+2DB1;AL # ETHIOPIC SYLLABLE ZZU
+2DB2;AL # ETHIOPIC SYLLABLE ZZI
+2DB3;AL # ETHIOPIC SYLLABLE ZZAA
+2DB4;AL # ETHIOPIC SYLLABLE ZZEE
+2DB5;AL # ETHIOPIC SYLLABLE ZZE
+2DB6;AL # ETHIOPIC SYLLABLE ZZO
+2DB8;AL # ETHIOPIC SYLLABLE CCHA
+2DB9;AL # ETHIOPIC SYLLABLE CCHU
+2DBA;AL # ETHIOPIC SYLLABLE CCHI
+2DBB;AL # ETHIOPIC SYLLABLE CCHAA
+2DBC;AL # ETHIOPIC SYLLABLE CCHEE
+2DBD;AL # ETHIOPIC SYLLABLE CCHE
+2DBE;AL # ETHIOPIC SYLLABLE CCHO
+2DC0;AL # ETHIOPIC SYLLABLE QYA
+2DC1;AL # ETHIOPIC SYLLABLE QYU
+2DC2;AL # ETHIOPIC SYLLABLE QYI
+2DC3;AL # ETHIOPIC SYLLABLE QYAA
+2DC4;AL # ETHIOPIC SYLLABLE QYEE
+2DC5;AL # ETHIOPIC SYLLABLE QYE
+2DC6;AL # ETHIOPIC SYLLABLE QYO
+2DC8;AL # ETHIOPIC SYLLABLE KYA
+2DC9;AL # ETHIOPIC SYLLABLE KYU
+2DCA;AL # ETHIOPIC SYLLABLE KYI
+2DCB;AL # ETHIOPIC SYLLABLE KYAA
+2DCC;AL # ETHIOPIC SYLLABLE KYEE
+2DCD;AL # ETHIOPIC SYLLABLE KYE
+2DCE;AL # ETHIOPIC SYLLABLE KYO
+2DD0;AL # ETHIOPIC SYLLABLE XYA
+2DD1;AL # ETHIOPIC SYLLABLE XYU
+2DD2;AL # ETHIOPIC SYLLABLE XYI
+2DD3;AL # ETHIOPIC SYLLABLE XYAA
+2DD4;AL # ETHIOPIC SYLLABLE XYEE
+2DD5;AL # ETHIOPIC SYLLABLE XYE
+2DD6;AL # ETHIOPIC SYLLABLE XYO
+2DD8;AL # ETHIOPIC SYLLABLE GYA
+2DD9;AL # ETHIOPIC SYLLABLE GYU
+2DDA;AL # ETHIOPIC SYLLABLE GYI
+2DDB;AL # ETHIOPIC SYLLABLE GYAA
+2DDC;AL # ETHIOPIC SYLLABLE GYEE
+2DDD;AL # ETHIOPIC SYLLABLE GYE
+2DDE;AL # ETHIOPIC SYLLABLE GYO
+2E00;QU # RIGHT ANGLE SUBSTITUTION MARKER
+2E01;QU # RIGHT ANGLE DOTTED SUBSTITUTION MARKER
+2E02;QU # LEFT SUBSTITUTION BRACKET
+2E03;QU # RIGHT SUBSTITUTION BRACKET
+2E04;QU # LEFT DOTTED SUBSTITUTION BRACKET
+2E05;QU # RIGHT DOTTED SUBSTITUTION BRACKET
+2E06;QU # RAISED INTERPOLATION MARKER
+2E07;QU # RAISED DOTTED INTERPOLATION MARKER
+2E08;QU # DOTTED TRANSPOSITION MARKER
+2E09;QU # LEFT TRANSPOSITION BRACKET
+2E0A;QU # RIGHT TRANSPOSITION BRACKET
+2E0B;QU # RAISED SQUARE
+2E0C;QU # LEFT RAISED OMISSION BRACKET
+2E0D;QU # RIGHT RAISED OMISSION BRACKET
+2E0E;BA # EDITORIAL CORONIS
+2E0F;BA # PARAGRAPHOS
+2E10;BA # FORKED PARAGRAPHOS
+2E11;BA # REVERSED FORKED PARAGRAPHOS
+2E12;BA # HYPODIASTOLE
+2E13;BA # DOTTED OBELOS
+2E14;BA # DOWNWARDS ANCORA
+2E15;BA # UPWARDS ANCORA
+2E16;AL # DOTTED RIGHT-POINTING ANGLE
+2E17;BA # DOUBLE OBLIQUE HYPHEN
+2E1C;QU # LEFT LOW PARAPHRASE BRACKET
+2E1D;QU # RIGHT LOW PARAPHRASE BRACKET
2E80;ID # CJK RADICAL REPEAT
2E81;ID # CJK RADICAL CLIFF
2E82;ID # CJK RADICAL SECOND ONE
@@ -8836,6 +9631,22 @@
31B5;ID # BOPOMOFO FINAL LETTER T
31B6;ID # BOPOMOFO FINAL LETTER K
31B7;ID # BOPOMOFO FINAL LETTER H
+31C0;ID # CJK STROKE T
+31C1;ID # CJK STROKE WG
+31C2;ID # CJK STROKE XG
+31C3;ID # CJK STROKE BXG
+31C4;ID # CJK STROKE SW
+31C5;ID # CJK STROKE HZZ
+31C6;ID # CJK STROKE HZG
+31C7;ID # CJK STROKE HP
+31C8;ID # CJK STROKE HZWG
+31C9;ID # CJK STROKE SZWG
+31CA;ID # CJK STROKE HZT
+31CB;ID # CJK STROKE HZZP
+31CC;ID # CJK STROKE HPWG
+31CD;ID # CJK STROKE HZW
+31CE;ID # CJK STROKE HZZZ
+31CF;ID # CJK STROKE N
31F0;NS # KATAKANA LETTER SMALL KU
31F1;NS # KATAKANA LETTER SMALL SI
31F2;NS # KATAKANA LETTER SMALL SU
@@ -8965,6 +9776,7 @@
327B;ID # CIRCLED HANGUL HIEUH A
327C;ID # CIRCLED KOREAN CHARACTER CHAMKO
327D;ID # CIRCLED KOREAN CHARACTER JUEUI
+327E;ID # CIRCLED HANGUL IEUNG U
327F;ID # KOREAN STANDARD SYMBOL
3280;ID # CIRCLED IDEOGRAPH ONE
3281;ID # CIRCLED IDEOGRAPH TWO
@@ -9414,7 +10226,7 @@
4DFD;AL # HEXAGRAM FOR SMALL PREPONDERANCE
4DFE;AL # HEXAGRAM FOR AFTER COMPLETION
4DFF;AL # HEXAGRAM FOR BEFORE COMPLETION
-4E00..9FA5;ID # <CJK Ideograph, First>..<CJK Ideograph, Last>
+4E00..9FBB;ID # <CJK Ideograph, First>..<CJK Ideograph, Last>
A000;ID # YI SYLLABLE IT
A001;ID # YI SYLLABLE IX
A002;ID # YI SYLLABLE I
@@ -9436,7 +10248,7 @@ A011;ID # YI SYLLABLE O
A012;ID # YI SYLLABLE OP
A013;ID # YI SYLLABLE EX
A014;ID # YI SYLLABLE E
-A015;ID # YI SYLLABLE WU
+A015;NS # YI SYLLABLE WU
A016;ID # YI SYLLABLE BIT
A017;ID # YI SYLLABLE BIX
A018;ID # YI SYLLABLE BI
@@ -10635,7 +11447,871 @@ A4C3;ID # YI RADICAL CHE
A4C4;ID # YI RADICAL ZZIET
A4C5;ID # YI RADICAL NBIE
A4C6;ID # YI RADICAL KE
-AC00..D7A3;ID # <Hangul Syllable, First>..<Hangul Syllable, Last>
+A700;AL # MODIFIER LETTER CHINESE TONE YIN PING
+A701;AL # MODIFIER LETTER CHINESE TONE YANG PING
+A702;AL # MODIFIER LETTER CHINESE TONE YIN SHANG
+A703;AL # MODIFIER LETTER CHINESE TONE YANG SHANG
+A704;AL # MODIFIER LETTER CHINESE TONE YIN QU
+A705;AL # MODIFIER LETTER CHINESE TONE YANG QU
+A706;AL # MODIFIER LETTER CHINESE TONE YIN RU
+A707;AL # MODIFIER LETTER CHINESE TONE YANG RU
+A708;AL # MODIFIER LETTER EXTRA-HIGH DOTTED TONE BAR
+A709;AL # MODIFIER LETTER HIGH DOTTED TONE BAR
+A70A;AL # MODIFIER LETTER MID DOTTED TONE BAR
+A70B;AL # MODIFIER LETTER LOW DOTTED TONE BAR
+A70C;AL # MODIFIER LETTER EXTRA-LOW DOTTED TONE BAR
+A70D;AL # MODIFIER LETTER EXTRA-HIGH DOTTED LEFT-STEM TONE BAR
+A70E;AL # MODIFIER LETTER HIGH DOTTED LEFT-STEM TONE BAR
+A70F;AL # MODIFIER LETTER MID DOTTED LEFT-STEM TONE BAR
+A710;AL # MODIFIER LETTER LOW DOTTED LEFT-STEM TONE BAR
+A711;AL # MODIFIER LETTER EXTRA-LOW DOTTED LEFT-STEM TONE BAR
+A712;AL # MODIFIER LETTER EXTRA-HIGH LEFT-STEM TONE BAR
+A713;AL # MODIFIER LETTER HIGH LEFT-STEM TONE BAR
+A714;AL # MODIFIER LETTER MID LEFT-STEM TONE BAR
+A715;AL # MODIFIER LETTER LOW LEFT-STEM TONE BAR
+A716;AL # MODIFIER LETTER EXTRA-LOW LEFT-STEM TONE BAR
+A800;AL # SYLOTI NAGRI LETTER A
+A801;AL # SYLOTI NAGRI LETTER I
+A802;CM # SYLOTI NAGRI SIGN DVISVARA
+A803;AL # SYLOTI NAGRI LETTER U
+A804;AL # SYLOTI NAGRI LETTER E
+A805;AL # SYLOTI NAGRI LETTER O
+A806;CM # SYLOTI NAGRI SIGN HASANTA
+A807;AL # SYLOTI NAGRI LETTER KO
+A808;AL # SYLOTI NAGRI LETTER KHO
+A809;AL # SYLOTI NAGRI LETTER GO
+A80A;AL # SYLOTI NAGRI LETTER GHO
+A80B;CM # SYLOTI NAGRI SIGN ANUSVARA
+A80C;AL # SYLOTI NAGRI LETTER CO
+A80D;AL # SYLOTI NAGRI LETTER CHO
+A80E;AL # SYLOTI NAGRI LETTER JO
+A80F;AL # SYLOTI NAGRI LETTER JHO
+A810;AL # SYLOTI NAGRI LETTER TTO
+A811;AL # SYLOTI NAGRI LETTER TTHO
+A812;AL # SYLOTI NAGRI LETTER DDO
+A813;AL # SYLOTI NAGRI LETTER DDHO
+A814;AL # SYLOTI NAGRI LETTER TO
+A815;AL # SYLOTI NAGRI LETTER THO
+A816;AL # SYLOTI NAGRI LETTER DO
+A817;AL # SYLOTI NAGRI LETTER DHO
+A818;AL # SYLOTI NAGRI LETTER NO
+A819;AL # SYLOTI NAGRI LETTER PO
+A81A;AL # SYLOTI NAGRI LETTER PHO
+A81B;AL # SYLOTI NAGRI LETTER BO
+A81C;AL # SYLOTI NAGRI LETTER BHO
+A81D;AL # SYLOTI NAGRI LETTER MO
+A81E;AL # SYLOTI NAGRI LETTER RO
+A81F;AL # SYLOTI NAGRI LETTER LO
+A820;AL # SYLOTI NAGRI LETTER RRO
+A821;AL # SYLOTI NAGRI LETTER SO
+A822;AL # SYLOTI NAGRI LETTER HO
+A823;CM # SYLOTI NAGRI VOWEL SIGN A
+A824;CM # SYLOTI NAGRI VOWEL SIGN I
+A825;CM # SYLOTI NAGRI VOWEL SIGN U
+A826;CM # SYLOTI NAGRI VOWEL SIGN E
+A827;CM # SYLOTI NAGRI VOWEL SIGN OO
+A828;AL # SYLOTI NAGRI POETRY MARK-1
+A829;AL # SYLOTI NAGRI POETRY MARK-2
+A82A;AL # SYLOTI NAGRI POETRY MARK-3
+A82B;AL # SYLOTI NAGRI POETRY MARK-4
+AC00;H2 # HANGUL SYLLABLE GA
+AC01..AC1B;H3 # HANGUL SYLLABLE GAG..HANGUL SYLLABLE GAH
+AC1C;H2 # HANGUL SYLLABLE GAE
+AC1D..AC37;H3 # HANGUL SYLLABLE GAEG..HANGUL SYLLABLE GAEH
+AC38;H2 # HANGUL SYLLABLE GYA
+AC39..AC53;H3 # HANGUL SYLLABLE GYAG..HANGUL SYLLABLE GYAH
+AC54;H2 # HANGUL SYLLABLE GYAE
+AC55..AC6F;H3 # HANGUL SYLLABLE GYAEG..HANGUL SYLLABLE GYAEH
+AC70;H2 # HANGUL SYLLABLE GEO
+AC71..AC8B;H3 # HANGUL SYLLABLE GEOG..HANGUL SYLLABLE GEOH
+AC8C;H2 # HANGUL SYLLABLE GE
+AC8D..ACA7;H3 # HANGUL SYLLABLE GEG..HANGUL SYLLABLE GEH
+ACA8;H2 # HANGUL SYLLABLE GYEO
+ACA9..ACC3;H3 # HANGUL SYLLABLE GYEOG..HANGUL SYLLABLE GYEOH
+ACC4;H2 # HANGUL SYLLABLE GYE
+ACC5..ACDF;H3 # HANGUL SYLLABLE GYEG..HANGUL SYLLABLE GYEH
+ACE0;H2 # HANGUL SYLLABLE GO
+ACE1..ACFB;H3 # HANGUL SYLLABLE GOG..HANGUL SYLLABLE GOH
+ACFC;H2 # HANGUL SYLLABLE GWA
+ACFD..AD17;H3 # HANGUL SYLLABLE GWAG..HANGUL SYLLABLE GWAH
+AD18;H2 # HANGUL SYLLABLE GWAE
+AD19..AD33;H3 # HANGUL SYLLABLE GWAEG..HANGUL SYLLABLE GWAEH
+AD34;H2 # HANGUL SYLLABLE GOE
+AD35..AD4F;H3 # HANGUL SYLLABLE GOEG..HANGUL SYLLABLE GOEH
+AD50;H2 # HANGUL SYLLABLE GYO
+AD51..AD6B;H3 # HANGUL SYLLABLE GYOG..HANGUL SYLLABLE GYOH
+AD6C;H2 # HANGUL SYLLABLE GU
+AD6D..AD87;H3 # HANGUL SYLLABLE GUG..HANGUL SYLLABLE GUH
+AD88;H2 # HANGUL SYLLABLE GWEO
+AD89..ADA3;H3 # HANGUL SYLLABLE GWEOG..HANGUL SYLLABLE GWEOH
+ADA4;H2 # HANGUL SYLLABLE GWE
+ADA5..ADBF;H3 # HANGUL SYLLABLE GWEG..HANGUL SYLLABLE GWEH
+ADC0;H2 # HANGUL SYLLABLE GWI
+ADC1..ADDB;H3 # HANGUL SYLLABLE GWIG..HANGUL SYLLABLE GWIH
+ADDC;H2 # HANGUL SYLLABLE GYU
+ADDD..ADF7;H3 # HANGUL SYLLABLE GYUG..HANGUL SYLLABLE GYUH
+ADF8;H2 # HANGUL SYLLABLE GEU
+ADF9..AE13;H3 # HANGUL SYLLABLE GEUG..HANGUL SYLLABLE GEUH
+AE14;H2 # HANGUL SYLLABLE GYI
+AE15..AE2F;H3 # HANGUL SYLLABLE GYIG..HANGUL SYLLABLE GYIH
+AE30;H2 # HANGUL SYLLABLE GI
+AE31..AE4B;H3 # HANGUL SYLLABLE GIG..HANGUL SYLLABLE GIH
+AE4C;H2 # HANGUL SYLLABLE GGA
+AE4D..AE67;H3 # HANGUL SYLLABLE GGAG..HANGUL SYLLABLE GGAH
+AE68;H2 # HANGUL SYLLABLE GGAE
+AE69..AE83;H3 # HANGUL SYLLABLE GGAEG..HANGUL SYLLABLE GGAEH
+AE84;H2 # HANGUL SYLLABLE GGYA
+AE85..AE9F;H3 # HANGUL SYLLABLE GGYAG..HANGUL SYLLABLE GGYAH
+AEA0;H2 # HANGUL SYLLABLE GGYAE
+AEA1..AEBB;H3 # HANGUL SYLLABLE GGYAEG..HANGUL SYLLABLE GGYAEH
+AEBC;H2 # HANGUL SYLLABLE GGEO
+AEBD..AED7;H3 # HANGUL SYLLABLE GGEOG..HANGUL SYLLABLE GGEOH
+AED8;H2 # HANGUL SYLLABLE GGE
+AED9..AEF3;H3 # HANGUL SYLLABLE GGEG..HANGUL SYLLABLE GGEH
+AEF4;H2 # HANGUL SYLLABLE GGYEO
+AEF5..AF0F;H3 # HANGUL SYLLABLE GGYEOG..HANGUL SYLLABLE GGYEOH
+AF10;H2 # HANGUL SYLLABLE GGYE
+AF11..AF2B;H3 # HANGUL SYLLABLE GGYEG..HANGUL SYLLABLE GGYEH
+AF2C;H2 # HANGUL SYLLABLE GGO
+AF2D..AF47;H3 # HANGUL SYLLABLE GGOG..HANGUL SYLLABLE GGOH
+AF48;H2 # HANGUL SYLLABLE GGWA
+AF49..AF63;H3 # HANGUL SYLLABLE GGWAG..HANGUL SYLLABLE GGWAH
+AF64;H2 # HANGUL SYLLABLE GGWAE
+AF65..AF7F;H3 # HANGUL SYLLABLE GGWAEG..HANGUL SYLLABLE GGWAEH
+AF80;H2 # HANGUL SYLLABLE GGOE
+AF81..AF9B;H3 # HANGUL SYLLABLE GGOEG..HANGUL SYLLABLE GGOEH
+AF9C;H2 # HANGUL SYLLABLE GGYO
+AF9D..AFB7;H3 # HANGUL SYLLABLE GGYOG..HANGUL SYLLABLE GGYOH
+AFB8;H2 # HANGUL SYLLABLE GGU
+AFB9..AFD3;H3 # HANGUL SYLLABLE GGUG..HANGUL SYLLABLE GGUH
+AFD4;H2 # HANGUL SYLLABLE GGWEO
+AFD5..AFEF;H3 # HANGUL SYLLABLE GGWEOG..HANGUL SYLLABLE GGWEOH
+AFF0;H2 # HANGUL SYLLABLE GGWE
+AFF1..B00B;H3 # HANGUL SYLLABLE GGWEG..HANGUL SYLLABLE GGWEH
+B00C;H2 # HANGUL SYLLABLE GGWI
+B00D..B027;H3 # HANGUL SYLLABLE GGWIG..HANGUL SYLLABLE GGWIH
+B028;H2 # HANGUL SYLLABLE GGYU
+B029..B043;H3 # HANGUL SYLLABLE GGYUG..HANGUL SYLLABLE GGYUH
+B044;H2 # HANGUL SYLLABLE GGEU
+B045..B05F;H3 # HANGUL SYLLABLE GGEUG..HANGUL SYLLABLE GGEUH
+B060;H2 # HANGUL SYLLABLE GGYI
+B061..B07B;H3 # HANGUL SYLLABLE GGYIG..HANGUL SYLLABLE GGYIH
+B07C;H2 # HANGUL SYLLABLE GGI
+B07D..B097;H3 # HANGUL SYLLABLE GGIG..HANGUL SYLLABLE GGIH
+B098;H2 # HANGUL SYLLABLE NA
+B099..B0B3;H3 # HANGUL SYLLABLE NAG..HANGUL SYLLABLE NAH
+B0B4;H2 # HANGUL SYLLABLE NAE
+B0B5..B0CF;H3 # HANGUL SYLLABLE NAEG..HANGUL SYLLABLE NAEH
+B0D0;H2 # HANGUL SYLLABLE NYA
+B0D1..B0EB;H3 # HANGUL SYLLABLE NYAG..HANGUL SYLLABLE NYAH
+B0EC;H2 # HANGUL SYLLABLE NYAE
+B0ED..B107;H3 # HANGUL SYLLABLE NYAEG..HANGUL SYLLABLE NYAEH
+B108;H2 # HANGUL SYLLABLE NEO
+B109..B123;H3 # HANGUL SYLLABLE NEOG..HANGUL SYLLABLE NEOH
+B124;H2 # HANGUL SYLLABLE NE
+B125..B13F;H3 # HANGUL SYLLABLE NEG..HANGUL SYLLABLE NEH
+B140;H2 # HANGUL SYLLABLE NYEO
+B141..B15B;H3 # HANGUL SYLLABLE NYEOG..HANGUL SYLLABLE NYEOH
+B15C;H2 # HANGUL SYLLABLE NYE
+B15D..B177;H3 # HANGUL SYLLABLE NYEG..HANGUL SYLLABLE NYEH
+B178;H2 # HANGUL SYLLABLE NO
+B179..B193;H3 # HANGUL SYLLABLE NOG..HANGUL SYLLABLE NOH
+B194;H2 # HANGUL SYLLABLE NWA
+B195..B1AF;H3 # HANGUL SYLLABLE NWAG..HANGUL SYLLABLE NWAH
+B1B0;H2 # HANGUL SYLLABLE NWAE
+B1B1..B1CB;H3 # HANGUL SYLLABLE NWAEG..HANGUL SYLLABLE NWAEH
+B1CC;H2 # HANGUL SYLLABLE NOE
+B1CD..B1E7;H3 # HANGUL SYLLABLE NOEG..HANGUL SYLLABLE NOEH
+B1E8;H2 # HANGUL SYLLABLE NYO
+B1E9..B203;H3 # HANGUL SYLLABLE NYOG..HANGUL SYLLABLE NYOH
+B204;H2 # HANGUL SYLLABLE NU
+B205..B21F;H3 # HANGUL SYLLABLE NUG..HANGUL SYLLABLE NUH
+B220;H2 # HANGUL SYLLABLE NWEO
+B221..B23B;H3 # HANGUL SYLLABLE NWEOG..HANGUL SYLLABLE NWEOH
+B23C;H2 # HANGUL SYLLABLE NWE
+B23D..B257;H3 # HANGUL SYLLABLE NWEG..HANGUL SYLLABLE NWEH
+B258;H2 # HANGUL SYLLABLE NWI
+B259..B273;H3 # HANGUL SYLLABLE NWIG..HANGUL SYLLABLE NWIH
+B274;H2 # HANGUL SYLLABLE NYU
+B275..B28F;H3 # HANGUL SYLLABLE NYUG..HANGUL SYLLABLE NYUH
+B290;H2 # HANGUL SYLLABLE NEU
+B291..B2AB;H3 # HANGUL SYLLABLE NEUG..HANGUL SYLLABLE NEUH
+B2AC;H2 # HANGUL SYLLABLE NYI
+B2AD..B2C7;H3 # HANGUL SYLLABLE NYIG..HANGUL SYLLABLE NYIH
+B2C8;H2 # HANGUL SYLLABLE NI
+B2C9..B2E3;H3 # HANGUL SYLLABLE NIG..HANGUL SYLLABLE NIH
+B2E4;H2 # HANGUL SYLLABLE DA
+B2E5..B2FF;H3 # HANGUL SYLLABLE DAG..HANGUL SYLLABLE DAH
+B300;H2 # HANGUL SYLLABLE DAE
+B301..B31B;H3 # HANGUL SYLLABLE DAEG..HANGUL SYLLABLE DAEH
+B31C;H2 # HANGUL SYLLABLE DYA
+B31D..B337;H3 # HANGUL SYLLABLE DYAG..HANGUL SYLLABLE DYAH
+B338;H2 # HANGUL SYLLABLE DYAE
+B339..B353;H3 # HANGUL SYLLABLE DYAEG..HANGUL SYLLABLE DYAEH
+B354;H2 # HANGUL SYLLABLE DEO
+B355..B36F;H3 # HANGUL SYLLABLE DEOG..HANGUL SYLLABLE DEOH
+B370;H2 # HANGUL SYLLABLE DE
+B371..B38B;H3 # HANGUL SYLLABLE DEG..HANGUL SYLLABLE DEH
+B38C;H2 # HANGUL SYLLABLE DYEO
+B38D..B3A7;H3 # HANGUL SYLLABLE DYEOG..HANGUL SYLLABLE DYEOH
+B3A8;H2 # HANGUL SYLLABLE DYE
+B3A9..B3C3;H3 # HANGUL SYLLABLE DYEG..HANGUL SYLLABLE DYEH
+B3C4;H2 # HANGUL SYLLABLE DO
+B3C5..B3DF;H3 # HANGUL SYLLABLE DOG..HANGUL SYLLABLE DOH
+B3E0;H2 # HANGUL SYLLABLE DWA
+B3E1..B3FB;H3 # HANGUL SYLLABLE DWAG..HANGUL SYLLABLE DWAH
+B3FC;H2 # HANGUL SYLLABLE DWAE
+B3FD..B417;H3 # HANGUL SYLLABLE DWAEG..HANGUL SYLLABLE DWAEH
+B418;H2 # HANGUL SYLLABLE DOE
+B419..B433;H3 # HANGUL SYLLABLE DOEG..HANGUL SYLLABLE DOEH
+B434;H2 # HANGUL SYLLABLE DYO
+B435..B44F;H3 # HANGUL SYLLABLE DYOG..HANGUL SYLLABLE DYOH
+B450;H2 # HANGUL SYLLABLE DU
+B451..B46B;H3 # HANGUL SYLLABLE DUG..HANGUL SYLLABLE DUH
+B46C;H2 # HANGUL SYLLABLE DWEO
+B46D..B487;H3 # HANGUL SYLLABLE DWEOG..HANGUL SYLLABLE DWEOH
+B488;H2 # HANGUL SYLLABLE DWE
+B489..B4A3;H3 # HANGUL SYLLABLE DWEG..HANGUL SYLLABLE DWEH
+B4A4;H2 # HANGUL SYLLABLE DWI
+B4A5..B4BF;H3 # HANGUL SYLLABLE DWIG..HANGUL SYLLABLE DWIH
+B4C0;H2 # HANGUL SYLLABLE DYU
+B4C1..B4DB;H3 # HANGUL SYLLABLE DYUG..HANGUL SYLLABLE DYUH
+B4DC;H2 # HANGUL SYLLABLE DEU
+B4DD..B4F7;H3 # HANGUL SYLLABLE DEUG..HANGUL SYLLABLE DEUH
+B4F8;H2 # HANGUL SYLLABLE DYI
+B4F9..B513;H3 # HANGUL SYLLABLE DYIG..HANGUL SYLLABLE DYIH
+B514;H2 # HANGUL SYLLABLE DI
+B515..B52F;H3 # HANGUL SYLLABLE DIG..HANGUL SYLLABLE DIH
+B530;H2 # HANGUL SYLLABLE DDA
+B531..B54B;H3 # HANGUL SYLLABLE DDAG..HANGUL SYLLABLE DDAH
+B54C;H2 # HANGUL SYLLABLE DDAE
+B54D..B567;H3 # HANGUL SYLLABLE DDAEG..HANGUL SYLLABLE DDAEH
+B568;H2 # HANGUL SYLLABLE DDYA
+B569..B583;H3 # HANGUL SYLLABLE DDYAG..HANGUL SYLLABLE DDYAH
+B584;H2 # HANGUL SYLLABLE DDYAE
+B585..B59F;H3 # HANGUL SYLLABLE DDYAEG..HANGUL SYLLABLE DDYAEH
+B5A0;H2 # HANGUL SYLLABLE DDEO
+B5A1..B5BB;H3 # HANGUL SYLLABLE DDEOG..HANGUL SYLLABLE DDEOH
+B5BC;H2 # HANGUL SYLLABLE DDE
+B5BD..B5D7;H3 # HANGUL SYLLABLE DDEG..HANGUL SYLLABLE DDEH
+B5D8;H2 # HANGUL SYLLABLE DDYEO
+B5D9..B5F3;H3 # HANGUL SYLLABLE DDYEOG..HANGUL SYLLABLE DDYEOH
+B5F4;H2 # HANGUL SYLLABLE DDYE
+B5F5..B60F;H3 # HANGUL SYLLABLE DDYEG..HANGUL SYLLABLE DDYEH
+B610;H2 # HANGUL SYLLABLE DDO
+B611..B62B;H3 # HANGUL SYLLABLE DDOG..HANGUL SYLLABLE DDOH
+B62C;H2 # HANGUL SYLLABLE DDWA
+B62D..B647;H3 # HANGUL SYLLABLE DDWAG..HANGUL SYLLABLE DDWAH
+B648;H2 # HANGUL SYLLABLE DDWAE
+B649..B663;H3 # HANGUL SYLLABLE DDWAEG..HANGUL SYLLABLE DDWAEH
+B664;H2 # HANGUL SYLLABLE DDOE
+B665..B67F;H3 # HANGUL SYLLABLE DDOEG..HANGUL SYLLABLE DDOEH
+B680;H2 # HANGUL SYLLABLE DDYO
+B681..B69B;H3 # HANGUL SYLLABLE DDYOG..HANGUL SYLLABLE DDYOH
+B69C;H2 # HANGUL SYLLABLE DDU
+B69D..B6B7;H3 # HANGUL SYLLABLE DDUG..HANGUL SYLLABLE DDUH
+B6B8;H2 # HANGUL SYLLABLE DDWEO
+B6B9..B6D3;H3 # HANGUL SYLLABLE DDWEOG..HANGUL SYLLABLE DDWEOH
+B6D4;H2 # HANGUL SYLLABLE DDWE
+B6D5..B6EF;H3 # HANGUL SYLLABLE DDWEG..HANGUL SYLLABLE DDWEH
+B6F0;H2 # HANGUL SYLLABLE DDWI
+B6F1..B70B;H3 # HANGUL SYLLABLE DDWIG..HANGUL SYLLABLE DDWIH
+B70C;H2 # HANGUL SYLLABLE DDYU
+B70D..B727;H3 # HANGUL SYLLABLE DDYUG..HANGUL SYLLABLE DDYUH
+B728;H2 # HANGUL SYLLABLE DDEU
+B729..B743;H3 # HANGUL SYLLABLE DDEUG..HANGUL SYLLABLE DDEUH
+B744;H2 # HANGUL SYLLABLE DDYI
+B745..B75F;H3 # HANGUL SYLLABLE DDYIG..HANGUL SYLLABLE DDYIH
+B760;H2 # HANGUL SYLLABLE DDI
+B761..B77B;H3 # HANGUL SYLLABLE DDIG..HANGUL SYLLABLE DDIH
+B77C;H2 # HANGUL SYLLABLE RA
+B77D..B797;H3 # HANGUL SYLLABLE RAG..HANGUL SYLLABLE RAH
+B798;H2 # HANGUL SYLLABLE RAE
+B799..B7B3;H3 # HANGUL SYLLABLE RAEG..HANGUL SYLLABLE RAEH
+B7B4;H2 # HANGUL SYLLABLE RYA
+B7B5..B7CF;H3 # HANGUL SYLLABLE RYAG..HANGUL SYLLABLE RYAH
+B7D0;H2 # HANGUL SYLLABLE RYAE
+B7D1..B7EB;H3 # HANGUL SYLLABLE RYAEG..HANGUL SYLLABLE RYAEH
+B7EC;H2 # HANGUL SYLLABLE REO
+B7ED..B807;H3 # HANGUL SYLLABLE REOG..HANGUL SYLLABLE REOH
+B808;H2 # HANGUL SYLLABLE RE
+B809..B823;H3 # HANGUL SYLLABLE REG..HANGUL SYLLABLE REH
+B824;H2 # HANGUL SYLLABLE RYEO
+B825..B83F;H3 # HANGUL SYLLABLE RYEOG..HANGUL SYLLABLE RYEOH
+B840;H2 # HANGUL SYLLABLE RYE
+B841..B85B;H3 # HANGUL SYLLABLE RYEG..HANGUL SYLLABLE RYEH
+B85C;H2 # HANGUL SYLLABLE RO
+B85D..B877;H3 # HANGUL SYLLABLE ROG..HANGUL SYLLABLE ROH
+B878;H2 # HANGUL SYLLABLE RWA
+B879..B893;H3 # HANGUL SYLLABLE RWAG..HANGUL SYLLABLE RWAH
+B894;H2 # HANGUL SYLLABLE RWAE
+B895..B8AF;H3 # HANGUL SYLLABLE RWAEG..HANGUL SYLLABLE RWAEH
+B8B0;H2 # HANGUL SYLLABLE ROE
+B8B1..B8CB;H3 # HANGUL SYLLABLE ROEG..HANGUL SYLLABLE ROEH
+B8CC;H2 # HANGUL SYLLABLE RYO
+B8CD..B8E7;H3 # HANGUL SYLLABLE RYOG..HANGUL SYLLABLE RYOH
+B8E8;H2 # HANGUL SYLLABLE RU
+B8E9..B903;H3 # HANGUL SYLLABLE RUG..HANGUL SYLLABLE RUH
+B904;H2 # HANGUL SYLLABLE RWEO
+B905..B91F;H3 # HANGUL SYLLABLE RWEOG..HANGUL SYLLABLE RWEOH
+B920;H2 # HANGUL SYLLABLE RWE
+B921..B93B;H3 # HANGUL SYLLABLE RWEG..HANGUL SYLLABLE RWEH
+B93C;H2 # HANGUL SYLLABLE RWI
+B93D..B957;H3 # HANGUL SYLLABLE RWIG..HANGUL SYLLABLE RWIH
+B958;H2 # HANGUL SYLLABLE RYU
+B959..B973;H3 # HANGUL SYLLABLE RYUG..HANGUL SYLLABLE RYUH
+B974;H2 # HANGUL SYLLABLE REU
+B975..B98F;H3 # HANGUL SYLLABLE REUG..HANGUL SYLLABLE REUH
+B990;H2 # HANGUL SYLLABLE RYI
+B991..B9AB;H3 # HANGUL SYLLABLE RYIG..HANGUL SYLLABLE RYIH
+B9AC;H2 # HANGUL SYLLABLE RI
+B9AD..B9C7;H3 # HANGUL SYLLABLE RIG..HANGUL SYLLABLE RIH
+B9C8;H2 # HANGUL SYLLABLE MA
+B9C9..B9E3;H3 # HANGUL SYLLABLE MAG..HANGUL SYLLABLE MAH
+B9E4;H2 # HANGUL SYLLABLE MAE
+B9E5..B9FF;H3 # HANGUL SYLLABLE MAEG..HANGUL SYLLABLE MAEH
+BA00;H2 # HANGUL SYLLABLE MYA
+BA01..BA1B;H3 # HANGUL SYLLABLE MYAG..HANGUL SYLLABLE MYAH
+BA1C;H2 # HANGUL SYLLABLE MYAE
+BA1D..BA37;H3 # HANGUL SYLLABLE MYAEG..HANGUL SYLLABLE MYAEH
+BA38;H2 # HANGUL SYLLABLE MEO
+BA39..BA53;H3 # HANGUL SYLLABLE MEOG..HANGUL SYLLABLE MEOH
+BA54;H2 # HANGUL SYLLABLE ME
+BA55..BA6F;H3 # HANGUL SYLLABLE MEG..HANGUL SYLLABLE MEH
+BA70;H2 # HANGUL SYLLABLE MYEO
+BA71..BA8B;H3 # HANGUL SYLLABLE MYEOG..HANGUL SYLLABLE MYEOH
+BA8C;H2 # HANGUL SYLLABLE MYE
+BA8D..BAA7;H3 # HANGUL SYLLABLE MYEG..HANGUL SYLLABLE MYEH
+BAA8;H2 # HANGUL SYLLABLE MO
+BAA9..BAC3;H3 # HANGUL SYLLABLE MOG..HANGUL SYLLABLE MOH
+BAC4;H2 # HANGUL SYLLABLE MWA
+BAC5..BADF;H3 # HANGUL SYLLABLE MWAG..HANGUL SYLLABLE MWAH
+BAE0;H2 # HANGUL SYLLABLE MWAE
+BAE1..BAFB;H3 # HANGUL SYLLABLE MWAEG..HANGUL SYLLABLE MWAEH
+BAFC;H2 # HANGUL SYLLABLE MOE
+BAFD..BB17;H3 # HANGUL SYLLABLE MOEG..HANGUL SYLLABLE MOEH
+BB18;H2 # HANGUL SYLLABLE MYO
+BB19..BB33;H3 # HANGUL SYLLABLE MYOG..HANGUL SYLLABLE MYOH
+BB34;H2 # HANGUL SYLLABLE MU
+BB35..BB4F;H3 # HANGUL SYLLABLE MUG..HANGUL SYLLABLE MUH
+BB50;H2 # HANGUL SYLLABLE MWEO
+BB51..BB6B;H3 # HANGUL SYLLABLE MWEOG..HANGUL SYLLABLE MWEOH
+BB6C;H2 # HANGUL SYLLABLE MWE
+BB6D..BB87;H3 # HANGUL SYLLABLE MWEG..HANGUL SYLLABLE MWEH
+BB88;H2 # HANGUL SYLLABLE MWI
+BB89..BBA3;H3 # HANGUL SYLLABLE MWIG..HANGUL SYLLABLE MWIH
+BBA4;H2 # HANGUL SYLLABLE MYU
+BBA5..BBBF;H3 # HANGUL SYLLABLE MYUG..HANGUL SYLLABLE MYUH
+BBC0;H2 # HANGUL SYLLABLE MEU
+BBC1..BBDB;H3 # HANGUL SYLLABLE MEUG..HANGUL SYLLABLE MEUH
+BBDC;H2 # HANGUL SYLLABLE MYI
+BBDD..BBF7;H3 # HANGUL SYLLABLE MYIG..HANGUL SYLLABLE MYIH
+BBF8;H2 # HANGUL SYLLABLE MI
+BBF9..BC13;H3 # HANGUL SYLLABLE MIG..HANGUL SYLLABLE MIH
+BC14;H2 # HANGUL SYLLABLE BA
+BC15..BC2F;H3 # HANGUL SYLLABLE BAG..HANGUL SYLLABLE BAH
+BC30;H2 # HANGUL SYLLABLE BAE
+BC31..BC4B;H3 # HANGUL SYLLABLE BAEG..HANGUL SYLLABLE BAEH
+BC4C;H2 # HANGUL SYLLABLE BYA
+BC4D..BC67;H3 # HANGUL SYLLABLE BYAG..HANGUL SYLLABLE BYAH
+BC68;H2 # HANGUL SYLLABLE BYAE
+BC69..BC83;H3 # HANGUL SYLLABLE BYAEG..HANGUL SYLLABLE BYAEH
+BC84;H2 # HANGUL SYLLABLE BEO
+BC85..BC9F;H3 # HANGUL SYLLABLE BEOG..HANGUL SYLLABLE BEOH
+BCA0;H2 # HANGUL SYLLABLE BE
+BCA1..BCBB;H3 # HANGUL SYLLABLE BEG..HANGUL SYLLABLE BEH
+BCBC;H2 # HANGUL SYLLABLE BYEO
+BCBD..BCD7;H3 # HANGUL SYLLABLE BYEOG..HANGUL SYLLABLE BYEOH
+BCD8;H2 # HANGUL SYLLABLE BYE
+BCD9..BCF3;H3 # HANGUL SYLLABLE BYEG..HANGUL SYLLABLE BYEH
+BCF4;H2 # HANGUL SYLLABLE BO
+BCF5..BD0F;H3 # HANGUL SYLLABLE BOG..HANGUL SYLLABLE BOH
+BD10;H2 # HANGUL SYLLABLE BWA
+BD11..BD2B;H3 # HANGUL SYLLABLE BWAG..HANGUL SYLLABLE BWAH
+BD2C;H2 # HANGUL SYLLABLE BWAE
+BD2D..BD47;H3 # HANGUL SYLLABLE BWAEG..HANGUL SYLLABLE BWAEH
+BD48;H2 # HANGUL SYLLABLE BOE
+BD49..BD63;H3 # HANGUL SYLLABLE BOEG..HANGUL SYLLABLE BOEH
+BD64;H2 # HANGUL SYLLABLE BYO
+BD65..BD7F;H3 # HANGUL SYLLABLE BYOG..HANGUL SYLLABLE BYOH
+BD80;H2 # HANGUL SYLLABLE BU
+BD81..BD9B;H3 # HANGUL SYLLABLE BUG..HANGUL SYLLABLE BUH
+BD9C;H2 # HANGUL SYLLABLE BWEO
+BD9D..BDB7;H3 # HANGUL SYLLABLE BWEOG..HANGUL SYLLABLE BWEOH
+BDB8;H2 # HANGUL SYLLABLE BWE
+BDB9..BDD3;H3 # HANGUL SYLLABLE BWEG..HANGUL SYLLABLE BWEH
+BDD4;H2 # HANGUL SYLLABLE BWI
+BDD5..BDEF;H3 # HANGUL SYLLABLE BWIG..HANGUL SYLLABLE BWIH
+BDF0;H2 # HANGUL SYLLABLE BYU
+BDF1..BE0B;H3 # HANGUL SYLLABLE BYUG..HANGUL SYLLABLE BYUH
+BE0C;H2 # HANGUL SYLLABLE BEU
+BE0D..BE27;H3 # HANGUL SYLLABLE BEUG..HANGUL SYLLABLE BEUH
+BE28;H2 # HANGUL SYLLABLE BYI
+BE29..BE43;H3 # HANGUL SYLLABLE BYIG..HANGUL SYLLABLE BYIH
+BE44;H2 # HANGUL SYLLABLE BI
+BE45..BE5F;H3 # HANGUL SYLLABLE BIG..HANGUL SYLLABLE BIH
+BE60;H2 # HANGUL SYLLABLE BBA
+BE61..BE7B;H3 # HANGUL SYLLABLE BBAG..HANGUL SYLLABLE BBAH
+BE7C;H2 # HANGUL SYLLABLE BBAE
+BE7D..BE97;H3 # HANGUL SYLLABLE BBAEG..HANGUL SYLLABLE BBAEH
+BE98;H2 # HANGUL SYLLABLE BBYA
+BE99..BEB3;H3 # HANGUL SYLLABLE BBYAG..HANGUL SYLLABLE BBYAH
+BEB4;H2 # HANGUL SYLLABLE BBYAE
+BEB5..BECF;H3 # HANGUL SYLLABLE BBYAEG..HANGUL SYLLABLE BBYAEH
+BED0;H2 # HANGUL SYLLABLE BBEO
+BED1..BEEB;H3 # HANGUL SYLLABLE BBEOG..HANGUL SYLLABLE BBEOH
+BEEC;H2 # HANGUL SYLLABLE BBE
+BEED..BF07;H3 # HANGUL SYLLABLE BBEG..HANGUL SYLLABLE BBEH
+BF08;H2 # HANGUL SYLLABLE BBYEO
+BF09..BF23;H3 # HANGUL SYLLABLE BBYEOG..HANGUL SYLLABLE BBYEOH
+BF24;H2 # HANGUL SYLLABLE BBYE
+BF25..BF3F;H3 # HANGUL SYLLABLE BBYEG..HANGUL SYLLABLE BBYEH
+BF40;H2 # HANGUL SYLLABLE BBO
+BF41..BF5B;H3 # HANGUL SYLLABLE BBOG..HANGUL SYLLABLE BBOH
+BF5C;H2 # HANGUL SYLLABLE BBWA
+BF5D..BF77;H3 # HANGUL SYLLABLE BBWAG..HANGUL SYLLABLE BBWAH
+BF78;H2 # HANGUL SYLLABLE BBWAE
+BF79..BF93;H3 # HANGUL SYLLABLE BBWAEG..HANGUL SYLLABLE BBWAEH
+BF94;H2 # HANGUL SYLLABLE BBOE
+BF95..BFAF;H3 # HANGUL SYLLABLE BBOEG..HANGUL SYLLABLE BBOEH
+BFB0;H2 # HANGUL SYLLABLE BBYO
+BFB1..BFCB;H3 # HANGUL SYLLABLE BBYOG..HANGUL SYLLABLE BBYOH
+BFCC;H2 # HANGUL SYLLABLE BBU
+BFCD..BFE7;H3 # HANGUL SYLLABLE BBUG..HANGUL SYLLABLE BBUH
+BFE8;H2 # HANGUL SYLLABLE BBWEO
+BFE9..C003;H3 # HANGUL SYLLABLE BBWEOG..HANGUL SYLLABLE BBWEOH
+C004;H2 # HANGUL SYLLABLE BBWE
+C005..C01F;H3 # HANGUL SYLLABLE BBWEG..HANGUL SYLLABLE BBWEH
+C020;H2 # HANGUL SYLLABLE BBWI
+C021..C03B;H3 # HANGUL SYLLABLE BBWIG..HANGUL SYLLABLE BBWIH
+C03C;H2 # HANGUL SYLLABLE BBYU
+C03D..C057;H3 # HANGUL SYLLABLE BBYUG..HANGUL SYLLABLE BBYUH
+C058;H2 # HANGUL SYLLABLE BBEU
+C059..C073;H3 # HANGUL SYLLABLE BBEUG..HANGUL SYLLABLE BBEUH
+C074;H2 # HANGUL SYLLABLE BBYI
+C075..C08F;H3 # HANGUL SYLLABLE BBYIG..HANGUL SYLLABLE BBYIH
+C090;H2 # HANGUL SYLLABLE BBI
+C091..C0AB;H3 # HANGUL SYLLABLE BBIG..HANGUL SYLLABLE BBIH
+C0AC;H2 # HANGUL SYLLABLE SA
+C0AD..C0C7;H3 # HANGUL SYLLABLE SAG..HANGUL SYLLABLE SAH
+C0C8;H2 # HANGUL SYLLABLE SAE
+C0C9..C0E3;H3 # HANGUL SYLLABLE SAEG..HANGUL SYLLABLE SAEH
+C0E4;H2 # HANGUL SYLLABLE SYA
+C0E5..C0FF;H3 # HANGUL SYLLABLE SYAG..HANGUL SYLLABLE SYAH
+C100;H2 # HANGUL SYLLABLE SYAE
+C101..C11B;H3 # HANGUL SYLLABLE SYAEG..HANGUL SYLLABLE SYAEH
+C11C;H2 # HANGUL SYLLABLE SEO
+C11D..C137;H3 # HANGUL SYLLABLE SEOG..HANGUL SYLLABLE SEOH
+C138;H2 # HANGUL SYLLABLE SE
+C139..C153;H3 # HANGUL SYLLABLE SEG..HANGUL SYLLABLE SEH
+C154;H2 # HANGUL SYLLABLE SYEO
+C155..C16F;H3 # HANGUL SYLLABLE SYEOG..HANGUL SYLLABLE SYEOH
+C170;H2 # HANGUL SYLLABLE SYE
+C171..C18B;H3 # HANGUL SYLLABLE SYEG..HANGUL SYLLABLE SYEH
+C18C;H2 # HANGUL SYLLABLE SO
+C18D..C1A7;H3 # HANGUL SYLLABLE SOG..HANGUL SYLLABLE SOH
+C1A8;H2 # HANGUL SYLLABLE SWA
+C1A9..C1C3;H3 # HANGUL SYLLABLE SWAG..HANGUL SYLLABLE SWAH
+C1C4;H2 # HANGUL SYLLABLE SWAE
+C1C5..C1DF;H3 # HANGUL SYLLABLE SWAEG..HANGUL SYLLABLE SWAEH
+C1E0;H2 # HANGUL SYLLABLE SOE
+C1E1..C1FB;H3 # HANGUL SYLLABLE SOEG..HANGUL SYLLABLE SOEH
+C1FC;H2 # HANGUL SYLLABLE SYO
+C1FD..C217;H3 # HANGUL SYLLABLE SYOG..HANGUL SYLLABLE SYOH
+C218;H2 # HANGUL SYLLABLE SU
+C219..C233;H3 # HANGUL SYLLABLE SUG..HANGUL SYLLABLE SUH
+C234;H2 # HANGUL SYLLABLE SWEO
+C235..C24F;H3 # HANGUL SYLLABLE SWEOG..HANGUL SYLLABLE SWEOH
+C250;H2 # HANGUL SYLLABLE SWE
+C251..C26B;H3 # HANGUL SYLLABLE SWEG..HANGUL SYLLABLE SWEH
+C26C;H2 # HANGUL SYLLABLE SWI
+C26D..C287;H3 # HANGUL SYLLABLE SWIG..HANGUL SYLLABLE SWIH
+C288;H2 # HANGUL SYLLABLE SYU
+C289..C2A3;H3 # HANGUL SYLLABLE SYUG..HANGUL SYLLABLE SYUH
+C2A4;H2 # HANGUL SYLLABLE SEU
+C2A5..C2BF;H3 # HANGUL SYLLABLE SEUG..HANGUL SYLLABLE SEUH
+C2C0;H2 # HANGUL SYLLABLE SYI
+C2C1..C2DB;H3 # HANGUL SYLLABLE SYIG..HANGUL SYLLABLE SYIH
+C2DC;H2 # HANGUL SYLLABLE SI
+C2DD..C2F7;H3 # HANGUL SYLLABLE SIG..HANGUL SYLLABLE SIH
+C2F8;H2 # HANGUL SYLLABLE SSA
+C2F9..C313;H3 # HANGUL SYLLABLE SSAG..HANGUL SYLLABLE SSAH
+C314;H2 # HANGUL SYLLABLE SSAE
+C315..C32F;H3 # HANGUL SYLLABLE SSAEG..HANGUL SYLLABLE SSAEH
+C330;H2 # HANGUL SYLLABLE SSYA
+C331..C34B;H3 # HANGUL SYLLABLE SSYAG..HANGUL SYLLABLE SSYAH
+C34C;H2 # HANGUL SYLLABLE SSYAE
+C34D..C367;H3 # HANGUL SYLLABLE SSYAEG..HANGUL SYLLABLE SSYAEH
+C368;H2 # HANGUL SYLLABLE SSEO
+C369..C383;H3 # HANGUL SYLLABLE SSEOG..HANGUL SYLLABLE SSEOH
+C384;H2 # HANGUL SYLLABLE SSE
+C385..C39F;H3 # HANGUL SYLLABLE SSEG..HANGUL SYLLABLE SSEH
+C3A0;H2 # HANGUL SYLLABLE SSYEO
+C3A1..C3BB;H3 # HANGUL SYLLABLE SSYEOG..HANGUL SYLLABLE SSYEOH
+C3BC;H2 # HANGUL SYLLABLE SSYE
+C3BD..C3D7;H3 # HANGUL SYLLABLE SSYEG..HANGUL SYLLABLE SSYEH
+C3D8;H2 # HANGUL SYLLABLE SSO
+C3D9..C3F3;H3 # HANGUL SYLLABLE SSOG..HANGUL SYLLABLE SSOH
+C3F4;H2 # HANGUL SYLLABLE SSWA
+C3F5..C40F;H3 # HANGUL SYLLABLE SSWAG..HANGUL SYLLABLE SSWAH
+C410;H2 # HANGUL SYLLABLE SSWAE
+C411..C42B;H3 # HANGUL SYLLABLE SSWAEG..HANGUL SYLLABLE SSWAEH
+C42C;H2 # HANGUL SYLLABLE SSOE
+C42D..C447;H3 # HANGUL SYLLABLE SSOEG..HANGUL SYLLABLE SSOEH
+C448;H2 # HANGUL SYLLABLE SSYO
+C449..C463;H3 # HANGUL SYLLABLE SSYOG..HANGUL SYLLABLE SSYOH
+C464;H2 # HANGUL SYLLABLE SSU
+C465..C47F;H3 # HANGUL SYLLABLE SSUG..HANGUL SYLLABLE SSUH
+C480;H2 # HANGUL SYLLABLE SSWEO
+C481..C49B;H3 # HANGUL SYLLABLE SSWEOG..HANGUL SYLLABLE SSWEOH
+C49C;H2 # HANGUL SYLLABLE SSWE
+C49D..C4B7;H3 # HANGUL SYLLABLE SSWEG..HANGUL SYLLABLE SSWEH
+C4B8;H2 # HANGUL SYLLABLE SSWI
+C4B9..C4D3;H3 # HANGUL SYLLABLE SSWIG..HANGUL SYLLABLE SSWIH
+C4D4;H2 # HANGUL SYLLABLE SSYU
+C4D5..C4EF;H3 # HANGUL SYLLABLE SSYUG..HANGUL SYLLABLE SSYUH
+C4F0;H2 # HANGUL SYLLABLE SSEU
+C4F1..C50B;H3 # HANGUL SYLLABLE SSEUG..HANGUL SYLLABLE SSEUH
+C50C;H2 # HANGUL SYLLABLE SSYI
+C50D..C527;H3 # HANGUL SYLLABLE SSYIG..HANGUL SYLLABLE SSYIH
+C528;H2 # HANGUL SYLLABLE SSI
+C529..C543;H3 # HANGUL SYLLABLE SSIG..HANGUL SYLLABLE SSIH
+C544;H2 # HANGUL SYLLABLE A
+C545..C55F;H3 # HANGUL SYLLABLE AG..HANGUL SYLLABLE AH
+C560;H2 # HANGUL SYLLABLE AE
+C561..C57B;H3 # HANGUL SYLLABLE AEG..HANGUL SYLLABLE AEH
+C57C;H2 # HANGUL SYLLABLE YA
+C57D..C597;H3 # HANGUL SYLLABLE YAG..HANGUL SYLLABLE YAH
+C598;H2 # HANGUL SYLLABLE YAE
+C599..C5B3;H3 # HANGUL SYLLABLE YAEG..HANGUL SYLLABLE YAEH
+C5B4;H2 # HANGUL SYLLABLE EO
+C5B5..C5CF;H3 # HANGUL SYLLABLE EOG..HANGUL SYLLABLE EOH
+C5D0;H2 # HANGUL SYLLABLE E
+C5D1..C5EB;H3 # HANGUL SYLLABLE EG..HANGUL SYLLABLE EH
+C5EC;H2 # HANGUL SYLLABLE YEO
+C5ED..C607;H3 # HANGUL SYLLABLE YEOG..HANGUL SYLLABLE YEOH
+C608;H2 # HANGUL SYLLABLE YE
+C609..C623;H3 # HANGUL SYLLABLE YEG..HANGUL SYLLABLE YEH
+C624;H2 # HANGUL SYLLABLE O
+C625..C63F;H3 # HANGUL SYLLABLE OG..HANGUL SYLLABLE OH
+C640;H2 # HANGUL SYLLABLE WA
+C641..C65B;H3 # HANGUL SYLLABLE WAG..HANGUL SYLLABLE WAH
+C65C;H2 # HANGUL SYLLABLE WAE
+C65D..C677;H3 # HANGUL SYLLABLE WAEG..HANGUL SYLLABLE WAEH
+C678;H2 # HANGUL SYLLABLE OE
+C679..C693;H3 # HANGUL SYLLABLE OEG..HANGUL SYLLABLE OEH
+C694;H2 # HANGUL SYLLABLE YO
+C695..C6AF;H3 # HANGUL SYLLABLE YOG..HANGUL SYLLABLE YOH
+C6B0;H2 # HANGUL SYLLABLE U
+C6B1..C6CB;H3 # HANGUL SYLLABLE UG..HANGUL SYLLABLE UH
+C6CC;H2 # HANGUL SYLLABLE WEO
+C6CD..C6E7;H3 # HANGUL SYLLABLE WEOG..HANGUL SYLLABLE WEOH
+C6E8;H2 # HANGUL SYLLABLE WE
+C6E9..C703;H3 # HANGUL SYLLABLE WEG..HANGUL SYLLABLE WEH
+C704;H2 # HANGUL SYLLABLE WI
+C705..C71F;H3 # HANGUL SYLLABLE WIG..HANGUL SYLLABLE WIH
+C720;H2 # HANGUL SYLLABLE YU
+C721..C73B;H3 # HANGUL SYLLABLE YUG..HANGUL SYLLABLE YUH
+C73C;H2 # HANGUL SYLLABLE EU
+C73D..C757;H3 # HANGUL SYLLABLE EUG..HANGUL SYLLABLE EUH
+C758;H2 # HANGUL SYLLABLE YI
+C759..C773;H3 # HANGUL SYLLABLE YIG..HANGUL SYLLABLE YIH
+C774;H2 # HANGUL SYLLABLE I
+C775..C78F;H3 # HANGUL SYLLABLE IG..HANGUL SYLLABLE IH
+C790;H2 # HANGUL SYLLABLE JA
+C791..C7AB;H3 # HANGUL SYLLABLE JAG..HANGUL SYLLABLE JAH
+C7AC;H2 # HANGUL SYLLABLE JAE
+C7AD..C7C7;H3 # HANGUL SYLLABLE JAEG..HANGUL SYLLABLE JAEH
+C7C8;H2 # HANGUL SYLLABLE JYA
+C7C9..C7E3;H3 # HANGUL SYLLABLE JYAG..HANGUL SYLLABLE JYAH
+C7E4;H2 # HANGUL SYLLABLE JYAE
+C7E5..C7FF;H3 # HANGUL SYLLABLE JYAEG..HANGUL SYLLABLE JYAEH
+C800;H2 # HANGUL SYLLABLE JEO
+C801..C81B;H3 # HANGUL SYLLABLE JEOG..HANGUL SYLLABLE JEOH
+C81C;H2 # HANGUL SYLLABLE JE
+C81D..C837;H3 # HANGUL SYLLABLE JEG..HANGUL SYLLABLE JEH
+C838;H2 # HANGUL SYLLABLE JYEO
+C839..C853;H3 # HANGUL SYLLABLE JYEOG..HANGUL SYLLABLE JYEOH
+C854;H2 # HANGUL SYLLABLE JYE
+C855..C86F;H3 # HANGUL SYLLABLE JYEG..HANGUL SYLLABLE JYEH
+C870;H2 # HANGUL SYLLABLE JO
+C871..C88B;H3 # HANGUL SYLLABLE JOG..HANGUL SYLLABLE JOH
+C88C;H2 # HANGUL SYLLABLE JWA
+C88D..C8A7;H3 # HANGUL SYLLABLE JWAG..HANGUL SYLLABLE JWAH
+C8A8;H2 # HANGUL SYLLABLE JWAE
+C8A9..C8C3;H3 # HANGUL SYLLABLE JWAEG..HANGUL SYLLABLE JWAEH
+C8C4;H2 # HANGUL SYLLABLE JOE
+C8C5..C8DF;H3 # HANGUL SYLLABLE JOEG..HANGUL SYLLABLE JOEH
+C8E0;H2 # HANGUL SYLLABLE JYO
+C8E1..C8FB;H3 # HANGUL SYLLABLE JYOG..HANGUL SYLLABLE JYOH
+C8FC;H2 # HANGUL SYLLABLE JU
+C8FD..C917;H3 # HANGUL SYLLABLE JUG..HANGUL SYLLABLE JUH
+C918;H2 # HANGUL SYLLABLE JWEO
+C919..C933;H3 # HANGUL SYLLABLE JWEOG..HANGUL SYLLABLE JWEOH
+C934;H2 # HANGUL SYLLABLE JWE
+C935..C94F;H3 # HANGUL SYLLABLE JWEG..HANGUL SYLLABLE JWEH
+C950;H2 # HANGUL SYLLABLE JWI
+C951..C96B;H3 # HANGUL SYLLABLE JWIG..HANGUL SYLLABLE JWIH
+C96C;H2 # HANGUL SYLLABLE JYU
+C96D..C987;H3 # HANGUL SYLLABLE JYUG..HANGUL SYLLABLE JYUH
+C988;H2 # HANGUL SYLLABLE JEU
+C989..C9A3;H3 # HANGUL SYLLABLE JEUG..HANGUL SYLLABLE JEUH
+C9A4;H2 # HANGUL SYLLABLE JYI
+C9A5..C9BF;H3 # HANGUL SYLLABLE JYIG..HANGUL SYLLABLE JYIH
+C9C0;H2 # HANGUL SYLLABLE JI
+C9C1..C9DB;H3 # HANGUL SYLLABLE JIG..HANGUL SYLLABLE JIH
+C9DC;H2 # HANGUL SYLLABLE JJA
+C9DD..C9F7;H3 # HANGUL SYLLABLE JJAG..HANGUL SYLLABLE JJAH
+C9F8;H2 # HANGUL SYLLABLE JJAE
+C9F9..CA13;H3 # HANGUL SYLLABLE JJAEG..HANGUL SYLLABLE JJAEH
+CA14;H2 # HANGUL SYLLABLE JJYA
+CA15..CA2F;H3 # HANGUL SYLLABLE JJYAG..HANGUL SYLLABLE JJYAH
+CA30;H2 # HANGUL SYLLABLE JJYAE
+CA31..CA4B;H3 # HANGUL SYLLABLE JJYAEG..HANGUL SYLLABLE JJYAEH
+CA4C;H2 # HANGUL SYLLABLE JJEO
+CA4D..CA67;H3 # HANGUL SYLLABLE JJEOG..HANGUL SYLLABLE JJEOH
+CA68;H2 # HANGUL SYLLABLE JJE
+CA69..CA83;H3 # HANGUL SYLLABLE JJEG..HANGUL SYLLABLE JJEH
+CA84;H2 # HANGUL SYLLABLE JJYEO
+CA85..CA9F;H3 # HANGUL SYLLABLE JJYEOG..HANGUL SYLLABLE JJYEOH
+CAA0;H2 # HANGUL SYLLABLE JJYE
+CAA1..CABB;H3 # HANGUL SYLLABLE JJYEG..HANGUL SYLLABLE JJYEH
+CABC;H2 # HANGUL SYLLABLE JJO
+CABD..CAD7;H3 # HANGUL SYLLABLE JJOG..HANGUL SYLLABLE JJOH
+CAD8;H2 # HANGUL SYLLABLE JJWA
+CAD9..CAF3;H3 # HANGUL SYLLABLE JJWAG..HANGUL SYLLABLE JJWAH
+CAF4;H2 # HANGUL SYLLABLE JJWAE
+CAF5..CB0F;H3 # HANGUL SYLLABLE JJWAEG..HANGUL SYLLABLE JJWAEH
+CB10;H2 # HANGUL SYLLABLE JJOE
+CB11..CB2B;H3 # HANGUL SYLLABLE JJOEG..HANGUL SYLLABLE JJOEH
+CB2C;H2 # HANGUL SYLLABLE JJYO
+CB2D..CB47;H3 # HANGUL SYLLABLE JJYOG..HANGUL SYLLABLE JJYOH
+CB48;H2 # HANGUL SYLLABLE JJU
+CB49..CB63;H3 # HANGUL SYLLABLE JJUG..HANGUL SYLLABLE JJUH
+CB64;H2 # HANGUL SYLLABLE JJWEO
+CB65..CB7F;H3 # HANGUL SYLLABLE JJWEOG..HANGUL SYLLABLE JJWEOH
+CB80;H2 # HANGUL SYLLABLE JJWE
+CB81..CB9B;H3 # HANGUL SYLLABLE JJWEG..HANGUL SYLLABLE JJWEH
+CB9C;H2 # HANGUL SYLLABLE JJWI
+CB9D..CBB7;H3 # HANGUL SYLLABLE JJWIG..HANGUL SYLLABLE JJWIH
+CBB8;H2 # HANGUL SYLLABLE JJYU
+CBB9..CBD3;H3 # HANGUL SYLLABLE JJYUG..HANGUL SYLLABLE JJYUH
+CBD4;H2 # HANGUL SYLLABLE JJEU
+CBD5..CBEF;H3 # HANGUL SYLLABLE JJEUG..HANGUL SYLLABLE JJEUH
+CBF0;H2 # HANGUL SYLLABLE JJYI
+CBF1..CC0B;H3 # HANGUL SYLLABLE JJYIG..HANGUL SYLLABLE JJYIH
+CC0C;H2 # HANGUL SYLLABLE JJI
+CC0D..CC27;H3 # HANGUL SYLLABLE JJIG..HANGUL SYLLABLE JJIH
+CC28;H2 # HANGUL SYLLABLE CA
+CC29..CC43;H3 # HANGUL SYLLABLE CAG..HANGUL SYLLABLE CAH
+CC44;H2 # HANGUL SYLLABLE CAE
+CC45..CC5F;H3 # HANGUL SYLLABLE CAEG..HANGUL SYLLABLE CAEH
+CC60;H2 # HANGUL SYLLABLE CYA
+CC61..CC7B;H3 # HANGUL SYLLABLE CYAG..HANGUL SYLLABLE CYAH
+CC7C;H2 # HANGUL SYLLABLE CYAE
+CC7D..CC97;H3 # HANGUL SYLLABLE CYAEG..HANGUL SYLLABLE CYAEH
+CC98;H2 # HANGUL SYLLABLE CEO
+CC99..CCB3;H3 # HANGUL SYLLABLE CEOG..HANGUL SYLLABLE CEOH
+CCB4;H2 # HANGUL SYLLABLE CE
+CCB5..CCCF;H3 # HANGUL SYLLABLE CEG..HANGUL SYLLABLE CEH
+CCD0;H2 # HANGUL SYLLABLE CYEO
+CCD1..CCEB;H3 # HANGUL SYLLABLE CYEOG..HANGUL SYLLABLE CYEOH
+CCEC;H2 # HANGUL SYLLABLE CYE
+CCED..CD07;H3 # HANGUL SYLLABLE CYEG..HANGUL SYLLABLE CYEH
+CD08;H2 # HANGUL SYLLABLE CO
+CD09..CD23;H3 # HANGUL SYLLABLE COG..HANGUL SYLLABLE COH
+CD24;H2 # HANGUL SYLLABLE CWA
+CD25..CD3F;H3 # HANGUL SYLLABLE CWAG..HANGUL SYLLABLE CWAH
+CD40;H2 # HANGUL SYLLABLE CWAE
+CD41..CD5B;H3 # HANGUL SYLLABLE CWAEG..HANGUL SYLLABLE CWAEH
+CD5C;H2 # HANGUL SYLLABLE COE
+CD5D..CD77;H3 # HANGUL SYLLABLE COEG..HANGUL SYLLABLE COEH
+CD78;H2 # HANGUL SYLLABLE CYO
+CD79..CD93;H3 # HANGUL SYLLABLE CYOG..HANGUL SYLLABLE CYOH
+CD94;H2 # HANGUL SYLLABLE CU
+CD95..CDAF;H3 # HANGUL SYLLABLE CUG..HANGUL SYLLABLE CUH
+CDB0;H2 # HANGUL SYLLABLE CWEO
+CDB1..CDCB;H3 # HANGUL SYLLABLE CWEOG..HANGUL SYLLABLE CWEOH
+CDCC;H2 # HANGUL SYLLABLE CWE
+CDCD..CDE7;H3 # HANGUL SYLLABLE CWEG..HANGUL SYLLABLE CWEH
+CDE8;H2 # HANGUL SYLLABLE CWI
+CDE9..CE03;H3 # HANGUL SYLLABLE CWIG..HANGUL SYLLABLE CWIH
+CE04;H2 # HANGUL SYLLABLE CYU
+CE05..CE1F;H3 # HANGUL SYLLABLE CYUG..HANGUL SYLLABLE CYUH
+CE20;H2 # HANGUL SYLLABLE CEU
+CE21..CE3B;H3 # HANGUL SYLLABLE CEUG..HANGUL SYLLABLE CEUH
+CE3C;H2 # HANGUL SYLLABLE CYI
+CE3D..CE57;H3 # HANGUL SYLLABLE CYIG..HANGUL SYLLABLE CYIH
+CE58;H2 # HANGUL SYLLABLE CI
+CE59..CE73;H3 # HANGUL SYLLABLE CIG..HANGUL SYLLABLE CIH
+CE74;H2 # HANGUL SYLLABLE KA
+CE75..CE8F;H3 # HANGUL SYLLABLE KAG..HANGUL SYLLABLE KAH
+CE90;H2 # HANGUL SYLLABLE KAE
+CE91..CEAB;H3 # HANGUL SYLLABLE KAEG..HANGUL SYLLABLE KAEH
+CEAC;H2 # HANGUL SYLLABLE KYA
+CEAD..CEC7;H3 # HANGUL SYLLABLE KYAG..HANGUL SYLLABLE KYAH
+CEC8;H2 # HANGUL SYLLABLE KYAE
+CEC9..CEE3;H3 # HANGUL SYLLABLE KYAEG..HANGUL SYLLABLE KYAEH
+CEE4;H2 # HANGUL SYLLABLE KEO
+CEE5..CEFF;H3 # HANGUL SYLLABLE KEOG..HANGUL SYLLABLE KEOH
+CF00;H2 # HANGUL SYLLABLE KE
+CF01..CF1B;H3 # HANGUL SYLLABLE KEG..HANGUL SYLLABLE KEH
+CF1C;H2 # HANGUL SYLLABLE KYEO
+CF1D..CF37;H3 # HANGUL SYLLABLE KYEOG..HANGUL SYLLABLE KYEOH
+CF38;H2 # HANGUL SYLLABLE KYE
+CF39..CF53;H3 # HANGUL SYLLABLE KYEG..HANGUL SYLLABLE KYEH
+CF54;H2 # HANGUL SYLLABLE KO
+CF55..CF6F;H3 # HANGUL SYLLABLE KOG..HANGUL SYLLABLE KOH
+CF70;H2 # HANGUL SYLLABLE KWA
+CF71..CF8B;H3 # HANGUL SYLLABLE KWAG..HANGUL SYLLABLE KWAH
+CF8C;H2 # HANGUL SYLLABLE KWAE
+CF8D..CFA7;H3 # HANGUL SYLLABLE KWAEG..HANGUL SYLLABLE KWAEH
+CFA8;H2 # HANGUL SYLLABLE KOE
+CFA9..CFC3;H3 # HANGUL SYLLABLE KOEG..HANGUL SYLLABLE KOEH
+CFC4;H2 # HANGUL SYLLABLE KYO
+CFC5..CFDF;H3 # HANGUL SYLLABLE KYOG..HANGUL SYLLABLE KYOH
+CFE0;H2 # HANGUL SYLLABLE KU
+CFE1..CFFB;H3 # HANGUL SYLLABLE KUG..HANGUL SYLLABLE KUH
+CFFC;H2 # HANGUL SYLLABLE KWEO
+CFFD..D017;H3 # HANGUL SYLLABLE KWEOG..HANGUL SYLLABLE KWEOH
+D018;H2 # HANGUL SYLLABLE KWE
+D019..D033;H3 # HANGUL SYLLABLE KWEG..HANGUL SYLLABLE KWEH
+D034;H2 # HANGUL SYLLABLE KWI
+D035..D04F;H3 # HANGUL SYLLABLE KWIG..HANGUL SYLLABLE KWIH
+D050;H2 # HANGUL SYLLABLE KYU
+D051..D06B;H3 # HANGUL SYLLABLE KYUG..HANGUL SYLLABLE KYUH
+D06C;H2 # HANGUL SYLLABLE KEU
+D06D..D087;H3 # HANGUL SYLLABLE KEUG..HANGUL SYLLABLE KEUH
+D088;H2 # HANGUL SYLLABLE KYI
+D089..D0A3;H3 # HANGUL SYLLABLE KYIG..HANGUL SYLLABLE KYIH
+D0A4;H2 # HANGUL SYLLABLE KI
+D0A5..D0BF;H3 # HANGUL SYLLABLE KIG..HANGUL SYLLABLE KIH
+D0C0;H2 # HANGUL SYLLABLE TA
+D0C1..D0DB;H3 # HANGUL SYLLABLE TAG..HANGUL SYLLABLE TAH
+D0DC;H2 # HANGUL SYLLABLE TAE
+D0DD..D0F7;H3 # HANGUL SYLLABLE TAEG..HANGUL SYLLABLE TAEH
+D0F8;H2 # HANGUL SYLLABLE TYA
+D0F9..D113;H3 # HANGUL SYLLABLE TYAG..HANGUL SYLLABLE TYAH
+D114;H2 # HANGUL SYLLABLE TYAE
+D115..D12F;H3 # HANGUL SYLLABLE TYAEG..HANGUL SYLLABLE TYAEH
+D130;H2 # HANGUL SYLLABLE TEO
+D131..D14B;H3 # HANGUL SYLLABLE TEOG..HANGUL SYLLABLE TEOH
+D14C;H2 # HANGUL SYLLABLE TE
+D14D..D167;H3 # HANGUL SYLLABLE TEG..HANGUL SYLLABLE TEH
+D168;H2 # HANGUL SYLLABLE TYEO
+D169..D183;H3 # HANGUL SYLLABLE TYEOG..HANGUL SYLLABLE TYEOH
+D184;H2 # HANGUL SYLLABLE TYE
+D185..D19F;H3 # HANGUL SYLLABLE TYEG..HANGUL SYLLABLE TYEH
+D1A0;H2 # HANGUL SYLLABLE TO
+D1A1..D1BB;H3 # HANGUL SYLLABLE TOG..HANGUL SYLLABLE TOH
+D1BC;H2 # HANGUL SYLLABLE TWA
+D1BD..D1D7;H3 # HANGUL SYLLABLE TWAG..HANGUL SYLLABLE TWAH
+D1D8;H2 # HANGUL SYLLABLE TWAE
+D1D9..D1F3;H3 # HANGUL SYLLABLE TWAEG..HANGUL SYLLABLE TWAEH
+D1F4;H2 # HANGUL SYLLABLE TOE
+D1F5..D20F;H3 # HANGUL SYLLABLE TOEG..HANGUL SYLLABLE TOEH
+D210;H2 # HANGUL SYLLABLE TYO
+D211..D22B;H3 # HANGUL SYLLABLE TYOG..HANGUL SYLLABLE TYOH
+D22C;H2 # HANGUL SYLLABLE TU
+D22D..D247;H3 # HANGUL SYLLABLE TUG..HANGUL SYLLABLE TUH
+D248;H2 # HANGUL SYLLABLE TWEO
+D249..D263;H3 # HANGUL SYLLABLE TWEOG..HANGUL SYLLABLE TWEOH
+D264;H2 # HANGUL SYLLABLE TWE
+D265..D27F;H3 # HANGUL SYLLABLE TWEG..HANGUL SYLLABLE TWEH
+D280;H2 # HANGUL SYLLABLE TWI
+D281..D29B;H3 # HANGUL SYLLABLE TWIG..HANGUL SYLLABLE TWIH
+D29C;H2 # HANGUL SYLLABLE TYU
+D29D..D2B7;H3 # HANGUL SYLLABLE TYUG..HANGUL SYLLABLE TYUH
+D2B8;H2 # HANGUL SYLLABLE TEU
+D2B9..D2D3;H3 # HANGUL SYLLABLE TEUG..HANGUL SYLLABLE TEUH
+D2D4;H2 # HANGUL SYLLABLE TYI
+D2D5..D2EF;H3 # HANGUL SYLLABLE TYIG..HANGUL SYLLABLE TYIH
+D2F0;H2 # HANGUL SYLLABLE TI
+D2F1..D30B;H3 # HANGUL SYLLABLE TIG..HANGUL SYLLABLE TIH
+D30C;H2 # HANGUL SYLLABLE PA
+D30D..D327;H3 # HANGUL SYLLABLE PAG..HANGUL SYLLABLE PAH
+D328;H2 # HANGUL SYLLABLE PAE
+D329..D343;H3 # HANGUL SYLLABLE PAEG..HANGUL SYLLABLE PAEH
+D344;H2 # HANGUL SYLLABLE PYA
+D345..D35F;H3 # HANGUL SYLLABLE PYAG..HANGUL SYLLABLE PYAH
+D360;H2 # HANGUL SYLLABLE PYAE
+D361..D37B;H3 # HANGUL SYLLABLE PYAEG..HANGUL SYLLABLE PYAEH
+D37C;H2 # HANGUL SYLLABLE PEO
+D37D..D397;H3 # HANGUL SYLLABLE PEOG..HANGUL SYLLABLE PEOH
+D398;H2 # HANGUL SYLLABLE PE
+D399..D3B3;H3 # HANGUL SYLLABLE PEG..HANGUL SYLLABLE PEH
+D3B4;H2 # HANGUL SYLLABLE PYEO
+D3B5..D3CF;H3 # HANGUL SYLLABLE PYEOG..HANGUL SYLLABLE PYEOH
+D3D0;H2 # HANGUL SYLLABLE PYE
+D3D1..D3EB;H3 # HANGUL SYLLABLE PYEG..HANGUL SYLLABLE PYEH
+D3EC;H2 # HANGUL SYLLABLE PO
+D3ED..D407;H3 # HANGUL SYLLABLE POG..HANGUL SYLLABLE POH
+D408;H2 # HANGUL SYLLABLE PWA
+D409..D423;H3 # HANGUL SYLLABLE PWAG..HANGUL SYLLABLE PWAH
+D424;H2 # HANGUL SYLLABLE PWAE
+D425..D43F;H3 # HANGUL SYLLABLE PWAEG..HANGUL SYLLABLE PWAEH
+D440;H2 # HANGUL SYLLABLE POE
+D441..D45B;H3 # HANGUL SYLLABLE POEG..HANGUL SYLLABLE POEH
+D45C;H2 # HANGUL SYLLABLE PYO
+D45D..D477;H3 # HANGUL SYLLABLE PYOG..HANGUL SYLLABLE PYOH
+D478;H2 # HANGUL SYLLABLE PU
+D479..D493;H3 # HANGUL SYLLABLE PUG..HANGUL SYLLABLE PUH
+D494;H2 # HANGUL SYLLABLE PWEO
+D495..D4AF;H3 # HANGUL SYLLABLE PWEOG..HANGUL SYLLABLE PWEOH
+D4B0;H2 # HANGUL SYLLABLE PWE
+D4B1..D4CB;H3 # HANGUL SYLLABLE PWEG..HANGUL SYLLABLE PWEH
+D4CC;H2 # HANGUL SYLLABLE PWI
+D4CD..D4E7;H3 # HANGUL SYLLABLE PWIG..HANGUL SYLLABLE PWIH
+D4E8;H2 # HANGUL SYLLABLE PYU
+D4E9..D503;H3 # HANGUL SYLLABLE PYUG..HANGUL SYLLABLE PYUH
+D504;H2 # HANGUL SYLLABLE PEU
+D505..D51F;H3 # HANGUL SYLLABLE PEUG..HANGUL SYLLABLE PEUH
+D520;H2 # HANGUL SYLLABLE PYI
+D521..D53B;H3 # HANGUL SYLLABLE PYIG..HANGUL SYLLABLE PYIH
+D53C;H2 # HANGUL SYLLABLE PI
+D53D..D557;H3 # HANGUL SYLLABLE PIG..HANGUL SYLLABLE PIH
+D558;H2 # HANGUL SYLLABLE HA
+D559..D573;H3 # HANGUL SYLLABLE HAG..HANGUL SYLLABLE HAH
+D574;H2 # HANGUL SYLLABLE HAE
+D575..D58F;H3 # HANGUL SYLLABLE HAEG..HANGUL SYLLABLE HAEH
+D590;H2 # HANGUL SYLLABLE HYA
+D591..D5AB;H3 # HANGUL SYLLABLE HYAG..HANGUL SYLLABLE HYAH
+D5AC;H2 # HANGUL SYLLABLE HYAE
+D5AD..D5C7;H3 # HANGUL SYLLABLE HYAEG..HANGUL SYLLABLE HYAEH
+D5C8;H2 # HANGUL SYLLABLE HEO
+D5C9..D5E3;H3 # HANGUL SYLLABLE HEOG..HANGUL SYLLABLE HEOH
+D5E4;H2 # HANGUL SYLLABLE HE
+D5E5..D5FF;H3 # HANGUL SYLLABLE HEG..HANGUL SYLLABLE HEH
+D600;H2 # HANGUL SYLLABLE HYEO
+D601..D61B;H3 # HANGUL SYLLABLE HYEOG..HANGUL SYLLABLE HYEOH
+D61C;H2 # HANGUL SYLLABLE HYE
+D61D..D637;H3 # HANGUL SYLLABLE HYEG..HANGUL SYLLABLE HYEH
+D638;H2 # HANGUL SYLLABLE HO
+D639..D653;H3 # HANGUL SYLLABLE HOG..HANGUL SYLLABLE HOH
+D654;H2 # HANGUL SYLLABLE HWA
+D655..D66F;H3 # HANGUL SYLLABLE HWAG..HANGUL SYLLABLE HWAH
+D670;H2 # HANGUL SYLLABLE HWAE
+D671..D68B;H3 # HANGUL SYLLABLE HWAEG..HANGUL SYLLABLE HWAEH
+D68C;H2 # HANGUL SYLLABLE HOE
+D68D..D6A7;H3 # HANGUL SYLLABLE HOEG..HANGUL SYLLABLE HOEH
+D6A8;H2 # HANGUL SYLLABLE HYO
+D6A9..D6C3;H3 # HANGUL SYLLABLE HYOG..HANGUL SYLLABLE HYOH
+D6C4;H2 # HANGUL SYLLABLE HU
+D6C5..D6DF;H3 # HANGUL SYLLABLE HUG..HANGUL SYLLABLE HUH
+D6E0;H2 # HANGUL SYLLABLE HWEO
+D6E1..D6FB;H3 # HANGUL SYLLABLE HWEOG..HANGUL SYLLABLE HWEOH
+D6FC;H2 # HANGUL SYLLABLE HWE
+D6FD..D717;H3 # HANGUL SYLLABLE HWEG..HANGUL SYLLABLE HWEH
+D718;H2 # HANGUL SYLLABLE HWI
+D719..D733;H3 # HANGUL SYLLABLE HWIG..HANGUL SYLLABLE HWIH
+D734;H2 # HANGUL SYLLABLE HYU
+D735..D74F;H3 # HANGUL SYLLABLE HYUG..HANGUL SYLLABLE HYUH
+D750;H2 # HANGUL SYLLABLE HEU
+D751..D76B;H3 # HANGUL SYLLABLE HEUG..HANGUL SYLLABLE HEUH
+D76C;H2 # HANGUL SYLLABLE HYI
+D76D..D787;H3 # HANGUL SYLLABLE HYIG..HANGUL SYLLABLE HYIH
+D788;H2 # HANGUL SYLLABLE HI
+D789..D7A3;H3 # HANGUL SYLLABLE HIG..HANGUL SYLLABLE HIH
D800..DB7F;SG # <Non Private Use High Surrogate, First>..<Non Private Use High Surrogate, Last>
DB80..DBFF;SG # <Private Use High Surrogate, First>..<Private Use High Surrogate, Last>
DC00..DFFF;SG # <Low Surrogate, First>..<Low Surrogate, Last>
@@ -11001,6 +12677,112 @@ FA67;ID # CJK COMPATIBILITY IDEOGRAPH-FA67
FA68;ID # CJK COMPATIBILITY IDEOGRAPH-FA68
FA69;ID # CJK COMPATIBILITY IDEOGRAPH-FA69
FA6A;ID # CJK COMPATIBILITY IDEOGRAPH-FA6A
+FA70;ID # CJK COMPATIBILITY IDEOGRAPH-FA70
+FA71;ID # CJK COMPATIBILITY IDEOGRAPH-FA71
+FA72;ID # CJK COMPATIBILITY IDEOGRAPH-FA72
+FA73;ID # CJK COMPATIBILITY IDEOGRAPH-FA73
+FA74;ID # CJK COMPATIBILITY IDEOGRAPH-FA74
+FA75;ID # CJK COMPATIBILITY IDEOGRAPH-FA75
+FA76;ID # CJK COMPATIBILITY IDEOGRAPH-FA76
+FA77;ID # CJK COMPATIBILITY IDEOGRAPH-FA77
+FA78;ID # CJK COMPATIBILITY IDEOGRAPH-FA78
+FA79;ID # CJK COMPATIBILITY IDEOGRAPH-FA79
+FA7A;ID # CJK COMPATIBILITY IDEOGRAPH-FA7A
+FA7B;ID # CJK COMPATIBILITY IDEOGRAPH-FA7B
+FA7C;ID # CJK COMPATIBILITY IDEOGRAPH-FA7C
+FA7D;ID # CJK COMPATIBILITY IDEOGRAPH-FA7D
+FA7E;ID # CJK COMPATIBILITY IDEOGRAPH-FA7E
+FA7F;ID # CJK COMPATIBILITY IDEOGRAPH-FA7F
+FA80;ID # CJK COMPATIBILITY IDEOGRAPH-FA80
+FA81;ID # CJK COMPATIBILITY IDEOGRAPH-FA81
+FA82;ID # CJK COMPATIBILITY IDEOGRAPH-FA82
+FA83;ID # CJK COMPATIBILITY IDEOGRAPH-FA83
+FA84;ID # CJK COMPATIBILITY IDEOGRAPH-FA84
+FA85;ID # CJK COMPATIBILITY IDEOGRAPH-FA85
+FA86;ID # CJK COMPATIBILITY IDEOGRAPH-FA86
+FA87;ID # CJK COMPATIBILITY IDEOGRAPH-FA87
+FA88;ID # CJK COMPATIBILITY IDEOGRAPH-FA88
+FA89;ID # CJK COMPATIBILITY IDEOGRAPH-FA89
+FA8A;ID # CJK COMPATIBILITY IDEOGRAPH-FA8A
+FA8B;ID # CJK COMPATIBILITY IDEOGRAPH-FA8B
+FA8C;ID # CJK COMPATIBILITY IDEOGRAPH-FA8C
+FA8D;ID # CJK COMPATIBILITY IDEOGRAPH-FA8D
+FA8E;ID # CJK COMPATIBILITY IDEOGRAPH-FA8E
+FA8F;ID # CJK COMPATIBILITY IDEOGRAPH-FA8F
+FA90;ID # CJK COMPATIBILITY IDEOGRAPH-FA90
+FA91;ID # CJK COMPATIBILITY IDEOGRAPH-FA91
+FA92;ID # CJK COMPATIBILITY IDEOGRAPH-FA92
+FA93;ID # CJK COMPATIBILITY IDEOGRAPH-FA93
+FA94;ID # CJK COMPATIBILITY IDEOGRAPH-FA94
+FA95;ID # CJK COMPATIBILITY IDEOGRAPH-FA95
+FA96;ID # CJK COMPATIBILITY IDEOGRAPH-FA96
+FA97;ID # CJK COMPATIBILITY IDEOGRAPH-FA97
+FA98;ID # CJK COMPATIBILITY IDEOGRAPH-FA98
+FA99;ID # CJK COMPATIBILITY IDEOGRAPH-FA99
+FA9A;ID # CJK COMPATIBILITY IDEOGRAPH-FA9A
+FA9B;ID # CJK COMPATIBILITY IDEOGRAPH-FA9B
+FA9C;ID # CJK COMPATIBILITY IDEOGRAPH-FA9C
+FA9D;ID # CJK COMPATIBILITY IDEOGRAPH-FA9D
+FA9E;ID # CJK COMPATIBILITY IDEOGRAPH-FA9E
+FA9F;ID # CJK COMPATIBILITY IDEOGRAPH-FA9F
+FAA0;ID # CJK COMPATIBILITY IDEOGRAPH-FAA0
+FAA1;ID # CJK COMPATIBILITY IDEOGRAPH-FAA1
+FAA2;ID # CJK COMPATIBILITY IDEOGRAPH-FAA2
+FAA3;ID # CJK COMPATIBILITY IDEOGRAPH-FAA3
+FAA4;ID # CJK COMPATIBILITY IDEOGRAPH-FAA4
+FAA5;ID # CJK COMPATIBILITY IDEOGRAPH-FAA5
+FAA6;ID # CJK COMPATIBILITY IDEOGRAPH-FAA6
+FAA7;ID # CJK COMPATIBILITY IDEOGRAPH-FAA7
+FAA8;ID # CJK COMPATIBILITY IDEOGRAPH-FAA8
+FAA9;ID # CJK COMPATIBILITY IDEOGRAPH-FAA9
+FAAA;ID # CJK COMPATIBILITY IDEOGRAPH-FAAA
+FAAB;ID # CJK COMPATIBILITY IDEOGRAPH-FAAB
+FAAC;ID # CJK COMPATIBILITY IDEOGRAPH-FAAC
+FAAD;ID # CJK COMPATIBILITY IDEOGRAPH-FAAD
+FAAE;ID # CJK COMPATIBILITY IDEOGRAPH-FAAE
+FAAF;ID # CJK COMPATIBILITY IDEOGRAPH-FAAF
+FAB0;ID # CJK COMPATIBILITY IDEOGRAPH-FAB0
+FAB1;ID # CJK COMPATIBILITY IDEOGRAPH-FAB1
+FAB2;ID # CJK COMPATIBILITY IDEOGRAPH-FAB2
+FAB3;ID # CJK COMPATIBILITY IDEOGRAPH-FAB3
+FAB4;ID # CJK COMPATIBILITY IDEOGRAPH-FAB4
+FAB5;ID # CJK COMPATIBILITY IDEOGRAPH-FAB5
+FAB6;ID # CJK COMPATIBILITY IDEOGRAPH-FAB6
+FAB7;ID # CJK COMPATIBILITY IDEOGRAPH-FAB7
+FAB8;ID # CJK COMPATIBILITY IDEOGRAPH-FAB8
+FAB9;ID # CJK COMPATIBILITY IDEOGRAPH-FAB9
+FABA;ID # CJK COMPATIBILITY IDEOGRAPH-FABA
+FABB;ID # CJK COMPATIBILITY IDEOGRAPH-FABB
+FABC;ID # CJK COMPATIBILITY IDEOGRAPH-FABC
+FABD;ID # CJK COMPATIBILITY IDEOGRAPH-FABD
+FABE;ID # CJK COMPATIBILITY IDEOGRAPH-FABE
+FABF;ID # CJK COMPATIBILITY IDEOGRAPH-FABF
+FAC0;ID # CJK COMPATIBILITY IDEOGRAPH-FAC0
+FAC1;ID # CJK COMPATIBILITY IDEOGRAPH-FAC1
+FAC2;ID # CJK COMPATIBILITY IDEOGRAPH-FAC2
+FAC3;ID # CJK COMPATIBILITY IDEOGRAPH-FAC3
+FAC4;ID # CJK COMPATIBILITY IDEOGRAPH-FAC4
+FAC5;ID # CJK COMPATIBILITY IDEOGRAPH-FAC5
+FAC6;ID # CJK COMPATIBILITY IDEOGRAPH-FAC6
+FAC7;ID # CJK COMPATIBILITY IDEOGRAPH-FAC7
+FAC8;ID # CJK COMPATIBILITY IDEOGRAPH-FAC8
+FAC9;ID # CJK COMPATIBILITY IDEOGRAPH-FAC9
+FACA;ID # CJK COMPATIBILITY IDEOGRAPH-FACA
+FACB;ID # CJK COMPATIBILITY IDEOGRAPH-FACB
+FACC;ID # CJK COMPATIBILITY IDEOGRAPH-FACC
+FACD;ID # CJK COMPATIBILITY IDEOGRAPH-FACD
+FACE;ID # CJK COMPATIBILITY IDEOGRAPH-FACE
+FACF;ID # CJK COMPATIBILITY IDEOGRAPH-FACF
+FAD0;ID # CJK COMPATIBILITY IDEOGRAPH-FAD0
+FAD1;ID # CJK COMPATIBILITY IDEOGRAPH-FAD1
+FAD2;ID # CJK COMPATIBILITY IDEOGRAPH-FAD2
+FAD3;ID # CJK COMPATIBILITY IDEOGRAPH-FAD3
+FAD4;ID # CJK COMPATIBILITY IDEOGRAPH-FAD4
+FAD5;ID # CJK COMPATIBILITY IDEOGRAPH-FAD5
+FAD6;ID # CJK COMPATIBILITY IDEOGRAPH-FAD6
+FAD7;ID # CJK COMPATIBILITY IDEOGRAPH-FAD7
+FAD8;ID # CJK COMPATIBILITY IDEOGRAPH-FAD8
+FAD9;ID # CJK COMPATIBILITY IDEOGRAPH-FAD9
FB00;AL # LATIN SMALL LIGATURE FF
FB01;AL # LATIN SMALL LIGATURE FI
FB02;AL # LATIN SMALL LIGATURE FL
@@ -11670,6 +13452,16 @@ FE0C;CM # VARIATION SELECTOR-13
FE0D;CM # VARIATION SELECTOR-14
FE0E;CM # VARIATION SELECTOR-15
FE0F;CM # VARIATION SELECTOR-16
+FE10;IS # PRESENTATION FORM FOR VERTICAL COMMA
+FE11;CL # PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC COMMA
+FE12;CL # PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC FULL STOP
+FE13;IS # PRESENTATION FORM FOR VERTICAL COLON
+FE14;IS # PRESENTATION FORM FOR VERTICAL SEMICOLON
+FE15;EX # PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK
+FE16;EX # PRESENTATION FORM FOR VERTICAL QUESTION MARK
+FE17;OP # PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET
+FE18;CL # PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET
+FE19;IN # PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS
FE20;CM # COMBINING LIGATURE LEFT HALF
FE21;CM # COMBINING LIGATURE RIGHT HALF
FE22;CM # COMBINING DOUBLE TILDE LEFT HALF
@@ -12371,6 +14163,81 @@ FFFD;AI # REPLACEMENT CHARACTER
1013D;AL # AEGEAN LIQUID MEASURE FIRST SUBUNIT
1013E;AL # AEGEAN MEASURE SECOND SUBUNIT
1013F;AL # AEGEAN MEASURE THIRD SUBUNIT
+10140;AL # GREEK ACROPHONIC ATTIC ONE QUARTER
+10141;AL # GREEK ACROPHONIC ATTIC ONE HALF
+10142;AL # GREEK ACROPHONIC ATTIC ONE DRACHMA
+10143;AL # GREEK ACROPHONIC ATTIC FIVE
+10144;AL # GREEK ACROPHONIC ATTIC FIFTY
+10145;AL # GREEK ACROPHONIC ATTIC FIVE HUNDRED
+10146;AL # GREEK ACROPHONIC ATTIC FIVE THOUSAND
+10147;AL # GREEK ACROPHONIC ATTIC FIFTY THOUSAND
+10148;AL # GREEK ACROPHONIC ATTIC FIVE TALENTS
+10149;AL # GREEK ACROPHONIC ATTIC TEN TALENTS
+1014A;AL # GREEK ACROPHONIC ATTIC FIFTY TALENTS
+1014B;AL # GREEK ACROPHONIC ATTIC ONE HUNDRED TALENTS
+1014C;AL # GREEK ACROPHONIC ATTIC FIVE HUNDRED TALENTS
+1014D;AL # GREEK ACROPHONIC ATTIC ONE THOUSAND TALENTS
+1014E;AL # GREEK ACROPHONIC ATTIC FIVE THOUSAND TALENTS
+1014F;AL # GREEK ACROPHONIC ATTIC FIVE STATERS
+10150;AL # GREEK ACROPHONIC ATTIC TEN STATERS
+10151;AL # GREEK ACROPHONIC ATTIC FIFTY STATERS
+10152;AL # GREEK ACROPHONIC ATTIC ONE HUNDRED STATERS
+10153;AL # GREEK ACROPHONIC ATTIC FIVE HUNDRED STATERS
+10154;AL # GREEK ACROPHONIC ATTIC ONE THOUSAND STATERS
+10155;AL # GREEK ACROPHONIC ATTIC TEN THOUSAND STATERS
+10156;AL # GREEK ACROPHONIC ATTIC FIFTY THOUSAND STATERS
+10157;AL # GREEK ACROPHONIC ATTIC TEN MNAS
+10158;AL # GREEK ACROPHONIC HERAEUM ONE PLETHRON
+10159;AL # GREEK ACROPHONIC THESPIAN ONE
+1015A;AL # GREEK ACROPHONIC HERMIONIAN ONE
+1015B;AL # GREEK ACROPHONIC EPIDAUREAN TWO
+1015C;AL # GREEK ACROPHONIC THESPIAN TWO
+1015D;AL # GREEK ACROPHONIC CYRENAIC TWO DRACHMAS
+1015E;AL # GREEK ACROPHONIC EPIDAUREAN TWO DRACHMAS
+1015F;AL # GREEK ACROPHONIC TROEZENIAN FIVE
+10160;AL # GREEK ACROPHONIC TROEZENIAN TEN
+10161;AL # GREEK ACROPHONIC TROEZENIAN TEN ALTERNATE FORM
+10162;AL # GREEK ACROPHONIC HERMIONIAN TEN
+10163;AL # GREEK ACROPHONIC MESSENIAN TEN
+10164;AL # GREEK ACROPHONIC THESPIAN TEN
+10165;AL # GREEK ACROPHONIC THESPIAN THIRTY
+10166;AL # GREEK ACROPHONIC TROEZENIAN FIFTY
+10167;AL # GREEK ACROPHONIC TROEZENIAN FIFTY ALTERNATE FORM
+10168;AL # GREEK ACROPHONIC HERMIONIAN FIFTY
+10169;AL # GREEK ACROPHONIC THESPIAN FIFTY
+1016A;AL # GREEK ACROPHONIC THESPIAN ONE HUNDRED
+1016B;AL # GREEK ACROPHONIC THESPIAN THREE HUNDRED
+1016C;AL # GREEK ACROPHONIC EPIDAUREAN FIVE HUNDRED
+1016D;AL # GREEK ACROPHONIC TROEZENIAN FIVE HUNDRED
+1016E;AL # GREEK ACROPHONIC THESPIAN FIVE HUNDRED
+1016F;AL # GREEK ACROPHONIC CARYSTIAN FIVE HUNDRED
+10170;AL # GREEK ACROPHONIC NAXIAN FIVE HUNDRED
+10171;AL # GREEK ACROPHONIC THESPIAN ONE THOUSAND
+10172;AL # GREEK ACROPHONIC THESPIAN FIVE THOUSAND
+10173;AL # GREEK ACROPHONIC DELPHIC FIVE MNAS
+10174;AL # GREEK ACROPHONIC STRATIAN FIFTY MNAS
+10175;AL # GREEK ONE HALF SIGN
+10176;AL # GREEK ONE HALF SIGN ALTERNATE FORM
+10177;AL # GREEK TWO THIRDS SIGN
+10178;AL # GREEK THREE QUARTERS SIGN
+10179;AL # GREEK YEAR SIGN
+1017A;AL # GREEK TALENT SIGN
+1017B;AL # GREEK DRACHMA SIGN
+1017C;AL # GREEK OBOL SIGN
+1017D;AL # GREEK TWO OBOLS SIGN
+1017E;AL # GREEK THREE OBOLS SIGN
+1017F;AL # GREEK FOUR OBOLS SIGN
+10180;AL # GREEK FIVE OBOLS SIGN
+10181;AL # GREEK METRETES SIGN
+10182;AL # GREEK KYATHOS BASE SIGN
+10183;AL # GREEK LITRA SIGN
+10184;AL # GREEK OUNKIA SIGN
+10185;AL # GREEK XESTES SIGN
+10186;AL # GREEK ARTABE SIGN
+10187;AL # GREEK AROURA SIGN
+10188;AL # GREEK GRAMMA SIGN
+10189;AL # GREEK TRYBLION BASE SIGN
+1018A;AL # GREEK ZERO SIGN
10300;AL # OLD ITALIC LETTER A
10301;AL # OLD ITALIC LETTER BE
10302;AL # OLD ITALIC LETTER KE
@@ -12464,6 +14331,56 @@ FFFD;AI # REPLACEMENT CHARACTER
1039C;AL # UGARITIC LETTER U
1039D;AL # UGARITIC LETTER SSU
1039F;BA # UGARITIC WORD DIVIDER
+103A0;AL # OLD PERSIAN SIGN A
+103A1;AL # OLD PERSIAN SIGN I
+103A2;AL # OLD PERSIAN SIGN U
+103A3;AL # OLD PERSIAN SIGN KA
+103A4;AL # OLD PERSIAN SIGN KU
+103A5;AL # OLD PERSIAN SIGN GA
+103A6;AL # OLD PERSIAN SIGN GU
+103A7;AL # OLD PERSIAN SIGN XA
+103A8;AL # OLD PERSIAN SIGN CA
+103A9;AL # OLD PERSIAN SIGN JA
+103AA;AL # OLD PERSIAN SIGN JI
+103AB;AL # OLD PERSIAN SIGN TA
+103AC;AL # OLD PERSIAN SIGN TU
+103AD;AL # OLD PERSIAN SIGN DA
+103AE;AL # OLD PERSIAN SIGN DI
+103AF;AL # OLD PERSIAN SIGN DU
+103B0;AL # OLD PERSIAN SIGN THA
+103B1;AL # OLD PERSIAN SIGN PA
+103B2;AL # OLD PERSIAN SIGN BA
+103B3;AL # OLD PERSIAN SIGN FA
+103B4;AL # OLD PERSIAN SIGN NA
+103B5;AL # OLD PERSIAN SIGN NU
+103B6;AL # OLD PERSIAN SIGN MA
+103B7;AL # OLD PERSIAN SIGN MI
+103B8;AL # OLD PERSIAN SIGN MU
+103B9;AL # OLD PERSIAN SIGN YA
+103BA;AL # OLD PERSIAN SIGN VA
+103BB;AL # OLD PERSIAN SIGN VI
+103BC;AL # OLD PERSIAN SIGN RA
+103BD;AL # OLD PERSIAN SIGN RU
+103BE;AL # OLD PERSIAN SIGN LA
+103BF;AL # OLD PERSIAN SIGN SA
+103C0;AL # OLD PERSIAN SIGN ZA
+103C1;AL # OLD PERSIAN SIGN SHA
+103C2;AL # OLD PERSIAN SIGN SSA
+103C3;AL # OLD PERSIAN SIGN HA
+103C8;AL # OLD PERSIAN SIGN AURAMAZDAA
+103C9;AL # OLD PERSIAN SIGN AURAMAZDAA-2
+103CA;AL # OLD PERSIAN SIGN AURAMAZDAAHA
+103CB;AL # OLD PERSIAN SIGN XSHAAYATHIYA
+103CC;AL # OLD PERSIAN SIGN DAHYAAUSH
+103CD;AL # OLD PERSIAN SIGN DAHYAAUSH-2
+103CE;AL # OLD PERSIAN SIGN BAGA
+103CF;AL # OLD PERSIAN SIGN BUUMISH
+103D0;AL # OLD PERSIAN WORD DIVIDER
+103D1;AL # OLD PERSIAN NUMBER ONE
+103D2;AL # OLD PERSIAN NUMBER TWO
+103D3;AL # OLD PERSIAN NUMBER TEN
+103D4;AL # OLD PERSIAN NUMBER TWENTY
+103D5;AL # OLD PERSIAN NUMBER HUNDRED
10400;AL # DESERET CAPITAL LETTER LONG I
10401;AL # DESERET CAPITAL LETTER LONG E
10402;AL # DESERET CAPITAL LETTER LONG A
@@ -12687,6 +14604,71 @@ FFFD;AI # REPLACEMENT CHARACTER
10838;AL # CYPRIOT SYLLABLE XE
1083C;AL # CYPRIOT SYLLABLE ZA
1083F;AL # CYPRIOT SYLLABLE ZO
+10A00;AL # KHAROSHTHI LETTER A
+10A01;CM # KHAROSHTHI VOWEL SIGN I
+10A02;CM # KHAROSHTHI VOWEL SIGN U
+10A03;CM # KHAROSHTHI VOWEL SIGN VOCALIC R
+10A05;CM # KHAROSHTHI VOWEL SIGN E
+10A06;CM # KHAROSHTHI VOWEL SIGN O
+10A0C;CM # KHAROSHTHI VOWEL LENGTH MARK
+10A0D;CM # KHAROSHTHI SIGN DOUBLE RING BELOW
+10A0E;CM # KHAROSHTHI SIGN ANUSVARA
+10A0F;CM # KHAROSHTHI SIGN VISARGA
+10A10;AL # KHAROSHTHI LETTER KA
+10A11;AL # KHAROSHTHI LETTER KHA
+10A12;AL # KHAROSHTHI LETTER GA
+10A13;AL # KHAROSHTHI LETTER GHA
+10A15;AL # KHAROSHTHI LETTER CA
+10A16;AL # KHAROSHTHI LETTER CHA
+10A17;AL # KHAROSHTHI LETTER JA
+10A19;AL # KHAROSHTHI LETTER NYA
+10A1A;AL # KHAROSHTHI LETTER TTA
+10A1B;AL # KHAROSHTHI LETTER TTHA
+10A1C;AL # KHAROSHTHI LETTER DDA
+10A1D;AL # KHAROSHTHI LETTER DDHA
+10A1E;AL # KHAROSHTHI LETTER NNA
+10A1F;AL # KHAROSHTHI LETTER TA
+10A20;AL # KHAROSHTHI LETTER THA
+10A21;AL # KHAROSHTHI LETTER DA
+10A22;AL # KHAROSHTHI LETTER DHA
+10A23;AL # KHAROSHTHI LETTER NA
+10A24;AL # KHAROSHTHI LETTER PA
+10A25;AL # KHAROSHTHI LETTER PHA
+10A26;AL # KHAROSHTHI LETTER BA
+10A27;AL # KHAROSHTHI LETTER BHA
+10A28;AL # KHAROSHTHI LETTER MA
+10A29;AL # KHAROSHTHI LETTER YA
+10A2A;AL # KHAROSHTHI LETTER RA
+10A2B;AL # KHAROSHTHI LETTER LA
+10A2C;AL # KHAROSHTHI LETTER VA
+10A2D;AL # KHAROSHTHI LETTER SHA
+10A2E;AL # KHAROSHTHI LETTER SSA
+10A2F;AL # KHAROSHTHI LETTER SA
+10A30;AL # KHAROSHTHI LETTER ZA
+10A31;AL # KHAROSHTHI LETTER HA
+10A32;AL # KHAROSHTHI LETTER KKA
+10A33;AL # KHAROSHTHI LETTER TTTHA
+10A38;CM # KHAROSHTHI SIGN BAR ABOVE
+10A39;CM # KHAROSHTHI SIGN CAUDA
+10A3A;CM # KHAROSHTHI SIGN DOT BELOW
+10A3F;CM # KHAROSHTHI VIRAMA
+10A40;AL # KHAROSHTHI DIGIT ONE
+10A41;AL # KHAROSHTHI DIGIT TWO
+10A42;AL # KHAROSHTHI DIGIT THREE
+10A43;AL # KHAROSHTHI DIGIT FOUR
+10A44;AL # KHAROSHTHI NUMBER TEN
+10A45;AL # KHAROSHTHI NUMBER TWENTY
+10A46;AL # KHAROSHTHI NUMBER ONE HUNDRED
+10A47;AL # KHAROSHTHI NUMBER ONE THOUSAND
+10A50;BA # KHAROSHTHI PUNCTUATION DOT
+10A51;BA # KHAROSHTHI PUNCTUATION SMALL CIRCLE
+10A52;BA # KHAROSHTHI PUNCTUATION CIRCLE
+10A53;BA # KHAROSHTHI PUNCTUATION CRESCENT BAR
+10A54;BA # KHAROSHTHI PUNCTUATION MANGALAM
+10A55;BA # KHAROSHTHI PUNCTUATION LOTUS
+10A56;BA # KHAROSHTHI PUNCTUATION DANDA
+10A57;BA # KHAROSHTHI PUNCTUATION DOUBLE DANDA
+10A58;AL # KHAROSHTHI PUNCTUATION LINES
1D000;AL # BYZANTINE MUSICAL SYMBOL PSILI
1D001;AL # BYZANTINE MUSICAL SYMBOL DASEIA
1D002;AL # BYZANTINE MUSICAL SYMBOL PERISPOMENI
@@ -13152,6 +15134,76 @@ FFFD;AI # REPLACEMENT CHARACTER
1D1DB;AL # MUSICAL SYMBOL SCANDICUS FLEXUS
1D1DC;AL # MUSICAL SYMBOL TORCULUS RESUPINUS
1D1DD;AL # MUSICAL SYMBOL PES SUBPUNCTIS
+1D200;AL # GREEK VOCAL NOTATION SYMBOL-1
+1D201;AL # GREEK VOCAL NOTATION SYMBOL-2
+1D202;AL # GREEK VOCAL NOTATION SYMBOL-3
+1D203;AL # GREEK VOCAL NOTATION SYMBOL-4
+1D204;AL # GREEK VOCAL NOTATION SYMBOL-5
+1D205;AL # GREEK VOCAL NOTATION SYMBOL-6
+1D206;AL # GREEK VOCAL NOTATION SYMBOL-7
+1D207;AL # GREEK VOCAL NOTATION SYMBOL-8
+1D208;AL # GREEK VOCAL NOTATION SYMBOL-9
+1D209;AL # GREEK VOCAL NOTATION SYMBOL-10
+1D20A;AL # GREEK VOCAL NOTATION SYMBOL-11
+1D20B;AL # GREEK VOCAL NOTATION SYMBOL-12
+1D20C;AL # GREEK VOCAL NOTATION SYMBOL-13
+1D20D;AL # GREEK VOCAL NOTATION SYMBOL-14
+1D20E;AL # GREEK VOCAL NOTATION SYMBOL-15
+1D20F;AL # GREEK VOCAL NOTATION SYMBOL-16
+1D210;AL # GREEK VOCAL NOTATION SYMBOL-17
+1D211;AL # GREEK VOCAL NOTATION SYMBOL-18
+1D212;AL # GREEK VOCAL NOTATION SYMBOL-19
+1D213;AL # GREEK VOCAL NOTATION SYMBOL-20
+1D214;AL # GREEK VOCAL NOTATION SYMBOL-21
+1D215;AL # GREEK VOCAL NOTATION SYMBOL-22
+1D216;AL # GREEK VOCAL NOTATION SYMBOL-23
+1D217;AL # GREEK VOCAL NOTATION SYMBOL-24
+1D218;AL # GREEK VOCAL NOTATION SYMBOL-50
+1D219;AL # GREEK VOCAL NOTATION SYMBOL-51
+1D21A;AL # GREEK VOCAL NOTATION SYMBOL-52
+1D21B;AL # GREEK VOCAL NOTATION SYMBOL-53
+1D21C;AL # GREEK VOCAL NOTATION SYMBOL-54
+1D21D;AL # GREEK INSTRUMENTAL NOTATION SYMBOL-1
+1D21E;AL # GREEK INSTRUMENTAL NOTATION SYMBOL-2
+1D21F;AL # GREEK INSTRUMENTAL NOTATION SYMBOL-4
+1D220;AL # GREEK INSTRUMENTAL NOTATION SYMBOL-5
+1D221;AL # GREEK INSTRUMENTAL NOTATION SYMBOL-7
+1D222;AL # GREEK INSTRUMENTAL NOTATION SYMBOL-8
+1D223;AL # GREEK INSTRUMENTAL NOTATION SYMBOL-11
+1D224;AL # GREEK INSTRUMENTAL NOTATION SYMBOL-12
+1D225;AL # GREEK INSTRUMENTAL NOTATION SYMBOL-13
+1D226;AL # GREEK INSTRUMENTAL NOTATION SYMBOL-14
+1D227;AL # GREEK INSTRUMENTAL NOTATION SYMBOL-17
+1D228;AL # GREEK INSTRUMENTAL NOTATION SYMBOL-18
+1D229;AL # GREEK INSTRUMENTAL NOTATION SYMBOL-19
+1D22A;AL # GREEK INSTRUMENTAL NOTATION SYMBOL-23
+1D22B;AL # GREEK INSTRUMENTAL NOTATION SYMBOL-24
+1D22C;AL # GREEK INSTRUMENTAL NOTATION SYMBOL-25
+1D22D;AL # GREEK INSTRUMENTAL NOTATION SYMBOL-26
+1D22E;AL # GREEK INSTRUMENTAL NOTATION SYMBOL-27
+1D22F;AL # GREEK INSTRUMENTAL NOTATION SYMBOL-29
+1D230;AL # GREEK INSTRUMENTAL NOTATION SYMBOL-30
+1D231;AL # GREEK INSTRUMENTAL NOTATION SYMBOL-32
+1D232;AL # GREEK INSTRUMENTAL NOTATION SYMBOL-36
+1D233;AL # GREEK INSTRUMENTAL NOTATION SYMBOL-37
+1D234;AL # GREEK INSTRUMENTAL NOTATION SYMBOL-38
+1D235;AL # GREEK INSTRUMENTAL NOTATION SYMBOL-39
+1D236;AL # GREEK INSTRUMENTAL NOTATION SYMBOL-40
+1D237;AL # GREEK INSTRUMENTAL NOTATION SYMBOL-42
+1D238;AL # GREEK INSTRUMENTAL NOTATION SYMBOL-43
+1D239;AL # GREEK INSTRUMENTAL NOTATION SYMBOL-45
+1D23A;AL # GREEK INSTRUMENTAL NOTATION SYMBOL-47
+1D23B;AL # GREEK INSTRUMENTAL NOTATION SYMBOL-48
+1D23C;AL # GREEK INSTRUMENTAL NOTATION SYMBOL-49
+1D23D;AL # GREEK INSTRUMENTAL NOTATION SYMBOL-50
+1D23E;AL # GREEK INSTRUMENTAL NOTATION SYMBOL-51
+1D23F;AL # GREEK INSTRUMENTAL NOTATION SYMBOL-52
+1D240;AL # GREEK INSTRUMENTAL NOTATION SYMBOL-53
+1D241;AL # GREEK INSTRUMENTAL NOTATION SYMBOL-54
+1D242;CM # COMBINING GREEK MUSICAL TRISEME
+1D243;CM # COMBINING GREEK MUSICAL TETRASEME
+1D244;CM # COMBINING GREEK MUSICAL PENTASEME
+1D245;AL # GREEK MUSICAL LEIMMA
1D300;AL # MONOGRAM FOR EARTH
1D301;AL # DIGRAM FOR HEAVENLY EARTH
1D302;AL # DIGRAM FOR HUMAN EARTH
@@ -13891,6 +15943,8 @@ FFFD;AI # REPLACEMENT CHARACTER
1D6A1;AL # MATHEMATICAL MONOSPACE SMALL X
1D6A2;AL # MATHEMATICAL MONOSPACE SMALL Y
1D6A3;AL # MATHEMATICAL MONOSPACE SMALL Z
+1D6A4;AL # MATHEMATICAL ITALIC SMALL DOTLESS I
+1D6A5;AL # MATHEMATICAL ITALIC SMALL DOTLESS J
1D6A8;AL # MATHEMATICAL BOLD CAPITAL ALPHA
1D6A9;AL # MATHEMATICAL BOLD CAPITAL BETA
1D6AA;AL # MATHEMATICAL BOLD CAPITAL GAMMA
diff --git a/gnu/usr.bin/perl/lib/unicore/NamedSequences.txt b/gnu/usr.bin/perl/lib/unicore/NamedSequences.txt
new file mode 100644
index 00000000000..c880c50b911
--- /dev/null
+++ b/gnu/usr.bin/perl/lib/unicore/NamedSequences.txt
@@ -0,0 +1,95 @@
+# NamedSequences-4.1.0.txt
+# Date: 2005-214, 13:10 PST [KW]
+#
+# Unicode Character Database
+# Copyright (c) 1991-2005 Unicode, Inc.
+# For terms of use, see http://www.unicode.org/terms_of_use.html
+# For documentation, see UCD.html
+#
+# Format:
+# Name of Sequence; Code Point Sequence for USI
+#
+# Note: The order of entries in this file is not significant.
+# However, entries are generally in script order corresponding
+# to block order in the Unicode Standard, to make it easier
+# to find entries in the list.
+
+# ================================================
+
+LATIN CAPITAL LETTER A WITH MACRON AND GRAVE;0100 0300
+LATIN SMALL LETTER A WITH MACRON AND GRAVE;0101 0300
+LATIN SMALL LETTER A WITH ACUTE AND OGONEK;00E1 0328
+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
+LATIN SMALL LETTER O WITH VERTICAL LINE BELOW AND GRAVE;00F2 0329
+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
+GURMUKHI HALF YA;0A2F 0A4D
+GURMUKHI PARI CA;0A4D 0A1A
+GURMUKHI PARI TA;0A4D 0A24
+GURMUKHI PARI NA;0A4D 0A28
+GURMUKHI PARI YA;0A4D 0A2F
+GURMUKHI PARI VA;0A4D 0A35
+GEORGIAN LETTER U-BRJGU;10E3 0302
+KHMER CONSONANT SIGN COENG KA;17D2 1780
+KHMER CONSONANT SIGN COENG KHA;17D2 1781
+KHMER CONSONANT SIGN COENG KO;17D2 1782
+KHMER CONSONANT SIGN COENG KHO;17D2 1783
+KHMER CONSONANT SIGN COENG NGO;17D2 1784
+KHMER CONSONANT SIGN COENG CA;17D2 1785
+KHMER CONSONANT SIGN COENG CHA;17D2 1786
+KHMER CONSONANT SIGN COENG CO;17D2 1787
+KHMER CONSONANT SIGN COENG CHO;17D2 1788
+KHMER CONSONANT SIGN COENG NYO;17D2 1789
+KHMER CONSONANT SIGN COENG DA;17D2 178A
+KHMER CONSONANT SIGN COENG TTHA;17D2 178B
+KHMER CONSONANT SIGN COENG DO;17D2 178C
+KHMER CONSONANT SIGN COENG TTHO;17D2 178D
+KHMER CONSONANT SIGN COENG NA;17D2 178E
+KHMER CONSONANT SIGN COENG TA;17D2 178F
+KHMER CONSONANT SIGN COENG THA;17D2 1790
+KHMER CONSONANT SIGN COENG TO;17D2 1791
+KHMER CONSONANT SIGN COENG THO;17D2 1792
+KHMER CONSONANT SIGN COENG NO;17D2 1793
+KHMER CONSONANT SIGN COENG BA;17D2 1794
+KHMER CONSONANT SIGN COENG PHA;17D2 1795
+KHMER CONSONANT SIGN COENG PO;17D2 1796
+KHMER CONSONANT SIGN COENG PHO;17D2 1797
+KHMER CONSONANT SIGN COENG MO;17D2 1798
+KHMER CONSONANT SIGN COENG YO;17D2 1799
+KHMER CONSONANT SIGN COENG RO;17D2 179A
+KHMER CONSONANT SIGN COENG LO;17D2 179B
+KHMER CONSONANT SIGN COENG VO;17D2 179C
+KHMER CONSONANT SIGN COENG SHA;17D2 179D
+KHMER CONSONANT SIGN COENG SSA;17D2 179E
+KHMER CONSONANT SIGN COENG SA;17D2 179F
+KHMER CONSONANT SIGN COENG HA;17D2 17A0
+KHMER CONSONANT SIGN COENG LA;17D2 17A1
+KHMER VOWEL SIGN COENG QA;17D2 17A2
+KHMER INDEPENDENT VOWEL SIGN COENG QU;17D2 17A7
+KHMER INDEPENDENT VOWEL SIGN COENG RY;17D2 17AB
+KHMER INDEPENDENT VOWEL SIGN COENG RYY;17D2 17AC
+KHMER INDEPENDENT VOWEL SIGN COENG QE;17D2 17AF
+KHMER VOWEL SIGN OM;17BB 17C6
+KHMER VOWEL SIGN AAM;17B6 17C6
+KATAKANA LETTER AINU P;31F7 309A
+MODIFIER LETTER EXTRA-HIGH EXTRA-LOW CONTOUR TONE BAR;02E5 02E9
diff --git a/gnu/usr.bin/perl/lib/unicore/NamesList.txt b/gnu/usr.bin/perl/lib/unicore/NamesList.txt
index 2aa1e7f23a5..6adb13d920c 100644
--- a/gnu/usr.bin/perl/lib/unicore/NamesList.txt
+++ b/gnu/usr.bin/perl/lib/unicore/NamesList.txt
@@ -1,12 +1,22 @@
-@@@ The Unicode Standard 4.0
-@@@+ U40M030411.lst
- Final Unicode 4.0 names list.
+@@@ The Unicode Standard 4.1
+@@@+ U41M050317.lst
+ Draft Unicode 4.1 names list.
+ Major merger of post-Unicode 4.0 additions with Amd1 name file (xia050208.lst).
+ Accumulation of fixes post-Unicode 4.0. (5th collection)
+ Add alias for 2D53.
+ Corrected alias for 2697.
+ Subdivided headers for Modifier Tone Letters.
+ Add xrefs for 1DC0 and 1DC3.
+ Updated annotation for 301C.
+ Add xref to 2026 and 22EE for FE19.
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.
+@+ Copyright (c) 1991-2005 Unicode, Inc.
+ For terms of use, see http://www.unicode.org/terms_of_use.html
@@ 0000 C0 Controls and Basic Latin (Basic Latin) 007F
@ C0 controls
@+ Alias names are those for ISO/IEC 6429:1992. Commonly used alternative aliases are also shown.
@@ -36,6 +46,7 @@
= new line (NL), end of line (EOL)
000B <control>
= LINE TABULATION
+ = vertical tabulation (VT)
000C <control>
= FORM FEED (FF)
000D <control>
@@ -213,6 +224,7 @@
x (question exclamation mark - 2048)
x (exclamation question mark - 2049)
0040 COMMERCIAL AT
+ = Klammeraffe (common, humorous slang German name)
@ Uppercase Latin alphabet
0041 LATIN CAPITAL LETTER A
0042 LATIN CAPITAL LETTER B
@@ -354,6 +366,7 @@
* this is a spacing character
x (small tilde - 02DC)
x (combining tilde - 0303)
+ x (swung dash - 2053)
x (tilde operator - 223C)
x (fullwidth tilde - FF5E)
@ Control character
@@ -440,7 +453,6 @@
= pound sterling, Irish punt, Italian lira, Turkish lira, etc.
x (lira sign - 20A4)
00A4 CURRENCY SIGN
- = Filzlaus, Ricardi-Sonne (German names)
* other currency symbol characters: 20A0-20AF
x (dollar sign - 0024)
00A5 YEN SIGN
@@ -544,13 +556,13 @@
00BC VULGAR FRACTION ONE QUARTER
* bar may be horizontal or slanted
* other fraction characters: 2153-215E
- # 0031 2044 0034
+ # <fraction> 0031 2044 0034
00BD VULGAR FRACTION ONE HALF
* bar may be horizontal or slanted
- # 0031 2044 0032
+ # <fraction> 0031 2044 0032
00BE VULGAR FRACTION THREE QUARTERS
* bar may be horizontal or slanted
- # 0033 2044 0034
+ # <fraction> 0033 2044 0034
00BF INVERTED QUESTION MARK
= turned question mark
* Spanish
@@ -688,6 +700,8 @@
: 006F 0308
@ Mathematical operator
00F7 DIVISION SIGN
+ x (division slash - 2215)
+ x (divides - 2223)
@ Letters
00F8 LATIN SMALL LETTER O WITH STROKE
= LATIN SMALL LETTER O SLASH
@@ -1063,10 +1077,10 @@
* in current use in Fraktur and Gaelic types
# 0073 latin small letter s
@@ 0180 Latin Extended-B 024F
-@ Latin extended-B
+@ Latin Extended-B
0180 LATIN SMALL LETTER B WITH STROKE
* Americanist and Indo-Europeanist usage for phonetic beta
- * Americanist orthographies use an alternate glyph with the stroke through the bowl
+ * Americanist orthographies use an alternate glyph with the stroke through the bowl
* Old Saxon
x (greek small letter beta - 03B2)
x (blank symbol - 2422)
@@ -1107,7 +1121,8 @@
018C LATIN SMALL LETTER D WITH TOPBAR
* former-Soviet minority language scripts
018D LATIN SMALL LETTER TURNED DELTA
- * archaic phonetic for labialized dental fricative
+ = reversed Polish-hook o
+ * archaic phonetic for labialized alveolar fricative
* recommended spellings 007A 02B7 or 007A 032B
018E LATIN CAPITAL LETTER REVERSED E
= LATIN CAPITAL LETTER TURNED E
@@ -1163,9 +1178,9 @@
* African
x (latin small letter n with left hook - 0272)
019E LATIN SMALL LETTER N WITH LONG RIGHT LEG
- * archaic phonetic for Japanese syllabic "n"
- * recommended spelling 006E 0329
- * Lakota
+ * archaic phonetic for Japanese 3093
+ * recommended spelling for syllabic n is 006E 0329
+ * Lakota (indicates nasalization of vowel)
x (latin capital letter n with long right leg - 0220)
019F LATIN CAPITAL LETTER O WITH MIDDLE TILDE *
= barred o, o bar
@@ -1205,6 +1220,7 @@
* archaic phonetic for palatalized alveolar or dental stop
* recommended spelling 0074 02B2
01AC LATIN CAPITAL LETTER T WITH HOOK
+ * a glyph variant with hook at the right also occurs
01AD LATIN SMALL LETTER T WITH HOOK
* African
01AE LATIN CAPITAL LETTER T WITH RETROFLEX HOOK
@@ -1225,6 +1241,7 @@
* African
x (latin small letter v with hook - 028B)
01B3 LATIN CAPITAL LETTER Y WITH HOOK
+ * a glyph variant with hook at the right also occurs
01B4 LATIN SMALL LETTER Y WITH HOOK
* Bini, Esoko, and other Edo languages in West Africa
01B5 LATIN CAPITAL LETTER Z WITH STROKE
@@ -1565,6 +1582,27 @@
0234 LATIN SMALL LETTER L WITH CURL
0235 LATIN SMALL LETTER N WITH CURL
0236 LATIN SMALL LETTER T WITH CURL
+@ Miscellaneous additions
+0237 LATIN SMALL LETTER DOTLESS J
+ x (mathematical italic small dotless j - 1D6A5)
+0238 LATIN SMALL LETTER DB DIGRAPH
+ * used in Africanist linguistics
+0239 LATIN SMALL LETTER QP DIGRAPH
+ * used in Africanist linguistics
+023A LATIN CAPITAL LETTER A WITH STROKE
+ * Sencoten
+023B LATIN CAPITAL LETTER C WITH STROKE
+ * Sencoten
+023C LATIN SMALL LETTER C WITH STROKE
+ * used in Americanist linguistics
+023D LATIN CAPITAL LETTER L WITH BAR
+ * Sencoten
+023E LATIN CAPITAL LETTER T WITH DIAGONAL STROKE
+ * Sencoten
+023F LATIN SMALL LETTER S WITH SWASH TAIL
+0240 LATIN SMALL LETTER Z WITH SWASH TAIL
+0241 LATIN CAPITAL LETTER GLOTTAL STOP
+ * lowercase is 0294
@@ 0250 IPA Extensions 02AF
@ IPA extensions
@+ IPA includes basic Latin letters and a number of Latin or Greek letters from other blocks.
@@ -1805,6 +1843,7 @@
0293 LATIN SMALL LETTER EZH WITH CURL
* palatalized voiced postalveolar fricative
0294 LATIN LETTER GLOTTAL STOP
+ * uppercase is 0241
x (modifier letter glottal stop - 02C0)
0295 LATIN LETTER PHARYNGEAL VOICED FRICATIVE
= LATIN LETTER REVERSED GLOTTAL STOP
@@ -1869,7 +1908,7 @@
02AD LATIN LETTER BIDENTAL PERCUSSIVE
* audible teeth gnashing
@ Additions for Sinology
-02AE LATIN SMALL LETTER TURNED H WITH FISHHOOK
+02AE LATIN SMALL LETTER TURNED H WITH FISHHOOK
02AF LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL
@@ 02B0 Spacing Modifier Letters 02FF
@ Latin superscript modifier letters
@@ -1930,6 +1969,7 @@
* glottal stop, glottalization, ejective
* spacing clone of Greek smooth breathing mark
* many languages use this as a letter of their alphabets
+ * 2019 is the preferred character for a punctuation apostrophe
x (apostrophe - 0027)
x (combining comma above - 0313)
x (combining comma above right - 0315)
@@ -2039,6 +2079,7 @@
* retracted or backed articulation
* glyph may have small end-serifs
x (combining minus sign below - 0320)
+ x (minus sign - 2212)
@ Spacing clones of diacritics
02D8 BREVE
x (combining breve - 0306)
@@ -2085,6 +2126,7 @@
02E7 MODIFIER LETTER MID TONE BAR
02E8 MODIFIER LETTER LOW TONE BAR
02E9 MODIFIER LETTER EXTRA-LOW TONE BAR
+@ Extended Bopomofo tone marks
02EA MODIFIER LETTER YIN DEPARTING TONE MARK
02EB MODIFIER LETTER YANG DEPARTING TONE MARK
@ IPA modifiers
@@ -2359,7 +2401,20 @@
0355 COMBINING RIGHT ARROWHEAD BELOW
0356 COMBINING RIGHT ARROWHEAD AND UP ARROWHEAD BELOW
0357 COMBINING RIGHT HALF RING ABOVE
+@ Miscellaneous additions
+0358 COMBINING DOT ABOVE RIGHT
+ * Latin transliterations of the Southern Min dialects of Chinese
+0359 COMBINING ASTERISK BELOW
+035A COMBINING DOUBLE RING BELOW
+ * Kharoshthi transliteration
+035B COMBINING ZIGZAG ABOVE
+ * Latin abbreviation, Lithuanian phonetics and mediaevalist transcriptions
@ Double diacritics
+035C COMBINING DOUBLE BREVE BELOW
+ = ligature tie below, papyrological hyphen
+ * a common glyph alternate connects the horizontal midpoints of the characters
+ x (combining double breve - 035D)
+ x (combining double inverted breve - 0361)
035D COMBINING DOUBLE BREVE
035E COMBINING DOUBLE MACRON
035F COMBINING DOUBLE MACRON BELOW
@@ -2414,7 +2469,7 @@
: 0391 0301
0387 GREEK ANO TELEIA
* functions in Greek like a semicolon
- * 00B7 is the preferred character
+ * 00B7 is the preferred character
: 00B7 middle dot
0388 GREEK CAPITAL LETTER EPSILON WITH TONOS
: 0395 0301
@@ -2562,10 +2617,11 @@
# 03C0 greek small letter pi
03D7 GREEK KAI SYMBOL
* used as an ampersand
+ x (coptic symbol kai - 2CE4)
@ Archaic letters
03D8 GREEK LETTER ARCHAIC KOPPA *
03D9 GREEK SMALL LETTER ARCHAIC KOPPA *
- * the Q-shaped archaic koppas are the ordinary alphabetic letters
+ * the Q-shaped archaic koppas are the ordinary alphabetic letters and can also be used as symbols with a numeric value of 90 in classical and pre-classical texts
03DA GREEK LETTER STIGMA
* apparently in origin a cursive form of digamma
* the name "stigma" originally applied to a medieval sigma-tau ligature, whose shape was confusably similar to the cursive digamma
@@ -2582,6 +2638,7 @@
03E1 GREEK SMALL LETTER SAMPI
* used as a symbol with a numeric value of 900
@ Coptic letters derived from Demotic
+@+ For other Coptic letters see the Coptic Block.
03E2 COPTIC CAPITAL LETTER SHEI
03E3 COPTIC SMALL LETTER SHEI
03E4 COPTIC CAPITAL LETTER FEI
@@ -2630,6 +2687,16 @@
@ Archaic letters
03FA GREEK CAPITAL LETTER SAN
03FB GREEK SMALL LETTER SAN
+@ Symbol
+03FC GREEK RHO WITH STROKE SYMBOL
+ * used with abbreviations containing 03C1
+@ Editorial symbols
+03FD GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL
+ = antisigma
+03FE GREEK CAPITAL DOTTED LUNATE SIGMA SYMBOL
+ = sigma periestigmenon
+03FF GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL
+ = antisigma periestigmenon
@@ 0400 Cyrillic 04FF
@ Cyrillic extensions
0400 CYRILLIC CAPITAL LETTER IE WITH GRAVE
@@ -2643,6 +2710,7 @@
0405 CYRILLIC CAPITAL LETTER DZE
0406 CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
x (latin capital letter i - 0049)
+ x (cyrillic small letter byelorussian-ukrainian i - 0456)
x (cyrillic letter palochka - 04C0)
0407 CYRILLIC CAPITAL LETTER YI (Ukrainian)
: 0406 0308
@@ -2783,7 +2851,6 @@
0461 CYRILLIC SMALL LETTER OMEGA
0462 CYRILLIC CAPITAL LETTER YAT
0463 CYRILLIC SMALL LETTER YAT
- * Old Russian
0464 CYRILLIC CAPITAL LETTER IOTIFIED E
0465 CYRILLIC SMALL LETTER IOTIFIED E
0466 CYRILLIC CAPITAL LETTER LITTLE YUS
@@ -3020,11 +3087,14 @@
: 0427 0308
04F5 CYRILLIC SMALL LETTER CHE WITH DIAERESIS
: 0447 0308
+04F6 CYRILLIC CAPITAL LETTER GHE WITH DESCENDER
+04F7 CYRILLIC SMALL LETTER GHE WITH DESCENDER
+ * Yupik
04F8 CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS
: 042B 0308
04F9 CYRILLIC SMALL LETTER YERU WITH DIAERESIS
: 044B 0308
-@@ 0500 Cyrillic Supplementary 052F
+@@ 0500 Cyrillic Supplement 052F
@ Komi letters
0500 CYRILLIC CAPITAL LETTER KOMI DE
0501 CYRILLIC SMALL LETTER KOMI DE
@@ -3155,12 +3225,14 @@
@@ 0590 Hebrew 05FF
@ Cantillation marks
0591 HEBREW ACCENT ETNAHTA
+ = atnah
0592 HEBREW ACCENT SEGOL
+ = segolta
0593 HEBREW ACCENT SHALSHELET
0594 HEBREW ACCENT ZAQEF QATAN
0595 HEBREW ACCENT ZAQEF GADOL
0596 HEBREW ACCENT TIPEHA *
- = tarha
+ = tarha, me'ayla ~ mayla
0597 HEBREW ACCENT REVIA
0598 HEBREW ACCENT ZARQA *
= tsinorit, zinorit; tsinor, zinor
@@ -3170,11 +3242,16 @@
059A HEBREW ACCENT YETIV
059B HEBREW ACCENT TEVIR
059C HEBREW ACCENT GERESH
+ = teres
059D HEBREW ACCENT GERESH MUQDAM
059E HEBREW ACCENT GERSHAYIM
059F HEBREW ACCENT QARNEY PARA
+ = pazer gadol
05A0 HEBREW ACCENT TELISHA GEDOLA
05A1 HEBREW ACCENT PAZER
+ = pazer qatan
+05A2 HEBREW ACCENT ATNAH HAFUKH
+ x (hebrew accent yerah ben yomo - 05AA)
05A3 HEBREW ACCENT MUNAH
05A4 HEBREW ACCENT MAHAPAKH
05A5 HEBREW ACCENT MERKHA *
@@ -3186,6 +3263,7 @@
05A9 HEBREW ACCENT TELISHA QETANA
05AA HEBREW ACCENT YERAH BEN YOMO *
= galgal
+ x (hebrew accent atnah hafukh - 05A2)
05AB HEBREW ACCENT OLE
05AC HEBREW ACCENT ILUY
05AD HEBREW ACCENT DEHI
@@ -3205,6 +3283,7 @@
05B7 HEBREW POINT PATAH
* furtive patah is not a distinct character
05B8 HEBREW POINT QAMATS
+ x (hebrew point qamats qatan - 05C7)
05B9 HEBREW POINT HOLAM
05BB HEBREW POINT QUBUTS
05BC HEBREW POINT DAGESH OR MAPIQ (or shuruq)
@@ -3225,7 +3304,17 @@
05C3 HEBREW PUNCTUATION SOF PASUQ *
* may be used as a Hebrew punctuation colon
x (colon - 003A)
+@ Puncta extraordinaria
05C4 HEBREW MARK UPPER DOT
+05C5 HEBREW MARK LOWER DOT
+ * punctum extraordinarium (Psalms 27:13)
+ x (hebrew point hiriq - 05B4)
+@ Points and punctuation
+05C6 HEBREW PUNCTUATION NUN HAFUKHA
+ * does not historically derive from the letter nun
+ x (hebrew letter nun - 05E0)
+05C7 HEBREW POINT QAMATS QATAN
+ x (hebrew point qamats - 05B8)
@ Based on ISO 8859-8
05D0 HEBREW LETTER ALEF
= aleph
@@ -3275,6 +3364,8 @@
0601 ARABIC SIGN SANAH
0602 ARABIC FOOTNOTE MARKER
0603 ARABIC SIGN SAFHA
+@ Currency sign
+060B AFGHANI SIGN
@ Punctuation
060C ARABIC COMMA
* also used with Thaana and Syriac in modern text
@@ -3295,13 +3386,14 @@
0614 ARABIC SIGN TAKHALLUS
* sign placed over the name or nom-de-plume of a poet, or in some writings used to mark all proper names
@ Koranic annotation sign
-0615 ARABIC SMALL HIGH TAH
+0615 ARABIC SMALL HIGH TAH
* marks a recommended pause position in some Korans published in Iran and Pakistan
* should not be confused with the small TAH sign used as a diacritic for some letters such as 0679
@ Punctuation
061B ARABIC SEMICOLON
* also used with Thaana and Syriac in modern text
x (semicolon - 003B)
+061E ARABIC TRIPLE DOT PUNCTUATION MARK
061F ARABIC QUESTION MARK
* also used with Thaana and Syriac in modern text
x (question mark - 003F)
@@ -3377,6 +3469,18 @@
0658 ARABIC MARK NOON GHUNNA
* Kashmiri and Baluchi
* indicates nasalization in Urdu
+0659 ARABIC ZWARAKAY
+ * Pashto
+065A ARABIC VOWEL SIGN SMALL V ABOVE
+ * African languages
+065B ARABIC VOWEL SIGN INVERTED SMALL V ABOVE
+ * African languages
+065C ARABIC VOWEL SIGN DOT BELOW
+ * African languages
+065D ARABIC REVERSED DAMMA
+ * Ormuri, African languages
+065E ARABIC FATHA WITH TWO DOTS
+ * Kalami
@ Arabic-Indic digits
@+ These digits are used with Arabic proper; for languages of Iran, Pakistan, and India, see the Eastern Arabic-Indic digits at 06F0..06F9.
0660 ARABIC-INDIC DIGIT ZERO
@@ -3443,7 +3547,7 @@
0680 ARABIC LETTER BEHEH
* Sindhi
0681 ARABIC LETTER HAH WITH HAMZA ABOVE
- * Pashto
+ * Pashto letter "zhe"
0682 ARABIC LETTER HAH WITH TWO DOTS VERTICAL ABOVE
* not used in modern Pashto
0683 ARABIC LETTER NYEH
@@ -3514,6 +3618,7 @@
* Ingush
06A4 ARABIC LETTER VEH
* Middle Eastern Arabic for foreign words
+ * Kurdish
06A5 ARABIC LETTER FEH WITH THREE DOTS BELOW
* North African Arabic for foreign words
06A6 ARABIC LETTER PEHEH
@@ -3637,7 +3742,7 @@
06E0 ARABIC SMALL HIGH UPRIGHT RECTANGULAR ZERO
06E1 ARABIC SMALL HIGH DOTLESS HEAD OF KHAH
= Arabic jazm
- * used in some Korans (Qur'ans) to mark absence of a vowel
+ * used in some Korans to mark absence of a vowel
x (arabic sukun - 0652)
06E2 ARABIC SMALL HIGH MEEM ISOLATED FORM
06E3 ARABIC SMALL LOW SEEN
@@ -3800,6 +3905,51 @@
074D SYRIAC LETTER SOGDIAN ZHAIN
074E SYRIAC LETTER SOGDIAN KHAPH
074F SYRIAC LETTER SOGDIAN FE
+@@ 0750 Arabic Supplement 077F
+@ Extended Arabic letters
+@+ These are primarily used in Arabic-script orthographies of African languages.
+0750 ARABIC LETTER BEH WITH THREE DOTS HORIZONTALLY BELOW
+0751 ARABIC LETTER BEH WITH DOT BELOW AND THREE DOTS ABOVE
+0752 ARABIC LETTER BEH WITH THREE DOTS POINTING UPWARDS BELOW
+0753 ARABIC LETTER BEH WITH THREE DOTS POINTING UPWARDS BELOW AND TWO DOTS ABOVE
+0754 ARABIC LETTER BEH WITH TWO DOTS BELOW AND DOT ABOVE
+0755 ARABIC LETTER BEH WITH INVERTED SMALL V BELOW
+0756 ARABIC LETTER BEH WITH SMALL V
+0757 ARABIC LETTER HAH WITH TWO DOTS ABOVE
+0758 ARABIC LETTER HAH WITH THREE DOTS POINTING UPWARDS BELOW
+0759 ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW AND SMALL TAH
+ * Saraiki
+075A ARABIC LETTER DAL WITH INVERTED SMALL V BELOW
+075B ARABIC LETTER REH WITH STROKE
+075C ARABIC LETTER SEEN WITH FOUR DOTS ABOVE
+ * Shina
+075D ARABIC LETTER AIN WITH TWO DOTS ABOVE
+075E ARABIC LETTER AIN WITH THREE DOTS POINTING DOWNWARDS ABOVE
+075F ARABIC LETTER AIN WITH TWO DOTS VERTICALLY ABOVE
+0760 ARABIC LETTER FEH WITH TWO DOTS BELOW
+0761 ARABIC LETTER FEH WITH THREE DOTS POINTING UPWARDS BELOW
+0762 ARABIC LETTER KEHEH WITH DOT ABOVE
+ * old Malay, preferred to 06AC
+ x (arabic letter kaf with dot above - 06AC)
+0763 ARABIC LETTER KEHEH WITH THREE DOTS ABOVE
+ * Moroccan Arabic, Amazigh
+ x (arabic letter ng - 06AD)
+0764 ARABIC LETTER KEHEH WITH THREE DOTS POINTING UPWARDS BELOW
+0765 ARABIC LETTER MEEM WITH DOT ABOVE
+0766 ARABIC LETTER MEEM WITH DOT BELOW
+ * Maba
+0767 ARABIC LETTER NOON WITH TWO DOTS BELOW
+0768 ARABIC LETTER NOON WITH SMALL TAH
+ * Saraiki, Pathwari
+0769 ARABIC LETTER NOON WITH SMALL V
+ * Gojri
+076A ARABIC LETTER LAM WITH BAR
+076B ARABIC LETTER REH WITH TWO DOTS VERTICALLY ABOVE
+ * Torwali, Ormuri
+076C ARABIC LETTER REH WITH HAMZA ABOVE
+ * Ormuri
+076D ARABIC LETTER SEEN WITH TWO DOTS VERTICALLY ABOVE
+ * Kalami, Ormuri
@@ 0780 Thaana 07BF
@ Basic consonants
0780 THAANA LETTER HAA
@@ -3959,6 +4109,7 @@
* suppresses inherent vowel
0950 DEVANAGARI OM
0951 DEVANAGARI STRESS SIGN UDATTA
+ * mostly used for Rigvedic svarita, with rare use for Yajurvedic udatta
0952 DEVANAGARI STRESS SIGN ANUDATTA
0953 DEVANAGARI GRAVE ACCENT
0954 DEVANAGARI ACUTE ACCENT
@@ -4002,6 +4153,10 @@
096F DEVANAGARI DIGIT NINE
@ Devanagari-specific additions
0970 DEVANAGARI ABBREVIATION SIGN
+@ Glottal stop
+097D DEVANAGARI LETTER GLOTTAL STOP
+ * used for writing Limbu in Devanagari
+ * a glyph variant has the connecting top bar
@@ 0980 Bengali 09FF
@ Based on ISCII 1988
@ Various signs
@@ -4078,9 +4233,12 @@
: 09C7 09BE
09CC BENGALI VOWEL SIGN AU
: 09C7 09D7
-@ Various signs
+@ Sign
09CD BENGALI SIGN VIRAMA
= hasant (Bengali term for halant)
+@ Additional consonant
+09CE BENGALI LETTER KHANDA TA
+@ Sign
09D7 BENGALI AU LENGTH MARK
@ Additional consonants
09DC BENGALI LETTER RRA
@@ -4369,6 +4527,7 @@
0B2D ORIYA LETTER BHA
0B2E ORIYA LETTER MA
0B2F ORIYA LETTER YA
+ = ja
0B30 ORIYA LETTER RA
0B32 ORIYA LETTER LA
0B33 ORIYA LETTER LLA
@@ -4412,6 +4571,7 @@
= ddha
: 0B22 0B3C
0B5F ORIYA LETTER YYA
+ = ya
@ Generic additions
0B60 ORIYA LETTER VOCALIC RR
0B61 ORIYA LETTER VOCALIC LL
@@ -4472,6 +4632,7 @@
0BB3 TAMIL LETTER LLA
0BB4 TAMIL LETTER LLLA
0BB5 TAMIL LETTER VA
+0BB6 TAMIL LETTER SHA
0BB7 TAMIL LETTER SSA
0BB8 TAMIL LETTER SA
0BB9 TAMIL LETTER HA
@@ -4499,8 +4660,7 @@
0BCD TAMIL SIGN VIRAMA
0BD7 TAMIL AU LENGTH MARK
@ Digits
-0BE6 <reserved>
- x (digit zero - 0030)
+0BE6 TAMIL DIGIT ZERO
0BE7 TAMIL DIGIT ONE
0BE8 TAMIL DIGIT TWO
0BE9 TAMIL DIGIT THREE
@@ -5070,6 +5230,7 @@
0E30 THAI CHARACTER SARA A
0E31 THAI CHARACTER MAI HAN-AKAT
0E32 THAI CHARACTER SARA AA
+ x (thai character lakkhangyao - 0E45)
0E33 THAI CHARACTER SARA AM
# 0E4D 0E32
0E34 THAI CHARACTER SARA I
@@ -5093,7 +5254,8 @@
= sara ai mai malai
0E45 THAI CHARACTER LAKKHANGYAO (lakkhang yao)
= lakkhang yao
- * special vowel used with 0E24 or 0E26
+ * special vowel length indication used with 0E24 or 0E26
+ x (thai character sara aa - 0E32)
@ Sign
0E46 THAI CHARACTER MAIYAMOK (mai yamok)
= mai yamok
@@ -5520,6 +5682,11 @@
x (cjk unified ideograph-534D - 534D)
@ Astrological sign
0FCF TIBETAN SIGN RDEL NAG GSUM (dena sum)
+@ Marks
+0FD0 TIBETAN MARK BSKA- SHOG GI MGO RGYAN (ka shog gi go gyen)
+ * used in Bhutan
+0FD1 TIBETAN MARK MNYAM YIG GI MGO RGYAN (nyam yig gi go gyen)
+ * used in Bhutan
@@ 1000 Myanmar 109F
@ Consonants
1000 MYANMAR LETTER KA
@@ -5616,8 +5783,8 @@
1058 MYANMAR VOWEL SIGN VOCALIC L
1059 MYANMAR VOWEL SIGN VOCALIC LL
@@ 10A0 Georgian 10FF
-@ Khutsuri
-@+ This is the uppercase of the old ecclesiastical alphabet. The style shown in the code charts is known as Asomtavruli.
+@ Capital letters (Khutsuri)
+@+ This is the uppercase of the old ecclesiastical alphabet. The style shown in the code charts is known as Asomtavruli. See the Georgian Supplement block for lowercase Nuskhuri.
10A0 GEORGIAN CAPITAL LETTER AN (Khutsuri)
10A1 GEORGIAN CAPITAL LETTER BAN (Khutsuri)
10A2 GEORGIAN CAPITAL LETTER GAN (Khutsuri)
@@ -5701,8 +5868,14 @@
@ Additional letters for Mingrelian and Svan
10F7 GEORGIAN LETTER YN
10F8 GEORGIAN LETTER ELIFI
+@ Additional letters
+10F9 GEORGIAN LETTER TURNED GAN
+10FA GEORGIAN LETTER AIN
@ Punctuation
10FB GEORGIAN PARAGRAPH SEPARATOR
+@ Modifier letter
+10FC MODIFIER LETTER GEORGIAN NAR
+ # <super> 10DC
@@ 1100 Hangul Jamo 11FF
@+ The aliases in this block represent the Jamo short names.
@ Korean combining alphabet
@@ -5939,7 +6112,7 @@
11B7 HANGUL JONGSEONG MIEUM (m) *
= M
11B8 HANGUL JONGSEONG PIEUP (b) *
- = M
+ = B
11B9 HANGUL JONGSEONG PIEUP-SIOS (bs) *
= BS
11BA HANGUL JONGSEONG SIOS (s) *
@@ -6024,6 +6197,7 @@
1204 ETHIOPIC SYLLABLE HEE
1205 ETHIOPIC SYLLABLE HE
1206 ETHIOPIC SYLLABLE HO
+1207 ETHIOPIC SYLLABLE HOA
1208 ETHIOPIC SYLLABLE LA
1209 ETHIOPIC SYLLABLE LU
120A ETHIOPIC SYLLABLE LI
@@ -6087,6 +6261,7 @@
1244 ETHIOPIC SYLLABLE QEE
1245 ETHIOPIC SYLLABLE QE
1246 ETHIOPIC SYLLABLE QO
+1247 ETHIOPIC SYLLABLE QOA
1248 ETHIOPIC SYLLABLE QWA
124A ETHIOPIC SYLLABLE QWI
124B ETHIOPIC SYLLABLE QWAA
@@ -6143,6 +6318,7 @@
1284 ETHIOPIC SYLLABLE XEE
1285 ETHIOPIC SYLLABLE XE
1286 ETHIOPIC SYLLABLE XO
+1287 ETHIOPIC SYLLABLE XOA
1288 ETHIOPIC SYLLABLE XWA
128A ETHIOPIC SYLLABLE XWI
128B ETHIOPIC SYLLABLE XWAA
@@ -6179,6 +6355,7 @@
12AC ETHIOPIC SYLLABLE KEE
12AD ETHIOPIC SYLLABLE KE
12AE ETHIOPIC SYLLABLE KO
+12AF ETHIOPIC SYLLABLE KOA
12B0 ETHIOPIC SYLLABLE KWA
12B2 ETHIOPIC SYLLABLE KWI
12B3 ETHIOPIC SYLLABLE KWAA
@@ -6203,6 +6380,7 @@
12CC ETHIOPIC SYLLABLE WEE
12CD ETHIOPIC SYLLABLE WE
12CE ETHIOPIC SYLLABLE WO
+12CF ETHIOPIC SYLLABLE WOA
12D0 ETHIOPIC SYLLABLE PHARYNGEAL A
12D1 ETHIOPIC SYLLABLE PHARYNGEAL U
12D2 ETHIOPIC SYLLABLE PHARYNGEAL I
@@ -6233,6 +6411,7 @@
12EC ETHIOPIC SYLLABLE YEE
12ED ETHIOPIC SYLLABLE YE
12EE ETHIOPIC SYLLABLE YO
+12EF ETHIOPIC SYLLABLE YOA
12F0 ETHIOPIC SYLLABLE DA
12F1 ETHIOPIC SYLLABLE DU
12F2 ETHIOPIC SYLLABLE DI
@@ -6264,6 +6443,7 @@
130C ETHIOPIC SYLLABLE GEE
130D ETHIOPIC SYLLABLE GE
130E ETHIOPIC SYLLABLE GO
+130F ETHIOPIC SYLLABLE GOA
1310 ETHIOPIC SYLLABLE GWA
1312 ETHIOPIC SYLLABLE GWI
1313 ETHIOPIC SYLLABLE GWAA
@@ -6276,6 +6456,7 @@
131C ETHIOPIC SYLLABLE GGEE
131D ETHIOPIC SYLLABLE GGE
131E ETHIOPIC SYLLABLE GGO
+131F ETHIOPIC SYLLABLE GGWAA
1320 ETHIOPIC SYLLABLE THA
1321 ETHIOPIC SYLLABLE THU
1322 ETHIOPIC SYLLABLE THI
@@ -6315,6 +6496,7 @@
1344 ETHIOPIC SYLLABLE TZEE
1345 ETHIOPIC SYLLABLE TZE
1346 ETHIOPIC SYLLABLE TZO
+1347 ETHIOPIC SYLLABLE TZOA
1348 ETHIOPIC SYLLABLE FA
1349 ETHIOPIC SYLLABLE FU
134A ETHIOPIC SYLLABLE FI
@@ -6334,7 +6516,10 @@
1358 ETHIOPIC SYLLABLE RYA
1359 ETHIOPIC SYLLABLE MYA
135A ETHIOPIC SYLLABLE FYA
+@ Combining mark
+135F ETHIOPIC COMBINING GEMINATION MARK
@ Punctuation
+1360 ETHIOPIC SECTION MARK
1361 ETHIOPIC WORDSPACE
1362 ETHIOPIC FULL STOP
1363 ETHIOPIC COMMA
@@ -6365,6 +6550,36 @@
137A ETHIOPIC NUMBER NINETY
137B ETHIOPIC NUMBER HUNDRED
137C ETHIOPIC NUMBER TEN THOUSAND
+@@ 1380 Ethiopic Supplement 139F
+@ Syllables for Sebatbeit
+1380 ETHIOPIC SYLLABLE SEBATBEIT MWA
+1381 ETHIOPIC SYLLABLE MWI
+1382 ETHIOPIC SYLLABLE MWEE
+1383 ETHIOPIC SYLLABLE MWE
+1384 ETHIOPIC SYLLABLE SEBATBEIT BWA
+1385 ETHIOPIC SYLLABLE BWI
+1386 ETHIOPIC SYLLABLE BWEE
+1387 ETHIOPIC SYLLABLE BWE
+1388 ETHIOPIC SYLLABLE SEBATBEIT FWA
+1389 ETHIOPIC SYLLABLE FWI
+138A ETHIOPIC SYLLABLE FWEE
+138B ETHIOPIC SYLLABLE FWE
+138C ETHIOPIC SYLLABLE SEBATBEIT PWA
+138D ETHIOPIC SYLLABLE PWI
+138E ETHIOPIC SYLLABLE PWEE
+138F ETHIOPIC SYLLABLE PWE
+@ Tonal Marks
+@+ Intended for use with a multiline scored layout
+1390 ETHIOPIC TONAL MARK YIZET
+1391 ETHIOPIC TONAL MARK DERET
+1392 ETHIOPIC TONAL MARK RIKRIK
+1393 ETHIOPIC TONAL MARK SHORT RIKRIK
+1394 ETHIOPIC TONAL MARK DIFAT
+1395 ETHIOPIC TONAL MARK KENAT
+1396 ETHIOPIC TONAL MARK CHIRET
+1397 ETHIOPIC TONAL MARK HIDET
+1398 ETHIOPIC TONAL MARK DERET-HIDET
+1399 ETHIOPIC TONAL MARK KURT
@@ 13A0 Cherokee 13FF
@ Syllables
13A0 CHEROKEE LETTER A
@@ -6557,11 +6772,11 @@
* Sayisi (G)
144B CANADIAN SYLLABICS CARRIER H
144C CANADIAN SYLLABICS TE
- * Inuktitut (TAI), Athapascan (DI), Carrier (DO)
+ * Inuktitut (TAI), Athapascan (DI), Carrier (DU)
144D CANADIAN SYLLABICS TAAI
* Inuktitut
144E CANADIAN SYLLABICS TI
- * Athapascan (DE), Carrier (DU)
+ * Athapascan (DE), Carrier (DO)
144F CANADIAN SYLLABICS TII
1450 CANADIAN SYLLABICS TO
* Inuktitut (TU), Athapascan (DO), Carrier (DE), Sayisi (DU)
@@ -6908,6 +7123,8 @@
* Sayisi (TTHU)
156E CANADIAN SYLLABICS TTHA
156F CANADIAN SYLLABICS TTH
+ * probably a mistaken interpretation of an asterisk used to mark a proper noun
+ x (asterisk - 002A)
1570 CANADIAN SYLLABICS TYE
1571 CANADIAN SYLLABICS TYI
1572 CANADIAN SYLLABICS TYO
@@ -7180,9 +7397,12 @@
166A CANADIAN SYLLABICS CARRIER TTSEE
166B CANADIAN SYLLABICS CARRIER TTSI
166C CANADIAN SYLLABICS CARRIER TTSA
-@ Punctuation
+@ Symbol
166D CANADIAN SYLLABICS CHI SIGN
* Algonquian
+ * used as a symbol to denote Christ
+ x (chi rho - 2627)
+@ Punctuation
166E CANADIAN SYLLABICS FULL STOP
@ Syllables
166F CANADIAN SYLLABICS QAI
@@ -7192,7 +7412,7 @@
1673 CANADIAN SYLLABICS NNGO
* Inuktitut (NNGU)
1674 CANADIAN SYLLABICS NNGOO
- * Inuktitut (NNGU)
+ * Inuktitut (NNGUU)
1675 CANADIAN SYLLABICS NNGA
1676 CANADIAN SYLLABICS NNGAA
@@ 1680 Ogham 169F
@@ -7441,7 +7661,7 @@
178C KHMER LETTER DO
178D KHMER LETTER TTHO
178E KHMER LETTER NNO
- * as this character belongs to the first register, its correct transliteration is no, not nno
+ * as this character belongs to the first register, its correct transliteration is nna, not nno
178F KHMER LETTER TA
1790 KHMER LETTER THA
1791 KHMER LETTER TO
@@ -7560,7 +7780,7 @@
* mostly obsolete, a "killer"
* indicates that the base character is the final consonant of a word without its inherent vowel sound
17D2 KHMER SIGN COENG
- * functions to indicate that a following Khmer letter is to be rendered subscripted
+ * functions to indicate that the following Khmer letter is to be rendered subscripted
* shape shown is arbitrary and is not visibly rendered
@ Lunar date sign (deprecated)
17D3 KHMER SIGN BATHAMASAT *
@@ -7949,6 +8169,96 @@
1972 TAI LE LETTER TONE-4
1973 TAI LE LETTER TONE-5
1974 TAI LE LETTER TONE-6
+@@ 1980 New Tai Lue 19DF
+@+ This script is also known as Xishuang Banna Dai.
+@ Consonants
+1980 NEW TAI LUE LETTER HIGH QA
+1981 NEW TAI LUE LETTER LOW QA
+1982 NEW TAI LUE LETTER HIGH KA
+1983 NEW TAI LUE LETTER HIGH XA
+1984 NEW TAI LUE LETTER HIGH NGA
+1985 NEW TAI LUE LETTER LOW KA
+1986 NEW TAI LUE LETTER LOW XA
+1987 NEW TAI LUE LETTER LOW NGA
+1988 NEW TAI LUE LETTER HIGH TSA
+1989 NEW TAI LUE LETTER HIGH SA
+198A NEW TAI LUE LETTER HIGH YA
+198B NEW TAI LUE LETTER LOW TSA
+198C NEW TAI LUE LETTER LOW SA
+198D NEW TAI LUE LETTER LOW YA
+198E NEW TAI LUE LETTER HIGH TA
+198F NEW TAI LUE LETTER HIGH THA
+1990 NEW TAI LUE LETTER HIGH NA
+1991 NEW TAI LUE LETTER LOW TA
+1992 NEW TAI LUE LETTER LOW THA
+1993 NEW TAI LUE LETTER LOW NA
+1994 NEW TAI LUE LETTER HIGH PA
+1995 NEW TAI LUE LETTER HIGH PHA
+1996 NEW TAI LUE LETTER HIGH MA
+1997 NEW TAI LUE LETTER LOW PA
+1998 NEW TAI LUE LETTER LOW PHA
+1999 NEW TAI LUE LETTER LOW MA
+199A NEW TAI LUE LETTER HIGH FA
+199B NEW TAI LUE LETTER HIGH VA
+199C NEW TAI LUE LETTER HIGH LA
+199D NEW TAI LUE LETTER LOW FA
+199E NEW TAI LUE LETTER LOW VA
+199F NEW TAI LUE LETTER LOW LA
+19A0 NEW TAI LUE LETTER HIGH HA
+19A1 NEW TAI LUE LETTER HIGH DA
+19A2 NEW TAI LUE LETTER HIGH BA
+19A3 NEW TAI LUE LETTER LOW HA
+19A4 NEW TAI LUE LETTER LOW DA
+19A5 NEW TAI LUE LETTER LOW BA
+19A6 NEW TAI LUE LETTER HIGH KVA
+19A7 NEW TAI LUE LETTER HIGH XVA
+19A8 NEW TAI LUE LETTER LOW KVA
+19A9 NEW TAI LUE LETTER LOW XVA
+@ Vowel signs
+19B0 NEW TAI LUE VOWEL SIGN VOWEL SHORTENER
+19B1 NEW TAI LUE VOWEL SIGN AA
+19B2 NEW TAI LUE VOWEL SIGN II
+19B3 NEW TAI LUE VOWEL SIGN U
+19B4 NEW TAI LUE VOWEL SIGN UU
+19B5 NEW TAI LUE VOWEL SIGN E
+19B6 NEW TAI LUE VOWEL SIGN AE
+19B7 NEW TAI LUE VOWEL SIGN O
+19B8 NEW TAI LUE VOWEL SIGN OA
+19B9 NEW TAI LUE VOWEL SIGN UE
+19BA NEW TAI LUE VOWEL SIGN AY
+19BB NEW TAI LUE VOWEL SIGN AAY
+19BC NEW TAI LUE VOWEL SIGN UY
+19BD NEW TAI LUE VOWEL SIGN OY
+19BE NEW TAI LUE VOWEL SIGN OAY
+19BF NEW TAI LUE VOWEL SIGN UEY
+19C0 NEW TAI LUE VOWEL SIGN IY
+@ Final consonants
+19C1 NEW TAI LUE LETTER FINAL V
+19C2 NEW TAI LUE LETTER FINAL NG
+19C3 NEW TAI LUE LETTER FINAL N
+19C4 NEW TAI LUE LETTER FINAL M
+19C5 NEW TAI LUE LETTER FINAL K
+19C6 NEW TAI LUE LETTER FINAL D
+19C7 NEW TAI LUE LETTER FINAL B
+@ Tone marks
+19C8 NEW TAI LUE TONE MARK-1
+19C9 NEW TAI LUE TONE MARK-2
+@ Digits
+19D0 NEW TAI LUE DIGIT ZERO
+19D1 NEW TAI LUE DIGIT ONE
+19D2 NEW TAI LUE DIGIT TWO
+19D3 NEW TAI LUE DIGIT THREE
+19D4 NEW TAI LUE DIGIT FOUR
+19D5 NEW TAI LUE DIGIT FIVE
+19D6 NEW TAI LUE DIGIT SIX
+19D7 NEW TAI LUE DIGIT SEVEN
+19D8 NEW TAI LUE DIGIT EIGHT
+19D9 NEW TAI LUE DIGIT NINE
+@ Various signs
+19DE NEW TAI LUE SIGN LAE
+ * conjunction: and
+19DF NEW TAI LUE SIGN LAEV
+ * perfective
@@ 19E0 Khmer Symbols 19FF
@ Lunar date symbols
19E0 KHMER SYMBOL PATHAMASAT
@@ -7987,8 +8297,45 @@
19FD KHMER SYMBOL DAP-BEI ROC
19FE KHMER SYMBOL DAP-BUON ROC
19FF KHMER SYMBOL DAP-PRAM ROC
+@@ 1A00 Buginese 1A1F
+@+ This script is also known as Lontara.
+@ Consonants
+1A00 BUGINESE LETTER KA
+1A01 BUGINESE LETTER GA
+1A02 BUGINESE LETTER NGA
+1A03 BUGINESE LETTER NGKA
+1A04 BUGINESE LETTER PA
+1A05 BUGINESE LETTER BA
+1A06 BUGINESE LETTER MA
+1A07 BUGINESE LETTER MPA
+1A08 BUGINESE LETTER TA
+1A09 BUGINESE LETTER DA
+1A0A BUGINESE LETTER NA
+1A0B BUGINESE LETTER NRA
+1A0C BUGINESE LETTER CA
+1A0D BUGINESE LETTER JA
+1A0E BUGINESE LETTER NYA
+1A0F BUGINESE LETTER NYCA
+1A10 BUGINESE LETTER YA
+1A11 BUGINESE LETTER RA
+1A12 BUGINESE LETTER LA
+1A13 BUGINESE LETTER VA
+1A14 BUGINESE LETTER SA
+1A15 BUGINESE LETTER A
+1A16 BUGINESE LETTER HA
+@ Vowels
+1A17 BUGINESE VOWEL SIGN I
+1A18 BUGINESE VOWEL SIGN U
+1A19 BUGINESE VOWEL SIGN E
+1A1A BUGINESE VOWEL SIGN O
+1A1B BUGINESE VOWEL SIGN AE
+@ Various signs
+1A1E BUGINESE PALLAWA
+1A1F BUGINESE END OF SECTION
@@ 1D00 Phonetic Extensions 1D7F
@+ These are non-IPA phonetic extensions, mostly for the Uralic Phonetic Alphabet (UPA).
+@+ The small capitals, superscript, and subscript forms are for phonetic representations where style variations are semantically important.
+@+ For general text, use regular Latin, Greek or Cyrillic letters with markup instead.
@ Latin letters
1D00 LATIN LETTER SMALL CAPITAL A
1D01 LATIN LETTER SMALL CAPITAL AE
@@ -8017,7 +8364,7 @@
1D16 LATIN SMALL LETTER TOP HALF O
1D17 LATIN SMALL LETTER BOTTOM HALF O
1D18 LATIN LETTER SMALL CAPITAL P
- * representa a semi-voiced [p]
+ * represents a semi-voiced [p]
1D19 LATIN LETTER SMALL CAPITAL REVERSED R
1D1A LATIN LETTER SMALL CAPITAL TURNED R
1D1B LATIN LETTER SMALL CAPITAL T
@@ -8107,6 +8454,7 @@
1D4B MODIFIER LETTER SMALL OPEN E
# <super> 025B
1D4C MODIFIER LETTER SMALL TURNED OPEN E
+ * more appropriate equivalence would be to 1D08
# <super> 025C
1D4D MODIFIER LETTER SMALL G
# <super> 0067
@@ -8172,6 +8520,181 @@
# <sub> 03C7
@ Latin letter
1D6B LATIN SMALL LETTER UE
+@ Latin letters with middle tilde
+@+ An additional letter with middle tilde is found in another block.
+ x (latin small letter l with middle tilde - 026B)
+1D6C LATIN SMALL LETTER B WITH MIDDLE TILDE
+1D6D LATIN SMALL LETTER D WITH MIDDLE TILDE
+1D6E LATIN SMALL LETTER F WITH MIDDLE TILDE
+1D6F LATIN SMALL LETTER M WITH MIDDLE TILDE
+1D70 LATIN SMALL LETTER N WITH MIDDLE TILDE
+1D71 LATIN SMALL LETTER P WITH MIDDLE TILDE
+1D72 LATIN SMALL LETTER R WITH MIDDLE TILDE
+1D73 LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE
+1D74 LATIN SMALL LETTER S WITH MIDDLE TILDE
+1D75 LATIN SMALL LETTER T WITH MIDDLE TILDE
+1D76 LATIN SMALL LETTER Z WITH MIDDLE TILDE
+@ Caucasian linguistics
+1D77 LATIN SMALL LETTER TURNED G
+ * Georgian transcription
+ x (georgian letter turned gan - 10F9)
+1D78 MODIFIER LETTER CYRILLIC EN
+ # <super> 043D
+@ Other phonetic symbols
+1D79 LATIN SMALL LETTER INSULAR G
+ * older Irish phonetic notation
+ x (latin small letter g - 0067)
+ x (latin small letter script g - 0261)
+ x (latin small letter gamma - 0263)
+1D7A LATIN SMALL LETTER TH WITH STRIKETHROUGH
+ * American dictionary usage
+ x (greek small letter theta - 03B8)
+1D7B LATIN SMALL CAPITAL LETTER I WITH STROKE
+ * used with different meanings by Americanists and Oxford dictionaries
+1D7C LATIN SMALL LETTER IOTA WITH STROKE
+ * used by Russianists
+1D7D LATIN SMALL LETTER P WITH STROKE
+ * used by Americanists
+1D7E LATIN SMALL CAPITAL LETTER U WITH STROKE
+ * used by Americanists
+1D7F LATIN SMALL LETTER UPSILON WITH STROKE
+ * used by Americanists and Oxford dictionaries
+@@ 1D80 Phonetic Extensions Supplement 1DBF
+@ Latin letters with palatal hook
+@+ An additional letter with palatal hook is found in another block.
+ x (latin small letter t with palatal hook - 01AB)
+1D80 LATIN SMALL LETTER B WITH PALATAL HOOK
+1D81 LATIN SMALL LETTER D WITH PALATAL HOOK
+1D82 LATIN SMALL LETTER F WITH PALATAL HOOK
+1D83 LATIN SMALL LETTER G WITH PALATAL HOOK
+1D84 LATIN SMALL LETTER K WITH PALATAL HOOK
+1D85 LATIN SMALL LETTER L WITH PALATAL HOOK
+1D86 LATIN SMALL LETTER M WITH PALATAL HOOK
+1D87 LATIN SMALL LETTER N WITH PALATAL HOOK
+1D88 LATIN SMALL LETTER P WITH PALATAL HOOK
+1D89 LATIN SMALL LETTER R WITH PALATAL HOOK
+1D8A LATIN SMALL LETTER S WITH PALATAL HOOK
+1D8B LATIN SMALL LETTER ESH WITH PALATAL HOOK
+1D8C LATIN SMALL LETTER V WITH PALATAL HOOK
+1D8D LATIN SMALL LETTER X WITH PALATAL HOOK
+1D8E LATIN SMALL LETTER Z WITH PALATAL HOOK
+@ Latin letters with retroflex hook
+@+ IPA recommends transcribing vowels with r-coloring (rhoticity) with the rhotic hook instead.
+ x (modifier letter rhotic hook - 02DE)
+@+ Additional letters with retroflex hook are found in other blocks.
+ x (latin capital letter t with retroflex hook - 01AE)
+ x (latin small letter d with tail - 0256)
+ x (latin small letter l with retroflex hook - 026D)
+ x (latin small letter n with retroflex hook - 0273)
+ x (latin small letter turned r with hook - 027B)
+ x (latin small letter r with tail - 027D)
+ x (latin small letter s with hook - 0282)
+ x (latin small letter squat reversed esh - 0285)
+ x (latin small letter t with retroflex hook - 0288)
+ x (latin small letter z with retroflex hook - 0290)
+ x (latin small letter turned h with fishhook and tail - 02AF)
+1D8F LATIN SMALL LETTER A WITH RETROFLEX HOOK
+1D90 LATIN SMALL LETTER ALPHA WITH RETROFLEX HOOK
+1D91 LATIN SMALL LETTER D WITH HOOK AND TAIL
+1D92 LATIN SMALL LETTER E WITH RETROFLEX HOOK
+1D93 LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK
+1D94 LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK
+ x (latin small letter reversed open e with hook - 025D)
+1D95 LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK
+ x (latin small letter schwa with hook - 025A)
+1D96 LATIN SMALL LETTER I WITH RETROFLEX HOOK
+1D97 LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK
+1D98 LATIN SMALL LETTER ESH WITH RETROFLEX HOOK
+1D99 LATIN SMALL LETTER U WITH RETROFLEX HOOK
+1D9A LATIN SMALL LETTER EZH WITH RETROFLEX HOOK
+@ Modifier letters
+@+ Other modifier letters can be found in the Spacing Modifer Letters, Phonetic Extensions, as well as Superscripts and Subscripts blocks.
+1D9B MODIFIER LETTER SMALL TURNED ALPHA
+ # <super> 0252
+1D9C MODIFIER LETTER SMALL C
+ # <super> 0063
+1D9D MODIFIER LETTER SMALL C WITH CURL
+ # <super> 0255
+1D9E MODIFIER LETTER SMALL ETH
+ # <super> 00F0
+1D9F MODIFIER LETTER SMALL REVERSED OPEN E
+ # <super> 025C
+1DA0 MODIFIER LETTER SMALL F
+ # <super> 0066
+1DA1 MODIFIER LETTER SMALL DOTLESS J WITH STROKE
+ # <super> 025F
+1DA2 MODIFIER LETTER SMALL SCRIPT G
+ # <super> 0261
+1DA3 MODIFIER LETTER SMALL TURNED H
+ # <super> 0265
+1DA4 MODIFIER LETTER SMALL I WITH STROKE
+ # <super> 0268
+1DA5 MODIFIER LETTER SMALL IOTA
+ # <super> 0269
+1DA6 MODIFIER LETTER SMALL CAPITAL I
+ # <super> 026A
+1DA7 MODIFIER LETTER SMALL CAPITAL I WITH STROKE
+ # <super> 1D7B
+1DA8 MODIFIER LETTER SMALL J WITH CROSSED-TAIL
+ # <super> 029D
+1DA9 MODIFIER LETTER SMALL L WITH RETROFLEX HOOK
+ # <super> 026D
+1DAA MODIFIER LETTER SMALL L WITH PALATAL HOOK
+ # <super> 1D85
+1DAB MODIFIER LETTER SMALL CAPITAL L
+ # <super> 029F
+1DAC MODIFIER LETTER SMALL M WITH HOOK
+ # <super> 0271
+1DAD MODIFIER LETTER SMALL TURNED M WITH LONG LEG
+ # <super> 0270
+1DAE MODIFIER LETTER SMALL N WITH LEFT HOOK
+ # <super> 0272
+1DAF MODIFIER LETTER SMALL N WITH RETROFLEX HOOK
+ # <super> 0273
+1DB0 MODIFIER LETTER SMALL CAPITAL N
+ # <super> 0274
+1DB1 MODIFIER LETTER SMALL BARRED O
+ # <super> 0275
+1DB2 MODIFIER LETTER SMALL PHI
+ # <super> 0278
+1DB3 MODIFIER LETTER SMALL S WITH HOOK
+ # <super> 0282
+1DB4 MODIFIER LETTER SMALL ESH
+ # <super> 0283
+1DB5 MODIFIER LETTER SMALL T WITH PALATAL HOOK
+ # <super> 01AB
+1DB6 MODIFIER LETTER SMALL U BAR
+ # <super> 0289
+1DB7 MODIFIER LETTER SMALL UPSILON
+ # <super> 028A
+1DB8 MODIFIER LETTER SMALL CAPITAL U
+ # <super> 1D1C
+1DB9 MODIFIER LETTER SMALL V WITH HOOK
+ # <super> 028B
+1DBA MODIFIER LETTER SMALL TURNED V
+ # <super> 028C
+1DBB MODIFIER LETTER SMALL Z
+ # <super> 007A
+1DBC MODIFIER LETTER SMALL Z WITH RETROFLEX HOOK
+ # <super> 0290
+1DBD MODIFIER LETTER SMALL Z WITH CURL
+ # <super> 0291
+1DBE MODIFIER LETTER SMALL EZH
+ # <super> 0292
+1DBF MODIFIER LETTER SMALL THETA
+ # <super> 03B8
+@@ 1DC0 Combining Diacritical Marks Supplement 1DFF
+@ Used for Ancient Greek
+1DC0 COMBINING DOTTED GRAVE ACCENT
+ x (greek dialytika and varia - 1FED)
+1DC1 COMBINING DOTTED ACUTE ACCENT
+ x (combining greek dialytika tonos - 0344)
+ x (greek dialytika and oxia - 1FEE)
+@ Miscellaneous marks
+1DC2 COMBINING SNAKE BELOW
+1DC3 COMBINING SUSPENSION MARK
+ * Glagolitic
+ x (combining breve - 0306)
@@ 1E00 Latin Extended Additional 1EFF
@+ In this block the names "WITH LINE BELOW" refer to a macron below the letter.
@ Latin general use extensions
@@ -9170,6 +9693,7 @@
1FFE GREEK DASIA
# 0020 0314
@@ 2000 General Punctuation 206F
+@+ For additional general punctuation characters see also Basic Latin, Latin-1, Supplemental Punctuation and CJK Symbols and Punctuation.
@ Spaces
2000 EN QUAD
: 2002 en space
@@ -9210,7 +9734,7 @@
# 0020 space
200B ZERO WIDTH SPACE
= ZWSP
- * nominally zero width, but may expand in justification
+ * this character is intended for line break control; it has no width, but its presence between two characters does not prevent increased letter spacing in justification
@ Formatting characters
200C ZERO WIDTH NON-JOINER
= ZWNJ
@@ -9299,6 +9823,7 @@
x (end of proof - 220E)
x (black right-pointing small triangle - 25B8)
2024 ONE DOT LEADER
+ * also used as an Armenian semicolon (mijaket)
x (middle dot - 00B7)
x (bullet - 2022)
x (bullet operator - 2219)
@@ -9308,6 +9833,7 @@
2026 HORIZONTAL ELLIPSIS
= three dot leader
x (vertical ellipsis - 22EE)
+ x (presentation form for vertical horizontal ellipsis - FE19)
# 002E 002E 002E
2027 HYPHENATION POINT
@ Formatting characters
@@ -9379,9 +9905,11 @@
= Japanese kome
= Urdu paragraph separator
x (tibetan ku ru kha bzhi mig can - 0FBF)
+@ Double punctuation for vertical text
203C DOUBLE EXCLAMATION MARK
x (exclamation mark - 0021)
# 0021 0021
+@ General punctuation
203D INTERROBANG
x (exclamation mark - 0021)
x (question mark - 003F)
@@ -9435,9 +9963,39 @@
x (percent sign - 0025)
x (arabic percent sign - 066A)
2053 SWUNG DASH
+ x (tilde - 007E)
2054 INVERTED UNDERTIE
+2055 FLOWER PUNCTUATION MARK
+ = phul, puspika
+ * used as a punctuation mark with Syloti Nagri, Bengali and other Indic scripts
+ x (heavy eight teardrop-spoked propeller asterisk - 274B)
+@ Archaic punctuation
+2056 THREE DOT PUNCTUATION
+@ General punctuation
2057 QUADRUPLE PRIME
# 2032 2032 2032 2032
+@ Archaic punctuation
+2058 FOUR DOT PUNCTUATION
+2059 FIVE DOT PUNCTUATION
+ = Greek pentonkion
+205A TWO DOT PUNCTUATION
+ * historically used to indicate the end of a sentence or change of speaker
+ * extends from baseline to cap height
+ x (presentation form for vertical two dot leader - FE30)
+ x (greek acrophonic epidaurean two - 1015B)
+205B FOUR DOT MARK
+ * used by scribes in the margin as highlighter mark
+ * this is centered on the line, but extends beyond top and bottom of the line
+205C DOTTED CROSS
+ * used by scribes in the margin as highlighter mark
+205D TRICOLON
+ = Epidaurean acrophonic symbol three
+ x (vertical ellipsis - 22EE)
+ x (triple colon operator - 2AF6)
+ x (presentation form for vertical horizontal ellipsis - FE19)
+205E VERTICAL FOUR DOTS
+ * used in dictionaries to indicate legal but undesirable word break
+ * glyph extends the whole height of the line
@ Space
205F MEDIUM MATHEMATICAL SPACE
= MMSP
@@ -9529,20 +10087,33 @@
# <sub> 0028
208E SUBSCRIPT RIGHT PARENTHESIS
# <sub> 0029
+2090 LATIN SUBSCRIPT SMALL LETTER A
+ # <sub> 0061
+2091 LATIN SUBSCRIPT SMALL LETTER E
+ # <sub> 0065
+2092 LATIN SUBSCRIPT SMALL LETTER O
+ # <sub> 006F
+2093 LATIN SUBSCRIPT SMALL LETTER X
+ # <sub> 0078
+2094 LATIN SUBSCRIPT SMALL LETTER SCHWA
+ # <sub> 0259
@@ 20A0 Currency Symbols 20CF
@ Currency symbols
-@+ A number of currency symbols are found in other blocks.
+@+ A number of currency symbols are found in other blocks. Fullwidth versions of some currency symbols are found in the Halfwidth and Fullwidth Forms block.
x (dollar sign - 0024)
x (cent sign - 00A2)
x (pound sign - 00A3)
x (currency sign - 00A4)
x (yen sign - 00A5)
+ x (latin small letter f with hook - 0192)
+ x (afghani sign - 060B)
x (bengali rupee mark - 09F2)
x (bengali rupee sign - 09F3)
x (gujarati rupee sign - 0AF1)
x (tamil rupee sign - 0BF9)
x (thai currency symbol baht - 0E3F)
x (khmer currency symbol riel - 17DB)
+ x (script capital m - 2133)
x (rial sign - FDFC)
20A0 EURO-CURRENCY SIGN
* intended for ECU, but not widely used
@@ -9590,6 +10161,18 @@
* Philippines
* the Mexican peso is indicated with the dollar sign
x (peseta sign - 20A7)
+20B2 GUARANI SIGN
+ * Paraguay
+ * Often represented by G. or Gs.
+20B3 AUSTRAL SIGN
+ * former Argentinian currency
+20B4 HRYVNIA SIGN
+ * Ukraine
+20B5 CEDI SIGN
+ * Ghana
+ * glyph may look like '023B' or like C with a short vertical stroke through the upper arm
+ x (cent sign - 00A2)
+ x (latin capital letter c with stroke - 023B)
@@ 20D0 Combining Diacritical Marks for Symbols 20FF
@ Combining diacritical marks for symbols
20D0 COMBINING LEFT HARPOON ABOVE
@@ -9649,6 +10232,8 @@
x (combining bridge above - 0346)
20EA COMBINING LEFTWARDS ARROW OVERLAY
x (leftwards arrow - 2190)
+20EB COMBINING LONG DOUBLE SOLIDUS OVERLAY
+ = long double slash overlay
@@ 2100 Letterlike Symbols 214F
@ Letterlike symbols
@+ Some of the letterlike symbols are intended to complete the set of mathematical alphanumeric symbols starting at U+1D400.
@@ -9678,7 +10263,7 @@
= real number symbol
# <font> 0067 latin small letter g
210B SCRIPT CAPITAL H
- = Hamiltonian function
+ = Hamiltonian operator
# <font> 0048 latin capital letter h
210C BLACK-LETTER CAPITAL H
= Hilbert space
@@ -9696,7 +10281,7 @@
= imaginary part
# <font> 0049 latin capital letter i
2112 SCRIPT CAPITAL L
- = Laplace symbol
+ = Laplace transform
# <font> 004C latin capital letter l
2113 SCRIPT SMALL L
= mathematical symbol 'ell'
@@ -9740,6 +10325,7 @@
2120 SERVICE MARK
# <super> 0053 004D
2121 TELEPHONE SIGN
+ * typical forms for this symbol may use lower case, small caps or superscripted letter shapes
# 0054 0045 004C
2122 TRADE MARK SIGN
# <super> 0054 004D
@@ -9780,6 +10366,7 @@
x (latin small letter e - 0065)
212F SCRIPT SMALL E
= error
+ = natural exponent
# <font> 0065 latin small letter e
2130 SCRIPT CAPITAL E
= emf (electromotive force)
@@ -9796,8 +10383,8 @@
2134 SCRIPT SMALL O
= order, of inferior order to
# <font> 006F latin small letter o
-@ Hebrew letterlike math symbols
-@+ There are left-to-right characters.
+@ Hebrew letterlike math symbols
+@+ These are left-to-right characters.
2135 ALEF SYMBOL
= first transfinite cardinal (countable)
# 05D0 hebrew letter alef
@@ -9817,8 +10404,11 @@
213A ROTATED CAPITAL Q
* a binding signature mark
213B FACSIMILE SIGN
+ * typical forms for this symbol may use lower case, small caps or superscripted letter shapes
x (telephone sign - 2121)
# 0046 0041 0058
+213C DOUBLE-STRUCK SMALL PI
+ # <font> 03C0 greek small letter pi
213D DOUBLE-STRUCK SMALL GAMMA
# <font> 03B3 greek small letter gamma
213E DOUBLE-STRUCK CAPITAL GAMMA
@@ -9856,6 +10446,8 @@
214B TURNED AMPERSAND
* used in linear logic
x (ampersand - 0026)
+214C PER SIGN
+ * abbreviates the word 'per'
@@ 2150 Number Forms 218F
@ Fractions
@+ Other fraction number forms are found in the Latin-1 Supplement block.
@@ -9863,31 +10455,31 @@
x (vulgar fraction one half - 00BD)
x (vulgar fraction three quarters - 00BE)
2153 VULGAR FRACTION ONE THIRD
- # 0031 2044 0033
+ # <fraction> 0031 2044 0033
2154 VULGAR FRACTION TWO THIRDS
- # 0032 2044 0033
+ # <fraction> 0032 2044 0033
2155 VULGAR FRACTION ONE FIFTH
- # 0031 2044 0035
+ # <fraction> 0031 2044 0035
2156 VULGAR FRACTION TWO FIFTHS
- # 0032 2044 0035
+ # <fraction> 0032 2044 0035
2157 VULGAR FRACTION THREE FIFTHS
- # 0033 2044 0035
+ # <fraction> 0033 2044 0035
2158 VULGAR FRACTION FOUR FIFTHS
- # 0034 2044 0035
+ # <fraction> 0034 2044 0035
2159 VULGAR FRACTION ONE SIXTH
- # 0031 2044 0036
+ # <fraction> 0031 2044 0036
215A VULGAR FRACTION FIVE SIXTHS
- # 0035 2044 0036
+ # <fraction> 0035 2044 0036
215B VULGAR FRACTION ONE EIGHTH
- # 0031 2044 0038
+ # <fraction> 0031 2044 0038
215C VULGAR FRACTION THREE EIGHTHS
- # 0033 2044 0038
+ # <fraction> 0033 2044 0038
215D VULGAR FRACTION FIVE EIGHTHS
- # 0035 2044 0038
+ # <fraction> 0035 2044 0038
215E VULGAR FRACTION SEVEN EIGHTHS
- # 0037 2044 0038
+ # <fraction> 0037 2044 0038
215F FRACTION NUMERATOR ONE
- # 0031 2044
+ # <fraction> 0031 2044
@ Roman numerals
2160 ROMAN NUMERAL ONE
# 0049 latin capital letter i
@@ -9985,11 +10577,15 @@
219C LEFTWARDS WAVE ARROW
219D RIGHTWARDS WAVE ARROW
219E LEFTWARDS TWO HEADED ARROW
+ = fast cursor left
219F UPWARDS TWO HEADED ARROW
+ = fast cursor up
21A0 RIGHTWARDS TWO HEADED ARROW
= z notation total surjection
+ = fast cursor right
21A1 DOWNWARDS TWO HEADED ARROW
= form feed
+ = fast cursor down
21A2 LEFTWARDS ARROW WITH TAIL
21A3 RIGHTWARDS ARROW WITH TAIL
= z notation total injection
@@ -10121,16 +10717,19 @@
21FE RIGHTWARDS OPEN-HEADED ARROW
21FF LEFT RIGHT OPEN-HEADED ARROW
@@ 2200 Mathematical Operators 22FF
-@ Mathematical operators
+@ Miscellaneous mathematical symbols
2200 FOR ALL
+ = universal quantifier
2201 COMPLEMENT
x (latin letter stretched c - 0297)
2202 PARTIAL DIFFERENTIAL
2203 THERE EXISTS
+ = existential quantifier
2204 THERE DOES NOT EXIST
: 2203 0338
2205 EMPTY SET
= null set
+ * used in linguistics to indicate a null morpheme or phonological "zero"
x (latin capital letter o with stroke - 00D8)
x (diameter sign - 2300)
2206 INCREMENT
@@ -10139,10 +10738,11 @@
x (greek capital letter delta - 0394)
x (white up-pointing triangle - 25B3)
2207 NABLA
- = Laplace operator (written with superscript 2)
= backward difference
- = del
+ = gradient, del
+ * used for Laplacian operator (written with superscript 2)
x (white down-pointing triangle - 25BD)
+@ Set membership
2208 ELEMENT OF
2209 NOT AN ELEMENT OF
: 2208 0338
@@ -10155,10 +10755,12 @@
: 220B 0338
220D SMALL CONTAINS AS MEMBER
x (greek reversed lunate epsilon symbol - 03F6)
+@ Miscellaneous mathematical symbol
220E END OF PROOF
= Q.E.D.
x (triangular bullet - 2023)
x (black vertical rectangle - 25AE)
+@ N-ary operators
220F N-ARY PRODUCT
= product sign
x (greek capital letter pi - 03A0)
@@ -10167,6 +10769,7 @@
2211 N-ARY SUMMATION
= summation sign
x (greek capital letter sigma - 03A3)
+@ Operators
2212 MINUS SIGN
x (hyphen-minus - 002D)
2213 MINUS-OR-PLUS SIGN
@@ -10196,12 +10799,14 @@
221C FOURTH ROOT
221D PROPORTIONAL TO
x (greek small letter alpha - 03B1)
+@ Miscellaneous mathematical symbols
221E INFINITY
221F RIGHT ANGLE
2220 ANGLE
2221 MEASURED ANGLE
2222 SPHERICAL ANGLE
= angle arc
+@ Operators
2223 DIVIDES
= such that
= APL stile
@@ -10214,6 +10819,7 @@
x (double vertical line - 2016)
2226 NOT PARALLEL TO
: 2225 0338
+@ Logical and set operators
2227 LOGICAL AND
= wedge, conjunction
x (n-ary logical and - 22C0)
@@ -10228,6 +10834,7 @@
222A UNION
= cup
x (n-ary union - 22C3)
+@ Integrals
222B INTEGRAL
x (latin small letter esh - 0283)
222C DOUBLE INTEGRAL
@@ -10245,15 +10852,21 @@
2232 CLOCKWISE CONTOUR INTEGRAL
2233 ANTICLOCKWISE CONTOUR INTEGRAL
* clockwise or anticlockwise arrows do not reverse during layout mirroring
+@ Miscellaneous mathematical symbols
2234 THEREFORE
2235 BECAUSE
+@ Relations
2236 RATIO
x (colon - 003A)
2237 PROPORTION
+@ Operator
2238 DOT MINUS
= symmetric difference
+@ Relation
2239 EXCESS
+@ Operator
223A GEOMETRIC PROPORTION
+@ Relations
223B HOMOTHETIC
x (tilde operator with rising dots - 2A6B)
223C TILDE OPERATOR
@@ -10271,9 +10884,12 @@
* reversed tilde and lazy S are glyph variants
223E INVERTED LAZY S
= most positive
+@ Miscellaneous mathematical symbol
223F SINE WAVE
= alternating current
+@ Operator
2240 WREATH PRODUCT
+@ Relations
2241 NOT TILDE
: 223C 0338
2242 MINUS TILDE
@@ -10388,6 +11004,7 @@
: 2287 0338
228A SUBSET OF WITH NOT EQUAL TO
228B SUPERSET OF WITH NOT EQUAL TO
+@ Operators
228C MULTISET
228D MULTISET MULTIPLICATION
x (n-ary union operator with dot - 2A03)
@@ -10395,10 +11012,12 @@
228E MULTISET UNION
= z notation bag addition
x (n-ary union operator with plus - 2A04)
+@ Relations
228F SQUARE IMAGE OF
2290 SQUARE ORIGINAL OF
2291 SQUARE IMAGE OF OR EQUAL TO
2292 SQUARE ORIGINAL OF OR EQUAL TO
+@ Operators
2293 SQUARE CAP
x (n-ary square intersection operator - 2A05)
2294 SQUARE CUP
@@ -10440,12 +11059,13 @@
22A3 LEFT TACK
= reverse turnstile
= non-theorem, does not yield
+@ Miscellaneous mathematical symbols
22A4 DOWN TACK
= top
22A5 UP TACK
- = orthogonal to
- = perpendicular
= base, bottom
+ x (perpendicular - 27C2)
+@ Relations
22A6 ASSERTION
= reduces to
22A7 MODELS
@@ -10479,16 +11099,21 @@
22B7 IMAGE OF
22B8 MULTIMAP
22B9 HERMITIAN CONJUGATE MATRIX
+@ Operators
22BA INTERCALATE
22BB XOR
22BC NAND
x (projective - 2305)
22BD NOR
+@ Miscellaneous mathematical symbols
22BE RIGHT ANGLE WITH ARC
22BF RIGHT TRIANGLE
+@ N-ary operators
22C0 N-ARY LOGICAL AND
+ * also used to denote the universal quantifier
x (logical and - 2227)
22C1 N-ARY LOGICAL OR
+ * also used to denote the existential quantifier
x (logical or - 2228)
22C2 N-ARY INTERSECTION
= z notation generalised intersection
@@ -10496,6 +11121,7 @@
22C3 N-ARY UNION
= z notation generalised union
x (union - 222A)
+@ Operators
22C4 DIAMOND OPERATOR
x (white diamond - 25C7)
22C5 DOT OPERATOR
@@ -10505,20 +11131,27 @@
x (arabic five pointed star - 066D)
x (black star - 2605)
22C7 DIVISION TIMES
+@ Relation
22C8 BOWTIE
x (ocr bow tie - 2445)
+@ Operators
22C9 LEFT NORMAL FACTOR SEMIDIRECT PRODUCT
22CA RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT
22CB LEFT SEMIDIRECT PRODUCT
22CC RIGHT SEMIDIRECT PRODUCT
x (caret insertion point - 2041)
+@ Relation
22CD REVERSED TILDE EQUALS
+@ Logical operators
22CE CURLY LOGICAL OR
22CF CURLY LOGICAL AND
+@ Relations
22D0 DOUBLE SUBSET
22D1 DOUBLE SUPERSET
+@ Operators
22D2 DOUBLE INTERSECTION
22D3 DOUBLE UNION
+@ Relations
22D4 PITCHFORK
= proper intersection
22D5 EQUAL AND PARALLEL TO
@@ -10557,7 +11190,9 @@
: 22B5 0338
22EE VERTICAL ELLIPSIS
* these four ellipses are used for matrix row/column elision
+ x (tricolon - 205D)
x (horizontal ellipsis - 2026)
+ x (presentation form for vertical horizontal ellipsis - FE19)
22EF MIDLINE HORIZONTAL ELLIPSIS
22F0 UP RIGHT DIAGONAL ELLIPSIS
22F1 DOWN RIGHT DIAGONAL ELLIPSIS
@@ -10809,14 +11444,18 @@
2383 EMPHASIS SYMBOL
2384 COMPOSITION SYMBOL
2385 WHITE SQUARE WITH CENTRE VERTICAL LINE
+ = center
2386 ENTER SYMBOL
2387 ALTERNATIVE KEY SYMBOL
2388 HELM SYMBOL
= control
x (wheel of dharma - 2638)
2389 CIRCLED HORIZONTAL BAR WITH NOTCH (pause)
+ = pause
238A CIRCLED TRIANGLE DOWN (break)
+ = interrupt
238B BROKEN CIRCLE WITH NORTHWEST ARROW (escape)
+ = escape
238C UNDO SYMBOL
@ Electrotechnical symbols from IR 181
238D MONOSTABLE SYMBOL
@@ -10925,6 +11564,22 @@
23D0 VERTICAL LINE EXTENSION
* used for extension of arrows
x (horizontal line extension - 23AF)
+@ Metrical symbols
+23D1 METRICAL BREVE
+23D2 METRICAL LONG OVER SHORT
+23D3 METRICAL SHORT OVER LONG
+23D4 METRICAL LONG OVER TWO SHORTS
+23D5 METRICAL TWO SHORTS OVER LONG
+23D6 METRICAL TWO SHORTS JOINED
+23D7 METRICAL TRISEME
+ x (combining greek musical triseme - 1D242)
+23D8 METRICAL TETRASEME
+ x (combining greek musical tetraseme - 1D243)
+23D9 METRICAL PENTASEME
+ x (combining greek musical pentaseme - 1D244)
+@ Electrotechnical symbols
+23DA EARTH GROUND
+23DB FUSE
@@ 2400 Control Pictures 243F
@+ The diagonal lettering glyphs are only exemplary; alternate representations may be, and often are used in the visible display of control codes.
@ Graphic pictures for control codes
@@ -11497,11 +12152,14 @@
@@ 25A0 Geometric Shapes 25FF
@ Geometric shapes
25A0 BLACK SQUARE
+ = moding mark (in ideographic text)
x (full block - 2588)
25A1 WHITE SQUARE
= quadrature
+ * may be used to represent a missing ideograph
x (combining enclosing square - 20DE)
x (ballot box - 2610)
+ x (geta mark - 3013)
25A2 WHITE SQUARE WITH ROUNDED CORNERS
25A3 WHITE SQUARE CONTAINING BLACK SMALL SQUARE
25A4 SQUARE WITH HORIZONTAL FILL
@@ -11605,6 +12263,7 @@
x (ring operator - 2218)
x (inverse bullet - 25D8)
25E7 SQUARE WITH LEFT HALF BLACK
+ x (square with top half black - 2B12)
25E8 SQUARE WITH RIGHT HALF BLACK
25E9 SQUARE WITH UPPER LEFT DIAGONAL HALF BLACK
25EA SQUARE WITH LOWER RIGHT DIAGONAL HALF BLACK
@@ -11690,7 +12349,8 @@
@ Japanese chess symbols
2616 WHITE SHOGI PIECE
2617 BLACK SHOGI PIECE
-@ Miscellaneous symbol
+@ Miscellaneous symbols
+2618 SHAMROCK
2619 REVERSED ROTATED FLORAL HEART BULLET
* a binding signature mark
x (rotated floral heart bullet - 2767)
@@ -11710,10 +12370,13 @@
2623 BIOHAZARD SIGN
@ Medical and healing symbols
2624 CADUCEUS
+ x (staff of aesculapius - 2695)
2625 ANKH
@ Religious and political symbols
2626 ORTHODOX CROSS
2627 CHI RHO
+ = Constantine's cross, Christogram
+ x (coptic symbol khi ro - 2CE9)
2628 CROSS OF LORRAINE
2629 CROSS OF JERUSALEM
262A STAR AND CRESCENT
@@ -11850,6 +12513,9 @@
* used to indicate 100% recycled paper content
267D PARTIALLY-RECYCLED PAPER SYMBOL
* percentage of recycled paper content indicated in overlay or next to this symbol
+@ Miscellaneous symbols
+267E PERMANENT PAPER SIGN
+267F WHEELCHAIR SYMBOL
@ Dice
2680 DIE FACE-1
2681 DIE FACE-2
@@ -11869,12 +12535,81 @@
268D DIGRAM FOR LESSER YIN
268E DIGRAM FOR LESSER YANG
268F DIGRAM FOR GREATER YIN
-@ Map markers
+@ Dictionary and map symbols
2690 WHITE FLAG
2691 BLACK FLAG
-@ Warning signs
+2692 HAMMER AND PICK
+ = mining, working day (in timetables)
+2693 ANCHOR
+ = nautical term, harbor (on maps)
+2694 CROSSED SWORDS
+ = military term, battleground (on maps), killed in action
+2695 STAFF OF AESCULAPIUS
+ = medical term
+ * both inclined or upright renderings of this symbol are common
+ x (caduceus - 2624)
+2696 SCALES
+ = legal term, jurisprudence
+2697 ALEMBIC
+ = chemical term, chemistry
+2698 FLOWER
+ = botanical term
+ x (flower punctuation mark - 2055)
+ x (shamrock - 2618)
+ x (white florette - 2740)
+2699 GEAR
+ = technology, tools
+269A STAFF OF HERMES
+ * signifies a commercial term or commerce
+ * glyph shows a heraldic staff with a winged wheel
+269B ATOM SYMBOL
+ = nuclear installation (on maps)
+@ Miscellaneous symbols
+269C FLEUR-DE-LIS
26A0 WARNING SIGN
26A1 HIGH VOLTAGE SIGN
+@ Gender symbols
+26A2 DOUBLED FEMALE SIGN
+ = lesbianism
+26A3 DOUBLED MALE SIGN
+ * a glyph variant has the two circles on the same line
+ = male homosexuality
+26A4 INTERLOCKED FEMALE AND MALE SIGN
+ * a glyph variant has the two circles on the same line
+ = bisexuality
+26A5 MALE AND FEMALE SIGN
+ = transgendered sexuality
+ = hermaphrodite (in entomology)
+26A6 MALE WITH STROKE SIGN
+ = transgendered sexuality
+26A7 MALE WITH STROKE AND MALE AND FEMALE SIGN
+ = transgendered sexuality
+26A8 VERTICAL MALE WITH STROKE SIGN
+ = ferrous iron sulphate (alchemy and older chemistry)
+26A9 HORIZONTAL MALE WITH STROKE SIGN
+ = magnesium (alchemy and older chemistry)
+@ Circles
+26AA MEDIUM WHITE CIRCLE
+ = asexuality, sexless, genderless
+ = engaged, betrothed
+ * base for male or female sign
+26AB MEDIUM BLACK CIRCLE
+ * UI symbol for record function
+26AC MEDIUM SMALL WHITE CIRCLE
+ = engaged, betrothed (genealogy)
+ * can represent wedding ring
+@ Genealogical symbols
+26AD MARRIAGE SYMBOL
+ x (infinity - 221E)
+26AE DIVORCE SYMBOL
+ x (infinity negated with vertical bar - 29DE)
+26AF UNMARRIED PARTNERSHIP SYMBOL
+ x (double-ended multimap - 29DF)
+26B0 COFFIN
+ = buried (genealogy)
+ x (white rectangle - 25AD)
+26B1 FUNERAL URN
+ = cremated (genealogy)
@@ 2700 Dingbats 27BF
@+ ITC Zapf dingbats series 100
@ Miscellaneous
@@ -12118,7 +12853,19 @@
27BD HEAVY WEDGE-TAILED RIGHTWARDS ARROW
27BE OPEN-OUTLINED RIGHTWARDS ARROW
@@ 27C0 Miscellaneous Mathematical Symbols-A 27EF
-@ Miscellaneous symbol
+@ Miscellaneous symbols
+27C0 THREE DIMENSIONAL ANGLE
+ * used by Euclid
+27C1 WHITE TRIANGLE CONTAINING SMALL WHITE TRIANGLE
+ * used by Euclid
+27C2 PERPENDICULAR
+ = orthogonal to
+ * relation, typeset with additional spacing
+ x (up tack - 22A5)
+27C3 OPEN SUBSET
+27C4 OPEN SUPERSET
+27C5 LEFT S-SHAPED BAG DELIMITER
+27C6 RIGHT S-SHAPED BAG DELIMITER
27D0 WHITE DIAMOND WITH CENTRED DOT
@ Operators
27D1 AND WITH DOT
@@ -12781,8 +13528,8 @@
x (hourglass - 231B)
29D7 BLACK HOURGLASS
@ Fences
- x (presentation form for vertical wavy low line - FE34)
29D8 LEFT WIGGLY FENCE
+ x (presentation form for vertical wavy low line - FE34)
29D9 RIGHT WIGGLY FENCE
29DA LEFT DOUBLE WIGGLY FENCE
29DB RIGHT DOUBLE WIGGLY FENCE
@@ -13041,7 +13788,9 @@
2A6F ALMOST EQUAL TO WITH CIRCUMFLEX ACCENT
2A70 APPROXIMATELY EQUAL OR EQUAL TO
2A71 EQUALS SIGN ABOVE PLUS SIGN
+ * black stands slightly better (chess notation)
2A72 PLUS SIGN ABOVE EQUALS SIGN
+ * white stands slightly better (chess notation)
2A73 EQUALS SIGN ABOVE TILDE OPERATOR
2A74 DOUBLE COLON EQUAL
# 003A 003A 003D
@@ -13233,6 +13982,7 @@
@ Miscellaneous mathematical operator
2AF6 TRIPLE COLON OPERATOR
* logic
+ x (tricolon - 205D)
x (vertical ellipsis - 22EE)
@ Relations
2AF7 TRIPLE NESTED LESS-THAN
@@ -13257,8 +14007,8 @@
2AFF N-ARY WHITE VERTICAL BAR
= n-ary Dijkstra choice
@@ 2B00 Miscellaneous Symbols and Arrows 2BFF
-@ Arrows
-@+ Other white and black arrows to complete this set can be found in Supplementary Arrows-B and Dingbats
+@ White and black arrows
+@+ Other white and black arrows to complete this set can be found in the Arrows and Dingbats blocks.
2B00 NORTH EAST WHITE ARROW
2B01 NORTH WEST WHITE ARROW
2B02 SOUTH EAST WHITE ARROW
@@ -13273,6 +14023,469 @@
2B0B SOUTH WEST BLACK ARROW
2B0C LEFT RIGHT BLACK ARROW
2B0D UP DOWN BLACK ARROW
+@ Arrows with bent tips
+2B0E RIGHTWARDS ARROW WITH TIP DOWNWARDS
+2B0F RIGHTWARDS ARROW WITH TIP UPWARDS
+2B10 LEFTWARDS ARROW WITH TIP DOWNWARDS
+2B11 LEFTWARDS ARROW WITH TIP UPWARDS
+@ Squares
+2B12 SQUARE WITH TOP HALF BLACK
+ x (square with left half black - 25E7)
+2B13 SQUARE WITH BOTTOM HALF BLACK
+@@ 2C00 Glagolitic 2C5F
+@ Capital letters
+2C00 GLAGOLITIC CAPITAL LETTER AZU
+2C01 GLAGOLITIC CAPITAL LETTER BUKY
+2C02 GLAGOLITIC CAPITAL LETTER VEDE
+2C03 GLAGOLITIC CAPITAL LETTER GLAGOLI
+2C04 GLAGOLITIC CAPITAL LETTER DOBRO
+2C05 GLAGOLITIC CAPITAL LETTER YESTU
+2C06 GLAGOLITIC CAPITAL LETTER ZHIVETE
+2C07 GLAGOLITIC CAPITAL LETTER DZELO
+2C08 GLAGOLITIC CAPITAL LETTER ZEMLJA
+2C09 GLAGOLITIC CAPITAL LETTER IZHE
+2C0A GLAGOLITIC CAPITAL LETTER INITIAL IZHE
+2C0B GLAGOLITIC CAPITAL LETTER I
+2C0C GLAGOLITIC CAPITAL LETTER DJERVI
+2C0D GLAGOLITIC CAPITAL LETTER KAKO
+2C0E GLAGOLITIC CAPITAL LETTER LJUDIJE
+2C0F GLAGOLITIC CAPITAL LETTER MYSLITE
+2C10 GLAGOLITIC CAPITAL LETTER NASHI
+2C11 GLAGOLITIC CAPITAL LETTER ONU
+2C12 GLAGOLITIC CAPITAL LETTER POKOJI
+2C13 GLAGOLITIC CAPITAL LETTER RITSI
+2C14 GLAGOLITIC CAPITAL LETTER SLOVO
+2C15 GLAGOLITIC CAPITAL LETTER TVRIDO
+2C16 GLAGOLITIC CAPITAL LETTER UKU
+2C17 GLAGOLITIC CAPITAL LETTER FRITU
+2C18 GLAGOLITIC CAPITAL LETTER HERU
+2C19 GLAGOLITIC CAPITAL LETTER OTU
+2C1A GLAGOLITIC CAPITAL LETTER PE
+2C1B GLAGOLITIC CAPITAL LETTER SHTA
+2C1C GLAGOLITIC CAPITAL LETTER TSI
+2C1D GLAGOLITIC CAPITAL LETTER CHRIVI
+2C1E GLAGOLITIC CAPITAL LETTER SHA
+2C1F GLAGOLITIC CAPITAL LETTER YERU
+2C20 GLAGOLITIC CAPITAL LETTER YERI
+2C21 GLAGOLITIC CAPITAL LETTER YATI
+2C22 GLAGOLITIC CAPITAL LETTER SPIDERY HA
+2C23 GLAGOLITIC CAPITAL LETTER YU
+2C24 GLAGOLITIC CAPITAL LETTER SMALL YUS
+2C25 GLAGOLITIC CAPITAL LETTER SMALL YUS WITH TAIL
+2C26 GLAGOLITIC CAPITAL LETTER YO
+2C27 GLAGOLITIC CAPITAL LETTER IOTATED SMALL YUS
+2C28 GLAGOLITIC CAPITAL LETTER BIG YUS
+2C29 GLAGOLITIC CAPITAL LETTER IOTATED BIG YUS
+2C2A GLAGOLITIC CAPITAL LETTER FITA
+2C2B GLAGOLITIC CAPITAL LETTER IZHITSA
+2C2C GLAGOLITIC CAPITAL LETTER SHTAPIC
+2C2D GLAGOLITIC CAPITAL LETTER TROKUTASTI A
+2C2E GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE
+@ Small letters
+2C30 GLAGOLITIC SMALL LETTER AZU
+2C31 GLAGOLITIC SMALL LETTER BUKY
+2C32 GLAGOLITIC SMALL LETTER VEDE
+2C33 GLAGOLITIC SMALL LETTER GLAGOLI
+2C34 GLAGOLITIC SMALL LETTER DOBRO
+2C35 GLAGOLITIC SMALL LETTER YESTU
+2C36 GLAGOLITIC SMALL LETTER ZHIVETE
+2C37 GLAGOLITIC SMALL LETTER DZELO
+2C38 GLAGOLITIC SMALL LETTER ZEMLJA
+2C39 GLAGOLITIC SMALL LETTER IZHE
+2C3A GLAGOLITIC SMALL LETTER INITIAL IZHE
+2C3B GLAGOLITIC SMALL LETTER I
+2C3C GLAGOLITIC SMALL LETTER DJERVI
+2C3D GLAGOLITIC SMALL LETTER KAKO
+2C3E GLAGOLITIC SMALL LETTER LJUDIJE
+2C3F GLAGOLITIC SMALL LETTER MYSLITE
+2C40 GLAGOLITIC SMALL LETTER NASHI
+2C41 GLAGOLITIC SMALL LETTER ONU
+2C42 GLAGOLITIC SMALL LETTER POKOJI
+2C43 GLAGOLITIC SMALL LETTER RITSI
+2C44 GLAGOLITIC SMALL LETTER SLOVO
+2C45 GLAGOLITIC SMALL LETTER TVRIDO
+2C46 GLAGOLITIC SMALL LETTER UKU
+2C47 GLAGOLITIC SMALL LETTER FRITU
+2C48 GLAGOLITIC SMALL LETTER HERU
+2C49 GLAGOLITIC SMALL LETTER OTU
+2C4A GLAGOLITIC SMALL LETTER PE
+2C4B GLAGOLITIC SMALL LETTER SHTA
+2C4C GLAGOLITIC SMALL LETTER TSI
+2C4D GLAGOLITIC SMALL LETTER CHRIVI
+2C4E GLAGOLITIC SMALL LETTER SHA
+2C4F GLAGOLITIC SMALL LETTER YERU
+2C50 GLAGOLITIC SMALL LETTER YERI
+2C51 GLAGOLITIC SMALL LETTER YATI
+2C52 GLAGOLITIC SMALL LETTER SPIDERY HA
+2C53 GLAGOLITIC SMALL LETTER YU
+2C54 GLAGOLITIC SMALL LETTER SMALL YUS
+2C55 GLAGOLITIC SMALL LETTER SMALL YUS WITH TAIL
+2C56 GLAGOLITIC SMALL LETTER YO
+2C57 GLAGOLITIC SMALL LETTER IOTATED SMALL YUS
+2C58 GLAGOLITIC SMALL LETTER BIG YUS
+2C59 GLAGOLITIC SMALL LETTER IOTATED BIG YUS
+2C5A GLAGOLITIC SMALL LETTER FITA
+2C5B GLAGOLITIC SMALL LETTER IZHITSA
+2C5C GLAGOLITIC SMALL LETTER SHTAPIC
+2C5D GLAGOLITIC SMALL LETTER TROKUTASTI A
+2C5E GLAGOLITIC SMALL LETTER LATINATE MYSLITE
+@@ 2C80 Coptic 2CFF
+@+ Other Coptic letters derived from Demotic are encoded in the Greek and Coptic block.
+@ Bohairic Coptic letters
+2C80 COPTIC CAPITAL LETTER ALFA
+2C81 COPTIC SMALL LETTER ALFA
+2C82 COPTIC CAPITAL LETTER VIDA
+2C83 COPTIC SMALL LETTER VIDA
+2C84 COPTIC CAPITAL LETTER GAMMA
+2C85 COPTIC SMALL LETTER GAMMA
+2C86 COPTIC CAPITAL LETTER DALDA
+2C87 COPTIC SMALL LETTER DALDA
+2C88 COPTIC CAPITAL LETTER EIE
+2C89 COPTIC SMALL LETTER EIE
+2C8A COPTIC CAPITAL LETTER SOU
+2C8B COPTIC SMALL LETTER SOU
+2C8C COPTIC CAPITAL LETTER ZATA
+2C8D COPTIC SMALL LETTER ZATA
+2C8E COPTIC CAPITAL LETTER HATE
+2C8F COPTIC SMALL LETTER HATE
+2C90 COPTIC CAPITAL LETTER THETHE
+2C91 COPTIC SMALL LETTER THETHE
+2C92 COPTIC CAPITAL LETTER IAUDA
+2C93 COPTIC SMALL LETTER IAUDA
+2C94 COPTIC CAPITAL LETTER KAPA
+2C95 COPTIC SMALL LETTER KAPA
+2C96 COPTIC CAPITAL LETTER LAULA
+2C97 COPTIC SMALL LETTER LAULA
+2C98 COPTIC CAPITAL LETTER MI
+2C99 COPTIC SMALL LETTER MI
+2C9A COPTIC CAPITAL LETTER NI
+2C9B COPTIC SMALL LETTER NI
+2C9C COPTIC CAPITAL LETTER KSI
+2C9D COPTIC SMALL LETTER KSI
+2C9E COPTIC CAPITAL LETTER O
+2C9F COPTIC SMALL LETTER O
+2CA0 COPTIC CAPITAL LETTER PI
+2CA1 COPTIC SMALL LETTER PI
+2CA2 COPTIC CAPITAL LETTER RO
+2CA3 COPTIC SMALL LETTER RO
+2CA4 COPTIC CAPITAL LETTER SIMA
+2CA5 COPTIC SMALL LETTER SIMA
+2CA6 COPTIC CAPITAL LETTER TAU
+2CA7 COPTIC SMALL LETTER TAU
+2CA8 COPTIC CAPITAL LETTER UA
+2CA9 COPTIC SMALL LETTER UA
+2CAA COPTIC CAPITAL LETTER FI
+2CAB COPTIC SMALL LETTER FI
+2CAC COPTIC CAPITAL LETTER KHI
+2CAD COPTIC SMALL LETTER KHI
+2CAE COPTIC CAPITAL LETTER PSI
+2CAF COPTIC SMALL LETTER PSI
+2CB0 COPTIC CAPITAL LETTER OOU
+2CB1 COPTIC SMALL LETTER OOU
+@ Old Coptic and dialect letters
+2CB2 COPTIC CAPITAL LETTER DIALECT-P ALEF
+2CB3 COPTIC SMALL LETTER DIALECT-P ALEF
+2CB4 COPTIC CAPITAL LETTER OLD COPTIC AIN
+2CB5 COPTIC SMALL LETTER OLD COPTIC AIN
+2CB6 COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE
+2CB7 COPTIC SMALL LETTER CRYPTOGRAMMIC EIE
+2CB8 COPTIC CAPITAL LETTER DIALECT-P KAPA
+2CB9 COPTIC SMALL LETTER DIALECT-P KAPA
+2CBA COPTIC CAPITAL LETTER DIALECT-P NI
+2CBB COPTIC SMALL LETTER DIALECT-P NI
+2CBC COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI
+2CBD COPTIC SMALL LETTER CRYPTOGRAMMIC NI
+2CBE COPTIC CAPITAL LETTER OLD COPTIC OOU
+2CBF COPTIC SMALL LETTER OLD COPTIC OOU
+2CC0 COPTIC CAPITAL LETTER SAMPI
+2CC1 COPTIC SMALL LETTER SAMPI
+2CC2 COPTIC CAPITAL LETTER CROSSED SHEI
+2CC3 COPTIC SMALL LETTER CROSSED SHEI
+2CC4 COPTIC CAPITAL LETTER OLD COPTIC SHEI
+2CC5 COPTIC SMALL LETTER OLD COPTIC SHEI
+2CC6 COPTIC CAPITAL LETTER OLD COPTIC ESH
+2CC7 COPTIC SMALL LETTER OLD COPTIC ESH
+2CC8 COPTIC CAPITAL LETTER AKHMIMIC KHEI
+2CC9 COPTIC SMALL LETTER AKHMIMIC KHEI
+2CCA COPTIC CAPITAL LETTER DIALECT-P HORI
+2CCB COPTIC SMALL LETTER DIALECT-P HORI
+2CCC COPTIC CAPITAL LETTER OLD COPTIC HORI
+2CCD COPTIC SMALL LETTER OLD COPTIC HORI
+2CCE COPTIC CAPITAL LETTER OLD COPTIC HA
+2CCF COPTIC SMALL LETTER OLD COPTIC HA
+2CD0 COPTIC CAPITAL LETTER L-SHAPED HA
+2CD1 COPTIC SMALL LETTER L-SHAPED HA
+2CD2 COPTIC CAPITAL LETTER OLD COPTIC HEI
+2CD3 COPTIC SMALL LETTER OLD COPTIC HEI
+2CD4 COPTIC CAPITAL LETTER OLD COPTIC HAT
+2CD5 COPTIC SMALL LETTER OLD COPTIC HAT
+2CD6 COPTIC CAPITAL LETTER OLD COPTIC GANGIA
+2CD7 COPTIC SMALL LETTER OLD COPTIC GANGIA
+2CD8 COPTIC CAPITAL LETTER OLD COPTIC DJA
+2CD9 COPTIC SMALL LETTER OLD COPTIC DJA
+2CDA COPTIC CAPITAL LETTER OLD COPTIC SHIMA
+2CDB COPTIC SMALL LETTER OLD COPTIC SHIMA
+@ Old Nubian letters
+2CDC COPTIC CAPITAL LETTER OLD NUBIAN SHIMA
+2CDD COPTIC SMALL LETTER OLD NUBIAN SHIMA
+2CDE COPTIC CAPITAL LETTER OLD NUBIAN NGI
+2CDF COPTIC SMALL LETTER OLD NUBIAN NGI
+2CE0 COPTIC CAPITAL LETTER OLD NUBIAN NYI
+2CE1 COPTIC SMALL LETTER OLD NUBIAN NYI
+2CE2 COPTIC CAPITAL LETTER OLD NUBIAN WAU
+2CE3 COPTIC SMALL LETTER OLD NUBIAN WAU
+@ Symbols
+2CE4 COPTIC SYMBOL KAI
+ x (greek kai symbol - 03D7)
+2CE5 COPTIC SYMBOL MI RO
+2CE6 COPTIC SYMBOL PI RO
+2CE7 COPTIC SYMBOL STAUROS
+2CE8 COPTIC SYMBOL TAU RO
+2CE9 COPTIC SYMBOL KHI RO
+ x (chi rho - 2627)
+2CEA COPTIC SYMBOL SHIMA SIMA
+@ Old Nubian punctuation
+2CF9 COPTIC OLD NUBIAN FULL STOP
+2CFA COPTIC OLD NUBIAN DIRECT QUESTION MARK
+2CFB COPTIC OLD NUBIAN INDIRECT QUESTION MARK
+2CFC COPTIC OLD NUBIAN VERSE DIVIDER
+@ Numeric character
+2CFD COPTIC FRACTION ONE HALF
+@ Punctuation
+2CFE COPTIC FULL STOP
+2CFF COPTIC MORPHOLOGICAL DIVIDER
+@@ 2D00 Georgian Supplement 2D2F
+@ Small letters (Khutsuri)
+@+ This is the lowercase of the old ecclesiastical alphabet. See the Georgian block for uppercase Asomtavruli.
+2D00 GEORGIAN SMALL LETTER AN (Khutsuri)
+2D01 GEORGIAN SMALL LETTER BAN (Khutsuri)
+2D02 GEORGIAN SMALL LETTER GAN (Khutsuri)
+2D03 GEORGIAN SMALL LETTER DON (Khutsuri)
+2D04 GEORGIAN SMALL LETTER EN (Khutsuri)
+2D05 GEORGIAN SMALL LETTER VIN (Khutsuri)
+2D06 GEORGIAN SMALL LETTER ZEN (Khutsuri)
+2D07 GEORGIAN SMALL LETTER TAN (Khutsuri)
+2D08 GEORGIAN SMALL LETTER IN (Khutsuri)
+2D09 GEORGIAN SMALL LETTER KAN (Khutsuri)
+2D0A GEORGIAN SMALL LETTER LAS (Khutsuri)
+2D0B GEORGIAN SMALL LETTER MAN (Khutsuri)
+2D0C GEORGIAN SMALL LETTER NAR (Khutsuri)
+2D0D GEORGIAN SMALL LETTER ON (Khutsuri)
+2D0E GEORGIAN SMALL LETTER PAR (Khutsuri)
+2D0F GEORGIAN SMALL LETTER ZHAR (Khutsuri)
+2D10 GEORGIAN SMALL LETTER RAE (Khutsuri)
+2D11 GEORGIAN SMALL LETTER SAN (Khutsuri)
+2D12 GEORGIAN SMALL LETTER TAR (Khutsuri)
+2D13 GEORGIAN SMALL LETTER UN (Khutsuri)
+2D14 GEORGIAN SMALL LETTER PHAR (Khutsuri)
+2D15 GEORGIAN SMALL LETTER KHAR (Khutsuri)
+2D16 GEORGIAN SMALL LETTER GHAN (Khutsuri)
+2D17 GEORGIAN SMALL LETTER QAR (Khutsuri)
+2D18 GEORGIAN SMALL LETTER SHIN (Khutsuri)
+2D19 GEORGIAN SMALL LETTER CHIN (Khutsuri)
+2D1A GEORGIAN SMALL LETTER CAN (Khutsuri)
+2D1B GEORGIAN SMALL LETTER JIL (Khutsuri)
+2D1C GEORGIAN SMALL LETTER CIL (Khutsuri)
+2D1D GEORGIAN SMALL LETTER CHAR (Khutsuri)
+2D1E GEORGIAN SMALL LETTER XAN (Khutsuri)
+2D1F GEORGIAN SMALL LETTER JHAN (Khutsuri)
+2D20 GEORGIAN SMALL LETTER HAE (Khutsuri)
+2D21 GEORGIAN SMALL LETTER HE (Khutsuri)
+2D22 GEORGIAN SMALL LETTER HIE (Khutsuri)
+2D23 GEORGIAN SMALL LETTER WE (Khutsuri)
+2D24 GEORGIAN SMALL LETTER HAR (Khutsuri)
+2D25 GEORGIAN SMALL LETTER HOE (Khutsuri)
+@@ 2D30 Tifinagh 2D7F
+@ Letters
+2D30 TIFINAGH LETTER YA
+2D31 TIFINAGH LETTER YAB
+2D32 TIFINAGH LETTER YABH
+2D33 TIFINAGH LETTER YAG
+2D34 TIFINAGH LETTER YAGHH
+2D35 TIFINAGH LETTER BERBER ACADEMY YAJ
+2D36 TIFINAGH LETTER YAJ
+2D37 TIFINAGH LETTER YAD
+2D38 TIFINAGH LETTER YADH
+2D39 TIFINAGH LETTER YADD
+2D3A TIFINAGH LETTER YADDH
+2D3B TIFINAGH LETTER YEY
+2D3C TIFINAGH LETTER YAF
+2D3D TIFINAGH LETTER YAK
+2D3E TIFINAGH LETTER TUAREG YAK
+2D3F TIFINAGH LETTER YAKHH
+2D40 TIFINAGH LETTER YAH (Tuareg yab)
+ = Tuareg yab
+2D41 TIFINAGH LETTER BERBER ACADEMY YAH
+2D42 TIFINAGH LETTER TUAREG YAH
+2D43 TIFINAGH LETTER YAHH
+2D44 TIFINAGH LETTER YAA
+2D45 TIFINAGH LETTER YAKH
+2D46 TIFINAGH LETTER TUAREG YAKH
+2D47 TIFINAGH LETTER YAQ
+2D48 TIFINAGH LETTER TUAREG YAQ
+2D49 TIFINAGH LETTER YI
+2D4A TIFINAGH LETTER YAZH
+2D4B TIFINAGH LETTER AHAGGAR YAZH
+2D4C TIFINAGH LETTER TUAREG YAZH
+2D4D TIFINAGH LETTER YAL
+2D4E TIFINAGH LETTER YAM
+2D4F TIFINAGH LETTER YAN
+2D50 TIFINAGH LETTER TUAREG YAGN
+2D51 TIFINAGH LETTER TUAREG YANG
+2D52 TIFINAGH LETTER YAP
+2D53 TIFINAGH LETTER YU (Tuareg yaw)
+ = Tuareg yaw
+2D54 TIFINAGH LETTER YAR
+2D55 TIFINAGH LETTER YARR
+2D56 TIFINAGH LETTER YAGH
+2D57 TIFINAGH LETTER TUAREG YAGH
+2D58 TIFINAGH LETTER AYER YAGH (Adrar yaj)
+ = Adrar yaj
+2D59 TIFINAGH LETTER YAS
+2D5A TIFINAGH LETTER YASS
+2D5B TIFINAGH LETTER YASH
+2D5C TIFINAGH LETTER YAT
+2D5D TIFINAGH LETTER YATH
+2D5E TIFINAGH LETTER YACH
+2D5F TIFINAGH LETTER YATT
+2D60 TIFINAGH LETTER YAV
+2D61 TIFINAGH LETTER YAW
+2D62 TIFINAGH LETTER YAY
+2D63 TIFINAGH LETTER YAZ
+2D64 TIFINAGH LETTER TAWELLEMET YAZ (harpoon yaz)
+ = harpoon yaz
+2D65 TIFINAGH LETTER YAZZ
+@ Modifier letter
+2D6F TIFINAGH MODIFIER LETTER LABIALIZATION MARK (tamatart)
+ = tamatart
+ # <super> 2D61
+@@ 2D80 Ethiopic Extended 2DDF
+@ Syllables for Me'en
+2D80 ETHIOPIC SYLLABLE LOA
+2D81 ETHIOPIC SYLLABLE MOA
+2D82 ETHIOPIC SYLLABLE ROA
+2D83 ETHIOPIC SYLLABLE SOA
+2D84 ETHIOPIC SYLLABLE SHOA
+2D85 ETHIOPIC SYLLABLE BOA
+2D86 ETHIOPIC SYLLABLE TOA
+2D87 ETHIOPIC SYLLABLE COA
+2D88 ETHIOPIC SYLLABLE NOA
+2D89 ETHIOPIC SYLLABLE NYOA
+2D8A ETHIOPIC SYLLABLE GLOTTAL OA
+2D8B ETHIOPIC SYLLABLE ZOA
+2D8C ETHIOPIC SYLLABLE DOA
+2D8D ETHIOPIC SYLLABLE DDOA
+2D8E ETHIOPIC SYLLABLE JOA
+2D8F ETHIOPIC SYLLABLE THOA
+2D90 ETHIOPIC SYLLABLE CHOA
+2D91 ETHIOPIC SYLLABLE PHOA
+2D92 ETHIOPIC SYLLABLE POA
+@ Syllables for Blin
+2D93 ETHIOPIC SYLLABLE GGWA
+2D94 ETHIOPIC SYLLABLE GGWI
+2D95 ETHIOPIC SYLLABLE GGWEE
+2D96 ETHIOPIC SYLLABLE GGWE
+@ Syllables for Sebatbeit
+2DA0 ETHIOPIC SYLLABLE SSA
+2DA1 ETHIOPIC SYLLABLE SSU
+2DA2 ETHIOPIC SYLLABLE SSI
+2DA3 ETHIOPIC SYLLABLE SSAA
+2DA4 ETHIOPIC SYLLABLE SSEE
+2DA5 ETHIOPIC SYLLABLE SSE
+2DA6 ETHIOPIC SYLLABLE SSO
+2DA8 ETHIOPIC SYLLABLE CCA
+2DA9 ETHIOPIC SYLLABLE CCU
+2DAA ETHIOPIC SYLLABLE CCI
+2DAB ETHIOPIC SYLLABLE CCAA
+2DAC ETHIOPIC SYLLABLE CCEE
+2DAD ETHIOPIC SYLLABLE CCE
+2DAE ETHIOPIC SYLLABLE CCO
+2DB0 ETHIOPIC SYLLABLE ZZA
+2DB1 ETHIOPIC SYLLABLE ZZU
+2DB2 ETHIOPIC SYLLABLE ZZI
+2DB3 ETHIOPIC SYLLABLE ZZAA
+2DB4 ETHIOPIC SYLLABLE ZZEE
+2DB5 ETHIOPIC SYLLABLE ZZE
+2DB6 ETHIOPIC SYLLABLE ZZO
+2DB8 ETHIOPIC SYLLABLE CCHA
+2DB9 ETHIOPIC SYLLABLE CCHU
+2DBA ETHIOPIC SYLLABLE CCHI
+2DBB ETHIOPIC SYLLABLE CCHAA
+2DBC ETHIOPIC SYLLABLE CCHEE
+2DBD ETHIOPIC SYLLABLE CCHE
+2DBE ETHIOPIC SYLLABLE CCHO
+2DC0 ETHIOPIC SYLLABLE QYA
+2DC1 ETHIOPIC SYLLABLE QYU
+2DC2 ETHIOPIC SYLLABLE QYI
+2DC3 ETHIOPIC SYLLABLE QYAA
+2DC4 ETHIOPIC SYLLABLE QYEE
+2DC5 ETHIOPIC SYLLABLE QYE
+2DC6 ETHIOPIC SYLLABLE QYO
+2DC8 ETHIOPIC SYLLABLE KYA
+2DC9 ETHIOPIC SYLLABLE KYU
+2DCA ETHIOPIC SYLLABLE KYI
+2DCB ETHIOPIC SYLLABLE KYAA
+2DCC ETHIOPIC SYLLABLE KYEE
+2DCD ETHIOPIC SYLLABLE KYE
+2DCE ETHIOPIC SYLLABLE KYO
+2DD0 ETHIOPIC SYLLABLE XYA
+2DD1 ETHIOPIC SYLLABLE XYU
+2DD2 ETHIOPIC SYLLABLE XYI
+2DD3 ETHIOPIC SYLLABLE XYAA
+2DD4 ETHIOPIC SYLLABLE XYEE
+2DD5 ETHIOPIC SYLLABLE XYE
+2DD6 ETHIOPIC SYLLABLE XYO
+2DD8 ETHIOPIC SYLLABLE GYA
+2DD9 ETHIOPIC SYLLABLE GYU
+2DDA ETHIOPIC SYLLABLE GYI
+2DDB ETHIOPIC SYLLABLE GYAA
+2DDC ETHIOPIC SYLLABLE GYEE
+2DDD ETHIOPIC SYLLABLE GYE
+2DDE ETHIOPIC SYLLABLE GYO
+@@ 2E00 Supplemental Punctuation 2E7F
+@ New Testament editorial symbols
+2E00 RIGHT ANGLE SUBSTITUTION MARKER
+2E01 RIGHT ANGLE DOTTED SUBSTITUTION MARKER
+2E02 LEFT SUBSTITUTION BRACKET
+2E03 RIGHT SUBSTITUTION BRACKET
+2E04 LEFT DOTTED SUBSTITUTION BRACKET
+2E05 RIGHT DOTTED SUBSTITUTION BRACKET
+2E06 RAISED INTERPOLATION MARKER
+2E07 RAISED DOTTED INTERPOLATION MARKER
+2E08 DOTTED TRANSPOSITION MARKER
+2E09 LEFT TRANSPOSITION BRACKET
+2E0A RIGHT TRANSPOSITION BRACKET
+2E0B RAISED SQUARE
+ * used as an opening raised omission bracket
+2E0C LEFT RAISED OMISSION BRACKET
+ * used as an opening or closing raised omission bracket
+2E0D RIGHT RAISED OMISSION BRACKET
+ * used as a closing or opening raised omission bracket
+@ Ancient Greek textual symbols
+2E0E EDITORIAL CORONIS
+ x (greek koronis - 1FBD)
+2E0F PARAGRAPHOS
+2E10 FORKED PARAGRAPHOS
+2E11 REVERSED FORKED PARAGRAPHOS
+2E12 HYPODIASTOLE
+2E13 DOTTED OBELOS
+ * glyph variants may look like '00F7' or '2238'
+ x (commercial minus sign - 2052)
+2E14 DOWNWARDS ANCORA
+2E15 UPWARDS ANCORA
+2E16 DOTTED RIGHT-POINTING ANGLE
+ = diple periestigmene
+@ Ancient Near-Eastern linguistic symbol
+2E17 DOUBLE OBLIQUE HYPHEN
+ * used in ancient Near-Eastern linguistics
+ * hyphen in Fraktur text uses 002D or 2010, but with a '2E17' glyph in Fraktur fonts
+ x (hyphen-minus - 002D)
+ x (equals sign - 003D)
+ x (hyphen - 2010)
+@ Brackets
+2E1C LEFT LOW PARAPHRASE BRACKET
+2E1D RIGHT LOW PARAPHRASE BRACKET
+ * used in N'Ko
@@ 2E80 CJK Radicals Supplement 2EFF
@ CJK radicals supplement
2E80 CJK RADICAL REPEAT
@@ -13476,6 +14689,7 @@
x 95E8
2ED5 CJK RADICAL MOUND ONE
x 961C
+ x 28E0F
2ED6 CJK RADICAL MOUND TWO
* form used on left side
x 961D
@@ -14047,11 +15261,13 @@
3019 RIGHT WHITE TORTOISE SHELL BRACKET
301A LEFT WHITE SQUARE BRACKET
= left abstract syntax bracket
+ x (mathematical left white square bracket - 27E6)
301B RIGHT WHITE SQUARE BRACKET
= right abstract syntax bracket
+ x (mathematical right white square bracket - 27E7)
@ CJK symbols and punctuation
301C WAVE DASH
-@+ * This character was encoded to match JIS C 6226-1978 1-33 "wave dash". Subsequent revisions of the JIS standard and industry practice have settled on JIS 1-33 as being the fullwidth tilde character.
+@+ * This character was encoded to match JIS C 6226-1978 1-33 "wave dash". The JIS standards and some industry practice disagree in mapping.
x (wavy dash - 3030)
x (fullwidth tilde - FF5E)
301D REVERSED DOUBLE PRIME QUOTATION MARK
@@ -14701,6 +15917,24 @@
31B5 BOPOMOFO FINAL LETTER T
31B6 BOPOMOFO FINAL LETTER K
31B7 BOPOMOFO FINAL LETTER H
+@@ 31C0 CJK Strokes 31EF
+@ CJK strokes
+31C0 CJK STROKE T
+31C1 CJK STROKE WG
+31C2 CJK STROKE XG
+31C3 CJK STROKE BXG
+31C4 CJK STROKE SW
+31C5 CJK STROKE HZZ
+31C6 CJK STROKE HZG
+31C7 CJK STROKE HP
+31C8 CJK STROKE HZWG
+31C9 CJK STROKE SZWG
+31CA CJK STROKE HZT
+31CB CJK STROKE HZZP
+31CC CJK STROKE HPWG
+31CD CJK STROKE HZW
+31CE CJK STROKE HZZZ
+31CF CJK STROKE N
@@ 31F0 Katakana Phonetic Extensions 31FF
@ Phonetic extensions for Ainu
31F0 KATAKANA LETTER SMALL KU
@@ -14967,6 +16201,10 @@
# <circle> 110E 1161 11B7 1100 1169
327D CIRCLED KOREAN CHARACTER JUEUI
# <circle> 110C 116E 110B 1174
+@ Circled Hangul syllable
+327E CIRCLED HANGUL IEUNG U
+ * postal code mark
+ # <circle> 110B 116E
@ Symbol
327F KOREAN STANDARD SYMBOL
@ Circled ideographs
@@ -15919,7 +17157,7 @@
4DFD HEXAGRAM FOR SMALL PREPONDERANCE
4DFE HEXAGRAM FOR AFTER COMPLETION
4DFF HEXAGRAM FOR BEFORE COMPLETION
-@@ 4E00 CJK Unified Ideographs 9FA5
+@@ 4E00 CJK Unified Ideographs 9FBB
@@ A000 Yi Syllables A48F
@ Syllables
A000 YI SYLLABLE IT
@@ -17144,6 +18382,84 @@ A4C3 YI RADICAL CHE
A4C4 YI RADICAL ZZIET
A4C5 YI RADICAL NBIE
A4C6 YI RADICAL KE
+@@ A700 Modifier Tone Letters A71F
+@ Corner tone marks for Chinese
+A700 MODIFIER LETTER CHINESE TONE YIN PING
+A701 MODIFIER LETTER CHINESE TONE YANG PING
+A702 MODIFIER LETTER CHINESE TONE YIN SHANG
+A703 MODIFIER LETTER CHINESE TONE YANG SHANG
+A704 MODIFIER LETTER CHINESE TONE YIN QU
+A705 MODIFIER LETTER CHINESE TONE YANG QU
+A706 MODIFIER LETTER CHINESE TONE YIN RU
+A707 MODIFIER LETTER CHINESE TONE YANG RU
+@ Dotted tone letters
+A708 MODIFIER LETTER EXTRA-HIGH DOTTED TONE BAR
+A709 MODIFIER LETTER HIGH DOTTED TONE BAR
+A70A MODIFIER LETTER MID DOTTED TONE BAR
+A70B MODIFIER LETTER LOW DOTTED TONE BAR
+A70C MODIFIER LETTER EXTRA-LOW DOTTED TONE BAR
+A70D MODIFIER LETTER EXTRA-HIGH DOTTED LEFT-STEM TONE BAR
+A70E MODIFIER LETTER HIGH DOTTED LEFT-STEM TONE BAR
+A70F MODIFIER LETTER MID DOTTED LEFT-STEM TONE BAR
+A710 MODIFIER LETTER LOW DOTTED LEFT-STEM TONE BAR
+A711 MODIFIER LETTER EXTRA-LOW DOTTED LEFT-STEM TONE BAR
+@ Left-stem tone letters
+A712 MODIFIER LETTER EXTRA-HIGH LEFT-STEM TONE BAR
+A713 MODIFIER LETTER HIGH LEFT-STEM TONE BAR
+A714 MODIFIER LETTER MID LEFT-STEM TONE BAR
+A715 MODIFIER LETTER LOW LEFT-STEM TONE BAR
+A716 MODIFIER LETTER EXTRA-LOW LEFT-STEM TONE BAR
+@@ A800 Syloti Nagri A82F
+@ Independent vowels and dvisvara
+A800 SYLOTI NAGRI LETTER A
+A801 SYLOTI NAGRI LETTER I
+A802 SYLOTI NAGRI SIGN DVISVARA
+A803 SYLOTI NAGRI LETTER U
+A804 SYLOTI NAGRI LETTER E
+A805 SYLOTI NAGRI LETTER O
+@ Sign
+A806 SYLOTI NAGRI SIGN HASANTA
+ = halant, virama
+@ Consonants and consonant signs
+A807 SYLOTI NAGRI LETTER KO
+A808 SYLOTI NAGRI LETTER KHO
+A809 SYLOTI NAGRI LETTER GO
+A80A SYLOTI NAGRI LETTER GHO
+A80B SYLOTI NAGRI SIGN ANUSVARA
+A80C SYLOTI NAGRI LETTER CO
+A80D SYLOTI NAGRI LETTER CHO
+A80E SYLOTI NAGRI LETTER JO
+A80F SYLOTI NAGRI LETTER JHO
+A810 SYLOTI NAGRI LETTER TTO
+A811 SYLOTI NAGRI LETTER TTHO
+A812 SYLOTI NAGRI LETTER DDO
+A813 SYLOTI NAGRI LETTER DDHO
+A814 SYLOTI NAGRI LETTER TO
+A815 SYLOTI NAGRI LETTER THO
+A816 SYLOTI NAGRI LETTER DO
+A817 SYLOTI NAGRI LETTER DHO
+A818 SYLOTI NAGRI LETTER NO
+A819 SYLOTI NAGRI LETTER PO
+A81A SYLOTI NAGRI LETTER PHO
+A81B SYLOTI NAGRI LETTER BO
+A81C SYLOTI NAGRI LETTER BHO
+A81D SYLOTI NAGRI LETTER MO
+A81E SYLOTI NAGRI LETTER RO
+A81F SYLOTI NAGRI LETTER LO
+A820 SYLOTI NAGRI LETTER RRO
+A821 SYLOTI NAGRI LETTER SO
+A822 SYLOTI NAGRI LETTER HO
+@ Dependent vowel signs
+A823 SYLOTI NAGRI VOWEL SIGN A
+A824 SYLOTI NAGRI VOWEL SIGN I
+A825 SYLOTI NAGRI VOWEL SIGN U
+A826 SYLOTI NAGRI VOWEL SIGN E
+A827 SYLOTI NAGRI VOWEL SIGN OO
+@ Poetry marks
+A828 SYLOTI NAGRI POETRY MARK-1
+A829 SYLOTI NAGRI POETRY MARK-2
+A82A SYLOTI NAGRI POETRY MARK-3
+A82B SYLOTI NAGRI POETRY MARK-4
@@ AC00 Hangul Syllables D7A3
@@ D800 High Surrogates DB7F
@@ DB80 High Private Use Surrogates DBFF
@@ -17693,7 +19009,7 @@ FA0C CJK COMPATIBILITY IDEOGRAPH-FA0C
: 5140
FA0D CJK COMPATIBILITY IDEOGRAPH-FA0D
: 55C0
-@ The IBM 32 compatibility additions
+@ The IBM 32 compatibility ideographs
FA0E CJK COMPATIBILITY IDEOGRAPH-FA0E
* a unified CJK ideograph, not a compatibility ideograph, despite its name
FA0F CJK COMPATIBILITY IDEOGRAPH-FA0F
@@ -17758,7 +19074,7 @@ FA2C CJK COMPATIBILITY IDEOGRAPH-FA2C
: 9928
FA2D CJK COMPATIBILITY IDEOGRAPH-FA2D
: 9DB4
-@ JIS X 0213 compatibility additions
+@ JIS X 0213 compatibility ideographs
FA30 CJK COMPATIBILITY IDEOGRAPH-FA30
: 4FAE
FA31 CJK COMPATIBILITY IDEOGRAPH-FA31
@@ -17877,6 +19193,219 @@ FA69 CJK COMPATIBILITY IDEOGRAPH-FA69
: 97FF
FA6A CJK COMPATIBILITY IDEOGRAPH-FA6A
: 983B
+@ DPRK compatibility ideographs
+FA70 CJK COMPATIBILITY IDEOGRAPH-FA70
+ : 4E26
+FA71 CJK COMPATIBILITY IDEOGRAPH-FA71
+ : 51B5
+FA72 CJK COMPATIBILITY IDEOGRAPH-FA72
+ : 5168
+FA73 CJK COMPATIBILITY IDEOGRAPH-FA73
+ : 4F80
+FA74 CJK COMPATIBILITY IDEOGRAPH-FA74
+ : 5145
+FA75 CJK COMPATIBILITY IDEOGRAPH-FA75
+ : 5180
+FA76 CJK COMPATIBILITY IDEOGRAPH-FA76
+ : 52C7
+FA77 CJK COMPATIBILITY IDEOGRAPH-FA77
+ : 52FA
+FA78 CJK COMPATIBILITY IDEOGRAPH-FA78
+ : 559D
+FA79 CJK COMPATIBILITY IDEOGRAPH-FA79
+ : 5555
+FA7A CJK COMPATIBILITY IDEOGRAPH-FA7A
+ : 5599
+FA7B CJK COMPATIBILITY IDEOGRAPH-FA7B
+ : 55E2
+FA7C CJK COMPATIBILITY IDEOGRAPH-FA7C
+ : 585A
+FA7D CJK COMPATIBILITY IDEOGRAPH-FA7D
+ : 58B3
+FA7E CJK COMPATIBILITY IDEOGRAPH-FA7E
+ : 5944
+FA7F CJK COMPATIBILITY IDEOGRAPH-FA7F
+ : 5954
+FA80 CJK COMPATIBILITY IDEOGRAPH-FA80
+ : 5A62
+FA81 CJK COMPATIBILITY IDEOGRAPH-FA81
+ : 5B28
+FA82 CJK COMPATIBILITY IDEOGRAPH-FA82
+ : 5ED2
+FA83 CJK COMPATIBILITY IDEOGRAPH-FA83
+ : 5ED9
+FA84 CJK COMPATIBILITY IDEOGRAPH-FA84
+ : 5F69
+FA85 CJK COMPATIBILITY IDEOGRAPH-FA85
+ : 5FAD
+FA86 CJK COMPATIBILITY IDEOGRAPH-FA86
+ : 60D8
+FA87 CJK COMPATIBILITY IDEOGRAPH-FA87
+ : 614E
+FA88 CJK COMPATIBILITY IDEOGRAPH-FA88
+ : 6108
+FA89 CJK COMPATIBILITY IDEOGRAPH-FA89
+ : 618E
+FA8A CJK COMPATIBILITY IDEOGRAPH-FA8A
+ : 6160
+FA8B CJK COMPATIBILITY IDEOGRAPH-FA8B
+ : 61F2
+FA8C CJK COMPATIBILITY IDEOGRAPH-FA8C
+ : 6234
+FA8D CJK COMPATIBILITY IDEOGRAPH-FA8D
+ : 63C4
+FA8E CJK COMPATIBILITY IDEOGRAPH-FA8E
+ : 641C
+FA8F CJK COMPATIBILITY IDEOGRAPH-FA8F
+ : 6452
+FA90 CJK COMPATIBILITY IDEOGRAPH-FA90
+ : 6556
+FA91 CJK COMPATIBILITY IDEOGRAPH-FA91
+ : 6674
+FA92 CJK COMPATIBILITY IDEOGRAPH-FA92
+ : 6717
+FA93 CJK COMPATIBILITY IDEOGRAPH-FA93
+ : 671B
+FA94 CJK COMPATIBILITY IDEOGRAPH-FA94
+ : 6756
+FA95 CJK COMPATIBILITY IDEOGRAPH-FA95
+ : 6B79
+FA96 CJK COMPATIBILITY IDEOGRAPH-FA96
+ : 6BBA
+FA97 CJK COMPATIBILITY IDEOGRAPH-FA97
+ : 6D41
+FA98 CJK COMPATIBILITY IDEOGRAPH-FA98
+ : 6EDB
+FA99 CJK COMPATIBILITY IDEOGRAPH-FA99
+ : 6ECB
+FA9A CJK COMPATIBILITY IDEOGRAPH-FA9A
+ : 6F22
+FA9B CJK COMPATIBILITY IDEOGRAPH-FA9B
+ : 701E
+FA9C CJK COMPATIBILITY IDEOGRAPH-FA9C
+ : 716E
+FA9D CJK COMPATIBILITY IDEOGRAPH-FA9D
+ : 77A7
+FA9E CJK COMPATIBILITY IDEOGRAPH-FA9E
+ : 7235
+FA9F CJK COMPATIBILITY IDEOGRAPH-FA9F
+ : 72AF
+FAA0 CJK COMPATIBILITY IDEOGRAPH-FAA0
+ : 732A
+FAA1 CJK COMPATIBILITY IDEOGRAPH-FAA1
+ : 7471
+FAA2 CJK COMPATIBILITY IDEOGRAPH-FAA2
+ : 7506
+FAA3 CJK COMPATIBILITY IDEOGRAPH-FAA3
+ : 753B
+FAA4 CJK COMPATIBILITY IDEOGRAPH-FAA4
+ : 761D
+FAA5 CJK COMPATIBILITY IDEOGRAPH-FAA5
+ : 761F
+FAA6 CJK COMPATIBILITY IDEOGRAPH-FAA6
+ : 76CA
+FAA7 CJK COMPATIBILITY IDEOGRAPH-FAA7
+ : 76DB
+FAA8 CJK COMPATIBILITY IDEOGRAPH-FAA8
+ : 76F4
+FAA9 CJK COMPATIBILITY IDEOGRAPH-FAA9
+ : 774A
+FAAA CJK COMPATIBILITY IDEOGRAPH-FAAA
+ : 7740
+FAAB CJK COMPATIBILITY IDEOGRAPH-FAAB
+ : 78CC
+FAAC CJK COMPATIBILITY IDEOGRAPH-FAAC
+ : 7AB1
+FAAD CJK COMPATIBILITY IDEOGRAPH-FAAD
+ : 7BC0
+FAAE CJK COMPATIBILITY IDEOGRAPH-FAAE
+ : 7C7B
+FAAF CJK COMPATIBILITY IDEOGRAPH-FAAF
+ : 7D5B
+FAB0 CJK COMPATIBILITY IDEOGRAPH-FAB0
+ : 7DF4
+FAB1 CJK COMPATIBILITY IDEOGRAPH-FAB1
+ : 7F3E
+FAB2 CJK COMPATIBILITY IDEOGRAPH-FAB2
+ : 8005
+FAB3 CJK COMPATIBILITY IDEOGRAPH-FAB3
+ : 8352
+FAB4 CJK COMPATIBILITY IDEOGRAPH-FAB4
+ : 83EF
+FAB5 CJK COMPATIBILITY IDEOGRAPH-FAB5
+ : 8779
+FAB6 CJK COMPATIBILITY IDEOGRAPH-FAB6
+ : 8941
+FAB7 CJK COMPATIBILITY IDEOGRAPH-FAB7
+ : 8986
+FAB8 CJK COMPATIBILITY IDEOGRAPH-FAB8
+ : 8996
+FAB9 CJK COMPATIBILITY IDEOGRAPH-FAB9
+ : 8ABF
+FABA CJK COMPATIBILITY IDEOGRAPH-FABA
+ : 8AF8
+FABB CJK COMPATIBILITY IDEOGRAPH-FABB
+ : 8ACB
+FABC CJK COMPATIBILITY IDEOGRAPH-FABC
+ : 8B01
+FABD CJK COMPATIBILITY IDEOGRAPH-FABD
+ : 8AFE
+FABE CJK COMPATIBILITY IDEOGRAPH-FABE
+ : 8AED
+FABF CJK COMPATIBILITY IDEOGRAPH-FABF
+ : 8B39
+FAC0 CJK COMPATIBILITY IDEOGRAPH-FAC0
+ : 8B8A
+FAC1 CJK COMPATIBILITY IDEOGRAPH-FAC1
+ : 8D08
+FAC2 CJK COMPATIBILITY IDEOGRAPH-FAC2
+ : 8F38
+FAC3 CJK COMPATIBILITY IDEOGRAPH-FAC3
+ : 9072
+FAC4 CJK COMPATIBILITY IDEOGRAPH-FAC4
+ : 9199
+FAC5 CJK COMPATIBILITY IDEOGRAPH-FAC5
+ : 9276
+FAC6 CJK COMPATIBILITY IDEOGRAPH-FAC6
+ : 967C
+FAC7 CJK COMPATIBILITY IDEOGRAPH-FAC7
+ : 96E3
+FAC8 CJK COMPATIBILITY IDEOGRAPH-FAC8
+ : 9756
+FAC9 CJK COMPATIBILITY IDEOGRAPH-FAC9
+ : 97DB
+FACA CJK COMPATIBILITY IDEOGRAPH-FACA
+ : 97FF
+FACB CJK COMPATIBILITY IDEOGRAPH-FACB
+ : 980B
+FACC CJK COMPATIBILITY IDEOGRAPH-FACC
+ : 983B
+FACD CJK COMPATIBILITY IDEOGRAPH-FACD
+ : 9B12
+FACE CJK COMPATIBILITY IDEOGRAPH-FACE
+ : 9F9C
+FACF CJK COMPATIBILITY IDEOGRAPH-FACF
+ : 2284A
+FAD0 CJK COMPATIBILITY IDEOGRAPH-FAD0
+ : 22844
+FAD1 CJK COMPATIBILITY IDEOGRAPH-FAD1
+ : 233D5
+FAD2 CJK COMPATIBILITY IDEOGRAPH-FAD2
+ : 3B9D
+FAD3 CJK COMPATIBILITY IDEOGRAPH-FAD3
+ : 4018
+FAD4 CJK COMPATIBILITY IDEOGRAPH-FAD4
+ : 4039
+FAD5 CJK COMPATIBILITY IDEOGRAPH-FAD5
+ : 25249
+FAD6 CJK COMPATIBILITY IDEOGRAPH-FAD6
+ : 25CD0
+FAD7 CJK COMPATIBILITY IDEOGRAPH-FAD7
+ : 27ED3
+FAD8 CJK COMPATIBILITY IDEOGRAPH-FAD8
+ : 9F43
+FAD9 CJK COMPATIBILITY IDEOGRAPH-FAD9
+ : 9F8E
@@ FB00 Alphabetic Presentation Forms FB4F
@ Latin ligatures
@+ See the Basic Latin block starting at 0020
@@ -19252,6 +20781,37 @@ FE0C VARIATION SELECTOR-13
FE0D VARIATION SELECTOR-14
FE0E VARIATION SELECTOR-15
FE0F VARIATION SELECTOR-16
+@@ FE10 Vertical forms FE1F
+@+ These characters are compatibility characters needed to map to GB 18030.
+@ Glyphs for vertical variants
+FE10 PRESENTATION FORM FOR VERTICAL COMMA
+ x (small comma - FE50)
+ # <vertical> 002C
+FE11 PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC COMMA
+ x (sesame dot - FE45)
+ x (small ideographic comma - FE51)
+ # <vertical> 3001
+FE12 PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC FULL STOP
+ # <vertical> 3002
+FE13 PRESENTATION FORM FOR VERTICAL COLON
+ x (small colon - FE55)
+ # <vertical> 003A
+FE14 PRESENTATION FORM FOR VERTICAL SEMICOLON
+ x (small semicolon - FE54)
+ # <vertical> 003B
+FE15 PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK
+ x (small exclamation mark - FE57)
+ # <vertical> 0021
+FE16 PRESENTATION FORM FOR VERTICAL QUESTION MARK
+ x (small question mark - FE56)
+ # <vertical> 003F
+FE17 PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET
+ # <vertical> 3016
+FE18 PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET
+ # <vertical> 3017
+FE19 PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS
+ x (vertical ellipsis - 22EE)
+ # <vertical> 2026
@@ FE20 Combining Half Marks FE2F
@ Combining half marks
FE20 COMBINING LIGATURE LEFT HALF
@@ -19304,6 +20864,7 @@ FE44 PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET
# <vertical> 300F
@ Sidelining emphasis marks
FE45 SESAME DOT
+ x (small ideographic comma - FE51)
FE46 WHITE SESAME DOT
* sesame dots are used beside vertical text for emphasis
@ Glyphs for vertical variants
@@ -19329,20 +20890,28 @@ FE4E CENTRELINE LOW LINE
FE4F WAVY LOW LINE
# 005F low line
@@ FE50 Small Form Variants FE6F
+@+ These characters are compatibility characters needed to map to CNS 11643.
@ Small form variants
FE50 SMALL COMMA
+ x (presentation form for vertical comma - FE10)
# <small> 002C
FE51 SMALL IDEOGRAPHIC COMMA
+ x (presentation form for vertical ideographic comma - FE11)
+ x (black sesame dot - FE45)
# <small> 3001
FE52 SMALL FULL STOP
# <small> 002E
FE54 SMALL SEMICOLON
+ x (presentation form for vertical semicolon - FE14)
# <small> 003B
FE55 SMALL COLON
+ x (presentation form for vertical colon - FE13)
# <small> 003A
FE56 SMALL QUESTION MARK
+ x (presentation form for vertical question mark - FE16)
# <small> 003F
FE57 SMALL EXCLAMATION MARK
+ x (presentation form for vertical exclamation mark - FE15)
# <small> 0021
FE58 SMALL EM DASH
# <small> 2014
@@ -20265,6 +21834,15 @@ FFFF <not a character>
1005C LINEAR B SYMBOL B086
1005D LINEAR B SYMBOL B089
@@ 10080 Linear B Ideograms 100FF
+@+ Some Linear B syllables are also used as Linear B ideograms.
+ x (linear b syllable b021 qi - 10025)
+ x (linear b symbol b022 - 10052)
+ x (linear b syllable b023 mu - 10018)
+ x (linear b syllable b030 ni - 1001B)
+ x (linear b syllable b031 sa - 1002D)
+ x (linear b syllable b033 ra3 - 10049)
+ x (linear b syllable b065 ju - 1000E)
+ x (linear b syllable b085 au - 10042)
@ People and animals
10080 LINEAR B IDEOGRAM B100 MAN
10081 LINEAR B IDEOGRAM B102 WOMAN
@@ -20466,6 +22044,88 @@ FFFF <not a character>
1013D AEGEAN LIQUID MEASURE FIRST SUBUNIT
1013E AEGEAN MEASURE SECOND SUBUNIT
1013F AEGEAN MEASURE THIRD SUBUNIT
+@@ 10140 Ancient Greek Numbers 1018F
+@ Ancient Greek acrophonic numerals
+@+ These are shown as sans-serif forms because that corresponds more closely to their appearance in ancient texts.
+10140 GREEK ACROPHONIC ATTIC ONE QUARTER
+10141 GREEK ACROPHONIC ATTIC ONE HALF
+10142 GREEK ACROPHONIC ATTIC ONE DRACHMA
+10143 GREEK ACROPHONIC ATTIC FIVE
+10144 GREEK ACROPHONIC ATTIC FIFTY
+10145 GREEK ACROPHONIC ATTIC FIVE HUNDRED
+10146 GREEK ACROPHONIC ATTIC FIVE THOUSAND
+10147 GREEK ACROPHONIC ATTIC FIFTY THOUSAND
+10148 GREEK ACROPHONIC ATTIC FIVE TALENTS
+10149 GREEK ACROPHONIC ATTIC TEN TALENTS
+1014A GREEK ACROPHONIC ATTIC FIFTY TALENTS
+1014B GREEK ACROPHONIC ATTIC ONE HUNDRED TALENTS
+1014C GREEK ACROPHONIC ATTIC FIVE HUNDRED TALENTS
+1014D GREEK ACROPHONIC ATTIC ONE THOUSAND TALENTS
+1014E GREEK ACROPHONIC ATTIC FIVE THOUSAND TALENTS
+1014F GREEK ACROPHONIC ATTIC FIVE STATERS
+10150 GREEK ACROPHONIC ATTIC TEN STATERS
+10151 GREEK ACROPHONIC ATTIC FIFTY STATERS
+10152 GREEK ACROPHONIC ATTIC ONE HUNDRED STATERS
+10153 GREEK ACROPHONIC ATTIC FIVE HUNDRED STATERS
+10154 GREEK ACROPHONIC ATTIC ONE THOUSAND STATERS
+10155 GREEK ACROPHONIC ATTIC TEN THOUSAND STATERS
+10156 GREEK ACROPHONIC ATTIC FIFTY THOUSAND STATERS
+10157 GREEK ACROPHONIC ATTIC TEN MNAS
+10158 GREEK ACROPHONIC HERAEUM ONE PLETHRON
+10159 GREEK ACROPHONIC THESPIAN ONE
+1015A GREEK ACROPHONIC HERMIONIAN ONE
+1015B GREEK ACROPHONIC EPIDAUREAN TWO
+ x (two dot punctuation - 205A)
+1015C GREEK ACROPHONIC THESPIAN TWO
+1015D GREEK ACROPHONIC CYRENAIC TWO DRACHMAS
+1015E GREEK ACROPHONIC EPIDAUREAN TWO DRACHMAS
+ * top line is at cap height, unlike 10111
+ x (aegean number twenty - 10111)
+1015F GREEK ACROPHONIC TROEZENIAN FIVE
+10160 GREEK ACROPHONIC TROEZENIAN TEN
+10161 GREEK ACROPHONIC TROEZENIAN TEN ALTERNATE FORM
+10162 GREEK ACROPHONIC HERMIONIAN TEN
+10163 GREEK ACROPHONIC MESSENIAN TEN
+10164 GREEK ACROPHONIC THESPIAN TEN
+10165 GREEK ACROPHONIC THESPIAN THIRTY
+10166 GREEK ACROPHONIC TROEZENIAN FIFTY
+10167 GREEK ACROPHONIC TROEZENIAN FIFTY ALTERNATE FORM
+10168 GREEK ACROPHONIC HERMIONIAN FIFTY
+10169 GREEK ACROPHONIC THESPIAN FIFTY
+1016A GREEK ACROPHONIC THESPIAN ONE HUNDRED
+1016B GREEK ACROPHONIC THESPIAN THREE HUNDRED
+1016C GREEK ACROPHONIC EPIDAUREAN FIVE HUNDRED
+1016D GREEK ACROPHONIC TROEZENIAN FIVE HUNDRED
+1016E GREEK ACROPHONIC THESPIAN FIVE HUNDRED
+1016F GREEK ACROPHONIC CARYSTIAN FIVE HUNDRED
+10170 GREEK ACROPHONIC NAXIAN FIVE HUNDRED
+10171 GREEK ACROPHONIC THESPIAN ONE THOUSAND
+10172 GREEK ACROPHONIC THESPIAN FIVE THOUSAND
+10173 GREEK ACROPHONIC DELPHIC FIVE MNAS
+10174 GREEK ACROPHONIC STRATIAN FIFTY MNAS
+@ Ancient Greek papyrological numbers
+10175 GREEK ONE HALF SIGN
+10176 GREEK ONE HALF SIGN ALTERNATE FORM
+10177 GREEK TWO THIRDS SIGN
+10178 GREEK THREE QUARTERS SIGN
+10179 GREEK YEAR SIGN
+1017A GREEK TALENT SIGN
+1017B GREEK DRACHMA SIGN
+1017C GREEK OBOL SIGN
+1017D GREEK TWO OBOLS SIGN
+1017E GREEK THREE OBOLS SIGN
+1017F GREEK FOUR OBOLS SIGN
+10180 GREEK FIVE OBOLS SIGN
+10181 GREEK METRETES SIGN
+10182 GREEK KYATHOS BASE SIGN
+10183 GREEK LITRA SIGN
+10184 GREEK OUNKIA SIGN
+10185 GREEK XESTES SIGN
+10186 GREEK ARTABE SIGN
+10187 GREEK AROURA SIGN
+10188 GREEK GRAMMA SIGN
+10189 GREEK TRYBLION BASE SIGN
+1018A GREEK ZERO SIGN
@@ 10300 Old Italic 1032F
@ Letters
10300 OLD ITALIC LETTER A
@@ -20567,6 +22227,62 @@ FFFF <not a character>
1039D UGARITIC LETTER SSU
@ Punctuation
1039F UGARITIC WORD DIVIDER
+@@ 103A0 Old Persian 103DF
+@ Independent vowels
+103A0 OLD PERSIAN SIGN A
+103A1 OLD PERSIAN SIGN I
+103A2 OLD PERSIAN SIGN U
+@ Consonants
+103A3 OLD PERSIAN SIGN KA
+103A4 OLD PERSIAN SIGN KU
+103A5 OLD PERSIAN SIGN GA
+103A6 OLD PERSIAN SIGN GU
+103A7 OLD PERSIAN SIGN XA
+103A8 OLD PERSIAN SIGN CA
+103A9 OLD PERSIAN SIGN JA
+103AA OLD PERSIAN SIGN JI
+103AB OLD PERSIAN SIGN TA
+103AC OLD PERSIAN SIGN TU
+103AD OLD PERSIAN SIGN DA
+103AE OLD PERSIAN SIGN DI
+103AF OLD PERSIAN SIGN DU
+103B0 OLD PERSIAN SIGN THA
+103B1 OLD PERSIAN SIGN PA
+103B2 OLD PERSIAN SIGN BA
+103B3 OLD PERSIAN SIGN FA
+103B4 OLD PERSIAN SIGN NA
+103B5 OLD PERSIAN SIGN NU
+103B6 OLD PERSIAN SIGN MA
+103B7 OLD PERSIAN SIGN MI
+103B8 OLD PERSIAN SIGN MU
+103B9 OLD PERSIAN SIGN YA
+103BA OLD PERSIAN SIGN VA
+103BB OLD PERSIAN SIGN VI
+103BC OLD PERSIAN SIGN RA
+103BD OLD PERSIAN SIGN RU
+103BE OLD PERSIAN SIGN LA
+103BF OLD PERSIAN SIGN SA
+103C0 OLD PERSIAN SIGN ZA
+103C1 OLD PERSIAN SIGN SHA
+103C2 OLD PERSIAN SIGN SSA
+103C3 OLD PERSIAN SIGN HA
+@ Various signs
+103C8 OLD PERSIAN SIGN AURAMAZDAA
+103C9 OLD PERSIAN SIGN AURAMAZDAA-2
+103CA OLD PERSIAN SIGN AURAMAZDAAHA
+103CB OLD PERSIAN SIGN XSHAAYATHIYA
+103CC OLD PERSIAN SIGN DAHYAAUSH
+103CD OLD PERSIAN SIGN DAHYAAUSH-2
+103CE OLD PERSIAN SIGN BAGA
+103CF OLD PERSIAN SIGN BUUMISH
+@ Punctuation
+103D0 OLD PERSIAN WORD DIVIDER
+@ Numbers
+103D1 OLD PERSIAN NUMBER ONE
+103D2 OLD PERSIAN NUMBER TWO
+103D3 OLD PERSIAN NUMBER TEN
+103D4 OLD PERSIAN NUMBER TWENTY
+103D5 OLD PERSIAN NUMBER HUNDRED
@@ 10400 Deseret 1044F
@ Uppercase letters
10400 DESERET CAPITAL LETTER LONG I
@@ -20801,6 +22517,83 @@ FFFF <not a character>
10838 CYPRIOT SYLLABLE XE
1083C CYPRIOT SYLLABLE ZA
1083F CYPRIOT SYLLABLE ZO
+@@ 10A00 Kharoshthi 10A5F
+@ Vowels
+10A00 KHAROSHTHI LETTER A
+10A01 KHAROSHTHI VOWEL SIGN I
+10A02 KHAROSHTHI VOWEL SIGN U
+10A03 KHAROSHTHI VOWEL SIGN VOCALIC R
+10A05 KHAROSHTHI VOWEL SIGN E
+10A06 KHAROSHTHI VOWEL SIGN O
+@ Length mark
+10A0C KHAROSHTHI VOWEL LENGTH MARK
+@ Various signs
+10A0D KHAROSHTHI SIGN DOUBLE RING BELOW
+10A0E KHAROSHTHI SIGN ANUSVARA
+10A0F KHAROSHTHI SIGN VISARGA
+@ Consonants
+10A10 KHAROSHTHI LETTER KA
+10A11 KHAROSHTHI LETTER KHA
+10A12 KHAROSHTHI LETTER GA
+10A13 KHAROSHTHI LETTER GHA
+10A15 KHAROSHTHI LETTER CA
+10A16 KHAROSHTHI LETTER CHA
+10A17 KHAROSHTHI LETTER JA
+10A19 KHAROSHTHI LETTER NYA
+10A1A KHAROSHTHI LETTER TTA
+10A1B KHAROSHTHI LETTER TTHA
+10A1C KHAROSHTHI LETTER DDA
+10A1D KHAROSHTHI LETTER DDHA
+10A1E KHAROSHTHI LETTER NNA
+10A1F KHAROSHTHI LETTER TA
+10A20 KHAROSHTHI LETTER THA
+10A21 KHAROSHTHI LETTER DA
+10A22 KHAROSHTHI LETTER DHA
+10A23 KHAROSHTHI LETTER NA
+10A24 KHAROSHTHI LETTER PA
+10A25 KHAROSHTHI LETTER PHA
+10A26 KHAROSHTHI LETTER BA
+10A27 KHAROSHTHI LETTER BHA
+10A28 KHAROSHTHI LETTER MA
+10A29 KHAROSHTHI LETTER YA
+10A2A KHAROSHTHI LETTER RA
+10A2B KHAROSHTHI LETTER LA
+10A2C KHAROSHTHI LETTER VA
+10A2D KHAROSHTHI LETTER SHA
+10A2E KHAROSHTHI LETTER SSA
+10A2F KHAROSHTHI LETTER SA
+10A30 KHAROSHTHI LETTER ZA
+10A31 KHAROSHTHI LETTER HA
+10A32 KHAROSHTHI LETTER KKA
+10A33 KHAROSHTHI LETTER TTTHA
+@ Various signs
+10A38 KHAROSHTHI SIGN BAR ABOVE
+10A39 KHAROSHTHI SIGN CAUDA
+10A3A KHAROSHTHI SIGN DOT BELOW
+@ Virama
+10A3F KHAROSHTHI VIRAMA
+ = halant
+ * suppresses inherent vowel
+@ Digits
+10A40 KHAROSHTHI DIGIT ONE
+10A41 KHAROSHTHI DIGIT TWO
+10A42 KHAROSHTHI DIGIT THREE
+10A43 KHAROSHTHI DIGIT FOUR
+@ Numbers
+10A44 KHAROSHTHI NUMBER TEN
+10A45 KHAROSHTHI NUMBER TWENTY
+10A46 KHAROSHTHI NUMBER ONE HUNDRED
+10A47 KHAROSHTHI NUMBER ONE THOUSAND
+@ Punctuation
+10A50 KHAROSHTHI PUNCTUATION DOT
+10A51 KHAROSHTHI PUNCTUATION SMALL CIRCLE
+10A52 KHAROSHTHI PUNCTUATION CIRCLE
+10A53 KHAROSHTHI PUNCTUATION CRESCENT BAR
+10A54 KHAROSHTHI PUNCTUATION MANGALAM
+10A55 KHAROSHTHI PUNCTUATION LOTUS
+10A56 KHAROSHTHI PUNCTUATION DANDA
+10A57 KHAROSHTHI PUNCTUATION DOUBLE DANDA
+10A58 KHAROSHTHI PUNCTUATION LINES
@@ 1D000 Byzantine Musical Symbols 1D0FF
@ Prosodies (Prosodics)
1D000 BYZANTINE MUSICAL SYMBOL PSILI
@@ -21072,6 +22865,7 @@ FFFF <not a character>
1D103 MUSICAL SYMBOL REVERSE FINAL BARLINE
1D104 MUSICAL SYMBOL DASHED BARLINE
1D105 MUSICAL SYMBOL SHORT BARLINE
+@ Codas
1D106 MUSICAL SYMBOL LEFT REPEAT SIGN
1D107 MUSICAL SYMBOL RIGHT REPEAT SIGN
1D108 MUSICAL SYMBOL REPEAT DOTS
@@ -21079,13 +22873,16 @@ FFFF <not a character>
1D10A MUSICAL SYMBOL DA CAPO
1D10B MUSICAL SYMBOL SEGNO
1D10C MUSICAL SYMBOL CODA
+@ Figure repetitions
1D10D MUSICAL SYMBOL REPEATED FIGURE-1
1D10E MUSICAL SYMBOL REPEATED FIGURE-2
1D10F MUSICAL SYMBOL REPEATED FIGURE-3
+@ Holds and pauses
1D110 MUSICAL SYMBOL FERMATA
1D111 MUSICAL SYMBOL FERMATA BELOW
1D112 MUSICAL SYMBOL BREATH MARK
1D113 MUSICAL SYMBOL CAESURA
+@ Staff brackets
1D114 MUSICAL SYMBOL BRACE
1D115 MUSICAL SYMBOL BRACKET
@ Staves
@@ -21330,6 +23127,174 @@ FFFF <not a character>
1D1DB MUSICAL SYMBOL SCANDICUS FLEXUS
1D1DC MUSICAL SYMBOL TORCULUS RESUPINUS
1D1DD MUSICAL SYMBOL PES SUBPUNCTIS
+@@ 1D200 Ancient Greek Musical Notation 1D24F
+@ Ancient Greek vocalic notation
+@+ In a few instances vocalic and instrumental symbols have been unified with each other. In other instances they have been unified with regular Greek letters.
+1D200 GREEK VOCAL NOTATION SYMBOL-1
+ * vocal E
+1D201 GREEK VOCAL NOTATION SYMBOL-2
+ * vocal first sharp of E
+1D202 GREEK VOCAL NOTATION SYMBOL-3
+ = Greek instrumental notation symbol-3
+ * vocal or instrumental second sharp of E
+1D203 GREEK VOCAL NOTATION SYMBOL-4
+ * vocal F
+1D204 GREEK VOCAL NOTATION SYMBOL-5
+ * vocal first sharp of F
+1D205 GREEK VOCAL NOTATION SYMBOL-6
+ = Greek instrumental notation symbol-21
+ * vocal second sharp of F
+ * instrumental second sharp of d
+1D206 GREEK VOCAL NOTATION SYMBOL-7
+ = Greek instrumental notation symbol-9
+ * vocal G
+ * instrumental second sharp of G
+1D207 GREEK VOCAL NOTATION SYMBOL-8
+ * vocal first sharp of G
+1D208 GREEK VOCAL NOTATION SYMBOL-9
+ = Greek instrumental notation symbol-44
+ * vocal second sharp of G
+ * instrumental first sharp of e´
+1D209 GREEK VOCAL NOTATION SYMBOL-10
+ * vocal A
+ * this is a modification of 039F and is therefore not the same as 03D8
+1D20A GREEK VOCAL NOTATION SYMBOL-11
+ * vocal first sharp of A
+1D20B GREEK VOCAL NOTATION SYMBOL-12
+ * vocal second sharp of A
+1D20C GREEK VOCAL NOTATION SYMBOL-13
+ * vocal B
+1D20D GREEK VOCAL NOTATION SYMBOL-14
+ = Greek instrumental notation symbol-41
+ * vocal first sharp of B
+ * instrumental first sharp of d´
+ x (latin capital letter v - 0056)
+1D20E GREEK VOCAL NOTATION SYMBOL-15
+ = Greek instrumental notation symbol-35
+ * vocal second sharp of B
+ * instrumental first sharp of b
+1D20F GREEK VOCAL NOTATION SYMBOL-16
+ * vocal c
+ * unlike 1D23B this character has a glyph variant that looks like a horizontal line
+1D210 GREEK VOCAL NOTATION SYMBOL-17
+ * vocal first sharp of c
+1D211 GREEK VOCAL NOTATION SYMBOL-18
+ = Greek instrumental notation symbol-15
+ * vocal second sharp of c
+ * instrumental second sharp of B
+1D212 GREEK VOCAL NOTATION SYMBOL-19
+ * vocal d
+1D213 GREEK VOCAL NOTATION SYMBOL-20
+ = Greek instrumental notation symbol-28
+ * vocal first sharp of d
+ * instrumental g
+ * this is a modification of 0395 and is therefore not the same as 0046
+1D214 GREEK VOCAL NOTATION SYMBOL-21
+ * vocal second sharp of d
+1D215 GREEK VOCAL NOTATION SYMBOL-22
+ * vocal e
+1D216 GREEK VOCAL NOTATION SYMBOL-23
+ * vocal first sharp of e
+ * this is a modification of 0392 and is therefore not the same as 0052
+1D217 GREEK VOCAL NOTATION SYMBOL-24
+ * vocal second sharp of e
+1D218 GREEK VOCAL NOTATION SYMBOL-50
+ * vocal first sharp of g´
+1D219 GREEK VOCAL NOTATION SYMBOL-51
+ * vocal second sharp of g´
+1D21A GREEK VOCAL NOTATION SYMBOL-52
+ * vocal a´
+1D21B GREEK VOCAL NOTATION SYMBOL-53
+ * vocal first sharp of a´
+1D21C GREEK VOCAL NOTATION SYMBOL-54
+ = Greek instrumental notation symbol-20
+ * vocal second sharp of a´
+ * instrumental first sharp of d
+@ Ancient Greek instrumental notation
+1D21D GREEK INSTRUMENTAL NOTATION SYMBOL-1
+ * instrumental E
+1D21E GREEK INSTRUMENTAL NOTATION SYMBOL-2
+ * instrumental first sharp of e
+1D21F GREEK INSTRUMENTAL NOTATION SYMBOL-4
+ * instrumental F
+1D220 GREEK INSTRUMENTAL NOTATION SYMBOL-5
+ * instrumental first sharp of F
+1D221 GREEK INSTRUMENTAL NOTATION SYMBOL-7
+ * instrumental G
+1D222 GREEK INSTRUMENTAL NOTATION SYMBOL-8
+ * instrumental first sharp of G
+1D223 GREEK INSTRUMENTAL NOTATION SYMBOL-11
+ * instrumental first sharp of A
+1D224 GREEK INSTRUMENTAL NOTATION SYMBOL-12
+ * instrumental second sharp of A
+1D225 GREEK INSTRUMENTAL NOTATION SYMBOL-13
+ * instrumental B
+1D226 GREEK INSTRUMENTAL NOTATION SYMBOL-14
+ * instrumental first sharp of B
+1D227 GREEK INSTRUMENTAL NOTATION SYMBOL-17
+ * instrumental first sharp of c
+1D228 GREEK INSTRUMENTAL NOTATION SYMBOL-18
+ * instrumental second sharp of c
+1D229 GREEK INSTRUMENTAL NOTATION SYMBOL-19
+ * instrumental d
+1D22A GREEK INSTRUMENTAL NOTATION SYMBOL-23
+ * instrumental first sharp of e
+1D22B GREEK INSTRUMENTAL NOTATION SYMBOL-24
+ * instrumental second sharp of e
+1D22C GREEK INSTRUMENTAL NOTATION SYMBOL-25
+ * instrumental f
+1D22D GREEK INSTRUMENTAL NOTATION SYMBOL-26
+ * instrumental first sharp of f
+1D22E GREEK INSTRUMENTAL NOTATION SYMBOL-27
+ * instrumental second sharp of f
+1D22F GREEK INSTRUMENTAL NOTATION SYMBOL-29
+ * instrumental first sharp of g
+1D230 GREEK INSTRUMENTAL NOTATION SYMBOL-30
+ * instrumental second sharp of g
+1D231 GREEK INSTRUMENTAL NOTATION SYMBOL-32
+ * instrumental first sharp of a
+1D232 GREEK INSTRUMENTAL NOTATION SYMBOL-36
+ * instrumental second sharp of b
+1D233 GREEK INSTRUMENTAL NOTATION SYMBOL-37
+ * instrumental c´
+1D234 GREEK INSTRUMENTAL NOTATION SYMBOL-38
+ * instrumental first sharp of c´
+1D235 GREEK INSTRUMENTAL NOTATION SYMBOL-39
+ * instrumental second sharp of c´
+1D236 GREEK INSTRUMENTAL NOTATION SYMBOL-40
+ * instrumental d´
+1D237 GREEK INSTRUMENTAL NOTATION SYMBOL-42
+ * instrumental second sharp of d´
+1D238 GREEK INSTRUMENTAL NOTATION SYMBOL-43
+ * instrumental e´
+1D239 GREEK INSTRUMENTAL NOTATION SYMBOL-45
+ * instrumental second sharp of e´
+1D23A GREEK INSTRUMENTAL NOTATION SYMBOL-47
+ * instrumental first sharp of f´
+ * similar but not identical to 002F
+1D23B GREEK INSTRUMENTAL NOTATION SYMBOL-48
+ * instrumental second sharp of f´
+ * similar but not identical to 005C
+1D23C GREEK INSTRUMENTAL NOTATION SYMBOL-49
+ * instrumental g´
+1D23D GREEK INSTRUMENTAL NOTATION SYMBOL-50
+ * instrumental first sharp of g´
+1D23E GREEK INSTRUMENTAL NOTATION SYMBOL-51
+ * instrumental second sharp of g´
+1D23F GREEK INSTRUMENTAL NOTATION SYMBOL-52
+ * instrumental a´
+1D240 GREEK INSTRUMENTAL NOTATION SYMBOL-53
+ * instrumental first sharp of a´
+1D241 GREEK INSTRUMENTAL NOTATION SYMBOL-54
+ * instrumental second sharp of a´
+@ Further Greek musical notation symbols
+1D242 COMBINING GREEK MUSICAL TRISEME
+ x (metrical triseme - 23D7)
+1D243 COMBINING GREEK MUSICAL TETRASEME
+ x (metrical tetraseme - 23D8)
+1D244 COMBINING GREEK MUSICAL PENTASEME
+ x (metrical pentaseme - 23D9)
+1D245 GREEK MUSICAL LEIMMA
@@ 1D300 Tai Xuan Jing Symbols 1D35F
@ Monogram
1D300 MONOGRAM FOR EARTH
@@ -21772,6 +23737,7 @@ FFFF <not a character>
1D4AA MATHEMATICAL SCRIPT CAPITAL O
# <font> 004F latin capital letter o
1D4AB MATHEMATICAL SCRIPT CAPITAL P
+ = power set
# <font> 0050 latin capital letter p
1D4AC MATHEMATICAL SCRIPT CAPITAL Q
# <font> 0051 latin capital letter q
@@ -22795,6 +24761,18 @@ FFFF <not a character>
# <font> 0079 latin small letter y
1D6A3 MATHEMATICAL MONOSPACE SMALL Z
# <font> 007A latin small letter z
+@ Dotless symbols
+@+ For use as independent symbols. These are not required as base characters for accents since regular i and j are soft-dotted in Unicode.
+1D6A4 MATHEMATICAL ITALIC SMALL DOTLESS I
+ = \imath
+ x (latin small letter dotless i - 0131)
+ x (mathematical italic small i - 1D456)
+ # <font> 0131 latin small letter dotless i
+1D6A5 MATHEMATICAL ITALIC SMALL DOTLESS J
+ = \jmath
+ x (latin small letter dotless j - 0237)
+ x (mathematical italic small j - 1D457)
+ # <font> 0237 latin small letter dotless j
@ Bold Greek symbols
1D6A8 MATHEMATICAL BOLD CAPITAL ALPHA
# <font> 0391 greek capital letter alpha
@@ -24780,7 +26758,7 @@ E007D TAG RIGHT CURLY BRACKET
E007E TAG TILDE
E007F CANCEL TAG
@@ E0100 Variation Selectors Supplement E01EF
-@+ These complete the set started at FE01 to FE0F
+@+ These complete the set started at FE00 to FE0F
@ Variation selectors
E0100 VARIATION SELECTOR-17
* these are abbreviated VS17, and so on
diff --git a/gnu/usr.bin/perl/lib/unicore/NormalizationCorrections.txt b/gnu/usr.bin/perl/lib/unicore/NormalizationCorrections.txt
index d76c150d2e2..9391acefbb7 100644
--- a/gnu/usr.bin/perl/lib/unicore/NormalizationCorrections.txt
+++ b/gnu/usr.bin/perl/lib/unicore/NormalizationCorrections.txt
@@ -1,8 +1,12 @@
-# NormalizationCorrections-4.0.0.txt
+# NormalizationCorrections-4.1.0.txt
+# Date: 2005-03-17, 15:21:00 PST [KW]
#
# This file is a normative contributory data file in the
# Unicode Character Database.
#
+# Copyright (c) 1991-2005 Unicode, Inc.
+# For terms of use, see http://www.unicode.org/terms_of_use.html
+#
# The normalization stabilization policy of the Unicode
# Consortium ordinarily precludes any change to the decomposition
# for any character, once established in a relevant version
@@ -34,6 +38,7 @@
# Comment: Indicates the Unicode Corrigendum which documents
# the correction
#
+# For more information, see UAX #15, Unicode Normalization Forms.
#
F951;96FB;964B;3.2.0 # Corrigendum 3
2F868;2136A;36FC;4.0.0 # Corrigendum 4
diff --git a/gnu/usr.bin/perl/lib/unicore/PropList.txt b/gnu/usr.bin/perl/lib/unicore/PropList.txt
index 964c40ac567..befc49e8e64 100644
--- a/gnu/usr.bin/perl/lib/unicore/PropList.txt
+++ b/gnu/usr.bin/perl/lib/unicore/PropList.txt
@@ -1,8 +1,8 @@
-# PropList-4.0.1.txt
-# Date: 2004-03-02, 02:42:40 GMT [MD]
+# PropList-4.1.0.txt
+# Date: 2005-03-26, 00:34:40 GMT [MD]
#
# Unicode Character Database
-# Copyright (c) 1991-2004 Unicode, Inc.
+# Copyright (c) 1991-2005 Unicode, Inc.
# For terms of use, see http://www.unicode.org/terms_of_use.html
# For documentation, see UCD.html
@@ -46,14 +46,16 @@
207B ; Dash # Sm SUPERSCRIPT MINUS
208B ; Dash # Sm SUBSCRIPT MINUS
2212 ; Dash # Sm MINUS SIGN
+2E17 ; Dash # Pd DOUBLE OBLIQUE HYPHEN
301C ; Dash # Pd WAVE DASH
3030 ; Dash # Pd WAVY DASH
+30A0 ; Dash # Pd KATAKANA-HIRAGANA DOUBLE HYPHEN
FE31..FE32 ; Dash # Pd [2] PRESENTATION FORM FOR VERTICAL EM DASH..PRESENTATION FORM FOR VERTICAL EN DASH
FE58 ; Dash # Pd SMALL EM DASH
FE63 ; Dash # Pd SMALL HYPHEN-MINUS
FF0D ; Dash # Pd FULLWIDTH HYPHEN-MINUS
-# Total code points: 20
+# Total code points: 22
# ================================================
@@ -62,12 +64,13 @@ FF0D ; Dash # Pd FULLWIDTH HYPHEN-MINUS
058A ; Hyphen # Pd ARMENIAN HYPHEN
1806 ; Hyphen # Pd MONGOLIAN TODO SOFT HYPHEN
2010..2011 ; Hyphen # Pd [2] HYPHEN..NON-BREAKING HYPHEN
-30FB ; Hyphen # Pc KATAKANA MIDDLE DOT
+2E17 ; Hyphen # Pd DOUBLE OBLIQUE HYPHEN
+30FB ; Hyphen # Po KATAKANA MIDDLE DOT
FE63 ; Hyphen # Pd SMALL HYPHEN-MINUS
FF0D ; Hyphen # Pd FULLWIDTH HYPHEN-MINUS
-FF65 ; Hyphen # Pc HALFWIDTH KATAKANA MIDDLE DOT
+FF65 ; Hyphen # Po HALFWIDTH KATAKANA MIDDLE DOT
-# Total code points: 10
+# Total code points: 11
# ================================================
@@ -175,10 +178,12 @@ FF64 ; Terminal_Punctuation # Po HALFWIDTH IDEOGRAPHIC COMMA
212F..2131 ; Other_Math # L& [3] SCRIPT SMALL E..SCRIPT CAPITAL F
2133..2134 ; Other_Math # L& [2] SCRIPT CAPITAL M..SCRIPT SMALL O
2135..2138 ; Other_Math # Lo [4] ALEF SYMBOL..DALET SYMBOL
-213D..213F ; Other_Math # L& [3] DOUBLE-STRUCK SMALL GAMMA..DOUBLE-STRUCK CAPITAL PI
+213C..213F ; Other_Math # L& [4] DOUBLE-STRUCK SMALL PI..DOUBLE-STRUCK CAPITAL PI
2145..2149 ; Other_Math # L& [5] DOUBLE-STRUCK ITALIC CAPITAL D..DOUBLE-STRUCK ITALIC SMALL J
23B7 ; Other_Math # So RADICAL SYMBOL BOTTOM
23D0 ; Other_Math # So VERTICAL LINE EXTENSION
+27C5 ; Other_Math # Ps LEFT S-SHAPED BAG DELIMITER
+27C6 ; Other_Math # Pe RIGHT S-SHAPED BAG DELIMITER
27E6 ; Other_Math # Ps MATHEMATICAL LEFT WHITE SQUARE BRACKET
27E7 ; Other_Math # Pe MATHEMATICAL RIGHT WHITE SQUARE BRACKET
27E8 ; Other_Math # Ps MATHEMATICAL LEFT ANGLE BRACKET
@@ -250,7 +255,7 @@ FF3E ; Other_Math # Sk FULLWIDTH CIRCUMFLEX ACCENT
1D7C4..1D7C9 ; Other_Math # L& [6] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC PI SYMBOL
1D7CE..1D7FF ; Other_Math # Nd [50] MATHEMATICAL BOLD DIGIT ZERO..MATHEMATICAL MONOSPACE DIGIT NINE
-# Total code points: 1099
+# Total code points: 1102
# ================================================
@@ -278,9 +283,11 @@ FF41..FF46 ; Hex_Digit # L& [6] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH L
05BB..05BD ; Other_Alphabetic # Mn [3] HEBREW POINT QUBUTS..HEBREW POINT METEG
05BF ; Other_Alphabetic # Mn HEBREW POINT RAFE
05C1..05C2 ; Other_Alphabetic # Mn [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT
-05C4 ; Other_Alphabetic # Mn HEBREW MARK UPPER DOT
+05C4..05C5 ; Other_Alphabetic # Mn [2] HEBREW MARK UPPER DOT..HEBREW MARK LOWER DOT
+05C7 ; Other_Alphabetic # Mn HEBREW POINT QAMATS QATAN
0610..0615 ; Other_Alphabetic # Mn [6] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL HIGH TAH
064B..0657 ; Other_Alphabetic # Mn [13] ARABIC FATHATAN..ARABIC INVERTED DAMMA
+0659..065E ; Other_Alphabetic # Mn [6] ARABIC ZWARAKAY..ARABIC FATHA WITH TWO DOTS
0670 ; Other_Alphabetic # Mn ARABIC LETTER SUPERSCRIPT ALEF
06D6..06DC ; Other_Alphabetic # Mn [7] ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA..ARABIC SMALL HIGH SEEN
06E1..06E4 ; Other_Alphabetic # Mn [4] ARABIC SMALL HIGH DOTLESS HEAD OF KHAH..ARABIC SMALL HIGH MADDA
@@ -382,7 +389,7 @@ FF41..FF46 ; Hex_Digit # L& [6] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH L
1038 ; Other_Alphabetic # Mc MYANMAR SIGN VISARGA
1056..1057 ; Other_Alphabetic # Mc [2] MYANMAR VOWEL SIGN VOCALIC R..MYANMAR VOWEL SIGN VOCALIC RR
1058..1059 ; Other_Alphabetic # Mn [2] MYANMAR VOWEL SIGN VOCALIC L..MYANMAR VOWEL SIGN VOCALIC LL
-16EE..16F0 ; Other_Alphabetic # Nl [3] RUNIC ARLAUG SYMBOL..RUNIC BELGTHOR SYMBOL
+135F ; Other_Alphabetic # Mn ETHIOPIC COMBINING GEMINATION MARK
1712..1713 ; Other_Alphabetic # Mn [2] TAGALOG VOWEL SIGN I..TAGALOG VOWEL SIGN U
1732..1733 ; Other_Alphabetic # Mn [2] HANUNOO VOWEL SIGN I..HANUNOO VOWEL SIGN U
1752..1753 ; Other_Alphabetic # Mn [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U
@@ -400,11 +407,20 @@ FF41..FF46 ; Hex_Digit # L& [6] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH L
1930..1931 ; Other_Alphabetic # Mc [2] LIMBU SMALL LETTER KA..LIMBU SMALL LETTER NGA
1932 ; Other_Alphabetic # Mn LIMBU SMALL LETTER ANUSVARA
1933..1938 ; Other_Alphabetic # Mc [6] LIMBU SMALL LETTER TA..LIMBU SMALL LETTER LA
-2160..2183 ; Other_Alphabetic # Nl [36] ROMAN NUMERAL ONE..ROMAN NUMERAL REVERSED ONE HUNDRED
+19B0..19C0 ; Other_Alphabetic # Mc [17] NEW TAI LUE VOWEL SIGN VOWEL SHORTENER..NEW TAI LUE VOWEL SIGN IY
+19C8..19C9 ; Other_Alphabetic # Mc [2] NEW TAI LUE TONE MARK-1..NEW TAI LUE TONE MARK-2
+1A17..1A18 ; Other_Alphabetic # Mn [2] BUGINESE VOWEL SIGN I..BUGINESE VOWEL SIGN U
+1A19..1A1B ; Other_Alphabetic # Mc [3] BUGINESE VOWEL SIGN E..BUGINESE VOWEL SIGN AE
+24B6..24E9 ; Other_Alphabetic # So [52] CIRCLED LATIN CAPITAL LETTER A..CIRCLED LATIN SMALL LETTER Z
+A823..A824 ; Other_Alphabetic # Mc [2] SYLOTI NAGRI VOWEL SIGN A..SYLOTI NAGRI VOWEL SIGN I
+A825..A826 ; Other_Alphabetic # Mn [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E
+A827 ; Other_Alphabetic # Mc SYLOTI NAGRI VOWEL SIGN OO
FB1E ; Other_Alphabetic # Mn HEBREW POINT JUDEO-SPANISH VARIKA
-1034A ; Other_Alphabetic # Nl GOTHIC LETTER NINE HUNDRED
+10A01..10A03 ; Other_Alphabetic # Mn [3] KHAROSHTHI VOWEL SIGN I..KHAROSHTHI VOWEL SIGN VOCALIC R
+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
-# Total code points: 429
+# Total code points: 488
# ================================================
@@ -413,12 +429,13 @@ FB1E ; Other_Alphabetic # Mn HEBREW POINT JUDEO-SPANISH VARIKA
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..9FA5 ; Ideographic # Lo [20902] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FA5
+4E00..9FBB ; Ideographic # Lo [20924] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FBB
F900..FA2D ; Ideographic # Lo [302] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA2D
+FA70..FAD9 ; Ideographic # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9
20000..2A6D6 ; Ideographic # Lo [42711] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6D6
2F800..2FA1D ; Ideographic # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D
-# Total code points: 71053
+# Total code points: 71181
# ================================================
@@ -530,9 +547,10 @@ FFE3 ; Diacritic # Sk FULLWIDTH MACRON
3031..3035 ; Extender # Lm [5] VERTICAL KANA REPEAT MARK..VERTICAL KANA REPEAT MARK LOWER HALF
309D..309E ; Extender # Lm [2] HIRAGANA ITERATION MARK..HIRAGANA VOICED ITERATION MARK
30FC..30FE ; Extender # Lm [3] KATAKANA-HIRAGANA PROLONGED SOUND MARK..KATAKANA VOICED ITERATION MARK
+A015 ; Extender # Lm YI SYLLABLE WU
FF70 ; Extender # Lm HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK
-# Total code points: 19
+# Total code points: 20
# ================================================
@@ -542,10 +560,13 @@ FF70 ; Extender # Lm HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND
0345 ; Other_Lowercase # Mn COMBINING GREEK YPOGEGRAMMENI
037A ; Other_Lowercase # Lm GREEK YPOGEGRAMMENI
1D2C..1D61 ; Other_Lowercase # Lm [54] MODIFIER LETTER CAPITAL A..MODIFIER LETTER SMALL CHI
+1D78 ; Other_Lowercase # Lm MODIFIER LETTER CYRILLIC EN
+1D9B..1DBF ; Other_Lowercase # Lm [37] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL THETA
+2090..2094 ; Other_Lowercase # Lm [5] LATIN SUBSCRIPT SMALL LETTER A..LATIN SUBSCRIPT SMALL LETTER SCHWA
2170..217F ; Other_Lowercase # Nl [16] SMALL ROMAN NUMERAL ONE..SMALL ROMAN NUMERAL ONE THOUSAND
24D0..24E9 ; Other_Lowercase # So [26] CIRCLED LATIN SMALL LETTER A..CIRCLED LATIN SMALL LETTER Z
-# Total code points: 114
+# Total code points: 157
# ================================================
@@ -593,9 +614,9 @@ FFFFE..FFFFF ; Noncharacter_Code_Point # Cn [2] <noncharacter-FFFFE>..<noncha
0DDF ; Other_Grapheme_Extend # Mc SINHALA VOWEL SIGN GAYANUKITTA
200C..200D ; Other_Grapheme_Extend # Cf [2] ZERO WIDTH NON-JOINER..ZERO WIDTH JOINER
1D165 ; Other_Grapheme_Extend # Mc MUSICAL SYMBOL COMBINING STEM
-1D16E..1D16F ; Other_Grapheme_Extend # Mc [2] MUSICAL SYMBOL COMBINING FLAG-1..MUSICAL SYMBOL COMBINING FLAG-2
+1D16E..1D172 ; Other_Grapheme_Extend # Mc [5] MUSICAL SYMBOL COMBINING FLAG-1..MUSICAL SYMBOL COMBINING FLAG-5
-# Total code points: 18
+# Total code points: 21
# ================================================
@@ -613,8 +634,10 @@ FFFFE..FFFFF ; Noncharacter_Code_Point # Cn [2] <noncharacter-FFFFE>..<noncha
0E3A ; Grapheme_Link # Mn THAI CHARACTER PHINTHU
1039 ; Grapheme_Link # Mn MYANMAR SIGN VIRAMA
17D2 ; Grapheme_Link # Mn KHMER SIGN COENG
+A806 ; Grapheme_Link # Mn SYLOTI NAGRI SIGN HASANTA
+10A3F ; Grapheme_Link # Mn KHAROSHTHI VIRAMA
-# Total code points: 14
+# Total code points: 16
# ================================================
@@ -640,7 +663,7 @@ FFFFE..FFFFF ; Noncharacter_Code_Point # Cn [2] <noncharacter-FFFFE>..<noncha
# ================================================
3400..4DB5 ; Unified_Ideograph # Lo [6582] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DB5
-4E00..9FA5 ; Unified_Ideograph # Lo [20902] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FA5
+4E00..9FBB ; Unified_Ideograph # Lo [20924] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FBB
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
@@ -650,13 +673,12 @@ FA23..FA24 ; Unified_Ideograph # Lo [2] CJK COMPATIBILITY IDEOGRAPH-FA23..C
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
-# Total code points: 70207
+# Total code points: 70229
# ================================================
034F ; Other_Default_Ignorable_Code_Point # Mn COMBINING GRAPHEME JOINER
115F..1160 ; Other_Default_Ignorable_Code_Point # Lo [2] HANGUL CHOSEONG FILLER..HANGUL JUNGSEONG FILLER
-200B ; Other_Default_Ignorable_Code_Point # Cf ZERO WIDTH SPACE
2064..2069 ; Other_Default_Ignorable_Code_Point # Cn [6] <reserved-2064>..<reserved-2069>
3164 ; Other_Default_Ignorable_Code_Point # Lo HANGUL FILLER
FFA0 ; Other_Default_Ignorable_Code_Point # Lo HALFWIDTH HANGUL FILLER
@@ -666,7 +688,7 @@ E0002..E001F ; Other_Default_Ignorable_Code_Point # Cn [30] <reserved-E0002>..
E0080..E00FF ; Other_Default_Ignorable_Code_Point # Cn [128] <reserved-E0080>..<reserved-E00FF>
E01F0..E0FFF ; Other_Default_Ignorable_Code_Point # Cn [3600] <reserved-E01F0>..<reserved-E0FFF>
-# Total code points: 3780
+# Total code points: 3779
# ================================================
@@ -688,6 +710,9 @@ E01F0..E0FFF ; Other_Default_Ignorable_Code_Point # Cn [3600] <reserved-E01F0>.
0456 ; Soft_Dotted # L& CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
0458 ; Soft_Dotted # L& CYRILLIC SMALL LETTER JE
1D62 ; Soft_Dotted # L& LATIN SUBSCRIPT SMALL LETTER I
+1D96 ; Soft_Dotted # L& LATIN SMALL LETTER I WITH RETROFLEX HOOK
+1DA4 ; Soft_Dotted # Lm MODIFIER LETTER SMALL I WITH STROKE
+1DA8 ; Soft_Dotted # Lm MODIFIER LETTER SMALL J WITH CROSSED-TAIL
1E2D ; Soft_Dotted # L& LATIN SMALL LETTER I WITH TILDE BELOW
1ECB ; Soft_Dotted # L& LATIN SMALL LETTER I WITH DOT BELOW
2071 ; Soft_Dotted # L& SUPERSCRIPT LATIN SMALL LETTER I
@@ -706,7 +731,7 @@ E01F0..E0FFF ; Other_Default_Ignorable_Code_Point # Cn [3600] <reserved-E01F0>.
1D65E..1D65F ; Soft_Dotted # L& [2] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL I..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL J
1D692..1D693 ; Soft_Dotted # L& [2] MATHEMATICAL MONOSPACE SMALL I..MATHEMATICAL MONOSPACE SMALL J
-# Total code points: 41
+# Total code points: 44
# ================================================
@@ -725,6 +750,12 @@ E01F0..E0FFF ; Other_Default_Ignorable_Code_Point # Cn [3600] <reserved-E01F0>.
# ================================================
+1369..1371 ; Other_ID_Continue # No [9] ETHIOPIC DIGIT ONE..ETHIOPIC DIGIT NINE
+
+# Total code points: 9
+
+# ================================================
+
0021 ; STerm # Po EXCLAMATION MARK
002E ; STerm # Po FULL STOP
003F ; STerm # Po QUESTION MARK
@@ -761,3 +792,258 @@ FE00..FE0F ; Variation_Selector # Mn [16] VARIATION SELECTOR-1..VARIATION SE
E0100..E01EF ; Variation_Selector # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256
# Total code points: 259
+
+# ================================================
+
+0009..000D ; Pattern_White_Space # Cc [5] <control-0009>..<control-000D>
+0020 ; Pattern_White_Space # Zs SPACE
+0085 ; Pattern_White_Space # Cc <control-0085>
+200E..200F ; Pattern_White_Space # Cf [2] LEFT-TO-RIGHT MARK..RIGHT-TO-LEFT MARK
+2028 ; Pattern_White_Space # Zl LINE SEPARATOR
+2029 ; Pattern_White_Space # Zp PARAGRAPH SEPARATOR
+
+# Total code points: 11
+
+# ================================================
+
+0021..0023 ; Pattern_Syntax # Po [3] EXCLAMATION MARK..NUMBER SIGN
+0024 ; Pattern_Syntax # Sc DOLLAR SIGN
+0025..0027 ; Pattern_Syntax # Po [3] PERCENT SIGN..APOSTROPHE
+0028 ; Pattern_Syntax # Ps LEFT PARENTHESIS
+0029 ; Pattern_Syntax # Pe RIGHT PARENTHESIS
+002A ; Pattern_Syntax # Po ASTERISK
+002B ; Pattern_Syntax # Sm PLUS SIGN
+002C ; Pattern_Syntax # Po COMMA
+002D ; Pattern_Syntax # Pd HYPHEN-MINUS
+002E..002F ; Pattern_Syntax # Po [2] FULL STOP..SOLIDUS
+003A..003B ; Pattern_Syntax # Po [2] COLON..SEMICOLON
+003C..003E ; Pattern_Syntax # Sm [3] LESS-THAN SIGN..GREATER-THAN SIGN
+003F..0040 ; Pattern_Syntax # Po [2] QUESTION MARK..COMMERCIAL AT
+005B ; Pattern_Syntax # Ps LEFT SQUARE BRACKET
+005C ; Pattern_Syntax # Po REVERSE SOLIDUS
+005D ; Pattern_Syntax # Pe RIGHT SQUARE BRACKET
+005E ; Pattern_Syntax # Sk CIRCUMFLEX ACCENT
+0060 ; Pattern_Syntax # Sk GRAVE ACCENT
+007B ; Pattern_Syntax # Ps LEFT CURLY BRACKET
+007C ; Pattern_Syntax # Sm VERTICAL LINE
+007D ; Pattern_Syntax # Pe RIGHT CURLY BRACKET
+007E ; Pattern_Syntax # Sm TILDE
+00A1 ; Pattern_Syntax # Po INVERTED EXCLAMATION MARK
+00A2..00A5 ; Pattern_Syntax # Sc [4] CENT SIGN..YEN SIGN
+00A6..00A7 ; Pattern_Syntax # So [2] BROKEN BAR..SECTION SIGN
+00A9 ; Pattern_Syntax # So COPYRIGHT SIGN
+00AB ; Pattern_Syntax # Pi LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+00AC ; Pattern_Syntax # Sm NOT SIGN
+00AE ; Pattern_Syntax # So REGISTERED SIGN
+00B0 ; Pattern_Syntax # So DEGREE SIGN
+00B1 ; Pattern_Syntax # Sm PLUS-MINUS SIGN
+00B6 ; Pattern_Syntax # So PILCROW SIGN
+00BB ; Pattern_Syntax # Pf RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+00BF ; Pattern_Syntax # Po INVERTED QUESTION MARK
+00D7 ; Pattern_Syntax # Sm MULTIPLICATION SIGN
+00F7 ; Pattern_Syntax # Sm DIVISION SIGN
+2010..2015 ; Pattern_Syntax # Pd [6] HYPHEN..HORIZONTAL BAR
+2016..2017 ; Pattern_Syntax # Po [2] DOUBLE VERTICAL LINE..DOUBLE LOW LINE
+2018 ; Pattern_Syntax # Pi LEFT SINGLE QUOTATION MARK
+2019 ; Pattern_Syntax # Pf RIGHT SINGLE QUOTATION MARK
+201A ; Pattern_Syntax # Ps SINGLE LOW-9 QUOTATION MARK
+201B..201C ; Pattern_Syntax # Pi [2] SINGLE HIGH-REVERSED-9 QUOTATION MARK..LEFT DOUBLE QUOTATION MARK
+201D ; Pattern_Syntax # Pf RIGHT DOUBLE QUOTATION MARK
+201E ; Pattern_Syntax # Ps DOUBLE LOW-9 QUOTATION MARK
+201F ; Pattern_Syntax # Pi DOUBLE HIGH-REVERSED-9 QUOTATION MARK
+2020..2027 ; Pattern_Syntax # Po [8] DAGGER..HYPHENATION POINT
+2030..2038 ; Pattern_Syntax # Po [9] PER MILLE SIGN..CARET
+2039 ; Pattern_Syntax # Pi SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+203A ; Pattern_Syntax # Pf SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+203B..203E ; Pattern_Syntax # Po [4] REFERENCE MARK..OVERLINE
+2041..2043 ; Pattern_Syntax # Po [3] CARET INSERTION POINT..HYPHEN BULLET
+2044 ; Pattern_Syntax # Sm FRACTION SLASH
+2045 ; Pattern_Syntax # Ps LEFT SQUARE BRACKET WITH QUILL
+2046 ; Pattern_Syntax # Pe RIGHT SQUARE BRACKET WITH QUILL
+2047..2051 ; Pattern_Syntax # Po [11] DOUBLE QUESTION MARK..TWO ASTERISKS ALIGNED VERTICALLY
+2052 ; Pattern_Syntax # Sm COMMERCIAL MINUS SIGN
+2053 ; Pattern_Syntax # Po SWUNG DASH
+2055..205E ; Pattern_Syntax # Po [10] FLOWER PUNCTUATION MARK..VERTICAL FOUR DOTS
+2190..2194 ; Pattern_Syntax # Sm [5] LEFTWARDS ARROW..LEFT RIGHT ARROW
+2195..2199 ; Pattern_Syntax # So [5] UP DOWN ARROW..SOUTH WEST ARROW
+219A..219B ; Pattern_Syntax # Sm [2] LEFTWARDS ARROW WITH STROKE..RIGHTWARDS ARROW WITH STROKE
+219C..219F ; Pattern_Syntax # So [4] LEFTWARDS WAVE ARROW..UPWARDS TWO HEADED ARROW
+21A0 ; Pattern_Syntax # Sm RIGHTWARDS TWO HEADED ARROW
+21A1..21A2 ; Pattern_Syntax # So [2] DOWNWARDS TWO HEADED ARROW..LEFTWARDS ARROW WITH TAIL
+21A3 ; Pattern_Syntax # Sm RIGHTWARDS ARROW WITH TAIL
+21A4..21A5 ; Pattern_Syntax # So [2] LEFTWARDS ARROW FROM BAR..UPWARDS ARROW FROM BAR
+21A6 ; Pattern_Syntax # Sm RIGHTWARDS ARROW FROM BAR
+21A7..21AD ; Pattern_Syntax # So [7] DOWNWARDS ARROW FROM BAR..LEFT RIGHT WAVE ARROW
+21AE ; Pattern_Syntax # Sm LEFT RIGHT ARROW WITH STROKE
+21AF..21CD ; Pattern_Syntax # So [31] DOWNWARDS ZIGZAG ARROW..LEFTWARDS DOUBLE ARROW WITH STROKE
+21CE..21CF ; Pattern_Syntax # Sm [2] LEFT RIGHT DOUBLE ARROW WITH STROKE..RIGHTWARDS DOUBLE ARROW WITH STROKE
+21D0..21D1 ; Pattern_Syntax # So [2] LEFTWARDS DOUBLE ARROW..UPWARDS DOUBLE ARROW
+21D2 ; Pattern_Syntax # Sm RIGHTWARDS DOUBLE ARROW
+21D3 ; Pattern_Syntax # So DOWNWARDS DOUBLE ARROW
+21D4 ; Pattern_Syntax # Sm LEFT RIGHT DOUBLE ARROW
+21D5..21F3 ; Pattern_Syntax # So [31] UP DOWN DOUBLE ARROW..UP DOWN WHITE ARROW
+21F4..22FF ; Pattern_Syntax # Sm [268] RIGHT ARROW WITH SMALL CIRCLE..Z NOTATION BAG MEMBERSHIP
+2300..2307 ; Pattern_Syntax # So [8] DIAMETER SIGN..WAVY LINE
+2308..230B ; Pattern_Syntax # Sm [4] LEFT CEILING..RIGHT FLOOR
+230C..231F ; Pattern_Syntax # So [20] BOTTOM RIGHT CROP..BOTTOM RIGHT CORNER
+2320..2321 ; Pattern_Syntax # Sm [2] TOP HALF INTEGRAL..BOTTOM HALF INTEGRAL
+2322..2328 ; Pattern_Syntax # So [7] FROWN..KEYBOARD
+2329 ; Pattern_Syntax # Ps LEFT-POINTING ANGLE BRACKET
+232A ; Pattern_Syntax # Pe RIGHT-POINTING ANGLE BRACKET
+232B..237B ; Pattern_Syntax # So [81] ERASE TO THE LEFT..NOT CHECK MARK
+237C ; Pattern_Syntax # Sm RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW
+237D..239A ; Pattern_Syntax # So [30] SHOULDERED OPEN BOX..CLEAR SCREEN SYMBOL
+239B..23B3 ; Pattern_Syntax # Sm [25] LEFT PARENTHESIS UPPER HOOK..SUMMATION BOTTOM
+23B4 ; Pattern_Syntax # Ps TOP SQUARE BRACKET
+23B5 ; Pattern_Syntax # Pe BOTTOM SQUARE BRACKET
+23B6 ; Pattern_Syntax # Po BOTTOM SQUARE BRACKET OVER TOP SQUARE BRACKET
+23B7..23DB ; Pattern_Syntax # So [37] RADICAL SYMBOL BOTTOM..FUSE
+23DC..23FF ; Pattern_Syntax # Cn [36] <reserved-23DC>..<reserved-23FF>
+2400..2426 ; Pattern_Syntax # So [39] SYMBOL FOR NULL..SYMBOL FOR SUBSTITUTE FORM TWO
+2427..243F ; Pattern_Syntax # Cn [25] <reserved-2427>..<reserved-243F>
+2440..244A ; Pattern_Syntax # So [11] OCR HOOK..OCR DOUBLE BACKSLASH
+244B..245F ; Pattern_Syntax # Cn [21] <reserved-244B>..<reserved-245F>
+2500..25B6 ; Pattern_Syntax # So [183] BOX DRAWINGS LIGHT HORIZONTAL..BLACK RIGHT-POINTING TRIANGLE
+25B7 ; Pattern_Syntax # Sm WHITE RIGHT-POINTING TRIANGLE
+25B8..25C0 ; Pattern_Syntax # So [9] BLACK RIGHT-POINTING SMALL TRIANGLE..BLACK LEFT-POINTING TRIANGLE
+25C1 ; Pattern_Syntax # Sm WHITE LEFT-POINTING TRIANGLE
+25C2..25F7 ; Pattern_Syntax # So [54] BLACK LEFT-POINTING SMALL TRIANGLE..WHITE CIRCLE WITH UPPER RIGHT QUADRANT
+25F8..25FF ; Pattern_Syntax # Sm [8] UPPER LEFT TRIANGLE..LOWER RIGHT TRIANGLE
+2600..266E ; Pattern_Syntax # So [111] BLACK SUN WITH RAYS..MUSIC NATURAL SIGN
+266F ; Pattern_Syntax # Sm MUSIC SHARP SIGN
+2670..269C ; Pattern_Syntax # So [45] WEST SYRIAC CROSS..FLEUR-DE-LIS
+269D..269F ; Pattern_Syntax # Cn [3] <reserved-269D>..<reserved-269F>
+26A0..26B1 ; Pattern_Syntax # So [18] WARNING SIGN..FUNERAL URN
+26B2..2700 ; Pattern_Syntax # Cn [79] <reserved-26B2>..<reserved-2700>
+2701..2704 ; Pattern_Syntax # So [4] UPPER BLADE SCISSORS..WHITE SCISSORS
+2705 ; Pattern_Syntax # Cn <reserved-2705>
+2706..2709 ; Pattern_Syntax # So [4] TELEPHONE LOCATION SIGN..ENVELOPE
+270A..270B ; Pattern_Syntax # Cn [2] <reserved-270A>..<reserved-270B>
+270C..2727 ; Pattern_Syntax # So [28] VICTORY HAND..WHITE FOUR POINTED STAR
+2728 ; Pattern_Syntax # Cn <reserved-2728>
+2729..274B ; Pattern_Syntax # So [35] STRESS OUTLINED WHITE STAR..HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK
+274C ; Pattern_Syntax # Cn <reserved-274C>
+274D ; Pattern_Syntax # So SHADOWED WHITE CIRCLE
+274E ; Pattern_Syntax # Cn <reserved-274E>
+274F..2752 ; Pattern_Syntax # So [4] LOWER RIGHT DROP-SHADOWED WHITE SQUARE..UPPER RIGHT SHADOWED WHITE SQUARE
+2753..2755 ; Pattern_Syntax # Cn [3] <reserved-2753>..<reserved-2755>
+2756 ; Pattern_Syntax # So BLACK DIAMOND MINUS WHITE X
+2757 ; Pattern_Syntax # Cn <reserved-2757>
+2758..275E ; Pattern_Syntax # So [7] LIGHT VERTICAL BAR..HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT
+275F..2760 ; Pattern_Syntax # Cn [2] <reserved-275F>..<reserved-2760>
+2761..2767 ; Pattern_Syntax # So [7] CURVED STEM PARAGRAPH SIGN ORNAMENT..ROTATED FLORAL HEART BULLET
+2768 ; Pattern_Syntax # Ps MEDIUM LEFT PARENTHESIS ORNAMENT
+2769 ; Pattern_Syntax # Pe MEDIUM RIGHT PARENTHESIS ORNAMENT
+276A ; Pattern_Syntax # Ps MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT
+276B ; Pattern_Syntax # Pe MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT
+276C ; Pattern_Syntax # Ps MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT
+276D ; Pattern_Syntax # Pe MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT
+276E ; Pattern_Syntax # Ps HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT
+276F ; Pattern_Syntax # Pe HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT
+2770 ; Pattern_Syntax # Ps HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT
+2771 ; Pattern_Syntax # Pe HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT
+2772 ; Pattern_Syntax # Ps LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT
+2773 ; Pattern_Syntax # Pe LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT
+2774 ; Pattern_Syntax # Ps MEDIUM LEFT CURLY BRACKET ORNAMENT
+2775 ; Pattern_Syntax # Pe MEDIUM RIGHT CURLY BRACKET ORNAMENT
+2794 ; Pattern_Syntax # So HEAVY WIDE-HEADED RIGHTWARDS ARROW
+2795..2797 ; Pattern_Syntax # Cn [3] <reserved-2795>..<reserved-2797>
+2798..27AF ; Pattern_Syntax # So [24] HEAVY SOUTH EAST ARROW..NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW
+27B0 ; Pattern_Syntax # Cn <reserved-27B0>
+27B1..27BE ; Pattern_Syntax # So [14] NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW..OPEN-OUTLINED RIGHTWARDS ARROW
+27BF ; Pattern_Syntax # Cn <reserved-27BF>
+27C0..27C4 ; Pattern_Syntax # Sm [5] THREE DIMENSIONAL ANGLE..OPEN SUPERSET
+27C5 ; Pattern_Syntax # Ps LEFT S-SHAPED BAG DELIMITER
+27C6 ; Pattern_Syntax # Pe RIGHT S-SHAPED BAG DELIMITER
+27C7..27CF ; Pattern_Syntax # Cn [9] <reserved-27C7>..<reserved-27CF>
+27D0..27E5 ; Pattern_Syntax # Sm [22] WHITE DIAMOND WITH CENTRED DOT..WHITE SQUARE WITH RIGHTWARDS TICK
+27E6 ; Pattern_Syntax # Ps MATHEMATICAL LEFT WHITE SQUARE BRACKET
+27E7 ; Pattern_Syntax # Pe MATHEMATICAL RIGHT WHITE SQUARE BRACKET
+27E8 ; Pattern_Syntax # Ps MATHEMATICAL LEFT ANGLE BRACKET
+27E9 ; Pattern_Syntax # Pe MATHEMATICAL RIGHT ANGLE BRACKET
+27EA ; Pattern_Syntax # Ps MATHEMATICAL LEFT DOUBLE ANGLE BRACKET
+27EB ; Pattern_Syntax # Pe MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET
+27EC..27EF ; Pattern_Syntax # Cn [4] <reserved-27EC>..<reserved-27EF>
+27F0..27FF ; Pattern_Syntax # Sm [16] UPWARDS QUADRUPLE ARROW..LONG RIGHTWARDS SQUIGGLE ARROW
+2800..28FF ; Pattern_Syntax # So [256] BRAILLE PATTERN BLANK..BRAILLE PATTERN DOTS-12345678
+2900..2982 ; Pattern_Syntax # Sm [131] RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE..Z NOTATION TYPE COLON
+2983 ; Pattern_Syntax # Ps LEFT WHITE CURLY BRACKET
+2984 ; Pattern_Syntax # Pe RIGHT WHITE CURLY BRACKET
+2985 ; Pattern_Syntax # Ps LEFT WHITE PARENTHESIS
+2986 ; Pattern_Syntax # Pe RIGHT WHITE PARENTHESIS
+2987 ; Pattern_Syntax # Ps Z NOTATION LEFT IMAGE BRACKET
+2988 ; Pattern_Syntax # Pe Z NOTATION RIGHT IMAGE BRACKET
+2989 ; Pattern_Syntax # Ps Z NOTATION LEFT BINDING BRACKET
+298A ; Pattern_Syntax # Pe Z NOTATION RIGHT BINDING BRACKET
+298B ; Pattern_Syntax # Ps LEFT SQUARE BRACKET WITH UNDERBAR
+298C ; Pattern_Syntax # Pe RIGHT SQUARE BRACKET WITH UNDERBAR
+298D ; Pattern_Syntax # Ps LEFT SQUARE BRACKET WITH TICK IN TOP CORNER
+298E ; Pattern_Syntax # Pe RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
+298F ; Pattern_Syntax # Ps LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
+2990 ; Pattern_Syntax # Pe RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER
+2991 ; Pattern_Syntax # Ps LEFT ANGLE BRACKET WITH DOT
+2992 ; Pattern_Syntax # Pe RIGHT ANGLE BRACKET WITH DOT
+2993 ; Pattern_Syntax # Ps LEFT ARC LESS-THAN BRACKET
+2994 ; Pattern_Syntax # Pe RIGHT ARC GREATER-THAN BRACKET
+2995 ; Pattern_Syntax # Ps DOUBLE LEFT ARC GREATER-THAN BRACKET
+2996 ; Pattern_Syntax # Pe DOUBLE RIGHT ARC LESS-THAN BRACKET
+2997 ; Pattern_Syntax # Ps LEFT BLACK TORTOISE SHELL BRACKET
+2998 ; Pattern_Syntax # Pe RIGHT BLACK TORTOISE SHELL BRACKET
+2999..29D7 ; Pattern_Syntax # Sm [63] DOTTED FENCE..BLACK HOURGLASS
+29D8 ; Pattern_Syntax # Ps LEFT WIGGLY FENCE
+29D9 ; Pattern_Syntax # Pe RIGHT WIGGLY FENCE
+29DA ; Pattern_Syntax # Ps LEFT DOUBLE WIGGLY FENCE
+29DB ; Pattern_Syntax # Pe RIGHT DOUBLE WIGGLY FENCE
+29DC..29FB ; Pattern_Syntax # Sm [32] INCOMPLETE INFINITY..TRIPLE PLUS
+29FC ; Pattern_Syntax # Ps LEFT-POINTING CURVED ANGLE BRACKET
+29FD ; Pattern_Syntax # Pe RIGHT-POINTING CURVED ANGLE BRACKET
+29FE..2AFF ; Pattern_Syntax # Sm [258] TINY..N-ARY WHITE VERTICAL BAR
+2B00..2B13 ; Pattern_Syntax # So [20] NORTH EAST WHITE ARROW..SQUARE WITH BOTTOM HALF BLACK
+2B14..2BFF ; Pattern_Syntax # Cn [236] <reserved-2B14>..<reserved-2BFF>
+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
+2E04 ; Pattern_Syntax # Pi LEFT DOTTED SUBSTITUTION BRACKET
+2E05 ; Pattern_Syntax # Pf RIGHT DOTTED SUBSTITUTION BRACKET
+2E06..2E08 ; Pattern_Syntax # Po [3] RAISED INTERPOLATION MARKER..DOTTED TRANSPOSITION MARKER
+2E09 ; Pattern_Syntax # Pi LEFT TRANSPOSITION BRACKET
+2E0A ; Pattern_Syntax # Pf RIGHT TRANSPOSITION BRACKET
+2E0B ; Pattern_Syntax # Po RAISED SQUARE
+2E0C ; Pattern_Syntax # Pi LEFT RAISED OMISSION BRACKET
+2E0D ; Pattern_Syntax # Pf RIGHT RAISED OMISSION BRACKET
+2E0E..2E16 ; Pattern_Syntax # Po [9] EDITORIAL CORONIS..DOTTED RIGHT-POINTING ANGLE
+2E17 ; Pattern_Syntax # Pd DOUBLE OBLIQUE HYPHEN
+2E18..2E1B ; Pattern_Syntax # Cn [4] <reserved-2E18>..<reserved-2E1B>
+2E1C ; Pattern_Syntax # Pi LEFT LOW PARAPHRASE BRACKET
+2E1D ; Pattern_Syntax # Pf RIGHT LOW PARAPHRASE BRACKET
+2E1E..2E7F ; Pattern_Syntax # Cn [98] <reserved-2E1E>..<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
+300A ; Pattern_Syntax # Ps LEFT DOUBLE ANGLE BRACKET
+300B ; Pattern_Syntax # Pe RIGHT DOUBLE ANGLE BRACKET
+300C ; Pattern_Syntax # Ps LEFT CORNER BRACKET
+300D ; Pattern_Syntax # Pe RIGHT CORNER BRACKET
+300E ; Pattern_Syntax # Ps LEFT WHITE CORNER BRACKET
+300F ; Pattern_Syntax # Pe RIGHT WHITE CORNER BRACKET
+3010 ; Pattern_Syntax # Ps LEFT BLACK LENTICULAR BRACKET
+3011 ; Pattern_Syntax # Pe RIGHT BLACK LENTICULAR BRACKET
+3012..3013 ; Pattern_Syntax # So [2] POSTAL MARK..GETA MARK
+3014 ; Pattern_Syntax # Ps LEFT TORTOISE SHELL BRACKET
+3015 ; Pattern_Syntax # Pe RIGHT TORTOISE SHELL BRACKET
+3016 ; Pattern_Syntax # Ps LEFT WHITE LENTICULAR BRACKET
+3017 ; Pattern_Syntax # Pe RIGHT WHITE LENTICULAR BRACKET
+3018 ; Pattern_Syntax # Ps LEFT WHITE TORTOISE SHELL BRACKET
+3019 ; Pattern_Syntax # Pe RIGHT WHITE TORTOISE SHELL BRACKET
+301A ; Pattern_Syntax # Ps LEFT WHITE SQUARE BRACKET
+301B ; Pattern_Syntax # Pe RIGHT WHITE SQUARE BRACKET
+301C ; Pattern_Syntax # Pd WAVE DASH
+301D ; Pattern_Syntax # Ps REVERSED DOUBLE PRIME QUOTATION MARK
+301E..301F ; Pattern_Syntax # Pe [2] DOUBLE PRIME QUOTATION MARK..LOW DOUBLE PRIME QUOTATION MARK
+3020 ; Pattern_Syntax # So POSTAL MARK FACE
+3030 ; Pattern_Syntax # Pd WAVY DASH
+FD3E ; Pattern_Syntax # Ps ORNATE LEFT PARENTHESIS
+FD3F ; Pattern_Syntax # Pe ORNATE RIGHT PARENTHESIS
+FE45..FE46 ; Pattern_Syntax # Po [2] SESAME DOT..WHITE SESAME DOT
+
+# Total code points: 2760
diff --git a/gnu/usr.bin/perl/lib/unicore/PropValueAliases.txt b/gnu/usr.bin/perl/lib/unicore/PropValueAliases.txt
index 74460d5c478..3f7aad206e5 100644
--- a/gnu/usr.bin/perl/lib/unicore/PropValueAliases.txt
+++ b/gnu/usr.bin/perl/lib/unicore/PropValueAliases.txt
@@ -1,10 +1,11 @@
-# PropertyValueAliases-4.0.1.txt
-# Date: 2004-03-02, 19:46:47 GMT [MD]
+# PropertyValueAliases-4.1.0.txt
+# Date: 2005-03-28, 17:21:48 GMT [MD]
#
# Unicode Character Database
-# Copyright (c) 1991-2004 Unicode, Inc.
+# Copyright (c) 1991-2005 Unicode, Inc.
# For terms of use, see http://www.unicode.org/terms_of_use.html
# For documentation, see UCD.html
+#
# This file contains aliases for property values used in the UCD.
# These names can be used for XML formats of UCD data, for regular-expression
# property tests, and other programmatic textual descriptions of Unicode data.
@@ -63,6 +64,7 @@ age; n/a ; 3.0
age; n/a ; 3.1
age; n/a ; 3.2
age; n/a ; 4.0
+age; n/a ; 4.1
age; n/a ; unassigned
# Bidi_Class (bc)
@@ -91,9 +93,12 @@ bc ; WS ; White_Space
blk; n/a ; Aegean_Numbers
blk; n/a ; Alphabetic_Presentation_Forms
+blk; n/a ; Ancient_Greek_Musical_Notation
+blk; n/a ; Ancient_Greek_Numbers
blk; n/a ; Arabic
blk; n/a ; Arabic_Presentation_Forms-A
blk; n/a ; Arabic_Presentation_Forms-B
+blk; n/a ; Arabic_Supplement
blk; n/a ; Armenian
blk; n/a ; Arrows
blk; n/a ; Basic_Latin
@@ -103,6 +108,7 @@ blk; n/a ; Bopomofo
blk; n/a ; Bopomofo_Extended
blk; n/a ; Box_Drawing
blk; n/a ; Braille_Patterns
+blk; n/a ; Buginese
blk; n/a ; Buhid
blk; n/a ; Byzantine_Musical_Symbols
blk; n/a ; Cherokee
@@ -111,14 +117,17 @@ blk; n/a ; CJK_Compatibility_Forms
blk; n/a ; CJK_Compatibility_Ideographs
blk; n/a ; CJK_Compatibility_Ideographs_Supplement
blk; n/a ; CJK_Radicals_Supplement
+blk; n/a ; CJK_Strokes
blk; n/a ; CJK_Symbols_and_Punctuation
blk; n/a ; CJK_Unified_Ideographs
blk; n/a ; CJK_Unified_Ideographs_Extension_A
blk; n/a ; CJK_Unified_Ideographs_Extension_B
blk; n/a ; Combining_Diacritical_Marks
blk; n/a ; Combining_Diacritical_Marks_for_Symbols
+blk; n/a ; Combining_Diacritical_Marks_Supplement
blk; n/a ; Combining_Half_Marks
blk; n/a ; Control_Pictures
+blk; n/a ; Coptic
blk; n/a ; Currency_Symbols
blk; n/a ; Cypriot_Syllabary
blk; n/a ; Cyrillic
@@ -129,9 +138,13 @@ blk; n/a ; Dingbats
blk; n/a ; Enclosed_Alphanumerics
blk; n/a ; Enclosed_CJK_Letters_and_Months
blk; n/a ; Ethiopic
+blk; n/a ; Ethiopic_Extended
+blk; n/a ; Ethiopic_Supplement
blk; n/a ; General_Punctuation
blk; n/a ; Geometric_Shapes
blk; n/a ; Georgian
+blk; n/a ; Georgian_Supplement
+blk; n/a ; Glagolitic
blk; n/a ; Gothic
blk; n/a ; Greek_and_Coptic
blk; n/a ; Greek_Extended
@@ -153,6 +166,7 @@ blk; n/a ; Kangxi_Radicals
blk; n/a ; Kannada
blk; n/a ; Katakana
blk; n/a ; Katakana_Phonetic_Extensions
+blk; n/a ; Kharoshthi
blk; n/a ; Khmer
blk; n/a ; Khmer_Symbols
blk; n/a ; Lao
@@ -173,17 +187,21 @@ blk; n/a ; Miscellaneous_Mathematical_Symbols-B
blk; n/a ; Miscellaneous_Symbols
blk; n/a ; Miscellaneous_Symbols_and_Arrows
blk; n/a ; Miscellaneous_Technical
+blk; n/a ; Modifier_Tone_Letters
blk; n/a ; Mongolian
blk; n/a ; Musical_Symbols
blk; n/a ; Myanmar
+blk; n/a ; New_Tai_Lue
blk; n/a ; No_Block
blk; n/a ; Number_Forms
blk; n/a ; Ogham
blk; n/a ; Old_Italic
+blk; n/a ; Old_Persian
blk; n/a ; Optical_Character_Recognition
blk; n/a ; Oriya
blk; n/a ; Osmanya
blk; n/a ; Phonetic_Extensions
+blk; n/a ; Phonetic_Extensions_Supplement
blk; n/a ; Private_Use_Area
blk; n/a ; Runic
blk; n/a ; Shavian
@@ -195,8 +213,10 @@ blk; n/a ; Superscripts_and_Subscripts
blk; n/a ; Supplemental_Arrows-A
blk; n/a ; Supplemental_Arrows-B
blk; n/a ; Supplemental_Mathematical_Operators
+blk; n/a ; Supplemental_Punctuation
blk; n/a ; Supplementary_Private_Use_Area-A
blk; n/a ; Supplementary_Private_Use_Area-B
+blk; n/a ; Syloti_Nagri
blk; n/a ; Syriac
blk; n/a ; Tagalog
blk; n/a ; Tagbanwa
@@ -208,10 +228,12 @@ blk; n/a ; Telugu
blk; n/a ; Thaana
blk; n/a ; Thai
blk; n/a ; Tibetan
+blk; n/a ; Tifinagh
blk; n/a ; Ugaritic
blk; n/a ; Unified_Canadian_Aboriginal_Syllabics
blk; n/a ; Variation_Selectors
blk; n/a ; Variation_Selectors_Supplement
+blk; n/a ; Vertical_Forms
blk; n/a ; Yi_Radicals
blk; n/a ; Yi_Syllables
blk; n/a ; Yijing_Hexagram_Symbols
@@ -271,7 +293,7 @@ ea ; W ; Wide
# General_Category (gc)
gc ; C ; Other # Cc | Cf | Cn | Co | Cs
-gc ; Cc ; Control
+gc ; Cc ; Control ; cntrl
gc ; Cf ; Format
gc ; Cn ; Unassigned
gc ; Co ; Private_Use
@@ -288,10 +310,10 @@ gc ; Mc ; Spacing_Mark
gc ; Me ; Enclosing_Mark
gc ; Mn ; Nonspacing_Mark
gc ; N ; Number # Nd | Nl | No
-gc ; Nd ; Decimal_Number
+gc ; Nd ; Decimal_Number ; digit
gc ; Nl ; Letter_Number
gc ; No ; Other_Number
-gc ; P ; Punctuation # Pc | Pd | Pe | Pf | Pi | Po | Ps
+gc ; P ; Punctuation ; punct # Pc | Pd | Pe | Pf | Pi | Po | Ps
gc ; Pc ; Connector_Punctuation
gc ; Pd ; Dash_Punctuation
gc ; Pe ; Close_Punctuation
@@ -309,6 +331,19 @@ gc ; Zl ; Line_Separator
gc ; Zp ; Paragraph_Separator
gc ; Zs ; Space_Separator
+# Grapheme_Cluster_Break (GCB)
+
+GCB; CN ; Control
+GCB; CR ; CR
+GCB; EX ; Extend
+GCB; L ; L
+GCB; LF ; LF
+GCB; LV ; LV
+GCB; LVT ; LVT
+GCB; T ; T
+GCB; V ; V
+GCB; XX ; Other
+
# Hangul_Syllable_Type (hst)
hst; L ; Leading_Jamo
@@ -398,10 +433,15 @@ lb ; CM ; Combining_Mark
lb ; CR ; Carriage_Return
lb ; EX ; Exclamation
lb ; GL ; Glue
+lb ; H2 ; H2
+lb ; H3 ; H3
lb ; HY ; Hyphen
lb ; ID ; Ideographic
lb ; IN ; Inseparable ; Inseperable
lb ; IS ; Infix_Numeric
+lb ; JL ; JL
+lb ; JT ; JT
+lb ; JV ; JV
lb ; LF ; Line_Feed
lb ; NL ; Next_Line
lb ; NS ; Nonstarter
@@ -454,15 +494,18 @@ sc ; Armn ; Armenian
sc ; Beng ; Bengali
sc ; Bopo ; Bopomofo
sc ; Brai ; Braille
+sc ; Bugi ; Buginese
sc ; Buhd ; Buhid
sc ; Cans ; Canadian_Aboriginal
sc ; Cher ; Cherokee
+sc ; Copt ; Coptic ; Qaac
sc ; Cprt ; Cypriot
sc ; Cyrl ; Cyrillic
sc ; Deva ; Devanagari
sc ; Dsrt ; Deseret
sc ; Ethi ; Ethiopic
sc ; Geor ; Georgian
+sc ; Glag ; Glagolitic
sc ; Goth ; Gothic
sc ; Grek ; Greek
sc ; Gujr ; Gujarati
@@ -475,6 +518,7 @@ sc ; Hira ; Hiragana
sc ; Hrkt ; Katakana_Or_Hiragana
sc ; Ital ; Old_Italic
sc ; Kana ; Katakana
+sc ; Khar ; Kharoshthi
sc ; Khmr ; Khmer
sc ; Knda ; Kannada
sc ; Laoo ; Lao
@@ -491,15 +535,44 @@ sc ; Qaai ; Inherited
sc ; Runr ; Runic
sc ; Shaw ; Shavian
sc ; Sinh ; Sinhala
+sc ; Sylo ; Syloti_Nagri
sc ; Syrc ; Syriac
sc ; Tagb ; Tagbanwa
sc ; Tale ; Tai_Le
+sc ; Talu ; New_Tai_Lue
sc ; Taml ; Tamil
sc ; Telu ; Telugu
+sc ; Tfng ; Tifinagh
sc ; Tglg ; Tagalog
sc ; Thaa ; Thaana
sc ; Thai ; Thai
sc ; Tibt ; Tibetan
sc ; Ugar ; Ugaritic
+sc ; Xpeo ; Old_Persian
sc ; Yiii ; Yi
sc ; Zyyy ; Common
+
+# Sentence_Break (SB)
+
+SB ; AT ; ATerm
+SB ; CL ; Close
+SB ; FO ; Format
+SB ; LE ; OLetter
+SB ; LO ; Lower
+SB ; NU ; Numeric
+SB ; SE ; Sep
+SB ; SP ; Sp
+SB ; ST ; STerm
+SB ; UP ; Upper
+SB ; XX ; Other
+
+# Word_Break (WB)
+
+WB ; EX ; ExtendNumLet
+WB ; FO ; Format
+WB ; KA ; Katakana
+WB ; LE ; ALetter
+WB ; ML ; MidLetter
+WB ; MN ; MidNum
+WB ; NU ; Numeric
+WB ; XX ; Other
diff --git a/gnu/usr.bin/perl/lib/unicore/PropertyAliases.txt b/gnu/usr.bin/perl/lib/unicore/PropertyAliases.txt
index cf9950f92b8..39b14e5e6f3 100644
--- a/gnu/usr.bin/perl/lib/unicore/PropertyAliases.txt
+++ b/gnu/usr.bin/perl/lib/unicore/PropertyAliases.txt
@@ -1,8 +1,8 @@
-# PropertyAliases-4.0.1.txt
-# Date: 2004-03-02, 19:47:55 GMT [MD]
+# PropertyAliases-4.1.0.txt
+# Date: 2005-02-26, 11:13:41 GMT [MD]
#
# Unicode Character Database
-# Copyright (c) 1991-2004 Unicode, Inc.
+# Copyright (c) 1991-2005 Unicode, Inc.
# For terms of use, see http://www.unicode.org/terms_of_use.html
# For documentation, see UCD.html
# This file contains aliases for properties used in the UCD.
@@ -90,6 +90,7 @@ ccc ; Canonical_Combining_Class
dt ; Decomposition_Type
ea ; East_Asian_Width
gc ; General_Category
+GCB ; Grapheme_Cluster_Break
hst ; Hangul_Syllable_Type
jg ; Joining_Group
jt ; Joining_Type
@@ -99,6 +100,8 @@ NFD_QC ; NFD_Quick_Check
NFKC_QC ; NFKC_Quick_Check
NFKD_QC ; NFKD_Quick_Check
nt ; Numeric_Type
+SB ; Sentence_Break
+WB ; Word_Break
# ================================================
# Binary Properties
@@ -132,10 +135,13 @@ NChar ; Noncharacter_Code_Point
OAlpha ; Other_Alphabetic
ODI ; Other_Default_Ignorable_Code_Point
OGr_Ext ; Other_Grapheme_Extend
+OIDC ; Other_ID_Continue
OIDS ; Other_ID_Start
OLower ; Other_Lowercase
OMath ; Other_Math
OUpper ; Other_Uppercase
+Pat_Syn ; Pattern_Syntax
+Pat_WS ; Pattern_White_Space
QMark ; Quotation_Mark
Radical ; Radical
SD ; Soft_Dotted
@@ -144,7 +150,7 @@ Term ; Terminal_Punctuation
UIdeo ; Unified_Ideograph
Upper ; Uppercase
VS ; Variation_Selector
-WSpace ; White_Space
+WSpace ; White_Space ; space
XIDC ; XID_Continue
XIDS ; XID_Start
XO_NFC ; Expands_On_NFC
@@ -153,5 +159,5 @@ XO_NFKC ; Expands_On_NFKC
XO_NFKD ; Expands_On_NFKD
# ================================================
-# Total: 82
+# Total: 88
diff --git a/gnu/usr.bin/perl/lib/unicore/README.perl b/gnu/usr.bin/perl/lib/unicore/README.perl
index 45c88d38d5e..47517fc8c89 100644
--- a/gnu/usr.bin/perl/lib/unicore/README.perl
+++ b/gnu/usr.bin/perl/lib/unicore/README.perl
@@ -1,15 +1,11 @@
The *.txt files were copied from
- http://www.unicode.org/Public/UNIDATA/
+ http://www.unicode.org/Public/4.1.0/ucd
-as of Unicode 4.0.0 (April 2003), updated with
+as of Unicode 4.1.0 (April 2005).
- http://www.unicode.org/Public/4.0-Update1/
-
-as of Unicode 4.0.1 (March 2004)
-
-The two big files, NormalizationTest.txt (2.0MB) and Unihan.txt
-(25.7MB) were not included due to space considerations. Also NOT
+The two big files, NormalizationTest.txt (2.1 MB) and Unihan.txt
+(26.7 MB) were not included due to space considerations. Also NOT
included were any *.html files and the Derived*.txt files
DerivedAge.txt
@@ -20,9 +16,18 @@ To be 8.3-friendly, the lib/unicore/PropertyValueAliases.txt was
renamed to be lib/unicore/PropValueAliases.txt, since otherwise
it would have conflicted with lib/unicore/PropertyAliases.txt.
+NOTE: If you modify the input file set you should also run
+
+ mktables -makelist
+
+which will recreate the mktables.lst file which is used to speed up
+the build process.
+
FOR PUMPKINS
-The *.pl files are generated from the *.txt files by the mktables script:
+The *.pl files are generated from the *.txt files by the mktables script,
+more recently done during the Perl build process, but if you want to try
+the old manual way:
cd lib/unicore
cp .../UnicodeOriginal/*.txt .
diff --git a/gnu/usr.bin/perl/lib/unicore/ReadMe.txt b/gnu/usr.bin/perl/lib/unicore/ReadMe.txt
index 212bbdca7c4..0ad5623c830 100644
--- a/gnu/usr.bin/perl/lib/unicore/ReadMe.txt
+++ b/gnu/usr.bin/perl/lib/unicore/ReadMe.txt
@@ -1,19 +1,24 @@
-2004 March 30
+2005 March 30
-This directory contains the updated data
-files for Version 4.0.1 of the Unicode Standard.
+Welcome to the Unicode Character Database
-Detailed documentation of the files constituting the
-Unicode Character Database (contributory data files for
-the standard itself) can be found in UCD.html.
+This directory contains contributory data files
+for the Unicode Character Database of the Unicode Standard.
-See:
+Copyright (c) 1991-2005 Unicode, Inc.
+For terms of use, see http://www.unicode.org/terms_of_use.html
-http://www.unicode.org/versions/enumeratedversions.html
+For an overview of how to access a specific version of
+the Unicode Character Database (UCD) and other information, see:
-for exact details of the definition of Version 4.0.1
-of the Unicode Standard. That listing details which
-contributory files are new in this version and which
-are retained unchanged from prior versions of the standard.
+http://www.unicode.org/ucd/
+If you accessed this file via the URL:
+http://www.unicode.org/Public/UNIDATA/ReadMe.txt
+
+then you are looking at the most current version of the UCD.
+Otherwise the version number of the UCD is part of the path name.
+
+The file UCD.html in this directory, as well as any file
+headers, where present, also identify the version of the UCD.
diff --git a/gnu/usr.bin/perl/lib/unicore/Scripts.txt b/gnu/usr.bin/perl/lib/unicore/Scripts.txt
index 2aa0630ddfe..8e2bae372ad 100644
--- a/gnu/usr.bin/perl/lib/unicore/Scripts.txt
+++ b/gnu/usr.bin/perl/lib/unicore/Scripts.txt
@@ -1,8 +1,8 @@
-# Scripts-4.0.1.txt
-# Date: 2004-03-11, 18:47:37 GMT [MD]
+# Scripts-4.1.0.txt
+# Date: 2005-03-10, 01:56:19 GMT [MD]
#
# Unicode Character Database
-# Copyright (c) 1991-2004 Unicode, Inc.
+# Copyright (c) 1991-2005 Unicode, Inc.
# For terms of use, see http://www.unicode.org/terms_of_use.html
# For documentation, see UCD.html
@@ -120,7 +120,7 @@
2052 ; Common # Sm COMMERCIAL MINUS SIGN
2053 ; Common # Po SWUNG DASH
2054 ; Common # Pc INVERTED UNDERTIE
-2057 ; Common # Po QUADRUPLE PRIME
+2055..205E ; Common # Po [10] FLOWER PUNCTUATION MARK..VERTICAL FOUR DOTS
205F ; Common # Zs MEDIUM MATHEMATICAL SPACE
2060..2063 ; Common # Cf [4] WORD JOINER..INVISIBLE SEPARATOR
206A..206F ; Common # Cf [6] INHIBIT SYMMETRIC SWAPPING..NOMINAL DIGIT SHAPES
@@ -133,7 +133,7 @@
208A..208C ; Common # Sm [3] SUBSCRIPT PLUS SIGN..SUBSCRIPT EQUALS SIGN
208D ; Common # Ps SUBSCRIPT LEFT PARENTHESIS
208E ; Common # Pe SUBSCRIPT RIGHT PARENTHESIS
-20A0..20B1 ; Common # Sc [18] EURO-CURRENCY SIGN..PESO SIGN
+20A0..20B5 ; Common # Sc [22] EURO-CURRENCY SIGN..CEDI SIGN
2100..2101 ; Common # So [2] ACCOUNT OF..ADDRESSED TO THE SUBJECT
2102 ; Common # L& DOUBLE-STRUCK CAPITAL C
2103..2106 ; Common # So [4] DEGREE CELSIUS..CADA UNA
@@ -158,11 +158,12 @@
2135..2138 ; Common # Lo [4] ALEF SYMBOL..DALET SYMBOL
2139 ; Common # L& INFORMATION SOURCE
213A..213B ; Common # So [2] ROTATED CAPITAL Q..FACSIMILE SIGN
-213D..213F ; Common # L& [3] DOUBLE-STRUCK SMALL GAMMA..DOUBLE-STRUCK CAPITAL PI
+213C..213F ; Common # L& [4] DOUBLE-STRUCK SMALL PI..DOUBLE-STRUCK CAPITAL PI
2140..2144 ; Common # Sm [5] DOUBLE-STRUCK N-ARY SUMMATION..TURNED SANS-SERIF CAPITAL Y
2145..2149 ; Common # L& [5] DOUBLE-STRUCK ITALIC CAPITAL D..DOUBLE-STRUCK ITALIC SMALL J
214A ; Common # So PROPERTY LINE
214B ; Common # Sm TURNED AMPERSAND
+214C ; Common # So PER SIGN
2153..215F ; Common # No [13] VULGAR FRACTION ONE THIRD..FRACTION NUMERATOR ONE
2160..2183 ; Common # Nl [36] ROMAN NUMERAL ONE..ROMAN NUMERAL REVERSED ONE HUNDRED
2190..2194 ; Common # Sm [5] LEFTWARDS ARROW..LEFT RIGHT ARROW
@@ -198,7 +199,7 @@
23B4 ; Common # Ps TOP SQUARE BRACKET
23B5 ; Common # Pe BOTTOM SQUARE BRACKET
23B6 ; Common # Po BOTTOM SQUARE BRACKET OVER TOP SQUARE BRACKET
-23B7..23D0 ; Common # So [26] RADICAL SYMBOL BOTTOM..VERTICAL LINE EXTENSION
+23B7..23DB ; Common # So [37] RADICAL SYMBOL BOTTOM..FUSE
2400..2426 ; Common # So [39] SYMBOL FOR NULL..SYMBOL FOR SUBSTITUTE FORM TWO
2440..244A ; Common # So [11] OCR HOOK..OCR DOUBLE BACKSLASH
2460..249B ; Common # No [60] CIRCLED DIGIT ONE..NUMBER TWENTY FULL STOP
@@ -210,12 +211,10 @@
25C1 ; Common # Sm WHITE LEFT-POINTING TRIANGLE
25C2..25F7 ; Common # So [54] BLACK LEFT-POINTING SMALL TRIANGLE..WHITE CIRCLE WITH UPPER RIGHT QUADRANT
25F8..25FF ; Common # Sm [8] UPPER LEFT TRIANGLE..LOWER RIGHT TRIANGLE
-2600..2617 ; Common # So [24] BLACK SUN WITH RAYS..BLACK SHOGI PIECE
-2619..266E ; Common # So [86] REVERSED ROTATED FLORAL HEART BULLET..MUSIC NATURAL SIGN
+2600..266E ; Common # So [111] BLACK SUN WITH RAYS..MUSIC NATURAL SIGN
266F ; Common # Sm MUSIC SHARP SIGN
-2670..267D ; Common # So [14] WEST SYRIAC CROSS..PARTIALLY-RECYCLED PAPER SYMBOL
-2680..2691 ; Common # So [18] DIE FACE-1..BLACK FLAG
-26A0..26A1 ; Common # So [2] WARNING SIGN..HIGH VOLTAGE SIGN
+2670..269C ; Common # So [45] WEST SYRIAC CROSS..FLEUR-DE-LIS
+26A0..26B1 ; Common # So [18] WARNING SIGN..FUNERAL URN
2701..2704 ; Common # So [4] UPPER BLADE SCISSORS..WHITE SCISSORS
2706..2709 ; Common # So [4] TELEPHONE LOCATION SIGN..ENVELOPE
270C..2727 ; Common # So [28] VICTORY HAND..WHITE FOUR POINTED STAR
@@ -243,6 +242,9 @@
2794 ; Common # So HEAVY WIDE-HEADED RIGHTWARDS ARROW
2798..27AF ; Common # So [24] HEAVY SOUTH EAST ARROW..NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW
27B1..27BE ; Common # So [14] NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW..OPEN-OUTLINED RIGHTWARDS ARROW
+27C0..27C4 ; Common # Sm [5] THREE DIMENSIONAL ANGLE..OPEN SUPERSET
+27C5 ; Common # Ps LEFT S-SHAPED BAG DELIMITER
+27C6 ; Common # Pe RIGHT S-SHAPED BAG DELIMITER
27D0..27E5 ; Common # Sm [22] WHITE DIAMOND WITH CENTRED DOT..WHITE SQUARE WITH RIGHTWARDS TICK
27E6 ; Common # Ps MATHEMATICAL LEFT WHITE SQUARE BRACKET
27E7 ; Common # Pe MATHEMATICAL RIGHT WHITE SQUARE BRACKET
@@ -283,7 +285,22 @@
29FC ; Common # Ps LEFT-POINTING CURVED ANGLE BRACKET
29FD ; Common # Pe RIGHT-POINTING CURVED ANGLE BRACKET
29FE..2AFF ; Common # Sm [258] TINY..N-ARY WHITE VERTICAL BAR
-2B00..2B0D ; Common # So [14] NORTH EAST WHITE ARROW..UP DOWN BLACK ARROW
+2B00..2B13 ; Common # So [20] NORTH EAST WHITE ARROW..SQUARE WITH BOTTOM HALF BLACK
+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
+2E04 ; Common # Pi LEFT DOTTED SUBSTITUTION BRACKET
+2E05 ; Common # Pf RIGHT DOTTED SUBSTITUTION BRACKET
+2E06..2E08 ; Common # Po [3] RAISED INTERPOLATION MARKER..DOTTED TRANSPOSITION MARKER
+2E09 ; Common # Pi LEFT TRANSPOSITION BRACKET
+2E0A ; Common # Pf RIGHT TRANSPOSITION BRACKET
+2E0B ; Common # Po RAISED SQUARE
+2E0C ; Common # Pi LEFT RAISED OMISSION BRACKET
+2E0D ; Common # Pf RIGHT RAISED OMISSION BRACKET
+2E0E..2E16 ; Common # Po [9] EDITORIAL CORONIS..DOTTED RIGHT-POINTING ANGLE
+2E17 ; Common # Pd DOUBLE OBLIQUE HYPHEN
+2E1C ; Common # Pi LEFT LOW PARAPHRASE BRACKET
+2E1D ; Common # Pf RIGHT LOW PARAPHRASE BRACKET
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
@@ -313,31 +330,39 @@
301E..301F ; Common # Pe [2] DOUBLE PRIME QUOTATION MARK..LOW DOUBLE PRIME QUOTATION MARK
3020 ; Common # So POSTAL MARK FACE
3030 ; Common # Pd WAVY DASH
+3031..3035 ; Common # Lm [5] VERTICAL KANA REPEAT MARK..VERTICAL KANA REPEAT MARK LOWER HALF
3036..3037 ; Common # So [2] CIRCLED POSTAL MARK..IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL
303C ; Common # Lo MASU MARK
303D ; Common # Po PART ALTERNATION MARK
303E..303F ; Common # So [2] IDEOGRAPHIC VARIATION INDICATOR..IDEOGRAPHIC HALF FILL SPACE
+309B..309C ; Common # Sk [2] KATAKANA-HIRAGANA VOICED SOUND MARK..KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
30A0 ; Common # Pd KATAKANA-HIRAGANA DOUBLE HYPHEN
-30FB ; Common # Pc KATAKANA MIDDLE DOT
+30FB ; Common # Po KATAKANA MIDDLE DOT
30FC ; Common # Lm KATAKANA-HIRAGANA PROLONGED SOUND MARK
3190..3191 ; Common # So [2] IDEOGRAPHIC ANNOTATION LINKING MARK..IDEOGRAPHIC ANNOTATION REVERSE MARK
3192..3195 ; Common # No [4] IDEOGRAPHIC ANNOTATION ONE MARK..IDEOGRAPHIC ANNOTATION FOUR MARK
3196..319F ; Common # So [10] IDEOGRAPHIC ANNOTATION TOP MARK..IDEOGRAPHIC ANNOTATION MAN MARK
+31C0..31CF ; Common # So [16] CJK STROKE T..CJK STROKE N
3220..3229 ; Common # No [10] PARENTHESIZED IDEOGRAPH ONE..PARENTHESIZED IDEOGRAPH TEN
322A..3243 ; Common # So [26] PARENTHESIZED IDEOGRAPH MOON..PARENTHESIZED IDEOGRAPH REACH
3250 ; Common # So PARTNERSHIP SIGN
3251..325F ; Common # No [15] CIRCLED NUMBER TWENTY ONE..CIRCLED NUMBER THIRTY FIVE
-327F ; Common # So KOREAN STANDARD SYMBOL
+327E..327F ; Common # So [2] CIRCLED HANGUL IEUNG U..KOREAN STANDARD SYMBOL
3280..3289 ; Common # No [10] CIRCLED IDEOGRAPH ONE..CIRCLED IDEOGRAPH TEN
328A..32B0 ; Common # So [39] CIRCLED IDEOGRAPH MOON..CIRCLED IDEOGRAPH NIGHT
32B1..32BF ; Common # No [15] CIRCLED NUMBER THIRTY SIX..CIRCLED NUMBER FIFTY
32C0..32FE ; Common # So [63] IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY..CIRCLED KATAKANA WO
3300..33FF ; Common # So [256] SQUARE APAATO..SQUARE GAL
4DC0..4DFF ; Common # So [64] HEXAGRAM FOR THE CREATIVE HEAVEN..HEXAGRAM FOR BEFORE COMPLETION
+A700..A716 ; Common # Sk [23] MODIFIER LETTER CHINESE TONE YIN PING..MODIFIER LETTER EXTRA-LOW LEFT-STEM TONE BAR
E000..F8FF ; Common # Co [6400] <private-use-E000>..<private-use-F8FF>
FD3E ; Common # Ps ORNATE LEFT PARENTHESIS
FD3F ; Common # Pe ORNATE RIGHT PARENTHESIS
FDFD ; Common # So ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM
+FE10..FE16 ; Common # Po [7] PRESENTATION FORM FOR VERTICAL COMMA..PRESENTATION FORM FOR VERTICAL QUESTION MARK
+FE17 ; Common # Ps PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET
+FE18 ; Common # Pe PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET
+FE19 ; Common # Po PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS
FE30 ; Common # Po PRESENTATION FORM FOR VERTICAL TWO DOT LEADER
FE31..FE32 ; Common # Pd [2] PRESENTATION FORM FOR VERTICAL EM DASH..PRESENTATION FORM FOR VERTICAL EN DASH
FE33..FE34 ; Common # Pc [2] PRESENTATION FORM FOR VERTICAL LOW LINE..PRESENTATION FORM FOR VERTICAL WAVY LOW LINE
@@ -408,8 +433,9 @@ FF60 ; Common # Pe FULLWIDTH RIGHT WHITE PARENTHESIS
FF61 ; Common # Po HALFWIDTH IDEOGRAPHIC FULL STOP
FF62 ; Common # Ps HALFWIDTH LEFT CORNER BRACKET
FF63 ; Common # Pe HALFWIDTH RIGHT CORNER BRACKET
-FF64 ; Common # Po HALFWIDTH IDEOGRAPHIC COMMA
-FF65 ; Common # Pc HALFWIDTH KATAKANA MIDDLE DOT
+FF64..FF65 ; Common # Po [2] HALFWIDTH IDEOGRAPHIC COMMA..HALFWIDTH KATAKANA MIDDLE DOT
+FF70 ; Common # Lm HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK
+FF9E..FF9F ; Common # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK
FFE0..FFE1 ; Common # Sc [2] FULLWIDTH CENT SIGN..FULLWIDTH POUND SIGN
FFE2 ; Common # Sm FULLWIDTH NOT SIGN
FFE3 ; Common # Sk FULLWIDTH MACRON
@@ -453,7 +479,7 @@ FFFC..FFFD ; Common # So [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHAR
1D540..1D544 ; Common # L& [5] MATHEMATICAL DOUBLE-STRUCK CAPITAL I..MATHEMATICAL DOUBLE-STRUCK CAPITAL M
1D546 ; Common # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL O
1D54A..1D550 ; Common # L& [7] MATHEMATICAL DOUBLE-STRUCK CAPITAL S..MATHEMATICAL DOUBLE-STRUCK CAPITAL Y
-1D552..1D6A3 ; Common # L& [338] MATHEMATICAL DOUBLE-STRUCK SMALL A..MATHEMATICAL MONOSPACE SMALL Z
+1D552..1D6A5 ; Common # L& [340] MATHEMATICAL DOUBLE-STRUCK SMALL A..MATHEMATICAL ITALIC SMALL DOTLESS J
1D6A8..1D6C0 ; Common # L& [25] MATHEMATICAL BOLD CAPITAL ALPHA..MATHEMATICAL BOLD CAPITAL OMEGA
1D6C1 ; Common # Sm MATHEMATICAL BOLD NABLA
1D6C2..1D6DA ; Common # L& [25] MATHEMATICAL BOLD SMALL ALPHA..MATHEMATICAL BOLD SMALL OMEGA
@@ -481,8 +507,8 @@ E0020..E007F ; Common # Cf [96] TAG SPACE..CANCEL TAG
F0000..FFFFD ; Common # Co [65534] <private-use-F0000>..<private-use-FFFFD>
100000..10FFFD; Common # Co [65534] <private-use-100000>..<private-use-10FFFD>
-# The above property value applies to 880197 code points not listed here.
-# Total code points: 1022471
+# The above property value applies to 878924 code points not listed here.
+# Total code points: 1021355
# ================================================
@@ -496,24 +522,27 @@ F0000..FFFFD ; Common # Co [65534] <private-use-F0000>..<private-use-FFFFD>
01BB ; Latin # Lo LATIN LETTER TWO WITH STROKE
01BC..01BF ; Latin # L& [4] LATIN CAPITAL LETTER TONE FIVE..LATIN LETTER WYNN
01C0..01C3 ; Latin # Lo [4] LATIN LETTER DENTAL CLICK..LATIN LETTER RETROFLEX CLICK
-01C4..0236 ; Latin # L& [115] LATIN CAPITAL LETTER DZ WITH CARON..LATIN SMALL LETTER T WITH CURL
+01C4..0241 ; Latin # L& [126] LATIN CAPITAL LETTER DZ WITH CARON..LATIN CAPITAL LETTER GLOTTAL STOP
0250..02AF ; Latin # L& [96] LATIN SMALL LETTER TURNED A..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL
02B0..02B8 ; Latin # Lm [9] MODIFIER LETTER SMALL H..MODIFIER LETTER SMALL Y
02E0..02E4 ; Latin # Lm [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP
1D00..1D25 ; Latin # L& [38] LATIN LETTER SMALL CAPITAL A..LATIN LETTER AIN
1D2C..1D5C ; Latin # Lm [49] MODIFIER LETTER CAPITAL A..MODIFIER LETTER SMALL AIN
1D62..1D65 ; Latin # L& [4] LATIN SUBSCRIPT SMALL LETTER I..LATIN SUBSCRIPT SMALL LETTER V
-1D6B ; Latin # L& LATIN SMALL LETTER UE
+1D6B..1D77 ; Latin # L& [13] LATIN SMALL LETTER UE..LATIN SMALL LETTER TURNED G
+1D79..1D9A ; Latin # L& [34] LATIN SMALL LETTER INSULAR G..LATIN SMALL LETTER EZH WITH RETROFLEX HOOK
+1D9B..1DBF ; Latin # Lm [37] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL THETA
1E00..1E9B ; Latin # L& [156] LATIN CAPITAL LETTER A WITH RING BELOW..LATIN SMALL LETTER LONG S WITH DOT ABOVE
1EA0..1EF9 ; Latin # L& [90] LATIN CAPITAL LETTER A WITH DOT BELOW..LATIN SMALL LETTER Y WITH TILDE
2071 ; Latin # L& SUPERSCRIPT LATIN SMALL LETTER I
207F ; Latin # L& SUPERSCRIPT LATIN SMALL LETTER N
+2090..2094 ; Latin # Lm [5] LATIN SUBSCRIPT SMALL LETTER A..LATIN SUBSCRIPT SMALL LETTER SCHWA
212A..212B ; Latin # L& [2] KELVIN SIGN..ANGSTROM SIGN
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: 938
+# Total code points: 1037
# ================================================
@@ -525,9 +554,10 @@ FF41..FF5A ; Latin # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN
038C ; Greek # L& GREEK CAPITAL LETTER OMICRON WITH TONOS
038E..03A1 ; Greek # L& [20] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK CAPITAL LETTER RHO
03A3..03CE ; Greek # L& [44] GREEK CAPITAL LETTER SIGMA..GREEK SMALL LETTER OMEGA WITH TONOS
-03D0..03F5 ; Greek # L& [38] GREEK BETA SYMBOL..GREEK LUNATE EPSILON SYMBOL
+03D0..03E1 ; Greek # L& [18] GREEK BETA SYMBOL..GREEK SMALL LETTER SAMPI
+03F0..03F5 ; Greek # L& [6] GREEK KAPPA SYMBOL..GREEK LUNATE EPSILON SYMBOL
03F6 ; Greek # Sm GREEK REVERSED LUNATE EPSILON SYMBOL
-03F7..03FB ; Greek # L& [5] GREEK CAPITAL LETTER SHO..GREEK SMALL LETTER SAN
+03F7..03FF ; Greek # L& [9] GREEK CAPITAL LETTER SHO..GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL
1D26..1D2A ; Greek # L& [5] GREEK LETTER SMALL CAPITAL GAMMA..GREEK LETTER SMALL CAPITAL PSI
1D5D..1D61 ; Greek # Lm [5] MODIFIER LETTER SMALL BETA..MODIFIER LETTER SMALL CHI
1D66..1D6A ; Greek # L& [5] GREEK SUBSCRIPT SMALL LETTER BETA..GREEK SUBSCRIPT SMALL LETTER CHI
@@ -557,8 +587,15 @@ FF41..FF5A ; Latin # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN
1FF6..1FFC ; Greek # L& [7] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
1FFD..1FFE ; Greek # Sk [2] GREEK OXIA..GREEK DASIA
2126 ; Greek # L& OHM SIGN
+10140..10174 ; Greek # Nl [53] GREEK ACROPHONIC ATTIC ONE QUARTER..GREEK ACROPHONIC STRATIAN FIFTY MNAS
+10175..10178 ; Greek # No [4] GREEK ONE HALF SIGN..GREEK THREE QUARTERS SIGN
+10179..10189 ; Greek # So [17] GREEK YEAR SIGN..GREEK TRYBLION BASE SIGN
+1018A ; Greek # No GREEK ZERO SIGN
+1D200..1D241 ; Greek # So [66] GREEK VOCAL NOTATION SYMBOL-1..GREEK INSTRUMENTAL NOTATION SYMBOL-54
+1D242..1D244 ; Greek # Mn [3] COMBINING GREEK MUSICAL TRISEME..COMBINING GREEK MUSICAL PENTASEME
+1D245 ; Greek # So GREEK MUSICAL LEIMMA
-# Total code points: 367
+# Total code points: 502
# ================================================
@@ -567,12 +604,12 @@ FF41..FF5A ; Latin # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN
0483..0486 ; Cyrillic # Mn [4] COMBINING CYRILLIC TITLO..COMBINING CYRILLIC PSILI PNEUMATA
0488..0489 ; Cyrillic # Me [2] COMBINING CYRILLIC HUNDRED THOUSANDS SIGN..COMBINING CYRILLIC MILLIONS SIGN
048A..04CE ; Cyrillic # L& [69] CYRILLIC CAPITAL LETTER SHORT I WITH TAIL..CYRILLIC SMALL LETTER EM WITH TAIL
-04D0..04F5 ; Cyrillic # L& [38] CYRILLIC CAPITAL LETTER A WITH BREVE..CYRILLIC SMALL LETTER CHE WITH DIAERESIS
-04F8..04F9 ; Cyrillic # L& [2] CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS..CYRILLIC SMALL LETTER YERU WITH DIAERESIS
+04D0..04F9 ; Cyrillic # L& [42] CYRILLIC CAPITAL LETTER A WITH BREVE..CYRILLIC SMALL LETTER YERU WITH DIAERESIS
0500..050F ; Cyrillic # L& [16] CYRILLIC CAPITAL LETTER KOMI DE..CYRILLIC SMALL LETTER KOMI TJE
1D2B ; Cyrillic # L& CYRILLIC LETTER SMALL CAPITAL EL
+1D78 ; Cyrillic # Lm MODIFIER LETTER CYRILLIC EN
-# Total code points: 263
+# Total code points: 266
# ================================================
@@ -587,15 +624,16 @@ FB13..FB17 ; Armenian # L& [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SM
# ================================================
-0591..05A1 ; Hebrew # Mn [17] HEBREW ACCENT ETNAHTA..HEBREW ACCENT PAZER
-05A3..05B9 ; Hebrew # Mn [23] HEBREW ACCENT MUNAH..HEBREW POINT HOLAM
+0591..05B9 ; Hebrew # Mn [41] HEBREW ACCENT ETNAHTA..HEBREW POINT HOLAM
05BB..05BD ; Hebrew # Mn [3] HEBREW POINT QUBUTS..HEBREW POINT METEG
05BE ; Hebrew # Po HEBREW PUNCTUATION MAQAF
05BF ; Hebrew # Mn HEBREW POINT RAFE
05C0 ; Hebrew # Po HEBREW PUNCTUATION PASEQ
05C1..05C2 ; Hebrew # Mn [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT
05C3 ; Hebrew # Po HEBREW PUNCTUATION SOF PASUQ
-05C4 ; Hebrew # Mn HEBREW MARK UPPER DOT
+05C4..05C5 ; Hebrew # Mn [2] HEBREW MARK UPPER DOT..HEBREW MARK LOWER DOT
+05C6 ; Hebrew # Po HEBREW PUNCTUATION NUN HAFUKHA
+05C7 ; Hebrew # Mn HEBREW POINT QAMATS QATAN
05D0..05EA ; Hebrew # Lo [27] HEBREW LETTER ALEF..HEBREW LETTER TAV
05F0..05F2 ; Hebrew # Lo [3] HEBREW LIGATURE YIDDISH DOUBLE VAV..HEBREW LIGATURE YIDDISH DOUBLE YOD
05F3..05F4 ; Hebrew # Po [2] HEBREW PUNCTUATION GERESH..HEBREW PUNCTUATION GERSHAYIM
@@ -610,16 +648,18 @@ FB40..FB41 ; Hebrew # Lo [2] HEBREW LETTER NUN WITH DAGESH..HEBREW LETTER S
FB43..FB44 ; Hebrew # Lo [2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETTER PE WITH DAGESH
FB46..FB4F ; Hebrew # Lo [10] HEBREW LETTER TSADI WITH DAGESH..HEBREW LIGATURE ALEF LAMED
-# Total code points: 128
+# Total code points: 132
# ================================================
+060B ; Arabic # Sc AFGHANI SIGN
060D ; Arabic # Po ARABIC DATE SEPARATOR
060E..060F ; Arabic # So [2] ARABIC POETIC VERSE SIGN..ARABIC SIGN MISRA
0610..0615 ; Arabic # Mn [6] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL HIGH TAH
+061E ; Arabic # Po ARABIC TRIPLE DOT PUNCTUATION MARK
0621..063A ; Arabic # Lo [26] ARABIC LETTER HAMZA..ARABIC LETTER GHAIN
0641..064A ; Arabic # Lo [10] ARABIC LETTER FEH..ARABIC LETTER YEH
-0656..0658 ; Arabic # Mn [3] ARABIC SUBSCRIPT ALEF..ARABIC MARK NOON GHUNNA
+0656..065E ; Arabic # Mn [9] ARABIC SUBSCRIPT ALEF..ARABIC FATHA WITH TWO DOTS
066A..066D ; Arabic # Po [4] ARABIC PERCENT SIGN..ARABIC FIVE POINTED STAR
066E..066F ; Arabic # Lo [2] ARABIC LETTER DOTLESS BEH..ARABIC LETTER DOTLESS QAF
0671..06D3 ; Arabic # Lo [99] ARABIC LETTER ALEF WASLA..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE
@@ -637,6 +677,7 @@ FB46..FB4F ; Hebrew # Lo [10] HEBREW LETTER TSADI WITH DAGESH..HEBREW LIGATU
06FA..06FC ; Arabic # Lo [3] ARABIC LETTER SHEEN WITH DOT BELOW..ARABIC LETTER GHAIN WITH DOT BELOW
06FD..06FE ; Arabic # So [2] ARABIC SIGN SINDHI AMPERSAND..ARABIC SIGN SINDHI POSTPOSITION MEN
06FF ; Arabic # Lo ARABIC LETTER HEH WITH INVERTED V
+0750..076D ; Arabic # Lo [30] ARABIC LETTER BEH WITH THREE DOTS HORIZONTALLY BELOW..ARABIC LETTER SEEN WITH TWO DOTS VERTICALLY ABOVE
FB50..FBB1 ; Arabic # Lo [98] ARABIC LETTER ALEF WASLA ISOLATED FORM..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM
FBD3..FD3D ; Arabic # Lo [363] ARABIC LETTER NG ISOLATED FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM
FD50..FD8F ; Arabic # Lo [64] ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM..ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM
@@ -646,7 +687,7 @@ FDFC ; Arabic # Sc RIAL SIGN
FE70..FE74 ; Arabic # Lo [5] ARABIC FATHATAN ISOLATED FORM..ARABIC KASRATAN ISOLATED FORM
FE76..FEFC ; Arabic # Lo [135] ARABIC FATHA ISOLATED FORM..ARABIC LIGATURE LAM WITH ALEF FINAL FORM
-# Total code points: 928
+# Total code points: 966
# ================================================
@@ -684,8 +725,9 @@ FE76..FEFC ; Arabic # Lo [135] ARABIC FATHA ISOLATED FORM..ARABIC LIGATURE LA
0958..0961 ; Devanagari # Lo [10] DEVANAGARI LETTER QA..DEVANAGARI LETTER VOCALIC LL
0962..0963 ; Devanagari # Mn [2] DEVANAGARI VOWEL SIGN VOCALIC L..DEVANAGARI VOWEL SIGN VOCALIC LL
0966..096F ; Devanagari # Nd [10] DEVANAGARI DIGIT ZERO..DEVANAGARI DIGIT NINE
+097D ; Devanagari # Lo DEVANAGARI LETTER GLOTTAL STOP
-# Total code points: 102
+# Total code points: 103
# ================================================
@@ -704,6 +746,7 @@ FE76..FEFC ; Arabic # Lo [135] ARABIC FATHA ISOLATED FORM..ARABIC LIGATURE LA
09C7..09C8 ; Bengali # Mc [2] BENGALI VOWEL SIGN E..BENGALI VOWEL SIGN AI
09CB..09CC ; Bengali # Mc [2] BENGALI VOWEL SIGN O..BENGALI VOWEL SIGN AU
09CD ; Bengali # Mn BENGALI SIGN VIRAMA
+09CE ; Bengali # Lo BENGALI LETTER KHANDA TA
09D7 ; Bengali # Mc BENGALI AU LENGTH MARK
09DC..09DD ; Bengali # Lo [2] BENGALI LETTER RRA..BENGALI LETTER RHA
09DF..09E1 ; Bengali # Lo [3] BENGALI LETTER YYA..BENGALI LETTER VOCALIC LL
@@ -714,7 +757,7 @@ FE76..FEFC ; Arabic # Lo [135] ARABIC FATHA ISOLATED FORM..ARABIC LIGATURE LA
09F4..09F9 ; Bengali # No [6] BENGALI CURRENCY NUMERATOR ONE..BENGALI CURRENCY DENOMINATOR SIXTEEN
09FA ; Bengali # So BENGALI ISSHAR
-# Total code points: 90
+# Total code points: 91
# ================================================
@@ -807,8 +850,7 @@ FE76..FEFC ; Arabic # Lo [135] ARABIC FATHA ISOLATED FORM..ARABIC LIGATURE LA
0B9E..0B9F ; Tamil # Lo [2] TAMIL LETTER NYA..TAMIL LETTER TTA
0BA3..0BA4 ; Tamil # Lo [2] TAMIL LETTER NNA..TAMIL LETTER TA
0BA8..0BAA ; Tamil # Lo [3] TAMIL LETTER NA..TAMIL LETTER PA
-0BAE..0BB5 ; Tamil # Lo [8] TAMIL LETTER MA..TAMIL LETTER VA
-0BB7..0BB9 ; Tamil # Lo [3] TAMIL LETTER SSA..TAMIL LETTER HA
+0BAE..0BB9 ; Tamil # Lo [12] TAMIL LETTER MA..TAMIL LETTER HA
0BBE..0BBF ; Tamil # Mc [2] TAMIL VOWEL SIGN AA..TAMIL VOWEL SIGN I
0BC0 ; Tamil # Mn TAMIL VOWEL SIGN II
0BC1..0BC2 ; Tamil # Mc [2] TAMIL VOWEL SIGN U..TAMIL VOWEL SIGN UU
@@ -816,13 +858,13 @@ FE76..FEFC ; Arabic # Lo [135] ARABIC FATHA ISOLATED FORM..ARABIC LIGATURE LA
0BCA..0BCC ; Tamil # Mc [3] TAMIL VOWEL SIGN O..TAMIL VOWEL SIGN AU
0BCD ; Tamil # Mn TAMIL SIGN VIRAMA
0BD7 ; Tamil # Mc TAMIL AU LENGTH MARK
-0BE7..0BEF ; Tamil # Nd [9] TAMIL DIGIT ONE..TAMIL DIGIT NINE
+0BE6..0BEF ; Tamil # Nd [10] TAMIL DIGIT ZERO..TAMIL DIGIT NINE
0BF0..0BF2 ; Tamil # No [3] TAMIL NUMBER TEN..TAMIL NUMBER ONE THOUSAND
0BF3..0BF8 ; Tamil # So [6] TAMIL DAY SIGN..TAMIL AS ABOVE SIGN
0BF9 ; Tamil # Sc TAMIL RUPEE SIGN
0BFA ; Tamil # So TAMIL NUMBER SIGN
-# Total code points: 69
+# Total code points: 71
# ================================================
@@ -979,8 +1021,9 @@ FE76..FEFC ; Arabic # Lo [135] ARABIC FATHA ISOLATED FORM..ARABIC LIGATURE LA
0FC6 ; Tibetan # Mn TIBETAN SYMBOL PADMA GDAN
0FC7..0FCC ; Tibetan # So [6] TIBETAN SYMBOL RDO RJE RGYA GRAM..TIBETAN SYMBOL NOR BU BZHI -KHYIL
0FCF ; Tibetan # So TIBETAN SIGN RDEL NAG GSUM
+0FD0..0FD1 ; Tibetan # Po [2] TIBETAN MARK BSKA- SHOG GI MGO RGYAN..TIBETAN MARK MNYAM YIG GI MGO RGYAN
-# Total code points: 193
+# Total code points: 195
# ================================================
@@ -1005,9 +1048,11 @@ FE76..FEFC ; Arabic # Lo [135] ARABIC FATHA ISOLATED FORM..ARABIC LIGATURE LA
# ================================================
10A0..10C5 ; Georgian # L& [38] GEORGIAN CAPITAL LETTER AN..GEORGIAN CAPITAL LETTER HOE
-10D0..10F8 ; Georgian # Lo [41] GEORGIAN LETTER AN..GEORGIAN LETTER ELIFI
+10D0..10FA ; Georgian # Lo [43] GEORGIAN LETTER AN..GEORGIAN LETTER AIN
+10FC ; Georgian # Lm MODIFIER LETTER GEORGIAN NAR
+2D00..2D25 ; Georgian # L& [38] GEORGIAN SMALL LETTER AN..GEORGIAN SMALL LETTER HOE
-# Total code points: 79
+# Total code points: 120
# ================================================
@@ -1028,36 +1073,39 @@ FFDA..FFDC ; Hangul # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL L
# ================================================
-1200..1206 ; Ethiopic # Lo [7] ETHIOPIC SYLLABLE HA..ETHIOPIC SYLLABLE HO
-1208..1246 ; Ethiopic # Lo [63] ETHIOPIC SYLLABLE LA..ETHIOPIC SYLLABLE QO
-1248 ; Ethiopic # Lo ETHIOPIC SYLLABLE QWA
+1200..1248 ; Ethiopic # Lo [73] ETHIOPIC SYLLABLE HA..ETHIOPIC SYLLABLE QWA
124A..124D ; Ethiopic # Lo [4] ETHIOPIC SYLLABLE QWI..ETHIOPIC SYLLABLE QWE
1250..1256 ; Ethiopic # Lo [7] ETHIOPIC SYLLABLE QHA..ETHIOPIC SYLLABLE QHO
1258 ; Ethiopic # Lo ETHIOPIC SYLLABLE QHWA
125A..125D ; Ethiopic # Lo [4] ETHIOPIC SYLLABLE QHWI..ETHIOPIC SYLLABLE QHWE
-1260..1286 ; Ethiopic # Lo [39] ETHIOPIC SYLLABLE BA..ETHIOPIC SYLLABLE XO
-1288 ; Ethiopic # Lo ETHIOPIC SYLLABLE XWA
+1260..1288 ; Ethiopic # Lo [41] ETHIOPIC SYLLABLE BA..ETHIOPIC SYLLABLE XWA
128A..128D ; Ethiopic # Lo [4] ETHIOPIC SYLLABLE XWI..ETHIOPIC SYLLABLE XWE
-1290..12AE ; Ethiopic # Lo [31] ETHIOPIC SYLLABLE NA..ETHIOPIC SYLLABLE KO
-12B0 ; Ethiopic # Lo ETHIOPIC SYLLABLE KWA
+1290..12B0 ; Ethiopic # Lo [33] ETHIOPIC SYLLABLE NA..ETHIOPIC SYLLABLE KWA
12B2..12B5 ; Ethiopic # Lo [4] ETHIOPIC SYLLABLE KWI..ETHIOPIC SYLLABLE KWE
12B8..12BE ; Ethiopic # Lo [7] ETHIOPIC SYLLABLE KXA..ETHIOPIC SYLLABLE KXO
12C0 ; Ethiopic # Lo ETHIOPIC SYLLABLE KXWA
12C2..12C5 ; Ethiopic # Lo [4] ETHIOPIC SYLLABLE KXWI..ETHIOPIC SYLLABLE KXWE
-12C8..12CE ; Ethiopic # Lo [7] ETHIOPIC SYLLABLE WA..ETHIOPIC SYLLABLE WO
-12D0..12D6 ; Ethiopic # Lo [7] ETHIOPIC SYLLABLE PHARYNGEAL A..ETHIOPIC SYLLABLE PHARYNGEAL O
-12D8..12EE ; Ethiopic # Lo [23] ETHIOPIC SYLLABLE ZA..ETHIOPIC SYLLABLE YO
-12F0..130E ; Ethiopic # Lo [31] ETHIOPIC SYLLABLE DA..ETHIOPIC SYLLABLE GO
-1310 ; Ethiopic # Lo ETHIOPIC SYLLABLE GWA
+12C8..12D6 ; Ethiopic # Lo [15] ETHIOPIC SYLLABLE WA..ETHIOPIC SYLLABLE PHARYNGEAL O
+12D8..1310 ; Ethiopic # Lo [57] ETHIOPIC SYLLABLE ZA..ETHIOPIC SYLLABLE GWA
1312..1315 ; Ethiopic # Lo [4] ETHIOPIC SYLLABLE GWI..ETHIOPIC SYLLABLE GWE
-1318..131E ; Ethiopic # Lo [7] ETHIOPIC SYLLABLE GGA..ETHIOPIC SYLLABLE GGO
-1320..1346 ; Ethiopic # Lo [39] ETHIOPIC SYLLABLE THA..ETHIOPIC SYLLABLE TZO
-1348..135A ; Ethiopic # Lo [19] ETHIOPIC SYLLABLE FA..ETHIOPIC SYLLABLE FYA
+1318..135A ; Ethiopic # Lo [67] ETHIOPIC SYLLABLE GGA..ETHIOPIC SYLLABLE FYA
+135F ; Ethiopic # Mn ETHIOPIC COMBINING GEMINATION MARK
+1360 ; Ethiopic # So ETHIOPIC SECTION MARK
1361..1368 ; Ethiopic # Po [8] ETHIOPIC WORDSPACE..ETHIOPIC PARAGRAPH SEPARATOR
-1369..1371 ; Ethiopic # Nd [9] ETHIOPIC DIGIT ONE..ETHIOPIC DIGIT NINE
-1372..137C ; Ethiopic # No [11] ETHIOPIC NUMBER TEN..ETHIOPIC NUMBER TEN THOUSAND
-
-# Total code points: 345
+1369..137C ; Ethiopic # No [20] ETHIOPIC DIGIT ONE..ETHIOPIC NUMBER TEN THOUSAND
+1380..138F ; Ethiopic # Lo [16] ETHIOPIC SYLLABLE SEBATBEIT MWA..ETHIOPIC SYLLABLE PWE
+1390..1399 ; Ethiopic # So [10] ETHIOPIC TONAL MARK YIZET..ETHIOPIC TONAL MARK KURT
+2D80..2D96 ; Ethiopic # Lo [23] ETHIOPIC SYLLABLE LOA..ETHIOPIC SYLLABLE GGWE
+2DA0..2DA6 ; Ethiopic # Lo [7] ETHIOPIC SYLLABLE SSA..ETHIOPIC SYLLABLE SSO
+2DA8..2DAE ; Ethiopic # Lo [7] ETHIOPIC SYLLABLE CCA..ETHIOPIC SYLLABLE CCO
+2DB0..2DB6 ; Ethiopic # Lo [7] ETHIOPIC SYLLABLE ZZA..ETHIOPIC SYLLABLE ZZO
+2DB8..2DBE ; Ethiopic # Lo [7] ETHIOPIC SYLLABLE CCHA..ETHIOPIC SYLLABLE CCHO
+2DC0..2DC6 ; Ethiopic # Lo [7] ETHIOPIC SYLLABLE QYA..ETHIOPIC SYLLABLE QYO
+2DC8..2DCE ; Ethiopic # Lo [7] ETHIOPIC SYLLABLE KYA..ETHIOPIC SYLLABLE KYO
+2DD0..2DD6 ; Ethiopic # Lo [7] ETHIOPIC SYLLABLE XYA..ETHIOPIC SYLLABLE XYO
+2DD8..2DDE ; Ethiopic # Lo [7] ETHIOPIC SYLLABLE GYA..ETHIOPIC SYLLABLE GYO
+
+# Total code points: 461
# ================================================
@@ -1164,17 +1212,20 @@ FF71..FF9D ; Katakana # Lo [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAK
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..9FA5 ; Han # Lo [20902] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FA5
+4E00..9FBB ; Han # Lo [20924] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FBB
F900..FA2D ; Han # Lo [302] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA2D
FA30..FA6A ; Han # Lo [59] CJK COMPATIBILITY IDEOGRAPH-FA30..CJK COMPATIBILITY IDEOGRAPH-FA6A
+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
2F800..2FA1D ; Han # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D
-# Total code points: 71442
+# Total code points: 71570
# ================================================
-A000..A48C ; Yi # Lo [1165] YI SYLLABLE IT..YI SYLLABLE YYR
+A000..A014 ; Yi # Lo [21] YI SYLLABLE IT..YI SYLLABLE E
+A015 ; Yi # Lm YI SYLLABLE WU
+A016..A48C ; Yi # Lo [1143] YI SYLLABLE BIT..YI SYLLABLE YYR
A490..A4C6 ; Yi # So [55] YI RADICAL QOT..YI RADICAL KE
# Total code points: 1220
@@ -1201,16 +1252,16 @@ A490..A4C6 ; Yi # So [55] YI RADICAL QOT..YI RADICAL KE
# ================================================
-0300..0357 ; Inherited # Mn [88] COMBINING GRAVE ACCENT..COMBINING RIGHT HALF RING ABOVE
-035D..036F ; Inherited # Mn [19] COMBINING DOUBLE BREVE..COMBINING LATIN SMALL LETTER X
+0300..036F ; Inherited # Mn [112] COMBINING GRAVE ACCENT..COMBINING LATIN SMALL LETTER X
064B..0655 ; Inherited # Mn [11] ARABIC FATHATAN..ARABIC HAMZA BELOW
0670 ; Inherited # Mn ARABIC LETTER SUPERSCRIPT ALEF
+1DC0..1DC3 ; Inherited # Mn [4] COMBINING DOTTED GRAVE ACCENT..COMBINING SUSPENSION MARK
200C..200D ; Inherited # Cf [2] ZERO WIDTH NON-JOINER..ZERO WIDTH JOINER
20D0..20DC ; Inherited # Mn [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE
20DD..20E0 ; Inherited # Me [4] COMBINING ENCLOSING CIRCLE..COMBINING ENCLOSING CIRCLE BACKSLASH
20E1 ; Inherited # Mn COMBINING LEFT RIGHT ARROW ABOVE
20E2..20E4 ; Inherited # Me [3] COMBINING ENCLOSING SCREEN..COMBINING ENCLOSING UPWARD POINTING TRIANGLE
-20E5..20EA ; Inherited # Mn [6] COMBINING REVERSE SOLIDUS OVERLAY..COMBINING LEFTWARDS ARROW OVERLAY
+20E5..20EB ; Inherited # Mn [7] COMBINING REVERSE SOLIDUS OVERLAY..COMBINING LONG DOUBLE SOLIDUS OVERLAY
302A..302F ; Inherited # Mn [6] IDEOGRAPHIC LEVEL TONE MARK..HANGUL DOUBLE DOT TONE MARK
3099..309A ; Inherited # Mn [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
FE00..FE0F ; Inherited # Mn [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16
@@ -1221,7 +1272,7 @@ FE20..FE23 ; Inherited # Mn [4] COMBINING LIGATURE LEFT HALF..COMBINING DOU
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: 438
+# Total code points: 448
# ================================================
@@ -1328,9 +1379,86 @@ E0100..E01EF ; Inherited # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-2
# ================================================
-3031..3035 ; Katakana_Or_Hiragana # Lm [5] VERTICAL KANA REPEAT MARK..VERTICAL KANA REPEAT MARK LOWER HALF
-309B..309C ; Katakana_Or_Hiragana # Sk [2] KATAKANA-HIRAGANA VOICED SOUND MARK..KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
-FF70 ; Katakana_Or_Hiragana # Lm HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK
-FF9E..FF9F ; Katakana_Or_Hiragana # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK
+1A00..1A16 ; Buginese # Lo [23] BUGINESE LETTER KA..BUGINESE LETTER HA
+1A17..1A18 ; Buginese # Mn [2] BUGINESE VOWEL SIGN I..BUGINESE VOWEL SIGN U
+1A19..1A1B ; Buginese # Mc [3] BUGINESE VOWEL SIGN E..BUGINESE VOWEL SIGN AE
+1A1E..1A1F ; Buginese # Po [2] BUGINESE PALLAWA..BUGINESE END OF SECTION
+
+# Total code points: 30
+
+# ================================================
+
+03E2..03EF ; Coptic # L& [14] COPTIC CAPITAL LETTER SHEI..COPTIC SMALL LETTER DEI
+2C80..2CE4 ; Coptic # L& [101] COPTIC CAPITAL LETTER ALFA..COPTIC SYMBOL KAI
+2CE5..2CEA ; Coptic # So [6] COPTIC SYMBOL MI RO..COPTIC SYMBOL SHIMA SIMA
+2CF9..2CFC ; Coptic # Po [4] COPTIC OLD NUBIAN FULL STOP..COPTIC OLD NUBIAN VERSE DIVIDER
+2CFD ; Coptic # No COPTIC FRACTION ONE HALF
+2CFE..2CFF ; Coptic # Po [2] COPTIC FULL STOP..COPTIC MORPHOLOGICAL DIVIDER
+
+# Total code points: 128
+
+# ================================================
+
+1980..19A9 ; New_Tai_Lue # Lo [42] NEW TAI LUE LETTER HIGH QA..NEW TAI LUE LETTER LOW XVA
+19B0..19C0 ; New_Tai_Lue # Mc [17] NEW TAI LUE VOWEL SIGN VOWEL SHORTENER..NEW TAI LUE VOWEL SIGN IY
+19C1..19C7 ; New_Tai_Lue # Lo [7] NEW TAI LUE LETTER FINAL V..NEW TAI LUE LETTER FINAL B
+19C8..19C9 ; New_Tai_Lue # Mc [2] NEW TAI LUE TONE MARK-1..NEW TAI LUE TONE MARK-2
+19D0..19D9 ; New_Tai_Lue # Nd [10] NEW TAI LUE DIGIT ZERO..NEW TAI LUE DIGIT NINE
+19DE..19DF ; New_Tai_Lue # Po [2] NEW TAI LUE SIGN LAE..NEW TAI LUE SIGN LAEV
+
+# Total code points: 80
+
+# ================================================
+
+2C00..2C2E ; Glagolitic # L& [47] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE
+2C30..2C5E ; Glagolitic # L& [47] GLAGOLITIC SMALL LETTER AZU..GLAGOLITIC SMALL LETTER LATINATE MYSLITE
+
+# Total code points: 94
+
+# ================================================
+
+2D30..2D65 ; Tifinagh # Lo [54] TIFINAGH LETTER YA..TIFINAGH LETTER YAZZ
+2D6F ; Tifinagh # Lm TIFINAGH MODIFIER LETTER LABIALIZATION MARK
+
+# Total code points: 55
+
+# ================================================
+
+A800..A801 ; Syloti_Nagri # Lo [2] SYLOTI NAGRI LETTER A..SYLOTI NAGRI LETTER I
+A802 ; Syloti_Nagri # Mc SYLOTI NAGRI SIGN DVISVARA
+A803..A805 ; Syloti_Nagri # Lo [3] SYLOTI NAGRI LETTER U..SYLOTI NAGRI LETTER O
+A806 ; Syloti_Nagri # Mn SYLOTI NAGRI SIGN HASANTA
+A807..A80A ; Syloti_Nagri # Lo [4] SYLOTI NAGRI LETTER KO..SYLOTI NAGRI LETTER GHO
+A80B ; Syloti_Nagri # Mn SYLOTI NAGRI SIGN ANUSVARA
+A80C..A822 ; Syloti_Nagri # Lo [23] SYLOTI NAGRI LETTER CO..SYLOTI NAGRI LETTER HO
+A823..A824 ; Syloti_Nagri # Mc [2] SYLOTI NAGRI VOWEL SIGN A..SYLOTI NAGRI VOWEL SIGN I
+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
+
+# Total code points: 44
+
+# ================================================
+
+103A0..103C3 ; Old_Persian # Lo [36] OLD PERSIAN SIGN A..OLD PERSIAN SIGN HA
+103C8..103CF ; Old_Persian # Lo [8] OLD PERSIAN SIGN AURAMAZDAA..OLD PERSIAN SIGN BUUMISH
+103D0 ; Old_Persian # So OLD PERSIAN WORD DIVIDER
+103D1..103D5 ; Old_Persian # Nl [5] OLD PERSIAN NUMBER ONE..OLD PERSIAN NUMBER HUNDRED
+
+# Total code points: 50
-# Total code points: 10
+# ================================================
+
+10A00 ; Kharoshthi # Lo KHAROSHTHI LETTER A
+10A01..10A03 ; Kharoshthi # Mn [3] KHAROSHTHI VOWEL SIGN I..KHAROSHTHI VOWEL SIGN VOCALIC R
+10A05..10A06 ; Kharoshthi # Mn [2] KHAROSHTHI VOWEL SIGN E..KHAROSHTHI VOWEL SIGN O
+10A0C..10A0F ; Kharoshthi # Mn [4] KHAROSHTHI VOWEL LENGTH MARK..KHAROSHTHI SIGN VISARGA
+10A10..10A13 ; Kharoshthi # Lo [4] KHAROSHTHI LETTER KA..KHAROSHTHI LETTER GHA
+10A15..10A17 ; Kharoshthi # Lo [3] KHAROSHTHI LETTER CA..KHAROSHTHI LETTER JA
+10A19..10A33 ; Kharoshthi # Lo [27] KHAROSHTHI LETTER NYA..KHAROSHTHI LETTER TTTHA
+10A38..10A3A ; Kharoshthi # Mn [3] KHAROSHTHI SIGN BAR ABOVE..KHAROSHTHI SIGN DOT BELOW
+10A3F ; Kharoshthi # Mn KHAROSHTHI VIRAMA
+10A40..10A47 ; Kharoshthi # No [8] KHAROSHTHI DIGIT ONE..KHAROSHTHI NUMBER ONE THOUSAND
+10A50..10A58 ; Kharoshthi # Po [9] KHAROSHTHI PUNCTUATION DOT..KHAROSHTHI PUNCTUATION LINES
+
+# Total code points: 65
diff --git a/gnu/usr.bin/perl/lib/unicore/SpecialCasing.txt b/gnu/usr.bin/perl/lib/unicore/SpecialCasing.txt
index c8401d6c421..11a5b1d69e1 100644
--- a/gnu/usr.bin/perl/lib/unicore/SpecialCasing.txt
+++ b/gnu/usr.bin/perl/lib/unicore/SpecialCasing.txt
@@ -1,5 +1,10 @@
-# SpecialCasing-4.0.1.txt
-# Date: 2003-10-06, 17:30:00 PST [KW]
+# SpecialCasing-4.1.0.txt
+# Date: 2005-03-26, 00:35:45 GMT [MD]
+#
+# Unicode Character Database
+# Copyright (c) 1991-2005 Unicode, Inc.
+# For terms of use, see http://www.unicode.org/terms_of_use.html
+# For documentation, see UCD.html
#
# Special Casing Properties
#
@@ -18,25 +23,24 @@
#
# <code>; <lower> ; <title> ; <upper> ; (<condition_list> ;)? # <comment>
#
-# <code>, <lower>, <title>, and <upper> provide character values in hex. If there is more than
-# one character, they are separated by spaces. Other than as used to separate elements,
-# spaces are to be ignored.
+# <code>, <lower>, <title>, and <upper> provide character values in hex. If there is more
+# than one character, they are separated by spaces. Other than as used to separate
+# elements, spaces are to be ignored.
#
-# The <condition_list> is optional. Where present, it consists of one or more locales or contexts,
-# separated by spaces. In these conditions:
+# The <condition_list> is optional. Where present, it consists of one or more locale IDs
+# or contexts, separated by spaces. In these conditions:
# - A condition list overrides the normal behavior if all of the listed conditions are true.
# - The context is always the context of the characters in the original string,
# NOT in the resulting string.
# - Case distinctions in the condition list are not significant.
# - Conditions preceded by "Not_" represent the negation of the condition.
#
-# A locale is defined as:
-# <locale> := <ISO_639_code> ( "_" <ISO_3166_code> ( "_" <variant> )? )?
-# <ISO_3166_code> := 2-letter ISO country code,
-# <ISO_639_code> := 2-letter ISO language code
+# A locale ID is defined by taking any language tag as defined by
+# RFC 3066 (or its successor), and replacing '-' by '_'.
#
-# A context is one of the following, as defined in the Unicode Standard:
-# Final_Sigma, After_Soft_Dotted, More_Above, Before_Dot, Not_Before_Dot, After_I
+# A context for a character C is defined by Section 3.13 Default Case Operations,
+# on p. 89-90 of The Unicode Standard, Version 4.0, as amended by Unicode 4.1.0,
+# as specified in http://www.unicode.org/versions/Unicode4.1.0/
#
# Parsers of this file must be prepared to deal with future additions to this format:
# * Additional contexts
diff --git a/gnu/usr.bin/perl/lib/unicore/StandardizedVariants.txt b/gnu/usr.bin/perl/lib/unicore/StandardizedVariants.txt
index 971fd9efbc9..f049159dd3f 100644
--- a/gnu/usr.bin/perl/lib/unicore/StandardizedVariants.txt
+++ b/gnu/usr.bin/perl/lib/unicore/StandardizedVariants.txt
@@ -1,14 +1,22 @@
-# StandardizedVariants-4.0.0.txt
+# StandardizedVariants-4.1.0.txt
+# Date: 2005-03-17, 15:21:00 PST [KW]
#
-# The following file specifies the variant sequences that are defined in the
+# Specification of the variant sequences that are defined in the
# Unicode Standard.
#
+# This file is a normative contributory data file in the
+# Unicode Character Database.
+#
+# Copyright (c) 1991-2005 Unicode, Inc.
+# For terms of use, see http://www.unicode.org/terms_of_use.html
+#
# Warning: Only the variation sequences specifically defined in this file
# are sanctioned for standard use. In all other cases the variation selector
# cannot change the visual appearance of the preceding base character from
# what it would have had in the absence of the variation selector.
#
-# For more information, see Section 15.6 Variation Selectors in The Unicode Standard.
+# For more information, see Section 15.6, Variation Selectors,
+# in The Unicode Standard, Version 4.0.
#
# Format:
# Field 0: the variation sequence
@@ -111,4 +119,4 @@
1887 180C; third form; final # MONGOLIAN LETTER ALI GALI A
1887 180D; fourth form; final # MONGOLIAN LETTER ALI GALI A
1888 180B; second form; final # MONGOLIAN LETTER ALI GALI I
-188A 180B; second form; initial medial # MONGOLIAN LETTER ALI GALI NGA \ No newline at end of file
+188A 180B; second form; initial medial # MONGOLIAN LETTER ALI GALI NGA
diff --git a/gnu/usr.bin/perl/lib/unicore/UnicodeData.txt b/gnu/usr.bin/perl/lib/unicore/UnicodeData.txt
index 3710e172943..f314186b29c 100644
--- a/gnu/usr.bin/perl/lib/unicore/UnicodeData.txt
+++ b/gnu/usr.bin/perl/lib/unicore/UnicodeData.txt
@@ -408,7 +408,7 @@
0197;LATIN CAPITAL LETTER I WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER BARRED I;;;0268;
0198;LATIN CAPITAL LETTER K WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER K HOOK;;;0199;
0199;LATIN SMALL LETTER K WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER K HOOK;;0198;;0198
-019A;LATIN SMALL LETTER L WITH BAR;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED L;;;;
+019A;LATIN SMALL LETTER L WITH BAR;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED L;;023D;;023D
019B;LATIN SMALL LETTER LAMBDA WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED LAMBDA;;;;
019C;LATIN CAPITAL LETTER TURNED M;Lu;0;L;;;;;N;;;;026F;
019D;LATIN CAPITAL LETTER N WITH LEFT HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER N HOOK;;;0272;
@@ -565,6 +565,17 @@
0234;LATIN SMALL LETTER L WITH CURL;Ll;0;L;;;;;N;;;;;
0235;LATIN SMALL LETTER N WITH CURL;Ll;0;L;;;;;N;;;;;
0236;LATIN SMALL LETTER T WITH CURL;Ll;0;L;;;;;N;;;;;
+0237;LATIN SMALL LETTER DOTLESS J;Ll;0;L;;;;;N;;;;;
+0238;LATIN SMALL LETTER DB DIGRAPH;Ll;0;L;;;;;N;;;;;
+0239;LATIN SMALL LETTER QP DIGRAPH;Ll;0;L;;;;;N;;;;;
+023A;LATIN CAPITAL LETTER A WITH STROKE;Lu;0;L;;;;;N;;;;;
+023B;LATIN CAPITAL LETTER C WITH STROKE;Lu;0;L;;;;;N;;;;023C;
+023C;LATIN SMALL LETTER C WITH STROKE;Ll;0;L;;;;;N;;;023B;;023B
+023D;LATIN CAPITAL LETTER L WITH BAR;Lu;0;L;;;;;N;;;;019A;
+023E;LATIN CAPITAL LETTER T WITH DIAGONAL STROKE;Lu;0;L;;;;;N;;;;;
+023F;LATIN SMALL LETTER S WITH SWASH TAIL;Ll;0;L;;;;;N;;;;;
+0240;LATIN SMALL LETTER Z WITH SWASH TAIL;Ll;0;L;;;;;N;;;;;
+0241;LATIN CAPITAL LETTER GLOTTAL STOP;Lu;0;L;;;;;N;;;;0294;
0250;LATIN SMALL LETTER TURNED A;Ll;0;L;;;;;N;;;;;
0251;LATIN SMALL LETTER ALPHA;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT A;;;;
0252;LATIN SMALL LETTER TURNED ALPHA;Ll;0;L;;;;;N;LATIN SMALL LETTER TURNED SCRIPT A;;;;
@@ -633,7 +644,7 @@
0291;LATIN SMALL LETTER Z WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER Z CURL;;;;
0292;LATIN SMALL LETTER EZH;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH;;01B7;;01B7
0293;LATIN SMALL LETTER EZH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH CURL;;;;
-0294;LATIN LETTER GLOTTAL STOP;Ll;0;L;;;;;N;;;;;
+0294;LATIN LETTER GLOTTAL STOP;Ll;0;L;;;;;N;;;0241;;0241
0295;LATIN LETTER PHARYNGEAL VOICED FRICATIVE;Ll;0;L;;;;;N;LATIN LETTER REVERSED GLOTTAL STOP;;;;
0296;LATIN LETTER INVERTED GLOTTAL STOP;Ll;0;L;;;;;N;;;;;
0297;LATIN LETTER STRETCHED C;Ll;0;L;;;;;N;;;;;
@@ -829,6 +840,11 @@
0355;COMBINING RIGHT ARROWHEAD BELOW;Mn;220;NSM;;;;;N;;;;;
0356;COMBINING RIGHT ARROWHEAD AND UP ARROWHEAD BELOW;Mn;220;NSM;;;;;N;;;;;
0357;COMBINING RIGHT HALF RING ABOVE;Mn;230;NSM;;;;;N;;;;;
+0358;COMBINING DOT ABOVE RIGHT;Mn;232;NSM;;;;;N;;;;;
+0359;COMBINING ASTERISK BELOW;Mn;220;NSM;;;;;N;;;;;
+035A;COMBINING DOUBLE RING BELOW;Mn;220;NSM;;;;;N;;;;;
+035B;COMBINING ZIGZAG ABOVE;Mn;230;NSM;;;;;N;;;;;
+035C;COMBINING DOUBLE BREVE BELOW;Mn;233;NSM;;;;;N;;;;;
035D;COMBINING DOUBLE BREVE;Mn;234;NSM;;;;;N;;;;;
035E;COMBINING DOUBLE MACRON;Mn;234;NSM;;;;;N;;;;;
035F;COMBINING DOUBLE MACRON BELOW;Mn;233;NSM;;;;;N;;;;;
@@ -968,6 +984,10 @@
03F9;GREEK CAPITAL LUNATE SIGMA SYMBOL;Lu;0;L;<compat> 03A3;;;;N;;;;03F2;
03FA;GREEK CAPITAL LETTER SAN;Lu;0;L;;;;;N;;;;03FB;
03FB;GREEK SMALL LETTER SAN;Ll;0;L;;;;;N;;;03FA;;03FA
+03FC;GREEK RHO WITH STROKE SYMBOL;Ll;0;L;;;;;N;;;;;
+03FD;GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL;Lu;0;L;;;;;N;;;;;
+03FE;GREEK CAPITAL DOTTED LUNATE SIGMA SYMBOL;Lu;0;L;;;;;N;;;;;
+03FF;GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL;Lu;0;L;;;;;N;;;;;
0400;CYRILLIC CAPITAL LETTER IE WITH GRAVE;Lu;0;L;0415 0300;;;;N;;;;0450;
0401;CYRILLIC CAPITAL LETTER IO;Lu;0;L;0415 0308;;;;N;;;;0451;
0402;CYRILLIC CAPITAL LETTER DJE;Lu;0;L;;;;;N;;Serbocroatian;;0452;
@@ -1212,6 +1232,8 @@
04F3;CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE;Ll;0;L;0443 030B;;;;N;;;04F2;;04F2
04F4;CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS;Lu;0;L;0427 0308;;;;N;;;;04F5;
04F5;CYRILLIC SMALL LETTER CHE WITH DIAERESIS;Ll;0;L;0447 0308;;;;N;;;04F4;;04F4
+04F6;CYRILLIC CAPITAL LETTER GHE WITH DESCENDER;Lu;0;L;;;;;N;;;;04F7;
+04F7;CYRILLIC SMALL LETTER GHE WITH DESCENDER;Ll;0;L;;;;;N;;;04F6;;04F6
04F8;CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS;Lu;0;L;042B 0308;;;;N;;;;04F9;
04F9;CYRILLIC SMALL LETTER YERU WITH DIAERESIS;Ll;0;L;044B 0308;;;;N;;;04F8;;04F8
0500;CYRILLIC CAPITAL LETTER KOMI DE;Lu;0;L;;;;;N;;;;0501;
@@ -1333,6 +1355,7 @@
059F;HEBREW ACCENT QARNEY PARA;Mn;230;NSM;;;;;N;;;;;
05A0;HEBREW ACCENT TELISHA GEDOLA;Mn;230;NSM;;;;;N;;;;;
05A1;HEBREW ACCENT PAZER;Mn;230;NSM;;;;;N;;;;;
+05A2;HEBREW ACCENT ATNAH HAFUKH;Mn;220;NSM;;;;;N;;;;;
05A3;HEBREW ACCENT MUNAH;Mn;220;NSM;;;;;N;;;;;
05A4;HEBREW ACCENT MAHAPAKH;Mn;220;NSM;;;;;N;;;;;
05A5;HEBREW ACCENT MERKHA;Mn;220;NSM;;;;;N;;*;;;
@@ -1366,6 +1389,9 @@
05C2;HEBREW POINT SIN DOT;Mn;25;NSM;;;;;N;;;;;
05C3;HEBREW PUNCTUATION SOF PASUQ;Po;0;R;;;;;N;;*;;;
05C4;HEBREW MARK UPPER DOT;Mn;230;NSM;;;;;N;;;;;
+05C5;HEBREW MARK LOWER DOT;Mn;220;NSM;;;;;N;;;;;
+05C6;HEBREW PUNCTUATION NUN HAFUKHA;Po;0;R;;;;;N;;;;;
+05C7;HEBREW POINT QAMATS QATAN;Mn;18;NSM;;;;;N;;;;;
05D0;HEBREW LETTER ALEF;Lo;0;R;;;;;N;;;;;
05D1;HEBREW LETTER BET;Lo;0;R;;;;;N;;;;;
05D2;HEBREW LETTER GIMEL;Lo;0;R;;;;;N;;;;;
@@ -1402,6 +1428,7 @@
0601;ARABIC SIGN SANAH;Cf;0;AL;;;;;N;;;;;
0602;ARABIC FOOTNOTE MARKER;Cf;0;AL;;;;;N;;;;;
0603;ARABIC SIGN SAFHA;Cf;0;AL;;;;;N;;;;;
+060B;AFGHANI SIGN;Sc;0;AL;;;;;N;;;;;
060C;ARABIC COMMA;Po;0;CS;;;;;N;;;;;
060D;ARABIC DATE SEPARATOR;Po;0;AL;;;;;N;;;;;
060E;ARABIC POETIC VERSE SIGN;So;0;ON;;;;;N;;;;;
@@ -1413,6 +1440,7 @@
0614;ARABIC SIGN TAKHALLUS;Mn;230;NSM;;;;;N;;;;;
0615;ARABIC SMALL HIGH TAH;Mn;230;NSM;;;;;N;;;;;
061B;ARABIC SEMICOLON;Po;0;AL;;;;;N;;;;;
+061E;ARABIC TRIPLE DOT PUNCTUATION MARK;Po;0;AL;;;;;N;;;;;
061F;ARABIC QUESTION MARK;Po;0;AL;;;;;N;;;;;
0621;ARABIC LETTER HAMZA;Lo;0;AL;;;;;N;ARABIC LETTER HAMZAH;;;;
0622;ARABIC LETTER ALEF WITH MADDA ABOVE;Lo;0;AL;0627 0653;;;;N;ARABIC LETTER MADDAH ON ALEF;;;;
@@ -1465,6 +1493,12 @@
0656;ARABIC SUBSCRIPT ALEF;Mn;220;NSM;;;;;N;;;;;
0657;ARABIC INVERTED DAMMA;Mn;230;NSM;;;;;N;;;;;
0658;ARABIC MARK NOON GHUNNA;Mn;230;NSM;;;;;N;;;;;
+0659;ARABIC ZWARAKAY;Mn;230;NSM;;;;;N;;;;;
+065A;ARABIC VOWEL SIGN SMALL V ABOVE;Mn;230;NSM;;;;;N;;;;;
+065B;ARABIC VOWEL SIGN INVERTED SMALL V ABOVE;Mn;230;NSM;;;;;N;;;;;
+065C;ARABIC VOWEL SIGN DOT BELOW;Mn;220;NSM;;;;;N;;;;;
+065D;ARABIC REVERSED DAMMA;Mn;230;NSM;;;;;N;;;;;
+065E;ARABIC FATHA WITH TWO DOTS;Mn;230;NSM;;;;;N;;;;;
0660;ARABIC-INDIC DIGIT ZERO;Nd;0;AN;;0;0;0;N;;;;;
0661;ARABIC-INDIC DIGIT ONE;Nd;0;AN;;1;1;1;N;;;;;
0662;ARABIC-INDIC DIGIT TWO;Nd;0;AN;;2;2;2;N;;;;;
@@ -1702,6 +1736,36 @@
074D;SYRIAC LETTER SOGDIAN ZHAIN;Lo;0;AL;;;;;N;;;;;
074E;SYRIAC LETTER SOGDIAN KHAPH;Lo;0;AL;;;;;N;;;;;
074F;SYRIAC LETTER SOGDIAN FE;Lo;0;AL;;;;;N;;;;;
+0750;ARABIC LETTER BEH WITH THREE DOTS HORIZONTALLY BELOW;Lo;0;AL;;;;;N;;;;;
+0751;ARABIC LETTER BEH WITH DOT BELOW AND THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+0752;ARABIC LETTER BEH WITH THREE DOTS POINTING UPWARDS BELOW;Lo;0;AL;;;;;N;;;;;
+0753;ARABIC LETTER BEH WITH THREE DOTS POINTING UPWARDS BELOW AND TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+0754;ARABIC LETTER BEH WITH TWO DOTS BELOW AND DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+0755;ARABIC LETTER BEH WITH INVERTED SMALL V BELOW;Lo;0;AL;;;;;N;;;;;
+0756;ARABIC LETTER BEH WITH SMALL V;Lo;0;AL;;;;;N;;;;;
+0757;ARABIC LETTER HAH WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+0758;ARABIC LETTER HAH WITH THREE DOTS POINTING UPWARDS BELOW;Lo;0;AL;;;;;N;;;;;
+0759;ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW AND SMALL TAH;Lo;0;AL;;;;;N;;;;;
+075A;ARABIC LETTER DAL WITH INVERTED SMALL V BELOW;Lo;0;AL;;;;;N;;;;;
+075B;ARABIC LETTER REH WITH STROKE;Lo;0;AL;;;;;N;;;;;
+075C;ARABIC LETTER SEEN WITH FOUR DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+075D;ARABIC LETTER AIN WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+075E;ARABIC LETTER AIN WITH THREE DOTS POINTING DOWNWARDS ABOVE;Lo;0;AL;;;;;N;;;;;
+075F;ARABIC LETTER AIN WITH TWO DOTS VERTICALLY ABOVE;Lo;0;AL;;;;;N;;;;;
+0760;ARABIC LETTER FEH WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;;
+0761;ARABIC LETTER FEH WITH THREE DOTS POINTING UPWARDS BELOW;Lo;0;AL;;;;;N;;;;;
+0762;ARABIC LETTER KEHEH WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+0763;ARABIC LETTER KEHEH WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+0764;ARABIC LETTER KEHEH WITH THREE DOTS POINTING UPWARDS BELOW;Lo;0;AL;;;;;N;;;;;
+0765;ARABIC LETTER MEEM WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+0766;ARABIC LETTER MEEM WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
+0767;ARABIC LETTER NOON WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;;
+0768;ARABIC LETTER NOON WITH SMALL TAH;Lo;0;AL;;;;;N;;;;;
+0769;ARABIC LETTER NOON WITH SMALL V;Lo;0;AL;;;;;N;;;;;
+076A;ARABIC LETTER LAM WITH BAR;Lo;0;AL;;;;;N;;;;;
+076B;ARABIC LETTER REH WITH TWO DOTS VERTICALLY ABOVE;Lo;0;AL;;;;;N;;;;;
+076C;ARABIC LETTER REH WITH HAMZA ABOVE;Lo;0;AL;;;;;N;;;;;
+076D;ARABIC LETTER SEEN WITH TWO DOTS VERTICALLY ABOVE;Lo;0;AL;;;;;N;;;;;
0780;THAANA LETTER HAA;Lo;0;AL;;;;;N;;;;;
0781;THAANA LETTER SHAVIYANI;Lo;0;AL;;;;;N;;;;;
0782;THAANA LETTER NOONU;Lo;0;AL;;;;;N;;;;;
@@ -1857,6 +1921,7 @@
096E;DEVANAGARI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
096F;DEVANAGARI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
0970;DEVANAGARI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;;
+097D;DEVANAGARI LETTER GLOTTAL STOP;Lo;0;L;;;;;N;;;;;
0981;BENGALI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
0982;BENGALI SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
0983;BENGALI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
@@ -1918,6 +1983,7 @@
09CB;BENGALI VOWEL SIGN O;Mc;0;L;09C7 09BE;;;;N;;;;;
09CC;BENGALI VOWEL SIGN AU;Mc;0;L;09C7 09D7;;;;N;;;;;
09CD;BENGALI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+09CE;BENGALI LETTER KHANDA TA;Lo;0;L;;;;;N;;;;;
09D7;BENGALI AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
09DC;BENGALI LETTER RRA;Lo;0;L;09A1 09BC;;;;N;;;;;
09DD;BENGALI LETTER RHA;Lo;0;L;09A2 09BC;;;;N;;;;;
@@ -2221,6 +2287,7 @@
0BB3;TAMIL LETTER LLA;Lo;0;L;;;;;N;;;;;
0BB4;TAMIL LETTER LLLA;Lo;0;L;;;;;N;;;;;
0BB5;TAMIL LETTER VA;Lo;0;L;;;;;N;;;;;
+0BB6;TAMIL LETTER SHA;Lo;0;L;;;;;N;;;;;
0BB7;TAMIL LETTER SSA;Lo;0;L;;;;;N;;;;;
0BB8;TAMIL LETTER SA;Lo;0;L;;;;;N;;;;;
0BB9;TAMIL LETTER HA;Lo;0;L;;;;;N;;;;;
@@ -2237,6 +2304,7 @@
0BCC;TAMIL VOWEL SIGN AU;Mc;0;L;0BC6 0BD7;;;;N;;;;;
0BCD;TAMIL SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
0BD7;TAMIL AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
+0BE6;TAMIL DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
0BE7;TAMIL DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
0BE8;TAMIL DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
0BE9;TAMIL DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
@@ -2922,6 +2990,8 @@
0FCB;TIBETAN SYMBOL NOR BU GSUM -KHYIL;So;0;L;;;;;N;;norbu sum khyi;;;
0FCC;TIBETAN SYMBOL NOR BU BZHI -KHYIL;So;0;L;;;;;N;;norbu shi khyi;;;
0FCF;TIBETAN SIGN RDEL NAG GSUM;So;0;L;;;;;N;;dena sum;;;
+0FD0;TIBETAN MARK BSKA- SHOG GI MGO RGYAN;Po;0;L;;;;;N;;ka shog gi go gyen;;;
+0FD1;TIBETAN MARK MNYAM YIG GI MGO RGYAN;Po;0;L;;;;;N;;nyam yig gi go gyen;;;
1000;MYANMAR LETTER KA;Lo;0;L;;;;;N;;;;;
1001;MYANMAR LETTER KHA;Lo;0;L;;;;;N;;;;;
1002;MYANMAR LETTER GA;Lo;0;L;;;;;N;;;;;
@@ -3000,44 +3070,44 @@
1057;MYANMAR VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;;
1058;MYANMAR VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
1059;MYANMAR VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;
-10A0;GEORGIAN CAPITAL LETTER AN;Lu;0;L;;;;;N;;Khutsuri;;;
-10A1;GEORGIAN CAPITAL LETTER BAN;Lu;0;L;;;;;N;;Khutsuri;;;
-10A2;GEORGIAN CAPITAL LETTER GAN;Lu;0;L;;;;;N;;Khutsuri;;;
-10A3;GEORGIAN CAPITAL LETTER DON;Lu;0;L;;;;;N;;Khutsuri;;;
-10A4;GEORGIAN CAPITAL LETTER EN;Lu;0;L;;;;;N;;Khutsuri;;;
-10A5;GEORGIAN CAPITAL LETTER VIN;Lu;0;L;;;;;N;;Khutsuri;;;
-10A6;GEORGIAN CAPITAL LETTER ZEN;Lu;0;L;;;;;N;;Khutsuri;;;
-10A7;GEORGIAN CAPITAL LETTER TAN;Lu;0;L;;;;;N;;Khutsuri;;;
-10A8;GEORGIAN CAPITAL LETTER IN;Lu;0;L;;;;;N;;Khutsuri;;;
-10A9;GEORGIAN CAPITAL LETTER KAN;Lu;0;L;;;;;N;;Khutsuri;;;
-10AA;GEORGIAN CAPITAL LETTER LAS;Lu;0;L;;;;;N;;Khutsuri;;;
-10AB;GEORGIAN CAPITAL LETTER MAN;Lu;0;L;;;;;N;;Khutsuri;;;
-10AC;GEORGIAN CAPITAL LETTER NAR;Lu;0;L;;;;;N;;Khutsuri;;;
-10AD;GEORGIAN CAPITAL LETTER ON;Lu;0;L;;;;;N;;Khutsuri;;;
-10AE;GEORGIAN CAPITAL LETTER PAR;Lu;0;L;;;;;N;;Khutsuri;;;
-10AF;GEORGIAN CAPITAL LETTER ZHAR;Lu;0;L;;;;;N;;Khutsuri;;;
-10B0;GEORGIAN CAPITAL LETTER RAE;Lu;0;L;;;;;N;;Khutsuri;;;
-10B1;GEORGIAN CAPITAL LETTER SAN;Lu;0;L;;;;;N;;Khutsuri;;;
-10B2;GEORGIAN CAPITAL LETTER TAR;Lu;0;L;;;;;N;;Khutsuri;;;
-10B3;GEORGIAN CAPITAL LETTER UN;Lu;0;L;;;;;N;;Khutsuri;;;
-10B4;GEORGIAN CAPITAL LETTER PHAR;Lu;0;L;;;;;N;;Khutsuri;;;
-10B5;GEORGIAN CAPITAL LETTER KHAR;Lu;0;L;;;;;N;;Khutsuri;;;
-10B6;GEORGIAN CAPITAL LETTER GHAN;Lu;0;L;;;;;N;;Khutsuri;;;
-10B7;GEORGIAN CAPITAL LETTER QAR;Lu;0;L;;;;;N;;Khutsuri;;;
-10B8;GEORGIAN CAPITAL LETTER SHIN;Lu;0;L;;;;;N;;Khutsuri;;;
-10B9;GEORGIAN CAPITAL LETTER CHIN;Lu;0;L;;;;;N;;Khutsuri;;;
-10BA;GEORGIAN CAPITAL LETTER CAN;Lu;0;L;;;;;N;;Khutsuri;;;
-10BB;GEORGIAN CAPITAL LETTER JIL;Lu;0;L;;;;;N;;Khutsuri;;;
-10BC;GEORGIAN CAPITAL LETTER CIL;Lu;0;L;;;;;N;;Khutsuri;;;
-10BD;GEORGIAN CAPITAL LETTER CHAR;Lu;0;L;;;;;N;;Khutsuri;;;
-10BE;GEORGIAN CAPITAL LETTER XAN;Lu;0;L;;;;;N;;Khutsuri;;;
-10BF;GEORGIAN CAPITAL LETTER JHAN;Lu;0;L;;;;;N;;Khutsuri;;;
-10C0;GEORGIAN CAPITAL LETTER HAE;Lu;0;L;;;;;N;;Khutsuri;;;
-10C1;GEORGIAN CAPITAL LETTER HE;Lu;0;L;;;;;N;;Khutsuri;;;
-10C2;GEORGIAN CAPITAL LETTER HIE;Lu;0;L;;;;;N;;Khutsuri;;;
-10C3;GEORGIAN CAPITAL LETTER WE;Lu;0;L;;;;;N;;Khutsuri;;;
-10C4;GEORGIAN CAPITAL LETTER HAR;Lu;0;L;;;;;N;;Khutsuri;;;
-10C5;GEORGIAN CAPITAL LETTER HOE;Lu;0;L;;;;;N;;Khutsuri;;;
+10A0;GEORGIAN CAPITAL LETTER AN;Lu;0;L;;;;;N;;Khutsuri;;2D00;
+10A1;GEORGIAN CAPITAL LETTER BAN;Lu;0;L;;;;;N;;Khutsuri;;2D01;
+10A2;GEORGIAN CAPITAL LETTER GAN;Lu;0;L;;;;;N;;Khutsuri;;2D02;
+10A3;GEORGIAN CAPITAL LETTER DON;Lu;0;L;;;;;N;;Khutsuri;;2D03;
+10A4;GEORGIAN CAPITAL LETTER EN;Lu;0;L;;;;;N;;Khutsuri;;2D04;
+10A5;GEORGIAN CAPITAL LETTER VIN;Lu;0;L;;;;;N;;Khutsuri;;2D05;
+10A6;GEORGIAN CAPITAL LETTER ZEN;Lu;0;L;;;;;N;;Khutsuri;;2D06;
+10A7;GEORGIAN CAPITAL LETTER TAN;Lu;0;L;;;;;N;;Khutsuri;;2D07;
+10A8;GEORGIAN CAPITAL LETTER IN;Lu;0;L;;;;;N;;Khutsuri;;2D08;
+10A9;GEORGIAN CAPITAL LETTER KAN;Lu;0;L;;;;;N;;Khutsuri;;2D09;
+10AA;GEORGIAN CAPITAL LETTER LAS;Lu;0;L;;;;;N;;Khutsuri;;2D0A;
+10AB;GEORGIAN CAPITAL LETTER MAN;Lu;0;L;;;;;N;;Khutsuri;;2D0B;
+10AC;GEORGIAN CAPITAL LETTER NAR;Lu;0;L;;;;;N;;Khutsuri;;2D0C;
+10AD;GEORGIAN CAPITAL LETTER ON;Lu;0;L;;;;;N;;Khutsuri;;2D0D;
+10AE;GEORGIAN CAPITAL LETTER PAR;Lu;0;L;;;;;N;;Khutsuri;;2D0E;
+10AF;GEORGIAN CAPITAL LETTER ZHAR;Lu;0;L;;;;;N;;Khutsuri;;2D0F;
+10B0;GEORGIAN CAPITAL LETTER RAE;Lu;0;L;;;;;N;;Khutsuri;;2D10;
+10B1;GEORGIAN CAPITAL LETTER SAN;Lu;0;L;;;;;N;;Khutsuri;;2D11;
+10B2;GEORGIAN CAPITAL LETTER TAR;Lu;0;L;;;;;N;;Khutsuri;;2D12;
+10B3;GEORGIAN CAPITAL LETTER UN;Lu;0;L;;;;;N;;Khutsuri;;2D13;
+10B4;GEORGIAN CAPITAL LETTER PHAR;Lu;0;L;;;;;N;;Khutsuri;;2D14;
+10B5;GEORGIAN CAPITAL LETTER KHAR;Lu;0;L;;;;;N;;Khutsuri;;2D15;
+10B6;GEORGIAN CAPITAL LETTER GHAN;Lu;0;L;;;;;N;;Khutsuri;;2D16;
+10B7;GEORGIAN CAPITAL LETTER QAR;Lu;0;L;;;;;N;;Khutsuri;;2D17;
+10B8;GEORGIAN CAPITAL LETTER SHIN;Lu;0;L;;;;;N;;Khutsuri;;2D18;
+10B9;GEORGIAN CAPITAL LETTER CHIN;Lu;0;L;;;;;N;;Khutsuri;;2D19;
+10BA;GEORGIAN CAPITAL LETTER CAN;Lu;0;L;;;;;N;;Khutsuri;;2D1A;
+10BB;GEORGIAN CAPITAL LETTER JIL;Lu;0;L;;;;;N;;Khutsuri;;2D1B;
+10BC;GEORGIAN CAPITAL LETTER CIL;Lu;0;L;;;;;N;;Khutsuri;;2D1C;
+10BD;GEORGIAN CAPITAL LETTER CHAR;Lu;0;L;;;;;N;;Khutsuri;;2D1D;
+10BE;GEORGIAN CAPITAL LETTER XAN;Lu;0;L;;;;;N;;Khutsuri;;2D1E;
+10BF;GEORGIAN CAPITAL LETTER JHAN;Lu;0;L;;;;;N;;Khutsuri;;2D1F;
+10C0;GEORGIAN CAPITAL LETTER HAE;Lu;0;L;;;;;N;;Khutsuri;;2D20;
+10C1;GEORGIAN CAPITAL LETTER HE;Lu;0;L;;;;;N;;Khutsuri;;2D21;
+10C2;GEORGIAN CAPITAL LETTER HIE;Lu;0;L;;;;;N;;Khutsuri;;2D22;
+10C3;GEORGIAN CAPITAL LETTER WE;Lu;0;L;;;;;N;;Khutsuri;;2D23;
+10C4;GEORGIAN CAPITAL LETTER HAR;Lu;0;L;;;;;N;;Khutsuri;;2D24;
+10C5;GEORGIAN CAPITAL LETTER HOE;Lu;0;L;;;;;N;;Khutsuri;;2D25;
10D0;GEORGIAN LETTER AN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER AN;;;;
10D1;GEORGIAN LETTER BAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER BAN;;;;
10D2;GEORGIAN LETTER GAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER GAN;;;;
@@ -3079,7 +3149,10 @@
10F6;GEORGIAN LETTER FI;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER FI;;;;
10F7;GEORGIAN LETTER YN;Lo;0;L;;;;;N;;;;;
10F8;GEORGIAN LETTER ELIFI;Lo;0;L;;;;;N;;;;;
+10F9;GEORGIAN LETTER TURNED GAN;Lo;0;L;;;;;N;;;;;
+10FA;GEORGIAN LETTER AIN;Lo;0;L;;;;;N;;;;;
10FB;GEORGIAN PARAGRAPH SEPARATOR;Po;0;L;;;;;N;;;;;
+10FC;MODIFIER LETTER GEORGIAN NAR;Lm;0;L;<super> 10DC;;;;N;;;;;
1100;HANGUL CHOSEONG KIYEOK;Lo;0;L;;;;;N;;g *;;;
1101;HANGUL CHOSEONG SSANGKIYEOK;Lo;0;L;;;;;N;;gg *;;;
1102;HANGUL CHOSEONG NIEUN;Lo;0;L;;;;;N;;n *;;;
@@ -3327,6 +3400,7 @@
1204;ETHIOPIC SYLLABLE HEE;Lo;0;L;;;;;N;;;;;
1205;ETHIOPIC SYLLABLE HE;Lo;0;L;;;;;N;;;;;
1206;ETHIOPIC SYLLABLE HO;Lo;0;L;;;;;N;;;;;
+1207;ETHIOPIC SYLLABLE HOA;Lo;0;L;;;;;N;;;;;
1208;ETHIOPIC SYLLABLE LA;Lo;0;L;;;;;N;;;;;
1209;ETHIOPIC SYLLABLE LU;Lo;0;L;;;;;N;;;;;
120A;ETHIOPIC SYLLABLE LI;Lo;0;L;;;;;N;;;;;
@@ -3390,6 +3464,7 @@
1244;ETHIOPIC SYLLABLE QEE;Lo;0;L;;;;;N;;;;;
1245;ETHIOPIC SYLLABLE QE;Lo;0;L;;;;;N;;;;;
1246;ETHIOPIC SYLLABLE QO;Lo;0;L;;;;;N;;;;;
+1247;ETHIOPIC SYLLABLE QOA;Lo;0;L;;;;;N;;;;;
1248;ETHIOPIC SYLLABLE QWA;Lo;0;L;;;;;N;;;;;
124A;ETHIOPIC SYLLABLE QWI;Lo;0;L;;;;;N;;;;;
124B;ETHIOPIC SYLLABLE QWAA;Lo;0;L;;;;;N;;;;;
@@ -3446,6 +3521,7 @@
1284;ETHIOPIC SYLLABLE XEE;Lo;0;L;;;;;N;;;;;
1285;ETHIOPIC SYLLABLE XE;Lo;0;L;;;;;N;;;;;
1286;ETHIOPIC SYLLABLE XO;Lo;0;L;;;;;N;;;;;
+1287;ETHIOPIC SYLLABLE XOA;Lo;0;L;;;;;N;;;;;
1288;ETHIOPIC SYLLABLE XWA;Lo;0;L;;;;;N;;;;;
128A;ETHIOPIC SYLLABLE XWI;Lo;0;L;;;;;N;;;;;
128B;ETHIOPIC SYLLABLE XWAA;Lo;0;L;;;;;N;;;;;
@@ -3482,6 +3558,7 @@
12AC;ETHIOPIC SYLLABLE KEE;Lo;0;L;;;;;N;;;;;
12AD;ETHIOPIC SYLLABLE KE;Lo;0;L;;;;;N;;;;;
12AE;ETHIOPIC SYLLABLE KO;Lo;0;L;;;;;N;;;;;
+12AF;ETHIOPIC SYLLABLE KOA;Lo;0;L;;;;;N;;;;;
12B0;ETHIOPIC SYLLABLE KWA;Lo;0;L;;;;;N;;;;;
12B2;ETHIOPIC SYLLABLE KWI;Lo;0;L;;;;;N;;;;;
12B3;ETHIOPIC SYLLABLE KWAA;Lo;0;L;;;;;N;;;;;
@@ -3506,6 +3583,7 @@
12CC;ETHIOPIC SYLLABLE WEE;Lo;0;L;;;;;N;;;;;
12CD;ETHIOPIC SYLLABLE WE;Lo;0;L;;;;;N;;;;;
12CE;ETHIOPIC SYLLABLE WO;Lo;0;L;;;;;N;;;;;
+12CF;ETHIOPIC SYLLABLE WOA;Lo;0;L;;;;;N;;;;;
12D0;ETHIOPIC SYLLABLE PHARYNGEAL A;Lo;0;L;;;;;N;;;;;
12D1;ETHIOPIC SYLLABLE PHARYNGEAL U;Lo;0;L;;;;;N;;;;;
12D2;ETHIOPIC SYLLABLE PHARYNGEAL I;Lo;0;L;;;;;N;;;;;
@@ -3536,6 +3614,7 @@
12EC;ETHIOPIC SYLLABLE YEE;Lo;0;L;;;;;N;;;;;
12ED;ETHIOPIC SYLLABLE YE;Lo;0;L;;;;;N;;;;;
12EE;ETHIOPIC SYLLABLE YO;Lo;0;L;;;;;N;;;;;
+12EF;ETHIOPIC SYLLABLE YOA;Lo;0;L;;;;;N;;;;;
12F0;ETHIOPIC SYLLABLE DA;Lo;0;L;;;;;N;;;;;
12F1;ETHIOPIC SYLLABLE DU;Lo;0;L;;;;;N;;;;;
12F2;ETHIOPIC SYLLABLE DI;Lo;0;L;;;;;N;;;;;
@@ -3567,6 +3646,7 @@
130C;ETHIOPIC SYLLABLE GEE;Lo;0;L;;;;;N;;;;;
130D;ETHIOPIC SYLLABLE GE;Lo;0;L;;;;;N;;;;;
130E;ETHIOPIC SYLLABLE GO;Lo;0;L;;;;;N;;;;;
+130F;ETHIOPIC SYLLABLE GOA;Lo;0;L;;;;;N;;;;;
1310;ETHIOPIC SYLLABLE GWA;Lo;0;L;;;;;N;;;;;
1312;ETHIOPIC SYLLABLE GWI;Lo;0;L;;;;;N;;;;;
1313;ETHIOPIC SYLLABLE GWAA;Lo;0;L;;;;;N;;;;;
@@ -3579,6 +3659,7 @@
131C;ETHIOPIC SYLLABLE GGEE;Lo;0;L;;;;;N;;;;;
131D;ETHIOPIC SYLLABLE GGE;Lo;0;L;;;;;N;;;;;
131E;ETHIOPIC SYLLABLE GGO;Lo;0;L;;;;;N;;;;;
+131F;ETHIOPIC SYLLABLE GGWAA;Lo;0;L;;;;;N;;;;;
1320;ETHIOPIC SYLLABLE THA;Lo;0;L;;;;;N;;;;;
1321;ETHIOPIC SYLLABLE THU;Lo;0;L;;;;;N;;;;;
1322;ETHIOPIC SYLLABLE THI;Lo;0;L;;;;;N;;;;;
@@ -3618,6 +3699,7 @@
1344;ETHIOPIC SYLLABLE TZEE;Lo;0;L;;;;;N;;;;;
1345;ETHIOPIC SYLLABLE TZE;Lo;0;L;;;;;N;;;;;
1346;ETHIOPIC SYLLABLE TZO;Lo;0;L;;;;;N;;;;;
+1347;ETHIOPIC SYLLABLE TZOA;Lo;0;L;;;;;N;;;;;
1348;ETHIOPIC SYLLABLE FA;Lo;0;L;;;;;N;;;;;
1349;ETHIOPIC SYLLABLE FU;Lo;0;L;;;;;N;;;;;
134A;ETHIOPIC SYLLABLE FI;Lo;0;L;;;;;N;;;;;
@@ -3637,6 +3719,8 @@
1358;ETHIOPIC SYLLABLE RYA;Lo;0;L;;;;;N;;;;;
1359;ETHIOPIC SYLLABLE MYA;Lo;0;L;;;;;N;;;;;
135A;ETHIOPIC SYLLABLE FYA;Lo;0;L;;;;;N;;;;;
+135F;ETHIOPIC COMBINING GEMINATION MARK;Mn;230;NSM;;;;;N;;;;;
+1360;ETHIOPIC SECTION MARK;So;0;L;;;;;N;;;;;
1361;ETHIOPIC WORDSPACE;Po;0;L;;;;;N;;;;;
1362;ETHIOPIC FULL STOP;Po;0;L;;;;;N;;;;;
1363;ETHIOPIC COMMA;Po;0;L;;;;;N;;;;;
@@ -3645,15 +3729,15 @@
1366;ETHIOPIC PREFACE COLON;Po;0;L;;;;;N;;;;;
1367;ETHIOPIC QUESTION MARK;Po;0;L;;;;;N;;;;;
1368;ETHIOPIC PARAGRAPH SEPARATOR;Po;0;L;;;;;N;;;;;
-1369;ETHIOPIC DIGIT ONE;Nd;0;L;;;1;1;N;;;;;
-136A;ETHIOPIC DIGIT TWO;Nd;0;L;;;2;2;N;;;;;
-136B;ETHIOPIC DIGIT THREE;Nd;0;L;;;3;3;N;;;;;
-136C;ETHIOPIC DIGIT FOUR;Nd;0;L;;;4;4;N;;;;;
-136D;ETHIOPIC DIGIT FIVE;Nd;0;L;;;5;5;N;;;;;
-136E;ETHIOPIC DIGIT SIX;Nd;0;L;;;6;6;N;;;;;
-136F;ETHIOPIC DIGIT SEVEN;Nd;0;L;;;7;7;N;;;;;
-1370;ETHIOPIC DIGIT EIGHT;Nd;0;L;;;8;8;N;;;;;
-1371;ETHIOPIC DIGIT NINE;Nd;0;L;;;9;9;N;;;;;
+1369;ETHIOPIC DIGIT ONE;No;0;L;;;1;1;N;;;;;
+136A;ETHIOPIC DIGIT TWO;No;0;L;;;2;2;N;;;;;
+136B;ETHIOPIC DIGIT THREE;No;0;L;;;3;3;N;;;;;
+136C;ETHIOPIC DIGIT FOUR;No;0;L;;;4;4;N;;;;;
+136D;ETHIOPIC DIGIT FIVE;No;0;L;;;5;5;N;;;;;
+136E;ETHIOPIC DIGIT SIX;No;0;L;;;6;6;N;;;;;
+136F;ETHIOPIC DIGIT SEVEN;No;0;L;;;7;7;N;;;;;
+1370;ETHIOPIC DIGIT EIGHT;No;0;L;;;8;8;N;;;;;
+1371;ETHIOPIC DIGIT NINE;No;0;L;;;9;9;N;;;;;
1372;ETHIOPIC NUMBER TEN;No;0;L;;;;10;N;;;;;
1373;ETHIOPIC NUMBER TWENTY;No;0;L;;;;20;N;;;;;
1374;ETHIOPIC NUMBER THIRTY;No;0;L;;;;30;N;;;;;
@@ -3665,6 +3749,32 @@
137A;ETHIOPIC NUMBER NINETY;No;0;L;;;;90;N;;;;;
137B;ETHIOPIC NUMBER HUNDRED;No;0;L;;;;100;N;;;;;
137C;ETHIOPIC NUMBER TEN THOUSAND;No;0;L;;;;10000;N;;;;;
+1380;ETHIOPIC SYLLABLE SEBATBEIT MWA;Lo;0;L;;;;;N;;;;;
+1381;ETHIOPIC SYLLABLE MWI;Lo;0;L;;;;;N;;;;;
+1382;ETHIOPIC SYLLABLE MWEE;Lo;0;L;;;;;N;;;;;
+1383;ETHIOPIC SYLLABLE MWE;Lo;0;L;;;;;N;;;;;
+1384;ETHIOPIC SYLLABLE SEBATBEIT BWA;Lo;0;L;;;;;N;;;;;
+1385;ETHIOPIC SYLLABLE BWI;Lo;0;L;;;;;N;;;;;
+1386;ETHIOPIC SYLLABLE BWEE;Lo;0;L;;;;;N;;;;;
+1387;ETHIOPIC SYLLABLE BWE;Lo;0;L;;;;;N;;;;;
+1388;ETHIOPIC SYLLABLE SEBATBEIT FWA;Lo;0;L;;;;;N;;;;;
+1389;ETHIOPIC SYLLABLE FWI;Lo;0;L;;;;;N;;;;;
+138A;ETHIOPIC SYLLABLE FWEE;Lo;0;L;;;;;N;;;;;
+138B;ETHIOPIC SYLLABLE FWE;Lo;0;L;;;;;N;;;;;
+138C;ETHIOPIC SYLLABLE SEBATBEIT PWA;Lo;0;L;;;;;N;;;;;
+138D;ETHIOPIC SYLLABLE PWI;Lo;0;L;;;;;N;;;;;
+138E;ETHIOPIC SYLLABLE PWEE;Lo;0;L;;;;;N;;;;;
+138F;ETHIOPIC SYLLABLE PWE;Lo;0;L;;;;;N;;;;;
+1390;ETHIOPIC TONAL MARK YIZET;So;0;ON;;;;;N;;;;;
+1391;ETHIOPIC TONAL MARK DERET;So;0;ON;;;;;N;;;;;
+1392;ETHIOPIC TONAL MARK RIKRIK;So;0;ON;;;;;N;;;;;
+1393;ETHIOPIC TONAL MARK SHORT RIKRIK;So;0;ON;;;;;N;;;;;
+1394;ETHIOPIC TONAL MARK DIFAT;So;0;ON;;;;;N;;;;;
+1395;ETHIOPIC TONAL MARK KENAT;So;0;ON;;;;;N;;;;;
+1396;ETHIOPIC TONAL MARK CHIRET;So;0;ON;;;;;N;;;;;
+1397;ETHIOPIC TONAL MARK HIDET;So;0;ON;;;;;N;;;;;
+1398;ETHIOPIC TONAL MARK DERET-HIDET;So;0;ON;;;;;N;;;;;
+1399;ETHIOPIC TONAL MARK KURT;So;0;ON;;;;;N;;;;;
13A0;CHEROKEE LETTER A;Lo;0;L;;;;;N;;;;;
13A1;CHEROKEE LETTER E;Lo;0;L;;;;;N;;;;;
13A2;CHEROKEE LETTER I;Lo;0;L;;;;;N;;;;;
@@ -4941,6 +5051,86 @@
1972;TAI LE LETTER TONE-4;Lo;0;L;;;;;N;;;;;
1973;TAI LE LETTER TONE-5;Lo;0;L;;;;;N;;;;;
1974;TAI LE LETTER TONE-6;Lo;0;L;;;;;N;;;;;
+1980;NEW TAI LUE LETTER HIGH QA;Lo;0;L;;;;;N;;;;;
+1981;NEW TAI LUE LETTER LOW QA;Lo;0;L;;;;;N;;;;;
+1982;NEW TAI LUE LETTER HIGH KA;Lo;0;L;;;;;N;;;;;
+1983;NEW TAI LUE LETTER HIGH XA;Lo;0;L;;;;;N;;;;;
+1984;NEW TAI LUE LETTER HIGH NGA;Lo;0;L;;;;;N;;;;;
+1985;NEW TAI LUE LETTER LOW KA;Lo;0;L;;;;;N;;;;;
+1986;NEW TAI LUE LETTER LOW XA;Lo;0;L;;;;;N;;;;;
+1987;NEW TAI LUE LETTER LOW NGA;Lo;0;L;;;;;N;;;;;
+1988;NEW TAI LUE LETTER HIGH TSA;Lo;0;L;;;;;N;;;;;
+1989;NEW TAI LUE LETTER HIGH SA;Lo;0;L;;;;;N;;;;;
+198A;NEW TAI LUE LETTER HIGH YA;Lo;0;L;;;;;N;;;;;
+198B;NEW TAI LUE LETTER LOW TSA;Lo;0;L;;;;;N;;;;;
+198C;NEW TAI LUE LETTER LOW SA;Lo;0;L;;;;;N;;;;;
+198D;NEW TAI LUE LETTER LOW YA;Lo;0;L;;;;;N;;;;;
+198E;NEW TAI LUE LETTER HIGH TA;Lo;0;L;;;;;N;;;;;
+198F;NEW TAI LUE LETTER HIGH THA;Lo;0;L;;;;;N;;;;;
+1990;NEW TAI LUE LETTER HIGH NA;Lo;0;L;;;;;N;;;;;
+1991;NEW TAI LUE LETTER LOW TA;Lo;0;L;;;;;N;;;;;
+1992;NEW TAI LUE LETTER LOW THA;Lo;0;L;;;;;N;;;;;
+1993;NEW TAI LUE LETTER LOW NA;Lo;0;L;;;;;N;;;;;
+1994;NEW TAI LUE LETTER HIGH PA;Lo;0;L;;;;;N;;;;;
+1995;NEW TAI LUE LETTER HIGH PHA;Lo;0;L;;;;;N;;;;;
+1996;NEW TAI LUE LETTER HIGH MA;Lo;0;L;;;;;N;;;;;
+1997;NEW TAI LUE LETTER LOW PA;Lo;0;L;;;;;N;;;;;
+1998;NEW TAI LUE LETTER LOW PHA;Lo;0;L;;;;;N;;;;;
+1999;NEW TAI LUE LETTER LOW MA;Lo;0;L;;;;;N;;;;;
+199A;NEW TAI LUE LETTER HIGH FA;Lo;0;L;;;;;N;;;;;
+199B;NEW TAI LUE LETTER HIGH VA;Lo;0;L;;;;;N;;;;;
+199C;NEW TAI LUE LETTER HIGH LA;Lo;0;L;;;;;N;;;;;
+199D;NEW TAI LUE LETTER LOW FA;Lo;0;L;;;;;N;;;;;
+199E;NEW TAI LUE LETTER LOW VA;Lo;0;L;;;;;N;;;;;
+199F;NEW TAI LUE LETTER LOW LA;Lo;0;L;;;;;N;;;;;
+19A0;NEW TAI LUE LETTER HIGH HA;Lo;0;L;;;;;N;;;;;
+19A1;NEW TAI LUE LETTER HIGH DA;Lo;0;L;;;;;N;;;;;
+19A2;NEW TAI LUE LETTER HIGH BA;Lo;0;L;;;;;N;;;;;
+19A3;NEW TAI LUE LETTER LOW HA;Lo;0;L;;;;;N;;;;;
+19A4;NEW TAI LUE LETTER LOW DA;Lo;0;L;;;;;N;;;;;
+19A5;NEW TAI LUE LETTER LOW BA;Lo;0;L;;;;;N;;;;;
+19A6;NEW TAI LUE LETTER HIGH KVA;Lo;0;L;;;;;N;;;;;
+19A7;NEW TAI LUE LETTER HIGH XVA;Lo;0;L;;;;;N;;;;;
+19A8;NEW TAI LUE LETTER LOW KVA;Lo;0;L;;;;;N;;;;;
+19A9;NEW TAI LUE LETTER LOW XVA;Lo;0;L;;;;;N;;;;;
+19B0;NEW TAI LUE VOWEL SIGN VOWEL SHORTENER;Mc;0;L;;;;;N;;;;;
+19B1;NEW TAI LUE VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+19B2;NEW TAI LUE VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+19B3;NEW TAI LUE VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
+19B4;NEW TAI LUE VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
+19B5;NEW TAI LUE VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+19B6;NEW TAI LUE VOWEL SIGN AE;Mc;0;L;;;;;N;;;;;
+19B7;NEW TAI LUE VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
+19B8;NEW TAI LUE VOWEL SIGN OA;Mc;0;L;;;;;N;;;;;
+19B9;NEW TAI LUE VOWEL SIGN UE;Mc;0;L;;;;;N;;;;;
+19BA;NEW TAI LUE VOWEL SIGN AY;Mc;0;L;;;;;N;;;;;
+19BB;NEW TAI LUE VOWEL SIGN AAY;Mc;0;L;;;;;N;;;;;
+19BC;NEW TAI LUE VOWEL SIGN UY;Mc;0;L;;;;;N;;;;;
+19BD;NEW TAI LUE VOWEL SIGN OY;Mc;0;L;;;;;N;;;;;
+19BE;NEW TAI LUE VOWEL SIGN OAY;Mc;0;L;;;;;N;;;;;
+19BF;NEW TAI LUE VOWEL SIGN UEY;Mc;0;L;;;;;N;;;;;
+19C0;NEW TAI LUE VOWEL SIGN IY;Mc;0;L;;;;;N;;;;;
+19C1;NEW TAI LUE LETTER FINAL V;Lo;0;L;;;;;N;;;;;
+19C2;NEW TAI LUE LETTER FINAL NG;Lo;0;L;;;;;N;;;;;
+19C3;NEW TAI LUE LETTER FINAL N;Lo;0;L;;;;;N;;;;;
+19C4;NEW TAI LUE LETTER FINAL M;Lo;0;L;;;;;N;;;;;
+19C5;NEW TAI LUE LETTER FINAL K;Lo;0;L;;;;;N;;;;;
+19C6;NEW TAI LUE LETTER FINAL D;Lo;0;L;;;;;N;;;;;
+19C7;NEW TAI LUE LETTER FINAL B;Lo;0;L;;;;;N;;;;;
+19C8;NEW TAI LUE TONE MARK-1;Mc;0;L;;;;;N;;;;;
+19C9;NEW TAI LUE TONE MARK-2;Mc;0;L;;;;;N;;;;;
+19D0;NEW TAI LUE DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+19D1;NEW TAI LUE DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+19D2;NEW TAI LUE DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+19D3;NEW TAI LUE DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+19D4;NEW TAI LUE DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+19D5;NEW TAI LUE DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+19D6;NEW TAI LUE DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+19D7;NEW TAI LUE DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+19D8;NEW TAI LUE DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+19D9;NEW TAI LUE DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+19DE;NEW TAI LUE SIGN LAE;Po;0;ON;;;;;N;;;;;
+19DF;NEW TAI LUE SIGN LAEV;Po;0;ON;;;;;N;;;;;
19E0;KHMER SYMBOL PATHAMASAT;So;0;ON;;;;;N;;;;;
19E1;KHMER SYMBOL MUOY KOET;So;0;ON;;;;;N;;;;;
19E2;KHMER SYMBOL PII KOET;So;0;ON;;;;;N;;;;;
@@ -4973,6 +5163,36 @@
19FD;KHMER SYMBOL DAP-BEI ROC;So;0;ON;;;;;N;;;;;
19FE;KHMER SYMBOL DAP-BUON ROC;So;0;ON;;;;;N;;;;;
19FF;KHMER SYMBOL DAP-PRAM ROC;So;0;ON;;;;;N;;;;;
+1A00;BUGINESE LETTER KA;Lo;0;L;;;;;N;;;;;
+1A01;BUGINESE LETTER GA;Lo;0;L;;;;;N;;;;;
+1A02;BUGINESE LETTER NGA;Lo;0;L;;;;;N;;;;;
+1A03;BUGINESE LETTER NGKA;Lo;0;L;;;;;N;;;;;
+1A04;BUGINESE LETTER PA;Lo;0;L;;;;;N;;;;;
+1A05;BUGINESE LETTER BA;Lo;0;L;;;;;N;;;;;
+1A06;BUGINESE LETTER MA;Lo;0;L;;;;;N;;;;;
+1A07;BUGINESE LETTER MPA;Lo;0;L;;;;;N;;;;;
+1A08;BUGINESE LETTER TA;Lo;0;L;;;;;N;;;;;
+1A09;BUGINESE LETTER DA;Lo;0;L;;;;;N;;;;;
+1A0A;BUGINESE LETTER NA;Lo;0;L;;;;;N;;;;;
+1A0B;BUGINESE LETTER NRA;Lo;0;L;;;;;N;;;;;
+1A0C;BUGINESE LETTER CA;Lo;0;L;;;;;N;;;;;
+1A0D;BUGINESE LETTER JA;Lo;0;L;;;;;N;;;;;
+1A0E;BUGINESE LETTER NYA;Lo;0;L;;;;;N;;;;;
+1A0F;BUGINESE LETTER NYCA;Lo;0;L;;;;;N;;;;;
+1A10;BUGINESE LETTER YA;Lo;0;L;;;;;N;;;;;
+1A11;BUGINESE LETTER RA;Lo;0;L;;;;;N;;;;;
+1A12;BUGINESE LETTER LA;Lo;0;L;;;;;N;;;;;
+1A13;BUGINESE LETTER VA;Lo;0;L;;;;;N;;;;;
+1A14;BUGINESE LETTER SA;Lo;0;L;;;;;N;;;;;
+1A15;BUGINESE LETTER A;Lo;0;L;;;;;N;;;;;
+1A16;BUGINESE LETTER HA;Lo;0;L;;;;;N;;;;;
+1A17;BUGINESE VOWEL SIGN I;Mn;230;NSM;;;;;N;;;;;
+1A18;BUGINESE VOWEL SIGN U;Mn;220;NSM;;;;;N;;;;;
+1A19;BUGINESE VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+1A1A;BUGINESE VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
+1A1B;BUGINESE VOWEL SIGN AE;Mc;0;L;;;;;N;;;;;
+1A1E;BUGINESE PALLAWA;Po;0;L;;;;;N;;;;;
+1A1F;BUGINESE END OF SECTION;Po;0;L;;;;;N;;;;;
1D00;LATIN LETTER SMALL CAPITAL A;Ll;0;L;;;;;N;;;;;
1D01;LATIN LETTER SMALL CAPITAL AE;Ll;0;L;;;;;N;;;;;
1D02;LATIN SMALL LETTER TURNED AE;Ll;0;L;;;;;N;;;;;
@@ -5081,6 +5301,94 @@
1D69;GREEK SUBSCRIPT SMALL LETTER PHI;Ll;0;L;<sub> 03C6;;;;N;;;;;
1D6A;GREEK SUBSCRIPT SMALL LETTER CHI;Ll;0;L;<sub> 03C7;;;;N;;;;;
1D6B;LATIN SMALL LETTER UE;Ll;0;L;;;;;N;;;;;
+1D6C;LATIN SMALL LETTER B WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
+1D6D;LATIN SMALL LETTER D WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
+1D6E;LATIN SMALL LETTER F WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
+1D6F;LATIN SMALL LETTER M WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
+1D70;LATIN SMALL LETTER N WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
+1D71;LATIN SMALL LETTER P WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
+1D72;LATIN SMALL LETTER R WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
+1D73;LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
+1D74;LATIN SMALL LETTER S WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
+1D75;LATIN SMALL LETTER T WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
+1D76;LATIN SMALL LETTER Z WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
+1D77;LATIN SMALL LETTER TURNED G;Ll;0;L;;;;;N;;;;;
+1D78;MODIFIER LETTER CYRILLIC EN;Lm;0;L;<super> 043D;;;;N;;;;;
+1D79;LATIN SMALL LETTER INSULAR G;Ll;0;L;;;;;N;;;;;
+1D7A;LATIN SMALL LETTER TH WITH STRIKETHROUGH;Ll;0;L;;;;;N;;;;;
+1D7B;LATIN SMALL CAPITAL LETTER I WITH STROKE;Ll;0;L;;;;;N;;;;;
+1D7C;LATIN SMALL LETTER IOTA WITH STROKE;Ll;0;L;;;;;N;;;;;
+1D7D;LATIN SMALL LETTER P WITH STROKE;Ll;0;L;;;;;N;;;;;
+1D7E;LATIN SMALL CAPITAL LETTER U WITH STROKE;Ll;0;L;;;;;N;;;;;
+1D7F;LATIN SMALL LETTER UPSILON WITH STROKE;Ll;0;L;;;;;N;;;;;
+1D80;LATIN SMALL LETTER B WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D81;LATIN SMALL LETTER D WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D82;LATIN SMALL LETTER F WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D83;LATIN SMALL LETTER G WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D84;LATIN SMALL LETTER K WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D85;LATIN SMALL LETTER L WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D86;LATIN SMALL LETTER M WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D87;LATIN SMALL LETTER N WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D88;LATIN SMALL LETTER P WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D89;LATIN SMALL LETTER R WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D8A;LATIN SMALL LETTER S WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D8B;LATIN SMALL LETTER ESH WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D8C;LATIN SMALL LETTER V WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D8D;LATIN SMALL LETTER X WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D8E;LATIN SMALL LETTER Z WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D8F;LATIN SMALL LETTER A WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1D90;LATIN SMALL LETTER ALPHA WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1D91;LATIN SMALL LETTER D WITH HOOK AND TAIL;Ll;0;L;;;;;N;;;;;
+1D92;LATIN SMALL LETTER E WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1D93;LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1D94;LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1D95;LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1D96;LATIN SMALL LETTER I WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1D97;LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1D98;LATIN SMALL LETTER ESH WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1D99;LATIN SMALL LETTER U WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1D9A;LATIN SMALL LETTER EZH WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1D9B;MODIFIER LETTER SMALL TURNED ALPHA;Lm;0;L;<super> 0252;;;;N;;;;;
+1D9C;MODIFIER LETTER SMALL C;Lm;0;L;<super> 0063;;;;N;;;;;
+1D9D;MODIFIER LETTER SMALL C WITH CURL;Lm;0;L;<super> 0255;;;;N;;;;;
+1D9E;MODIFIER LETTER SMALL ETH;Lm;0;L;<super> 00F0;;;;N;;;;;
+1D9F;MODIFIER LETTER SMALL REVERSED OPEN E;Lm;0;L;<super> 025C;;;;N;;;;;
+1DA0;MODIFIER LETTER SMALL F;Lm;0;L;<super> 0066;;;;N;;;;;
+1DA1;MODIFIER LETTER SMALL DOTLESS J WITH STROKE;Lm;0;L;<super> 025F;;;;N;;;;;
+1DA2;MODIFIER LETTER SMALL SCRIPT G;Lm;0;L;<super> 0261;;;;N;;;;;
+1DA3;MODIFIER LETTER SMALL TURNED H;Lm;0;L;<super> 0265;;;;N;;;;;
+1DA4;MODIFIER LETTER SMALL I WITH STROKE;Lm;0;L;<super> 0268;;;;N;;;;;
+1DA5;MODIFIER LETTER SMALL IOTA;Lm;0;L;<super> 0269;;;;N;;;;;
+1DA6;MODIFIER LETTER SMALL CAPITAL I;Lm;0;L;<super> 026A;;;;N;;;;;
+1DA7;MODIFIER LETTER SMALL CAPITAL I WITH STROKE;Lm;0;L;<super> 1D7B;;;;N;;;;;
+1DA8;MODIFIER LETTER SMALL J WITH CROSSED-TAIL;Lm;0;L;<super> 029D;;;;N;;;;;
+1DA9;MODIFIER LETTER SMALL L WITH RETROFLEX HOOK;Lm;0;L;<super> 026D;;;;N;;;;;
+1DAA;MODIFIER LETTER SMALL L WITH PALATAL HOOK;Lm;0;L;<super> 1D85;;;;N;;;;;
+1DAB;MODIFIER LETTER SMALL CAPITAL L;Lm;0;L;<super> 029F;;;;N;;;;;
+1DAC;MODIFIER LETTER SMALL M WITH HOOK;Lm;0;L;<super> 0271;;;;N;;;;;
+1DAD;MODIFIER LETTER SMALL TURNED M WITH LONG LEG;Lm;0;L;<super> 0270;;;;N;;;;;
+1DAE;MODIFIER LETTER SMALL N WITH LEFT HOOK;Lm;0;L;<super> 0272;;;;N;;;;;
+1DAF;MODIFIER LETTER SMALL N WITH RETROFLEX HOOK;Lm;0;L;<super> 0273;;;;N;;;;;
+1DB0;MODIFIER LETTER SMALL CAPITAL N;Lm;0;L;<super> 0274;;;;N;;;;;
+1DB1;MODIFIER LETTER SMALL BARRED O;Lm;0;L;<super> 0275;;;;N;;;;;
+1DB2;MODIFIER LETTER SMALL PHI;Lm;0;L;<super> 0278;;;;N;;;;;
+1DB3;MODIFIER LETTER SMALL S WITH HOOK;Lm;0;L;<super> 0282;;;;N;;;;;
+1DB4;MODIFIER LETTER SMALL ESH;Lm;0;L;<super> 0283;;;;N;;;;;
+1DB5;MODIFIER LETTER SMALL T WITH PALATAL HOOK;Lm;0;L;<super> 01AB;;;;N;;;;;
+1DB6;MODIFIER LETTER SMALL U BAR;Lm;0;L;<super> 0289;;;;N;;;;;
+1DB7;MODIFIER LETTER SMALL UPSILON;Lm;0;L;<super> 028A;;;;N;;;;;
+1DB8;MODIFIER LETTER SMALL CAPITAL U;Lm;0;L;<super> 1D1C;;;;N;;;;;
+1DB9;MODIFIER LETTER SMALL V WITH HOOK;Lm;0;L;<super> 028B;;;;N;;;;;
+1DBA;MODIFIER LETTER SMALL TURNED V;Lm;0;L;<super> 028C;;;;N;;;;;
+1DBB;MODIFIER LETTER SMALL Z;Lm;0;L;<super> 007A;;;;N;;;;;
+1DBC;MODIFIER LETTER SMALL Z WITH RETROFLEX HOOK;Lm;0;L;<super> 0290;;;;N;;;;;
+1DBD;MODIFIER LETTER SMALL Z WITH CURL;Lm;0;L;<super> 0291;;;;N;;;;;
+1DBE;MODIFIER LETTER SMALL EZH;Lm;0;L;<super> 0292;;;;N;;;;;
+1DBF;MODIFIER LETTER SMALL THETA;Lm;0;L;<super> 03B8;;;;N;;;;;
+1DC0;COMBINING DOTTED GRAVE ACCENT;Mn;230;NSM;;;;;N;;;;;
+1DC1;COMBINING DOTTED ACUTE ACCENT;Mn;230;NSM;;;;;N;;;;;
+1DC2;COMBINING SNAKE BELOW;Mn;220;NSM;;;;;N;;;;;
+1DC3;COMBINING SUSPENSION MARK;Mn;230;NSM;;;;;N;;;;;
1E00;LATIN CAPITAL LETTER A WITH RING BELOW;Lu;0;L;0041 0325;;;;N;;;;1E01;
1E01;LATIN SMALL LETTER A WITH RING BELOW;Ll;0;L;0061 0325;;;;N;;;1E00;;1E00
1E02;LATIN CAPITAL LETTER B WITH DOT ABOVE;Lu;0;L;0042 0307;;;;N;;;;1E03;
@@ -5607,7 +5915,7 @@
202C;POP DIRECTIONAL FORMATTING;Cf;0;PDF;;;;;N;;;;;
202D;LEFT-TO-RIGHT OVERRIDE;Cf;0;LRO;;;;;N;;;;;
202E;RIGHT-TO-LEFT OVERRIDE;Cf;0;RLO;;;;;N;;;;;
-202F;NARROW NO-BREAK SPACE;Zs;0;WS;<noBreak> 0020;;;;N;;;;;
+202F;NARROW NO-BREAK SPACE;Zs;0;CS;<noBreak> 0020;;;;N;;;;;
2030;PER MILLE SIGN;Po;0;ET;;;;;N;;;;;
2031;PER TEN THOUSAND SIGN;Po;0;ET;;;;;N;;;;;
2032;PRIME;Po;0;ET;;;;;N;;;;;
@@ -5645,7 +5953,16 @@
2052;COMMERCIAL MINUS SIGN;Sm;0;ON;;;;;N;;;;;
2053;SWUNG DASH;Po;0;ON;;;;;N;;;;;
2054;INVERTED UNDERTIE;Pc;0;ON;;;;;N;;;;;
+2055;FLOWER PUNCTUATION MARK;Po;0;ON;;;;;N;;;;;
+2056;THREE DOT PUNCTUATION;Po;0;ON;;;;;N;;;;;
2057;QUADRUPLE PRIME;Po;0;ON;<compat> 2032 2032 2032 2032;;;;N;;;;;
+2058;FOUR DOT PUNCTUATION;Po;0;ON;;;;;N;;;;;
+2059;FIVE DOT PUNCTUATION;Po;0;ON;;;;;N;;;;;
+205A;TWO DOT PUNCTUATION;Po;0;ON;;;;;N;;;;;
+205B;FOUR DOT MARK;Po;0;ON;;;;;N;;;;;
+205C;DOTTED CROSS;Po;0;ON;;;;;N;;;;;
+205D;TRICOLON;Po;0;ON;;;;;N;;;;;
+205E;VERTICAL FOUR DOTS;Po;0;ON;;;;;N;;;;;
205F;MEDIUM MATHEMATICAL SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
2060;WORD JOINER;Cf;0;BN;;;;;N;;;;;
2061;FUNCTION APPLICATION;Cf;0;BN;;;;;N;;;;;
@@ -5665,8 +5982,8 @@
2077;SUPERSCRIPT SEVEN;No;0;EN;<super> 0037;;7;7;N;SUPERSCRIPT DIGIT SEVEN;;;;
2078;SUPERSCRIPT EIGHT;No;0;EN;<super> 0038;;8;8;N;SUPERSCRIPT DIGIT EIGHT;;;;
2079;SUPERSCRIPT NINE;No;0;EN;<super> 0039;;9;9;N;SUPERSCRIPT DIGIT NINE;;;;
-207A;SUPERSCRIPT PLUS SIGN;Sm;0;ET;<super> 002B;;;;N;;;;;
-207B;SUPERSCRIPT MINUS;Sm;0;ET;<super> 2212;;;;N;SUPERSCRIPT HYPHEN-MINUS;;;;
+207A;SUPERSCRIPT PLUS SIGN;Sm;0;ES;<super> 002B;;;;N;;;;;
+207B;SUPERSCRIPT MINUS;Sm;0;ES;<super> 2212;;;;N;SUPERSCRIPT HYPHEN-MINUS;;;;
207C;SUPERSCRIPT EQUALS SIGN;Sm;0;ON;<super> 003D;;;;N;;;;;
207D;SUPERSCRIPT LEFT PARENTHESIS;Ps;0;ON;<super> 0028;;;;Y;SUPERSCRIPT OPENING PARENTHESIS;;;;
207E;SUPERSCRIPT RIGHT PARENTHESIS;Pe;0;ON;<super> 0029;;;;Y;SUPERSCRIPT CLOSING PARENTHESIS;;;;
@@ -5681,11 +5998,16 @@
2087;SUBSCRIPT SEVEN;No;0;EN;<sub> 0037;;7;7;N;SUBSCRIPT DIGIT SEVEN;;;;
2088;SUBSCRIPT EIGHT;No;0;EN;<sub> 0038;;8;8;N;SUBSCRIPT DIGIT EIGHT;;;;
2089;SUBSCRIPT NINE;No;0;EN;<sub> 0039;;9;9;N;SUBSCRIPT DIGIT NINE;;;;
-208A;SUBSCRIPT PLUS SIGN;Sm;0;ET;<sub> 002B;;;;N;;;;;
-208B;SUBSCRIPT MINUS;Sm;0;ET;<sub> 2212;;;;N;SUBSCRIPT HYPHEN-MINUS;;;;
+208A;SUBSCRIPT PLUS SIGN;Sm;0;ES;<sub> 002B;;;;N;;;;;
+208B;SUBSCRIPT MINUS;Sm;0;ES;<sub> 2212;;;;N;SUBSCRIPT HYPHEN-MINUS;;;;
208C;SUBSCRIPT EQUALS SIGN;Sm;0;ON;<sub> 003D;;;;N;;;;;
208D;SUBSCRIPT LEFT PARENTHESIS;Ps;0;ON;<sub> 0028;;;;Y;SUBSCRIPT OPENING PARENTHESIS;;;;
208E;SUBSCRIPT RIGHT PARENTHESIS;Pe;0;ON;<sub> 0029;;;;Y;SUBSCRIPT CLOSING PARENTHESIS;;;;
+2090;LATIN SUBSCRIPT SMALL LETTER A;Lm;0;L;<sub> 0061;;;;N;;;;;
+2091;LATIN SUBSCRIPT SMALL LETTER E;Lm;0;L;<sub> 0065;;;;N;;;;;
+2092;LATIN SUBSCRIPT SMALL LETTER O;Lm;0;L;<sub> 006F;;;;N;;;;;
+2093;LATIN SUBSCRIPT SMALL LETTER X;Lm;0;L;<sub> 0078;;;;N;;;;;
+2094;LATIN SUBSCRIPT SMALL LETTER SCHWA;Lm;0;L;<sub> 0259;;;;N;;;;;
20A0;EURO-CURRENCY SIGN;Sc;0;ET;;;;;N;;;;;
20A1;COLON SIGN;Sc;0;ET;;;;;N;;;;;
20A2;CRUZEIRO SIGN;Sc;0;ET;;;;;N;;;;;
@@ -5704,6 +6026,10 @@
20AF;DRACHMA SIGN;Sc;0;ET;;;;;N;;;;;
20B0;GERMAN PENNY SIGN;Sc;0;ET;;;;;N;;;;;
20B1;PESO SIGN;Sc;0;ET;;;;;N;;;;;
+20B2;GUARANI SIGN;Sc;0;ET;;;;;N;;;;;
+20B3;AUSTRAL SIGN;Sc;0;ET;;;;;N;;;;;
+20B4;HRYVNIA SIGN;Sc;0;ET;;;;;N;;;;;
+20B5;CEDI SIGN;Sc;0;ET;;;;;N;;;;;
20D0;COMBINING LEFT HARPOON ABOVE;Mn;230;NSM;;;;;N;NON-SPACING LEFT HARPOON ABOVE;;;;
20D1;COMBINING RIGHT HARPOON ABOVE;Mn;230;NSM;;;;;N;NON-SPACING RIGHT HARPOON ABOVE;;;;
20D2;COMBINING LONG VERTICAL LINE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING LONG VERTICAL BAR OVERLAY;;;;
@@ -5731,6 +6057,7 @@
20E8;COMBINING TRIPLE UNDERDOT;Mn;220;NSM;;;;;N;;;;;
20E9;COMBINING WIDE BRIDGE ABOVE;Mn;230;NSM;;;;;N;;;;;
20EA;COMBINING LEFTWARDS ARROW OVERLAY;Mn;1;NSM;;;;;N;;;;;
+20EB;COMBINING LONG DOUBLE SOLIDUS OVERLAY;Mn;1;NSM;;;;;N;;;;;
2100;ACCOUNT OF;So;0;ON;<compat> 0061 002F 0063;;;;N;;;;;
2101;ADDRESSED TO THE SUBJECT;So;0;ON;<compat> 0061 002F 0073;;;;N;;;;;
2102;DOUBLE-STRUCK CAPITAL C;Lu;0;L;<font> 0043;;;;N;DOUBLE-STRUCK C;;;;
@@ -5791,6 +6118,7 @@
2139;INFORMATION SOURCE;Ll;0;L;<font> 0069;;;;N;;;;;
213A;ROTATED CAPITAL Q;So;0;ON;;;;;N;;;;;
213B;FACSIMILE SIGN;So;0;ON;<compat> 0046 0041 0058;;;;N;;;;;
+213C;DOUBLE-STRUCK SMALL PI;Ll;0;L;<font> 03C0;;;;N;;;;;
213D;DOUBLE-STRUCK SMALL GAMMA;Ll;0;L;<font> 03B3;;;;N;;;;;
213E;DOUBLE-STRUCK CAPITAL GAMMA;Lu;0;L;<font> 0393;;;;N;;;;;
213F;DOUBLE-STRUCK CAPITAL PI;Lu;0;L;<font> 03A0;;;;N;;;;;
@@ -5806,6 +6134,7 @@
2149;DOUBLE-STRUCK ITALIC SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;
214A;PROPERTY LINE;So;0;ON;;;;;N;;;;;
214B;TURNED AMPERSAND;Sm;0;ON;;;;;N;;;;;
+214C;PER SIGN;So;0;ON;;;;;N;;;;;
2153;VULGAR FRACTION ONE THIRD;No;0;ON;<fraction> 0031 2044 0033;;;1/3;N;FRACTION ONE THIRD;;;;
2154;VULGAR FRACTION TWO THIRDS;No;0;ON;<fraction> 0032 2044 0033;;;2/3;N;FRACTION TWO THIRDS;;;;
2155;VULGAR FRACTION ONE FIFTH;No;0;ON;<fraction> 0031 2044 0035;;;1/5;N;FRACTION ONE FIFTH;;;;
@@ -5985,7 +6314,7 @@
220F;N-ARY PRODUCT;Sm;0;ON;;;;;N;;;;;
2210;N-ARY COPRODUCT;Sm;0;ON;;;;;N;;;;;
2211;N-ARY SUMMATION;Sm;0;ON;;;;;Y;;;;;
-2212;MINUS SIGN;Sm;0;ET;;;;;N;;;;;
+2212;MINUS SIGN;Sm;0;ES;;;;;N;;;;;
2213;MINUS-OR-PLUS SIGN;Sm;0;ET;;;;;N;;;;;
2214;DOT PLUS;Sm;0;ON;;;;;N;;;;;
2215;DIVISION SLASH;Sm;0;ON;;;;;Y;;;;;
@@ -6432,6 +6761,17 @@
23CE;RETURN SYMBOL;So;0;ON;;;;;N;;;;;
23CF;EJECT SYMBOL;So;0;ON;;;;;N;;;;;
23D0;VERTICAL LINE EXTENSION;So;0;ON;;;;;N;;;;;
+23D1;METRICAL BREVE;So;0;ON;;;;;N;;;;;
+23D2;METRICAL LONG OVER SHORT;So;0;ON;;;;;N;;;;;
+23D3;METRICAL SHORT OVER LONG;So;0;ON;;;;;N;;;;;
+23D4;METRICAL LONG OVER TWO SHORTS;So;0;ON;;;;;N;;;;;
+23D5;METRICAL TWO SHORTS OVER LONG;So;0;ON;;;;;N;;;;;
+23D6;METRICAL TWO SHORTS JOINED;So;0;ON;;;;;N;;;;;
+23D7;METRICAL TRISEME;So;0;ON;;;;;N;;;;;
+23D8;METRICAL TETRASEME;So;0;ON;;;;;N;;;;;
+23D9;METRICAL PENTASEME;So;0;ON;;;;;N;;;;;
+23DA;EARTH GROUND;So;0;ON;;;;;N;;;;;
+23DB;FUSE;So;0;ON;;;;;N;;;;;
2400;SYMBOL FOR NULL;So;0;ON;;;;;N;GRAPHIC FOR NULL;;;;
2401;SYMBOL FOR START OF HEADING;So;0;ON;;;;;N;GRAPHIC FOR START OF HEADING;;;;
2402;SYMBOL FOR START OF TEXT;So;0;ON;;;;;N;GRAPHIC FOR START OF TEXT;;;;
@@ -6922,6 +7262,7 @@
2615;HOT BEVERAGE;So;0;ON;;;;;N;;;;;
2616;WHITE SHOGI PIECE;So;0;ON;;;;;N;;;;;
2617;BLACK SHOGI PIECE;So;0;ON;;;;;N;;;;;
+2618;SHAMROCK;So;0;ON;;;;;N;;;;;
2619;REVERSED ROTATED FLORAL HEART BULLET;So;0;ON;;;;;N;;;;;
261A;BLACK LEFT POINTING INDEX;So;0;ON;;;;;N;;;;;
261B;BLACK RIGHT POINTING INDEX;So;0;ON;;;;;N;;;;;
@@ -7023,6 +7364,8 @@
267B;BLACK UNIVERSAL RECYCLING SYMBOL;So;0;ON;;;;;N;;;;;
267C;RECYCLED PAPER SYMBOL;So;0;ON;;;;;N;;;;;
267D;PARTIALLY-RECYCLED PAPER SYMBOL;So;0;ON;;;;;N;;;;;
+267E;PERMANENT PAPER SIGN;So;0;ON;;;;;N;;;;;
+267F;WHEELCHAIR SYMBOL;So;0;ON;;;;;N;;;;;
2680;DIE FACE-1;So;0;ON;;;;;N;;;;;
2681;DIE FACE-2;So;0;ON;;;;;N;;;;;
2682;DIE FACE-3;So;0;ON;;;;;N;;;;;
@@ -7041,8 +7384,35 @@
268F;DIGRAM FOR GREATER YIN;So;0;ON;;;;;N;;;;;
2690;WHITE FLAG;So;0;ON;;;;;N;;;;;
2691;BLACK FLAG;So;0;ON;;;;;N;;;;;
+2692;HAMMER AND PICK;So;0;ON;;;;;N;;;;;
+2693;ANCHOR;So;0;ON;;;;;N;;;;;
+2694;CROSSED SWORDS;So;0;ON;;;;;N;;;;;
+2695;STAFF OF AESCULAPIUS;So;0;ON;;;;;N;;;;;
+2696;SCALES;So;0;ON;;;;;N;;;;;
+2697;ALEMBIC;So;0;ON;;;;;N;;;;;
+2698;FLOWER;So;0;ON;;;;;N;;;;;
+2699;GEAR;So;0;ON;;;;;N;;;;;
+269A;STAFF OF HERMES;So;0;ON;;;;;N;;;;;
+269B;ATOM SYMBOL;So;0;ON;;;;;N;;;;;
+269C;FLEUR-DE-LIS;So;0;ON;;;;;N;;;;;
26A0;WARNING SIGN;So;0;ON;;;;;N;;;;;
26A1;HIGH VOLTAGE SIGN;So;0;ON;;;;;N;;;;;
+26A2;DOUBLED FEMALE SIGN;So;0;ON;;;;;N;;;;;
+26A3;DOUBLED MALE SIGN;So;0;ON;;;;;N;;;;;
+26A4;INTERLOCKED FEMALE AND MALE SIGN;So;0;ON;;;;;N;;;;;
+26A5;MALE AND FEMALE SIGN;So;0;ON;;;;;N;;;;;
+26A6;MALE WITH STROKE SIGN;So;0;ON;;;;;N;;;;;
+26A7;MALE WITH STROKE AND MALE AND FEMALE SIGN;So;0;ON;;;;;N;;;;;
+26A8;VERTICAL MALE WITH STROKE SIGN;So;0;ON;;;;;N;;;;;
+26A9;HORIZONTAL MALE WITH STROKE SIGN;So;0;ON;;;;;N;;;;;
+26AA;MEDIUM WHITE CIRCLE;So;0;ON;;;;;N;;;;;
+26AB;MEDIUM BLACK CIRCLE;So;0;ON;;;;;N;;;;;
+26AC;MEDIUM SMALL WHITE CIRCLE;So;0;L;;;;;N;;;;;
+26AD;MARRIAGE SYMBOL;So;0;ON;;;;;N;;;;;
+26AE;DIVORCE SYMBOL;So;0;ON;;;;;N;;;;;
+26AF;UNMARRIED PARTNERSHIP SYMBOL;So;0;ON;;;;;N;;;;;
+26B0;COFFIN;So;0;ON;;;;;N;;;;;
+26B1;FUNERAL URN;So;0;ON;;;;;N;;;;;
2701;UPPER BLADE SCISSORS;So;0;ON;;;;;N;;;;;
2702;BLACK SCISSORS;So;0;ON;;;;;N;;;;;
2703;LOWER BLADE SCISSORS;So;0;ON;;;;;N;;;;;
@@ -7217,6 +7587,13 @@
27BC;WEDGE-TAILED RIGHTWARDS ARROW;So;0;ON;;;;;N;WEDGE-TAILED RIGHT ARROW;;;;
27BD;HEAVY WEDGE-TAILED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY WEDGE-TAILED RIGHT ARROW;;;;
27BE;OPEN-OUTLINED RIGHTWARDS ARROW;So;0;ON;;;;;N;OPEN-OUTLINED RIGHT ARROW;;;;
+27C0;THREE DIMENSIONAL ANGLE;Sm;0;ON;;;;;Y;;;;;
+27C1;WHITE TRIANGLE CONTAINING SMALL WHITE TRIANGLE;Sm;0;ON;;;;;N;;;;;
+27C2;PERPENDICULAR;Sm;0;ON;;;;;N;;;;;
+27C3;OPEN SUBSET;Sm;0;ON;;;;;Y;;;;;
+27C4;OPEN SUPERSET;Sm;0;ON;;;;;Y;;;;;
+27C5;LEFT S-SHAPED BAG DELIMITER;Ps;0;ON;;;;;Y;;;;;
+27C6;RIGHT S-SHAPED BAG DELIMITER;Pe;0;ON;;;;;Y;;;;;
27D0;WHITE DIAMOND WITH CENTRED DOT;Sm;0;ON;;;;;N;;;;;
27D1;AND WITH DOT;Sm;0;ON;;;;;N;;;;;
27D2;ELEMENT OF OPENING UPWARDS;Sm;0;ON;;;;;N;;;;;
@@ -8043,6 +8420,418 @@
2B0B;SOUTH WEST BLACK ARROW;So;0;ON;;;;;N;;;;;
2B0C;LEFT RIGHT BLACK ARROW;So;0;ON;;;;;N;;;;;
2B0D;UP DOWN BLACK ARROW;So;0;ON;;;;;N;;;;;
+2B0E;RIGHTWARDS ARROW WITH TIP DOWNWARDS;So;0;ON;;;;;N;;;;;
+2B0F;RIGHTWARDS ARROW WITH TIP UPWARDS;So;0;ON;;;;;N;;;;;
+2B10;LEFTWARDS ARROW WITH TIP DOWNWARDS;So;0;ON;;;;;N;;;;;
+2B11;LEFTWARDS ARROW WITH TIP UPWARDS;So;0;ON;;;;;N;;;;;
+2B12;SQUARE WITH TOP HALF BLACK;So;0;ON;;;;;N;;;;;
+2B13;SQUARE WITH BOTTOM HALF BLACK;So;0;ON;;;;;N;;;;;
+2C00;GLAGOLITIC CAPITAL LETTER AZU;Lu;0;L;;;;;N;;;;2C30;
+2C01;GLAGOLITIC CAPITAL LETTER BUKY;Lu;0;L;;;;;N;;;;2C31;
+2C02;GLAGOLITIC CAPITAL LETTER VEDE;Lu;0;L;;;;;N;;;;2C32;
+2C03;GLAGOLITIC CAPITAL LETTER GLAGOLI;Lu;0;L;;;;;N;;;;2C33;
+2C04;GLAGOLITIC CAPITAL LETTER DOBRO;Lu;0;L;;;;;N;;;;2C34;
+2C05;GLAGOLITIC CAPITAL LETTER YESTU;Lu;0;L;;;;;N;;;;2C35;
+2C06;GLAGOLITIC CAPITAL LETTER ZHIVETE;Lu;0;L;;;;;N;;;;2C36;
+2C07;GLAGOLITIC CAPITAL LETTER DZELO;Lu;0;L;;;;;N;;;;2C37;
+2C08;GLAGOLITIC CAPITAL LETTER ZEMLJA;Lu;0;L;;;;;N;;;;2C38;
+2C09;GLAGOLITIC CAPITAL LETTER IZHE;Lu;0;L;;;;;N;;;;2C39;
+2C0A;GLAGOLITIC CAPITAL LETTER INITIAL IZHE;Lu;0;L;;;;;N;;;;2C3A;
+2C0B;GLAGOLITIC CAPITAL LETTER I;Lu;0;L;;;;;N;;;;2C3B;
+2C0C;GLAGOLITIC CAPITAL LETTER DJERVI;Lu;0;L;;;;;N;;;;2C3C;
+2C0D;GLAGOLITIC CAPITAL LETTER KAKO;Lu;0;L;;;;;N;;;;2C3D;
+2C0E;GLAGOLITIC CAPITAL LETTER LJUDIJE;Lu;0;L;;;;;N;;;;2C3E;
+2C0F;GLAGOLITIC CAPITAL LETTER MYSLITE;Lu;0;L;;;;;N;;;;2C3F;
+2C10;GLAGOLITIC CAPITAL LETTER NASHI;Lu;0;L;;;;;N;;;;2C40;
+2C11;GLAGOLITIC CAPITAL LETTER ONU;Lu;0;L;;;;;N;;;;2C41;
+2C12;GLAGOLITIC CAPITAL LETTER POKOJI;Lu;0;L;;;;;N;;;;2C42;
+2C13;GLAGOLITIC CAPITAL LETTER RITSI;Lu;0;L;;;;;N;;;;2C43;
+2C14;GLAGOLITIC CAPITAL LETTER SLOVO;Lu;0;L;;;;;N;;;;2C44;
+2C15;GLAGOLITIC CAPITAL LETTER TVRIDO;Lu;0;L;;;;;N;;;;2C45;
+2C16;GLAGOLITIC CAPITAL LETTER UKU;Lu;0;L;;;;;N;;;;2C46;
+2C17;GLAGOLITIC CAPITAL LETTER FRITU;Lu;0;L;;;;;N;;;;2C47;
+2C18;GLAGOLITIC CAPITAL LETTER HERU;Lu;0;L;;;;;N;;;;2C48;
+2C19;GLAGOLITIC CAPITAL LETTER OTU;Lu;0;L;;;;;N;;;;2C49;
+2C1A;GLAGOLITIC CAPITAL LETTER PE;Lu;0;L;;;;;N;;;;2C4A;
+2C1B;GLAGOLITIC CAPITAL LETTER SHTA;Lu;0;L;;;;;N;;;;2C4B;
+2C1C;GLAGOLITIC CAPITAL LETTER TSI;Lu;0;L;;;;;N;;;;2C4C;
+2C1D;GLAGOLITIC CAPITAL LETTER CHRIVI;Lu;0;L;;;;;N;;;;2C4D;
+2C1E;GLAGOLITIC CAPITAL LETTER SHA;Lu;0;L;;;;;N;;;;2C4E;
+2C1F;GLAGOLITIC CAPITAL LETTER YERU;Lu;0;L;;;;;N;;;;2C4F;
+2C20;GLAGOLITIC CAPITAL LETTER YERI;Lu;0;L;;;;;N;;;;2C50;
+2C21;GLAGOLITIC CAPITAL LETTER YATI;Lu;0;L;;;;;N;;;;2C51;
+2C22;GLAGOLITIC CAPITAL LETTER SPIDERY HA;Lu;0;L;;;;;N;;;;2C52;
+2C23;GLAGOLITIC CAPITAL LETTER YU;Lu;0;L;;;;;N;;;;2C53;
+2C24;GLAGOLITIC CAPITAL LETTER SMALL YUS;Lu;0;L;;;;;N;;;;2C54;
+2C25;GLAGOLITIC CAPITAL LETTER SMALL YUS WITH TAIL;Lu;0;L;;;;;N;;;;2C55;
+2C26;GLAGOLITIC CAPITAL LETTER YO;Lu;0;L;;;;;N;;;;2C56;
+2C27;GLAGOLITIC CAPITAL LETTER IOTATED SMALL YUS;Lu;0;L;;;;;N;;;;2C57;
+2C28;GLAGOLITIC CAPITAL LETTER BIG YUS;Lu;0;L;;;;;N;;;;2C58;
+2C29;GLAGOLITIC CAPITAL LETTER IOTATED BIG YUS;Lu;0;L;;;;;N;;;;2C59;
+2C2A;GLAGOLITIC CAPITAL LETTER FITA;Lu;0;L;;;;;N;;;;2C5A;
+2C2B;GLAGOLITIC CAPITAL LETTER IZHITSA;Lu;0;L;;;;;N;;;;2C5B;
+2C2C;GLAGOLITIC CAPITAL LETTER SHTAPIC;Lu;0;L;;;;;N;;;;2C5C;
+2C2D;GLAGOLITIC CAPITAL LETTER TROKUTASTI A;Lu;0;L;;;;;N;;;;2C5D;
+2C2E;GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE;Lu;0;L;;;;;N;;;;2C5E;
+2C30;GLAGOLITIC SMALL LETTER AZU;Ll;0;L;;;;;N;;;2C00;;2C00
+2C31;GLAGOLITIC SMALL LETTER BUKY;Ll;0;L;;;;;N;;;2C01;;2C01
+2C32;GLAGOLITIC SMALL LETTER VEDE;Ll;0;L;;;;;N;;;2C02;;2C02
+2C33;GLAGOLITIC SMALL LETTER GLAGOLI;Ll;0;L;;;;;N;;;2C03;;2C03
+2C34;GLAGOLITIC SMALL LETTER DOBRO;Ll;0;L;;;;;N;;;2C04;;2C04
+2C35;GLAGOLITIC SMALL LETTER YESTU;Ll;0;L;;;;;N;;;2C05;;2C05
+2C36;GLAGOLITIC SMALL LETTER ZHIVETE;Ll;0;L;;;;;N;;;2C06;;2C06
+2C37;GLAGOLITIC SMALL LETTER DZELO;Ll;0;L;;;;;N;;;2C07;;2C07
+2C38;GLAGOLITIC SMALL LETTER ZEMLJA;Ll;0;L;;;;;N;;;2C08;;2C08
+2C39;GLAGOLITIC SMALL LETTER IZHE;Ll;0;L;;;;;N;;;2C09;;2C09
+2C3A;GLAGOLITIC SMALL LETTER INITIAL IZHE;Ll;0;L;;;;;N;;;2C0A;;2C0A
+2C3B;GLAGOLITIC SMALL LETTER I;Ll;0;L;;;;;N;;;2C0B;;2C0B
+2C3C;GLAGOLITIC SMALL LETTER DJERVI;Ll;0;L;;;;;N;;;2C0C;;2C0C
+2C3D;GLAGOLITIC SMALL LETTER KAKO;Ll;0;L;;;;;N;;;2C0D;;2C0D
+2C3E;GLAGOLITIC SMALL LETTER LJUDIJE;Ll;0;L;;;;;N;;;2C0E;;2C0E
+2C3F;GLAGOLITIC SMALL LETTER MYSLITE;Ll;0;L;;;;;N;;;2C0F;;2C0F
+2C40;GLAGOLITIC SMALL LETTER NASHI;Ll;0;L;;;;;N;;;2C10;;2C10
+2C41;GLAGOLITIC SMALL LETTER ONU;Ll;0;L;;;;;N;;;2C11;;2C11
+2C42;GLAGOLITIC SMALL LETTER POKOJI;Ll;0;L;;;;;N;;;2C12;;2C12
+2C43;GLAGOLITIC SMALL LETTER RITSI;Ll;0;L;;;;;N;;;2C13;;2C13
+2C44;GLAGOLITIC SMALL LETTER SLOVO;Ll;0;L;;;;;N;;;2C14;;2C14
+2C45;GLAGOLITIC SMALL LETTER TVRIDO;Ll;0;L;;;;;N;;;2C15;;2C15
+2C46;GLAGOLITIC SMALL LETTER UKU;Ll;0;L;;;;;N;;;2C16;;2C16
+2C47;GLAGOLITIC SMALL LETTER FRITU;Ll;0;L;;;;;N;;;2C17;;2C17
+2C48;GLAGOLITIC SMALL LETTER HERU;Ll;0;L;;;;;N;;;2C18;;2C18
+2C49;GLAGOLITIC SMALL LETTER OTU;Ll;0;L;;;;;N;;;2C19;;2C19
+2C4A;GLAGOLITIC SMALL LETTER PE;Ll;0;L;;;;;N;;;2C1A;;2C1A
+2C4B;GLAGOLITIC SMALL LETTER SHTA;Ll;0;L;;;;;N;;;2C1B;;2C1B
+2C4C;GLAGOLITIC SMALL LETTER TSI;Ll;0;L;;;;;N;;;2C1C;;2C1C
+2C4D;GLAGOLITIC SMALL LETTER CHRIVI;Ll;0;L;;;;;N;;;2C1D;;2C1D
+2C4E;GLAGOLITIC SMALL LETTER SHA;Ll;0;L;;;;;N;;;2C1E;;2C1E
+2C4F;GLAGOLITIC SMALL LETTER YERU;Ll;0;L;;;;;N;;;2C1F;;2C1F
+2C50;GLAGOLITIC SMALL LETTER YERI;Ll;0;L;;;;;N;;;2C20;;2C20
+2C51;GLAGOLITIC SMALL LETTER YATI;Ll;0;L;;;;;N;;;2C21;;2C21
+2C52;GLAGOLITIC SMALL LETTER SPIDERY HA;Ll;0;L;;;;;N;;;2C22;;2C22
+2C53;GLAGOLITIC SMALL LETTER YU;Ll;0;L;;;;;N;;;2C23;;2C23
+2C54;GLAGOLITIC SMALL LETTER SMALL YUS;Ll;0;L;;;;;N;;;2C24;;2C24
+2C55;GLAGOLITIC SMALL LETTER SMALL YUS WITH TAIL;Ll;0;L;;;;;N;;;2C25;;2C25
+2C56;GLAGOLITIC SMALL LETTER YO;Ll;0;L;;;;;N;;;2C26;;2C26
+2C57;GLAGOLITIC SMALL LETTER IOTATED SMALL YUS;Ll;0;L;;;;;N;;;2C27;;2C27
+2C58;GLAGOLITIC SMALL LETTER BIG YUS;Ll;0;L;;;;;N;;;2C28;;2C28
+2C59;GLAGOLITIC SMALL LETTER IOTATED BIG YUS;Ll;0;L;;;;;N;;;2C29;;2C29
+2C5A;GLAGOLITIC SMALL LETTER FITA;Ll;0;L;;;;;N;;;2C2A;;2C2A
+2C5B;GLAGOLITIC SMALL LETTER IZHITSA;Ll;0;L;;;;;N;;;2C2B;;2C2B
+2C5C;GLAGOLITIC SMALL LETTER SHTAPIC;Ll;0;L;;;;;N;;;2C2C;;2C2C
+2C5D;GLAGOLITIC SMALL LETTER TROKUTASTI A;Ll;0;L;;;;;N;;;2C2D;;2C2D
+2C5E;GLAGOLITIC SMALL LETTER LATINATE MYSLITE;Ll;0;L;;;;;N;;;2C2E;;2C2E
+2C80;COPTIC CAPITAL LETTER ALFA;Lu;0;L;;;;;N;;;;2C81;
+2C81;COPTIC SMALL LETTER ALFA;Ll;0;L;;;;;N;;;2C80;;2C80
+2C82;COPTIC CAPITAL LETTER VIDA;Lu;0;L;;;;;N;;;;2C83;
+2C83;COPTIC SMALL LETTER VIDA;Ll;0;L;;;;;N;;;2C82;;2C82
+2C84;COPTIC CAPITAL LETTER GAMMA;Lu;0;L;;;;;N;;;;2C85;
+2C85;COPTIC SMALL LETTER GAMMA;Ll;0;L;;;;;N;;;2C84;;2C84
+2C86;COPTIC CAPITAL LETTER DALDA;Lu;0;L;;;;;N;;;;2C87;
+2C87;COPTIC SMALL LETTER DALDA;Ll;0;L;;;;;N;;;2C86;;2C86
+2C88;COPTIC CAPITAL LETTER EIE;Lu;0;L;;;;;N;;;;2C89;
+2C89;COPTIC SMALL LETTER EIE;Ll;0;L;;;;;N;;;2C88;;2C88
+2C8A;COPTIC CAPITAL LETTER SOU;Lu;0;L;;;;;N;;;;2C8B;
+2C8B;COPTIC SMALL LETTER SOU;Ll;0;L;;;;;N;;;2C8A;;2C8A
+2C8C;COPTIC CAPITAL LETTER ZATA;Lu;0;L;;;;;N;;;;2C8D;
+2C8D;COPTIC SMALL LETTER ZATA;Ll;0;L;;;;;N;;;2C8C;;2C8C
+2C8E;COPTIC CAPITAL LETTER HATE;Lu;0;L;;;;;N;;;;2C8F;
+2C8F;COPTIC SMALL LETTER HATE;Ll;0;L;;;;;N;;;2C8E;;2C8E
+2C90;COPTIC CAPITAL LETTER THETHE;Lu;0;L;;;;;N;;;;2C91;
+2C91;COPTIC SMALL LETTER THETHE;Ll;0;L;;;;;N;;;2C90;;2C90
+2C92;COPTIC CAPITAL LETTER IAUDA;Lu;0;L;;;;;N;;;;2C93;
+2C93;COPTIC SMALL LETTER IAUDA;Ll;0;L;;;;;N;;;2C92;;2C92
+2C94;COPTIC CAPITAL LETTER KAPA;Lu;0;L;;;;;N;;;;2C95;
+2C95;COPTIC SMALL LETTER KAPA;Ll;0;L;;;;;N;;;2C94;;2C94
+2C96;COPTIC CAPITAL LETTER LAULA;Lu;0;L;;;;;N;;;;2C97;
+2C97;COPTIC SMALL LETTER LAULA;Ll;0;L;;;;;N;;;2C96;;2C96
+2C98;COPTIC CAPITAL LETTER MI;Lu;0;L;;;;;N;;;;2C99;
+2C99;COPTIC SMALL LETTER MI;Ll;0;L;;;;;N;;;2C98;;2C98
+2C9A;COPTIC CAPITAL LETTER NI;Lu;0;L;;;;;N;;;;2C9B;
+2C9B;COPTIC SMALL LETTER NI;Ll;0;L;;;;;N;;;2C9A;;2C9A
+2C9C;COPTIC CAPITAL LETTER KSI;Lu;0;L;;;;;N;;;;2C9D;
+2C9D;COPTIC SMALL LETTER KSI;Ll;0;L;;;;;N;;;2C9C;;2C9C
+2C9E;COPTIC CAPITAL LETTER O;Lu;0;L;;;;;N;;;;2C9F;
+2C9F;COPTIC SMALL LETTER O;Ll;0;L;;;;;N;;;2C9E;;2C9E
+2CA0;COPTIC CAPITAL LETTER PI;Lu;0;L;;;;;N;;;;2CA1;
+2CA1;COPTIC SMALL LETTER PI;Ll;0;L;;;;;N;;;2CA0;;2CA0
+2CA2;COPTIC CAPITAL LETTER RO;Lu;0;L;;;;;N;;;;2CA3;
+2CA3;COPTIC SMALL LETTER RO;Ll;0;L;;;;;N;;;2CA2;;2CA2
+2CA4;COPTIC CAPITAL LETTER SIMA;Lu;0;L;;;;;N;;;;2CA5;
+2CA5;COPTIC SMALL LETTER SIMA;Ll;0;L;;;;;N;;;2CA4;;2CA4
+2CA6;COPTIC CAPITAL LETTER TAU;Lu;0;L;;;;;N;;;;2CA7;
+2CA7;COPTIC SMALL LETTER TAU;Ll;0;L;;;;;N;;;2CA6;;2CA6
+2CA8;COPTIC CAPITAL LETTER UA;Lu;0;L;;;;;N;;;;2CA9;
+2CA9;COPTIC SMALL LETTER UA;Ll;0;L;;;;;N;;;2CA8;;2CA8
+2CAA;COPTIC CAPITAL LETTER FI;Lu;0;L;;;;;N;;;;2CAB;
+2CAB;COPTIC SMALL LETTER FI;Ll;0;L;;;;;N;;;2CAA;;2CAA
+2CAC;COPTIC CAPITAL LETTER KHI;Lu;0;L;;;;;N;;;;2CAD;
+2CAD;COPTIC SMALL LETTER KHI;Ll;0;L;;;;;N;;;2CAC;;2CAC
+2CAE;COPTIC CAPITAL LETTER PSI;Lu;0;L;;;;;N;;;;2CAF;
+2CAF;COPTIC SMALL LETTER PSI;Ll;0;L;;;;;N;;;2CAE;;2CAE
+2CB0;COPTIC CAPITAL LETTER OOU;Lu;0;L;;;;;N;;;;2CB1;
+2CB1;COPTIC SMALL LETTER OOU;Ll;0;L;;;;;N;;;2CB0;;2CB0
+2CB2;COPTIC CAPITAL LETTER DIALECT-P ALEF;Lu;0;L;;;;;N;;;;2CB3;
+2CB3;COPTIC SMALL LETTER DIALECT-P ALEF;Ll;0;L;;;;;N;;;2CB2;;2CB2
+2CB4;COPTIC CAPITAL LETTER OLD COPTIC AIN;Lu;0;L;;;;;N;;;;2CB5;
+2CB5;COPTIC SMALL LETTER OLD COPTIC AIN;Ll;0;L;;;;;N;;;2CB4;;2CB4
+2CB6;COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE;Lu;0;L;;;;;N;;;;2CB7;
+2CB7;COPTIC SMALL LETTER CRYPTOGRAMMIC EIE;Ll;0;L;;;;;N;;;2CB6;;2CB6
+2CB8;COPTIC CAPITAL LETTER DIALECT-P KAPA;Lu;0;L;;;;;N;;;;2CB9;
+2CB9;COPTIC SMALL LETTER DIALECT-P KAPA;Ll;0;L;;;;;N;;;2CB8;;2CB8
+2CBA;COPTIC CAPITAL LETTER DIALECT-P NI;Lu;0;L;;;;;N;;;;2CBB;
+2CBB;COPTIC SMALL LETTER DIALECT-P NI;Ll;0;L;;;;;N;;;2CBA;;2CBA
+2CBC;COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI;Lu;0;L;;;;;N;;;;2CBD;
+2CBD;COPTIC SMALL LETTER CRYPTOGRAMMIC NI;Ll;0;L;;;;;N;;;2CBC;;2CBC
+2CBE;COPTIC CAPITAL LETTER OLD COPTIC OOU;Lu;0;L;;;;;N;;;;2CBF;
+2CBF;COPTIC SMALL LETTER OLD COPTIC OOU;Ll;0;L;;;;;N;;;2CBE;;2CBE
+2CC0;COPTIC CAPITAL LETTER SAMPI;Lu;0;L;;;;;N;;;;2CC1;
+2CC1;COPTIC SMALL LETTER SAMPI;Ll;0;L;;;;;N;;;2CC0;;2CC0
+2CC2;COPTIC CAPITAL LETTER CROSSED SHEI;Lu;0;L;;;;;N;;;;2CC3;
+2CC3;COPTIC SMALL LETTER CROSSED SHEI;Ll;0;L;;;;;N;;;2CC2;;2CC2
+2CC4;COPTIC CAPITAL LETTER OLD COPTIC SHEI;Lu;0;L;;;;;N;;;;2CC5;
+2CC5;COPTIC SMALL LETTER OLD COPTIC SHEI;Ll;0;L;;;;;N;;;2CC4;;2CC4
+2CC6;COPTIC CAPITAL LETTER OLD COPTIC ESH;Lu;0;L;;;;;N;;;;2CC7;
+2CC7;COPTIC SMALL LETTER OLD COPTIC ESH;Ll;0;L;;;;;N;;;2CC6;;2CC6
+2CC8;COPTIC CAPITAL LETTER AKHMIMIC KHEI;Lu;0;L;;;;;N;;;;2CC9;
+2CC9;COPTIC SMALL LETTER AKHMIMIC KHEI;Ll;0;L;;;;;N;;;2CC8;;2CC8
+2CCA;COPTIC CAPITAL LETTER DIALECT-P HORI;Lu;0;L;;;;;N;;;;2CCB;
+2CCB;COPTIC SMALL LETTER DIALECT-P HORI;Ll;0;L;;;;;N;;;2CCA;;2CCA
+2CCC;COPTIC CAPITAL LETTER OLD COPTIC HORI;Lu;0;L;;;;;N;;;;2CCD;
+2CCD;COPTIC SMALL LETTER OLD COPTIC HORI;Ll;0;L;;;;;N;;;2CCC;;2CCC
+2CCE;COPTIC CAPITAL LETTER OLD COPTIC HA;Lu;0;L;;;;;N;;;;2CCF;
+2CCF;COPTIC SMALL LETTER OLD COPTIC HA;Ll;0;L;;;;;N;;;2CCE;;2CCE
+2CD0;COPTIC CAPITAL LETTER L-SHAPED HA;Lu;0;L;;;;;N;;;;2CD1;
+2CD1;COPTIC SMALL LETTER L-SHAPED HA;Ll;0;L;;;;;N;;;2CD0;;2CD0
+2CD2;COPTIC CAPITAL LETTER OLD COPTIC HEI;Lu;0;L;;;;;N;;;;2CD3;
+2CD3;COPTIC SMALL LETTER OLD COPTIC HEI;Ll;0;L;;;;;N;;;2CD2;;2CD2
+2CD4;COPTIC CAPITAL LETTER OLD COPTIC HAT;Lu;0;L;;;;;N;;;;2CD5;
+2CD5;COPTIC SMALL LETTER OLD COPTIC HAT;Ll;0;L;;;;;N;;;2CD4;;2CD4
+2CD6;COPTIC CAPITAL LETTER OLD COPTIC GANGIA;Lu;0;L;;;;;N;;;;2CD7;
+2CD7;COPTIC SMALL LETTER OLD COPTIC GANGIA;Ll;0;L;;;;;N;;;2CD6;;2CD6
+2CD8;COPTIC CAPITAL LETTER OLD COPTIC DJA;Lu;0;L;;;;;N;;;;2CD9;
+2CD9;COPTIC SMALL LETTER OLD COPTIC DJA;Ll;0;L;;;;;N;;;2CD8;;2CD8
+2CDA;COPTIC CAPITAL LETTER OLD COPTIC SHIMA;Lu;0;L;;;;;N;;;;2CDB;
+2CDB;COPTIC SMALL LETTER OLD COPTIC SHIMA;Ll;0;L;;;;;N;;;2CDA;;2CDA
+2CDC;COPTIC CAPITAL LETTER OLD NUBIAN SHIMA;Lu;0;L;;;;;N;;;;2CDD;
+2CDD;COPTIC SMALL LETTER OLD NUBIAN SHIMA;Ll;0;L;;;;;N;;;2CDC;;2CDC
+2CDE;COPTIC CAPITAL LETTER OLD NUBIAN NGI;Lu;0;L;;;;;N;;;;2CDF;
+2CDF;COPTIC SMALL LETTER OLD NUBIAN NGI;Ll;0;L;;;;;N;;;2CDE;;2CDE
+2CE0;COPTIC CAPITAL LETTER OLD NUBIAN NYI;Lu;0;L;;;;;N;;;;2CE1;
+2CE1;COPTIC SMALL LETTER OLD NUBIAN NYI;Ll;0;L;;;;;N;;;2CE0;;2CE0
+2CE2;COPTIC CAPITAL LETTER OLD NUBIAN WAU;Lu;0;L;;;;;N;;;;2CE3;
+2CE3;COPTIC SMALL LETTER OLD NUBIAN WAU;Ll;0;L;;;;;N;;;2CE2;;2CE2
+2CE4;COPTIC SYMBOL KAI;Ll;0;L;;;;;N;;;;;
+2CE5;COPTIC SYMBOL MI RO;So;0;ON;;;;;N;;;;;
+2CE6;COPTIC SYMBOL PI RO;So;0;ON;;;;;N;;;;;
+2CE7;COPTIC SYMBOL STAUROS;So;0;ON;;;;;N;;;;;
+2CE8;COPTIC SYMBOL TAU RO;So;0;ON;;;;;N;;;;;
+2CE9;COPTIC SYMBOL KHI RO;So;0;ON;;;;;N;;;;;
+2CEA;COPTIC SYMBOL SHIMA SIMA;So;0;ON;;;;;N;;;;;
+2CF9;COPTIC OLD NUBIAN FULL STOP;Po;0;ON;;;;;N;;;;;
+2CFA;COPTIC OLD NUBIAN DIRECT QUESTION MARK;Po;0;ON;;;;;N;;;;;
+2CFB;COPTIC OLD NUBIAN INDIRECT QUESTION MARK;Po;0;ON;;;;;N;;;;;
+2CFC;COPTIC OLD NUBIAN VERSE DIVIDER;Po;0;ON;;;;;N;;;;;
+2CFD;COPTIC FRACTION ONE HALF;No;0;ON;;;;1/2;N;;;;;
+2CFE;COPTIC FULL STOP;Po;0;ON;;;;;N;;;;;
+2CFF;COPTIC MORPHOLOGICAL DIVIDER;Po;0;ON;;;;;N;;;;;
+2D00;GEORGIAN SMALL LETTER AN;Ll;0;L;;;;;N;;Khutsuri;10A0;;10A0
+2D01;GEORGIAN SMALL LETTER BAN;Ll;0;L;;;;;N;;Khutsuri;10A1;;10A1
+2D02;GEORGIAN SMALL LETTER GAN;Ll;0;L;;;;;N;;Khutsuri;10A2;;10A2
+2D03;GEORGIAN SMALL LETTER DON;Ll;0;L;;;;;N;;Khutsuri;10A3;;10A3
+2D04;GEORGIAN SMALL LETTER EN;Ll;0;L;;;;;N;;Khutsuri;10A4;;10A4
+2D05;GEORGIAN SMALL LETTER VIN;Ll;0;L;;;;;N;;Khutsuri;10A5;;10A5
+2D06;GEORGIAN SMALL LETTER ZEN;Ll;0;L;;;;;N;;Khutsuri;10A6;;10A6
+2D07;GEORGIAN SMALL LETTER TAN;Ll;0;L;;;;;N;;Khutsuri;10A7;;10A7
+2D08;GEORGIAN SMALL LETTER IN;Ll;0;L;;;;;N;;Khutsuri;10A8;;10A8
+2D09;GEORGIAN SMALL LETTER KAN;Ll;0;L;;;;;N;;Khutsuri;10A9;;10A9
+2D0A;GEORGIAN SMALL LETTER LAS;Ll;0;L;;;;;N;;Khutsuri;10AA;;10AA
+2D0B;GEORGIAN SMALL LETTER MAN;Ll;0;L;;;;;N;;Khutsuri;10AB;;10AB
+2D0C;GEORGIAN SMALL LETTER NAR;Ll;0;L;;;;;N;;Khutsuri;10AC;;10AC
+2D0D;GEORGIAN SMALL LETTER ON;Ll;0;L;;;;;N;;Khutsuri;10AD;;10AD
+2D0E;GEORGIAN SMALL LETTER PAR;Ll;0;L;;;;;N;;Khutsuri;10AE;;10AE
+2D0F;GEORGIAN SMALL LETTER ZHAR;Ll;0;L;;;;;N;;Khutsuri;10AF;;10AF
+2D10;GEORGIAN SMALL LETTER RAE;Ll;0;L;;;;;N;;Khutsuri;10B0;;10B0
+2D11;GEORGIAN SMALL LETTER SAN;Ll;0;L;;;;;N;;Khutsuri;10B1;;10B1
+2D12;GEORGIAN SMALL LETTER TAR;Ll;0;L;;;;;N;;Khutsuri;10B2;;10B2
+2D13;GEORGIAN SMALL LETTER UN;Ll;0;L;;;;;N;;Khutsuri;10B3;;10B3
+2D14;GEORGIAN SMALL LETTER PHAR;Ll;0;L;;;;;N;;Khutsuri;10B4;;10B4
+2D15;GEORGIAN SMALL LETTER KHAR;Ll;0;L;;;;;N;;Khutsuri;10B5;;10B5
+2D16;GEORGIAN SMALL LETTER GHAN;Ll;0;L;;;;;N;;Khutsuri;10B6;;10B6
+2D17;GEORGIAN SMALL LETTER QAR;Ll;0;L;;;;;N;;Khutsuri;10B7;;10B7
+2D18;GEORGIAN SMALL LETTER SHIN;Ll;0;L;;;;;N;;Khutsuri;10B8;;10B8
+2D19;GEORGIAN SMALL LETTER CHIN;Ll;0;L;;;;;N;;Khutsuri;10B9;;10B9
+2D1A;GEORGIAN SMALL LETTER CAN;Ll;0;L;;;;;N;;Khutsuri;10BA;;10BA
+2D1B;GEORGIAN SMALL LETTER JIL;Ll;0;L;;;;;N;;Khutsuri;10BB;;10BB
+2D1C;GEORGIAN SMALL LETTER CIL;Ll;0;L;;;;;N;;Khutsuri;10BC;;10BC
+2D1D;GEORGIAN SMALL LETTER CHAR;Ll;0;L;;;;;N;;Khutsuri;10BD;;10BD
+2D1E;GEORGIAN SMALL LETTER XAN;Ll;0;L;;;;;N;;Khutsuri;10BE;;10BE
+2D1F;GEORGIAN SMALL LETTER JHAN;Ll;0;L;;;;;N;;Khutsuri;10BF;;10BF
+2D20;GEORGIAN SMALL LETTER HAE;Ll;0;L;;;;;N;;Khutsuri;10C0;;10C0
+2D21;GEORGIAN SMALL LETTER HE;Ll;0;L;;;;;N;;Khutsuri;10C1;;10C1
+2D22;GEORGIAN SMALL LETTER HIE;Ll;0;L;;;;;N;;Khutsuri;10C2;;10C2
+2D23;GEORGIAN SMALL LETTER WE;Ll;0;L;;;;;N;;Khutsuri;10C3;;10C3
+2D24;GEORGIAN SMALL LETTER HAR;Ll;0;L;;;;;N;;Khutsuri;10C4;;10C4
+2D25;GEORGIAN SMALL LETTER HOE;Ll;0;L;;;;;N;;Khutsuri;10C5;;10C5
+2D30;TIFINAGH LETTER YA;Lo;0;L;;;;;N;;;;;
+2D31;TIFINAGH LETTER YAB;Lo;0;L;;;;;N;;;;;
+2D32;TIFINAGH LETTER YABH;Lo;0;L;;;;;N;;;;;
+2D33;TIFINAGH LETTER YAG;Lo;0;L;;;;;N;;;;;
+2D34;TIFINAGH LETTER YAGHH;Lo;0;L;;;;;N;;;;;
+2D35;TIFINAGH LETTER BERBER ACADEMY YAJ;Lo;0;L;;;;;N;;;;;
+2D36;TIFINAGH LETTER YAJ;Lo;0;L;;;;;N;;;;;
+2D37;TIFINAGH LETTER YAD;Lo;0;L;;;;;N;;;;;
+2D38;TIFINAGH LETTER YADH;Lo;0;L;;;;;N;;;;;
+2D39;TIFINAGH LETTER YADD;Lo;0;L;;;;;N;;;;;
+2D3A;TIFINAGH LETTER YADDH;Lo;0;L;;;;;N;;;;;
+2D3B;TIFINAGH LETTER YEY;Lo;0;L;;;;;N;;;;;
+2D3C;TIFINAGH LETTER YAF;Lo;0;L;;;;;N;;;;;
+2D3D;TIFINAGH LETTER YAK;Lo;0;L;;;;;N;;;;;
+2D3E;TIFINAGH LETTER TUAREG YAK;Lo;0;L;;;;;N;;;;;
+2D3F;TIFINAGH LETTER YAKHH;Lo;0;L;;;;;N;;;;;
+2D40;TIFINAGH LETTER YAH;Lo;0;L;;;;;N;;Tuareg yab;;;
+2D41;TIFINAGH LETTER BERBER ACADEMY YAH;Lo;0;L;;;;;N;;;;;
+2D42;TIFINAGH LETTER TUAREG YAH;Lo;0;L;;;;;N;;;;;
+2D43;TIFINAGH LETTER YAHH;Lo;0;L;;;;;N;;;;;
+2D44;TIFINAGH LETTER YAA;Lo;0;L;;;;;N;;;;;
+2D45;TIFINAGH LETTER YAKH;Lo;0;L;;;;;N;;;;;
+2D46;TIFINAGH LETTER TUAREG YAKH;Lo;0;L;;;;;N;;;;;
+2D47;TIFINAGH LETTER YAQ;Lo;0;L;;;;;N;;;;;
+2D48;TIFINAGH LETTER TUAREG YAQ;Lo;0;L;;;;;N;;;;;
+2D49;TIFINAGH LETTER YI;Lo;0;L;;;;;N;;;;;
+2D4A;TIFINAGH LETTER YAZH;Lo;0;L;;;;;N;;;;;
+2D4B;TIFINAGH LETTER AHAGGAR YAZH;Lo;0;L;;;;;N;;;;;
+2D4C;TIFINAGH LETTER TUAREG YAZH;Lo;0;L;;;;;N;;;;;
+2D4D;TIFINAGH LETTER YAL;Lo;0;L;;;;;N;;;;;
+2D4E;TIFINAGH LETTER YAM;Lo;0;L;;;;;N;;;;;
+2D4F;TIFINAGH LETTER YAN;Lo;0;L;;;;;N;;;;;
+2D50;TIFINAGH LETTER TUAREG YAGN;Lo;0;L;;;;;N;;;;;
+2D51;TIFINAGH LETTER TUAREG YANG;Lo;0;L;;;;;N;;;;;
+2D52;TIFINAGH LETTER YAP;Lo;0;L;;;;;N;;;;;
+2D53;TIFINAGH LETTER YU;Lo;0;L;;;;;N;;Tuareg yaw;;;
+2D54;TIFINAGH LETTER YAR;Lo;0;L;;;;;N;;;;;
+2D55;TIFINAGH LETTER YARR;Lo;0;L;;;;;N;;;;;
+2D56;TIFINAGH LETTER YAGH;Lo;0;L;;;;;N;;;;;
+2D57;TIFINAGH LETTER TUAREG YAGH;Lo;0;L;;;;;N;;;;;
+2D58;TIFINAGH LETTER AYER YAGH;Lo;0;L;;;;;N;;Adrar yaj;;;
+2D59;TIFINAGH LETTER YAS;Lo;0;L;;;;;N;;;;;
+2D5A;TIFINAGH LETTER YASS;Lo;0;L;;;;;N;;;;;
+2D5B;TIFINAGH LETTER YASH;Lo;0;L;;;;;N;;;;;
+2D5C;TIFINAGH LETTER YAT;Lo;0;L;;;;;N;;;;;
+2D5D;TIFINAGH LETTER YATH;Lo;0;L;;;;;N;;;;;
+2D5E;TIFINAGH LETTER YACH;Lo;0;L;;;;;N;;;;;
+2D5F;TIFINAGH LETTER YATT;Lo;0;L;;;;;N;;;;;
+2D60;TIFINAGH LETTER YAV;Lo;0;L;;;;;N;;;;;
+2D61;TIFINAGH LETTER YAW;Lo;0;L;;;;;N;;;;;
+2D62;TIFINAGH LETTER YAY;Lo;0;L;;;;;N;;;;;
+2D63;TIFINAGH LETTER YAZ;Lo;0;L;;;;;N;;;;;
+2D64;TIFINAGH LETTER TAWELLEMET YAZ;Lo;0;L;;;;;N;;harpoon yaz;;;
+2D65;TIFINAGH LETTER YAZZ;Lo;0;L;;;;;N;;;;;
+2D6F;TIFINAGH MODIFIER LETTER LABIALIZATION MARK;Lm;0;L;<super> 2D61;;;;N;;tamatart;;;
+2D80;ETHIOPIC SYLLABLE LOA;Lo;0;L;;;;;N;;;;;
+2D81;ETHIOPIC SYLLABLE MOA;Lo;0;L;;;;;N;;;;;
+2D82;ETHIOPIC SYLLABLE ROA;Lo;0;L;;;;;N;;;;;
+2D83;ETHIOPIC SYLLABLE SOA;Lo;0;L;;;;;N;;;;;
+2D84;ETHIOPIC SYLLABLE SHOA;Lo;0;L;;;;;N;;;;;
+2D85;ETHIOPIC SYLLABLE BOA;Lo;0;L;;;;;N;;;;;
+2D86;ETHIOPIC SYLLABLE TOA;Lo;0;L;;;;;N;;;;;
+2D87;ETHIOPIC SYLLABLE COA;Lo;0;L;;;;;N;;;;;
+2D88;ETHIOPIC SYLLABLE NOA;Lo;0;L;;;;;N;;;;;
+2D89;ETHIOPIC SYLLABLE NYOA;Lo;0;L;;;;;N;;;;;
+2D8A;ETHIOPIC SYLLABLE GLOTTAL OA;Lo;0;L;;;;;N;;;;;
+2D8B;ETHIOPIC SYLLABLE ZOA;Lo;0;L;;;;;N;;;;;
+2D8C;ETHIOPIC SYLLABLE DOA;Lo;0;L;;;;;N;;;;;
+2D8D;ETHIOPIC SYLLABLE DDOA;Lo;0;L;;;;;N;;;;;
+2D8E;ETHIOPIC SYLLABLE JOA;Lo;0;L;;;;;N;;;;;
+2D8F;ETHIOPIC SYLLABLE THOA;Lo;0;L;;;;;N;;;;;
+2D90;ETHIOPIC SYLLABLE CHOA;Lo;0;L;;;;;N;;;;;
+2D91;ETHIOPIC SYLLABLE PHOA;Lo;0;L;;;;;N;;;;;
+2D92;ETHIOPIC SYLLABLE POA;Lo;0;L;;;;;N;;;;;
+2D93;ETHIOPIC SYLLABLE GGWA;Lo;0;L;;;;;N;;;;;
+2D94;ETHIOPIC SYLLABLE GGWI;Lo;0;L;;;;;N;;;;;
+2D95;ETHIOPIC SYLLABLE GGWEE;Lo;0;L;;;;;N;;;;;
+2D96;ETHIOPIC SYLLABLE GGWE;Lo;0;L;;;;;N;;;;;
+2DA0;ETHIOPIC SYLLABLE SSA;Lo;0;L;;;;;N;;;;;
+2DA1;ETHIOPIC SYLLABLE SSU;Lo;0;L;;;;;N;;;;;
+2DA2;ETHIOPIC SYLLABLE SSI;Lo;0;L;;;;;N;;;;;
+2DA3;ETHIOPIC SYLLABLE SSAA;Lo;0;L;;;;;N;;;;;
+2DA4;ETHIOPIC SYLLABLE SSEE;Lo;0;L;;;;;N;;;;;
+2DA5;ETHIOPIC SYLLABLE SSE;Lo;0;L;;;;;N;;;;;
+2DA6;ETHIOPIC SYLLABLE SSO;Lo;0;L;;;;;N;;;;;
+2DA8;ETHIOPIC SYLLABLE CCA;Lo;0;L;;;;;N;;;;;
+2DA9;ETHIOPIC SYLLABLE CCU;Lo;0;L;;;;;N;;;;;
+2DAA;ETHIOPIC SYLLABLE CCI;Lo;0;L;;;;;N;;;;;
+2DAB;ETHIOPIC SYLLABLE CCAA;Lo;0;L;;;;;N;;;;;
+2DAC;ETHIOPIC SYLLABLE CCEE;Lo;0;L;;;;;N;;;;;
+2DAD;ETHIOPIC SYLLABLE CCE;Lo;0;L;;;;;N;;;;;
+2DAE;ETHIOPIC SYLLABLE CCO;Lo;0;L;;;;;N;;;;;
+2DB0;ETHIOPIC SYLLABLE ZZA;Lo;0;L;;;;;N;;;;;
+2DB1;ETHIOPIC SYLLABLE ZZU;Lo;0;L;;;;;N;;;;;
+2DB2;ETHIOPIC SYLLABLE ZZI;Lo;0;L;;;;;N;;;;;
+2DB3;ETHIOPIC SYLLABLE ZZAA;Lo;0;L;;;;;N;;;;;
+2DB4;ETHIOPIC SYLLABLE ZZEE;Lo;0;L;;;;;N;;;;;
+2DB5;ETHIOPIC SYLLABLE ZZE;Lo;0;L;;;;;N;;;;;
+2DB6;ETHIOPIC SYLLABLE ZZO;Lo;0;L;;;;;N;;;;;
+2DB8;ETHIOPIC SYLLABLE CCHA;Lo;0;L;;;;;N;;;;;
+2DB9;ETHIOPIC SYLLABLE CCHU;Lo;0;L;;;;;N;;;;;
+2DBA;ETHIOPIC SYLLABLE CCHI;Lo;0;L;;;;;N;;;;;
+2DBB;ETHIOPIC SYLLABLE CCHAA;Lo;0;L;;;;;N;;;;;
+2DBC;ETHIOPIC SYLLABLE CCHEE;Lo;0;L;;;;;N;;;;;
+2DBD;ETHIOPIC SYLLABLE CCHE;Lo;0;L;;;;;N;;;;;
+2DBE;ETHIOPIC SYLLABLE CCHO;Lo;0;L;;;;;N;;;;;
+2DC0;ETHIOPIC SYLLABLE QYA;Lo;0;L;;;;;N;;;;;
+2DC1;ETHIOPIC SYLLABLE QYU;Lo;0;L;;;;;N;;;;;
+2DC2;ETHIOPIC SYLLABLE QYI;Lo;0;L;;;;;N;;;;;
+2DC3;ETHIOPIC SYLLABLE QYAA;Lo;0;L;;;;;N;;;;;
+2DC4;ETHIOPIC SYLLABLE QYEE;Lo;0;L;;;;;N;;;;;
+2DC5;ETHIOPIC SYLLABLE QYE;Lo;0;L;;;;;N;;;;;
+2DC6;ETHIOPIC SYLLABLE QYO;Lo;0;L;;;;;N;;;;;
+2DC8;ETHIOPIC SYLLABLE KYA;Lo;0;L;;;;;N;;;;;
+2DC9;ETHIOPIC SYLLABLE KYU;Lo;0;L;;;;;N;;;;;
+2DCA;ETHIOPIC SYLLABLE KYI;Lo;0;L;;;;;N;;;;;
+2DCB;ETHIOPIC SYLLABLE KYAA;Lo;0;L;;;;;N;;;;;
+2DCC;ETHIOPIC SYLLABLE KYEE;Lo;0;L;;;;;N;;;;;
+2DCD;ETHIOPIC SYLLABLE KYE;Lo;0;L;;;;;N;;;;;
+2DCE;ETHIOPIC SYLLABLE KYO;Lo;0;L;;;;;N;;;;;
+2DD0;ETHIOPIC SYLLABLE XYA;Lo;0;L;;;;;N;;;;;
+2DD1;ETHIOPIC SYLLABLE XYU;Lo;0;L;;;;;N;;;;;
+2DD2;ETHIOPIC SYLLABLE XYI;Lo;0;L;;;;;N;;;;;
+2DD3;ETHIOPIC SYLLABLE XYAA;Lo;0;L;;;;;N;;;;;
+2DD4;ETHIOPIC SYLLABLE XYEE;Lo;0;L;;;;;N;;;;;
+2DD5;ETHIOPIC SYLLABLE XYE;Lo;0;L;;;;;N;;;;;
+2DD6;ETHIOPIC SYLLABLE XYO;Lo;0;L;;;;;N;;;;;
+2DD8;ETHIOPIC SYLLABLE GYA;Lo;0;L;;;;;N;;;;;
+2DD9;ETHIOPIC SYLLABLE GYU;Lo;0;L;;;;;N;;;;;
+2DDA;ETHIOPIC SYLLABLE GYI;Lo;0;L;;;;;N;;;;;
+2DDB;ETHIOPIC SYLLABLE GYAA;Lo;0;L;;;;;N;;;;;
+2DDC;ETHIOPIC SYLLABLE GYEE;Lo;0;L;;;;;N;;;;;
+2DDD;ETHIOPIC SYLLABLE GYE;Lo;0;L;;;;;N;;;;;
+2DDE;ETHIOPIC SYLLABLE GYO;Lo;0;L;;;;;N;;;;;
+2E00;RIGHT ANGLE SUBSTITUTION MARKER;Po;0;ON;;;;;N;;;;;
+2E01;RIGHT ANGLE DOTTED SUBSTITUTION MARKER;Po;0;ON;;;;;N;;;;;
+2E02;LEFT SUBSTITUTION BRACKET;Pi;0;ON;;;;;Y;;;;;
+2E03;RIGHT SUBSTITUTION BRACKET;Pf;0;ON;;;;;Y;;;;;
+2E04;LEFT DOTTED SUBSTITUTION BRACKET;Pi;0;ON;;;;;Y;;;;;
+2E05;RIGHT DOTTED SUBSTITUTION BRACKET;Pf;0;ON;;;;;Y;;;;;
+2E06;RAISED INTERPOLATION MARKER;Po;0;ON;;;;;N;;;;;
+2E07;RAISED DOTTED INTERPOLATION MARKER;Po;0;ON;;;;;N;;;;;
+2E08;DOTTED TRANSPOSITION MARKER;Po;0;ON;;;;;N;;;;;
+2E09;LEFT TRANSPOSITION BRACKET;Pi;0;ON;;;;;Y;;;;;
+2E0A;RIGHT TRANSPOSITION BRACKET;Pf;0;ON;;;;;Y;;;;;
+2E0B;RAISED SQUARE;Po;0;ON;;;;;N;;;;;
+2E0C;LEFT RAISED OMISSION BRACKET;Pi;0;ON;;;;;Y;;;;;
+2E0D;RIGHT RAISED OMISSION BRACKET;Pf;0;ON;;;;;Y;;;;;
+2E0E;EDITORIAL CORONIS;Po;0;ON;;;;;N;;;;;
+2E0F;PARAGRAPHOS;Po;0;ON;;;;;N;;;;;
+2E10;FORKED PARAGRAPHOS;Po;0;ON;;;;;N;;;;;
+2E11;REVERSED FORKED PARAGRAPHOS;Po;0;ON;;;;;N;;;;;
+2E12;HYPODIASTOLE;Po;0;ON;;;;;N;;;;;
+2E13;DOTTED OBELOS;Po;0;ON;;;;;N;;;;;
+2E14;DOWNWARDS ANCORA;Po;0;ON;;;;;N;;;;;
+2E15;UPWARDS ANCORA;Po;0;ON;;;;;N;;;;;
+2E16;DOTTED RIGHT-POINTING ANGLE;Po;0;ON;;;;;N;;;;;
+2E17;DOUBLE OBLIQUE HYPHEN;Pd;0;ON;;;;;N;;;;;
+2E1C;LEFT LOW PARAPHRASE BRACKET;Pi;0;ON;;;;;Y;;;;;
+2E1D;RIGHT LOW PARAPHRASE BRACKET;Pf;0;ON;;;;;Y;;;;;
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;;;;;
@@ -8632,7 +9421,7 @@
30F8;KATAKANA LETTER VI;Lo;0;L;30F0 3099;;;;N;;;;;
30F9;KATAKANA LETTER VE;Lo;0;L;30F1 3099;;;;N;;;;;
30FA;KATAKANA LETTER VO;Lo;0;L;30F2 3099;;;;N;;;;;
-30FB;KATAKANA MIDDLE DOT;Pc;0;ON;;;;;N;;;;;
+30FB;KATAKANA MIDDLE DOT;Po;0;ON;;;;;N;;;;;
30FC;KATAKANA-HIRAGANA PROLONGED SOUND MARK;Lm;0;L;;;;;N;;;;;
30FD;KATAKANA ITERATION MARK;Lm;0;L;;;;;N;;;;;
30FE;KATAKANA VOICED ITERATION MARK;Lm;0;L;30FD 3099;;;;N;;;;;
@@ -8811,6 +9600,22 @@
31B5;BOPOMOFO FINAL LETTER T;Lo;0;L;;;;;N;;;;;
31B6;BOPOMOFO FINAL LETTER K;Lo;0;L;;;;;N;;;;;
31B7;BOPOMOFO FINAL LETTER H;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;;;;;
+31C3;CJK STROKE BXG;So;0;ON;;;;;N;;;;;
+31C4;CJK STROKE SW;So;0;ON;;;;;N;;;;;
+31C5;CJK STROKE HZZ;So;0;ON;;;;;N;;;;;
+31C6;CJK STROKE HZG;So;0;ON;;;;;N;;;;;
+31C7;CJK STROKE HP;So;0;ON;;;;;N;;;;;
+31C8;CJK STROKE HZWG;So;0;ON;;;;;N;;;;;
+31C9;CJK STROKE SZWG;So;0;ON;;;;;N;;;;;
+31CA;CJK STROKE HZT;So;0;ON;;;;;N;;;;;
+31CB;CJK STROKE HZZP;So;0;ON;;;;;N;;;;;
+31CC;CJK STROKE HPWG;So;0;ON;;;;;N;;;;;
+31CD;CJK STROKE HZW;So;0;ON;;;;;N;;;;;
+31CE;CJK STROKE HZZZ;So;0;ON;;;;;N;;;;;
+31CF;CJK STROKE N;So;0;ON;;;;;N;;;;;
31F0;KATAKANA LETTER SMALL KU;Lo;0;L;;;;;N;;;;;
31F1;KATAKANA LETTER SMALL SI;Lo;0;L;;;;;N;;;;;
31F2;KATAKANA LETTER SMALL SU;Lo;0;L;;;;;N;;;;;
@@ -8940,6 +9745,7 @@
327B;CIRCLED HANGUL HIEUH A;So;0;L;<circle> 1112 1161;;;;N;CIRCLED HANGUL HA;;;;
327C;CIRCLED KOREAN CHARACTER CHAMKO;So;0;ON;<circle> 110E 1161 11B7 1100 1169;;;;N;;;;;
327D;CIRCLED KOREAN CHARACTER JUEUI;So;0;ON;<circle> 110C 116E 110B 1174;;;;N;;;;;
+327E;CIRCLED HANGUL IEUNG U;So;0;ON;<circle> 110B 116E;;;;N;;;;;
327F;KOREAN STANDARD SYMBOL;So;0;L;;;;;N;;;;;
3280;CIRCLED IDEOGRAPH ONE;No;0;L;<circle> 4E00;;;1;N;;;;;
3281;CIRCLED IDEOGRAPH TWO;No;0;L;<circle> 4E8C;;;2;N;;;;;
@@ -9391,7 +10197,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;;;;;
-9FA5;<CJK Ideograph, Last>;Lo;0;L;;;;;N;;;;;
+9FBB;<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;;;;;
@@ -9413,7 +10219,7 @@ A011;YI SYLLABLE O;Lo;0;L;;;;;N;;;;;
A012;YI SYLLABLE OP;Lo;0;L;;;;;N;;;;;
A013;YI SYLLABLE EX;Lo;0;L;;;;;N;;;;;
A014;YI SYLLABLE E;Lo;0;L;;;;;N;;;;;
-A015;YI SYLLABLE WU;Lo;0;L;;;;;N;;;;;
+A015;YI SYLLABLE WU;Lm;0;L;;;;;N;;;;;
A016;YI SYLLABLE BIT;Lo;0;L;;;;;N;;;;;
A017;YI SYLLABLE BIX;Lo;0;L;;;;;N;;;;;
A018;YI SYLLABLE BI;Lo;0;L;;;;;N;;;;;
@@ -10612,6 +11418,73 @@ A4C3;YI RADICAL CHE;So;0;ON;;;;;N;;;;;
A4C4;YI RADICAL ZZIET;So;0;ON;;;;;N;;;;;
A4C5;YI RADICAL NBIE;So;0;ON;;;;;N;;;;;
A4C6;YI RADICAL KE;So;0;ON;;;;;N;;;;;
+A700;MODIFIER LETTER CHINESE TONE YIN PING;Sk;0;ON;;;;;N;;;;;
+A701;MODIFIER LETTER CHINESE TONE YANG PING;Sk;0;ON;;;;;N;;;;;
+A702;MODIFIER LETTER CHINESE TONE YIN SHANG;Sk;0;ON;;;;;N;;;;;
+A703;MODIFIER LETTER CHINESE TONE YANG SHANG;Sk;0;ON;;;;;N;;;;;
+A704;MODIFIER LETTER CHINESE TONE YIN QU;Sk;0;ON;;;;;N;;;;;
+A705;MODIFIER LETTER CHINESE TONE YANG QU;Sk;0;ON;;;;;N;;;;;
+A706;MODIFIER LETTER CHINESE TONE YIN RU;Sk;0;ON;;;;;N;;;;;
+A707;MODIFIER LETTER CHINESE TONE YANG RU;Sk;0;ON;;;;;N;;;;;
+A708;MODIFIER LETTER EXTRA-HIGH DOTTED TONE BAR;Sk;0;ON;;;;;N;;;;;
+A709;MODIFIER LETTER HIGH DOTTED TONE BAR;Sk;0;ON;;;;;N;;;;;
+A70A;MODIFIER LETTER MID DOTTED TONE BAR;Sk;0;ON;;;;;N;;;;;
+A70B;MODIFIER LETTER LOW DOTTED TONE BAR;Sk;0;ON;;;;;N;;;;;
+A70C;MODIFIER LETTER EXTRA-LOW DOTTED TONE BAR;Sk;0;ON;;;;;N;;;;;
+A70D;MODIFIER LETTER EXTRA-HIGH DOTTED LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;
+A70E;MODIFIER LETTER HIGH DOTTED LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;
+A70F;MODIFIER LETTER MID DOTTED LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;
+A710;MODIFIER LETTER LOW DOTTED LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;
+A711;MODIFIER LETTER EXTRA-LOW DOTTED LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;
+A712;MODIFIER LETTER EXTRA-HIGH LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;
+A713;MODIFIER LETTER HIGH LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;
+A714;MODIFIER LETTER MID LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;
+A715;MODIFIER LETTER LOW LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;
+A716;MODIFIER LETTER EXTRA-LOW LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;
+A800;SYLOTI NAGRI LETTER A;Lo;0;L;;;;;N;;;;;
+A801;SYLOTI NAGRI LETTER I;Lo;0;L;;;;;N;;;;;
+A802;SYLOTI NAGRI SIGN DVISVARA;Mc;0;NSM;;;;;N;;;;;
+A803;SYLOTI NAGRI LETTER U;Lo;0;L;;;;;N;;;;;
+A804;SYLOTI NAGRI LETTER E;Lo;0;L;;;;;N;;;;;
+A805;SYLOTI NAGRI LETTER O;Lo;0;L;;;;;N;;;;;
+A806;SYLOTI NAGRI SIGN HASANTA;Mn;9;NSM;;;;;N;;;;;
+A807;SYLOTI NAGRI LETTER KO;Lo;0;L;;;;;N;;;;;
+A808;SYLOTI NAGRI LETTER KHO;Lo;0;L;;;;;N;;;;;
+A809;SYLOTI NAGRI LETTER GO;Lo;0;L;;;;;N;;;;;
+A80A;SYLOTI NAGRI LETTER GHO;Lo;0;L;;;;;N;;;;;
+A80B;SYLOTI NAGRI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+A80C;SYLOTI NAGRI LETTER CO;Lo;0;L;;;;;N;;;;;
+A80D;SYLOTI NAGRI LETTER CHO;Lo;0;L;;;;;N;;;;;
+A80E;SYLOTI NAGRI LETTER JO;Lo;0;L;;;;;N;;;;;
+A80F;SYLOTI NAGRI LETTER JHO;Lo;0;L;;;;;N;;;;;
+A810;SYLOTI NAGRI LETTER TTO;Lo;0;L;;;;;N;;;;;
+A811;SYLOTI NAGRI LETTER TTHO;Lo;0;L;;;;;N;;;;;
+A812;SYLOTI NAGRI LETTER DDO;Lo;0;L;;;;;N;;;;;
+A813;SYLOTI NAGRI LETTER DDHO;Lo;0;L;;;;;N;;;;;
+A814;SYLOTI NAGRI LETTER TO;Lo;0;L;;;;;N;;;;;
+A815;SYLOTI NAGRI LETTER THO;Lo;0;L;;;;;N;;;;;
+A816;SYLOTI NAGRI LETTER DO;Lo;0;L;;;;;N;;;;;
+A817;SYLOTI NAGRI LETTER DHO;Lo;0;L;;;;;N;;;;;
+A818;SYLOTI NAGRI LETTER NO;Lo;0;L;;;;;N;;;;;
+A819;SYLOTI NAGRI LETTER PO;Lo;0;L;;;;;N;;;;;
+A81A;SYLOTI NAGRI LETTER PHO;Lo;0;L;;;;;N;;;;;
+A81B;SYLOTI NAGRI LETTER BO;Lo;0;L;;;;;N;;;;;
+A81C;SYLOTI NAGRI LETTER BHO;Lo;0;L;;;;;N;;;;;
+A81D;SYLOTI NAGRI LETTER MO;Lo;0;L;;;;;N;;;;;
+A81E;SYLOTI NAGRI LETTER RO;Lo;0;L;;;;;N;;;;;
+A81F;SYLOTI NAGRI LETTER LO;Lo;0;L;;;;;N;;;;;
+A820;SYLOTI NAGRI LETTER RRO;Lo;0;L;;;;;N;;;;;
+A821;SYLOTI NAGRI LETTER SO;Lo;0;L;;;;;N;;;;;
+A822;SYLOTI NAGRI LETTER HO;Lo;0;L;;;;;N;;;;;
+A823;SYLOTI NAGRI VOWEL SIGN A;Mc;0;L;;;;;N;;;;;
+A824;SYLOTI NAGRI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+A825;SYLOTI NAGRI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+A826;SYLOTI NAGRI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
+A827;SYLOTI NAGRI VOWEL SIGN OO;Mc;0;L;;;;;N;;;;;
+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;;;;;
AC00;<Hangul Syllable, First>;Lo;0;L;;;;;N;;;;;
D7A3;<Hangul Syllable, Last>;Lo;0;L;;;;;N;;;;;
D800;<Non Private Use High Surrogate, First>;Cs;0;L;;;;;N;;;;;
@@ -10983,6 +11856,112 @@ FA67;CJK COMPATIBILITY IDEOGRAPH-FA67;Lo;0;L;9038;;;;N;;;;;
FA68;CJK COMPATIBILITY IDEOGRAPH-FA68;Lo;0;L;96E3;;;;N;;;;;
FA69;CJK COMPATIBILITY IDEOGRAPH-FA69;Lo;0;L;97FF;;;;N;;;;;
FA6A;CJK COMPATIBILITY IDEOGRAPH-FA6A;Lo;0;L;983B;;;;N;;;;;
+FA70;CJK COMPATIBILITY IDEOGRAPH-FA70;Lo;0;L;4E26;;;;N;;;;;
+FA71;CJK COMPATIBILITY IDEOGRAPH-FA71;Lo;0;L;51B5;;;;N;;;;;
+FA72;CJK COMPATIBILITY IDEOGRAPH-FA72;Lo;0;L;5168;;;;N;;;;;
+FA73;CJK COMPATIBILITY IDEOGRAPH-FA73;Lo;0;L;4F80;;;;N;;;;;
+FA74;CJK COMPATIBILITY IDEOGRAPH-FA74;Lo;0;L;5145;;;;N;;;;;
+FA75;CJK COMPATIBILITY IDEOGRAPH-FA75;Lo;0;L;5180;;;;N;;;;;
+FA76;CJK COMPATIBILITY IDEOGRAPH-FA76;Lo;0;L;52C7;;;;N;;;;;
+FA77;CJK COMPATIBILITY IDEOGRAPH-FA77;Lo;0;L;52FA;;;;N;;;;;
+FA78;CJK COMPATIBILITY IDEOGRAPH-FA78;Lo;0;L;559D;;;;N;;;;;
+FA79;CJK COMPATIBILITY IDEOGRAPH-FA79;Lo;0;L;5555;;;;N;;;;;
+FA7A;CJK COMPATIBILITY IDEOGRAPH-FA7A;Lo;0;L;5599;;;;N;;;;;
+FA7B;CJK COMPATIBILITY IDEOGRAPH-FA7B;Lo;0;L;55E2;;;;N;;;;;
+FA7C;CJK COMPATIBILITY IDEOGRAPH-FA7C;Lo;0;L;585A;;;;N;;;;;
+FA7D;CJK COMPATIBILITY IDEOGRAPH-FA7D;Lo;0;L;58B3;;;;N;;;;;
+FA7E;CJK COMPATIBILITY IDEOGRAPH-FA7E;Lo;0;L;5944;;;;N;;;;;
+FA7F;CJK COMPATIBILITY IDEOGRAPH-FA7F;Lo;0;L;5954;;;;N;;;;;
+FA80;CJK COMPATIBILITY IDEOGRAPH-FA80;Lo;0;L;5A62;;;;N;;;;;
+FA81;CJK COMPATIBILITY IDEOGRAPH-FA81;Lo;0;L;5B28;;;;N;;;;;
+FA82;CJK COMPATIBILITY IDEOGRAPH-FA82;Lo;0;L;5ED2;;;;N;;;;;
+FA83;CJK COMPATIBILITY IDEOGRAPH-FA83;Lo;0;L;5ED9;;;;N;;;;;
+FA84;CJK COMPATIBILITY IDEOGRAPH-FA84;Lo;0;L;5F69;;;;N;;;;;
+FA85;CJK COMPATIBILITY IDEOGRAPH-FA85;Lo;0;L;5FAD;;;;N;;;;;
+FA86;CJK COMPATIBILITY IDEOGRAPH-FA86;Lo;0;L;60D8;;;;N;;;;;
+FA87;CJK COMPATIBILITY IDEOGRAPH-FA87;Lo;0;L;614E;;;;N;;;;;
+FA88;CJK COMPATIBILITY IDEOGRAPH-FA88;Lo;0;L;6108;;;;N;;;;;
+FA89;CJK COMPATIBILITY IDEOGRAPH-FA89;Lo;0;L;618E;;;;N;;;;;
+FA8A;CJK COMPATIBILITY IDEOGRAPH-FA8A;Lo;0;L;6160;;;;N;;;;;
+FA8B;CJK COMPATIBILITY IDEOGRAPH-FA8B;Lo;0;L;61F2;;;;N;;;;;
+FA8C;CJK COMPATIBILITY IDEOGRAPH-FA8C;Lo;0;L;6234;;;;N;;;;;
+FA8D;CJK COMPATIBILITY IDEOGRAPH-FA8D;Lo;0;L;63C4;;;;N;;;;;
+FA8E;CJK COMPATIBILITY IDEOGRAPH-FA8E;Lo;0;L;641C;;;;N;;;;;
+FA8F;CJK COMPATIBILITY IDEOGRAPH-FA8F;Lo;0;L;6452;;;;N;;;;;
+FA90;CJK COMPATIBILITY IDEOGRAPH-FA90;Lo;0;L;6556;;;;N;;;;;
+FA91;CJK COMPATIBILITY IDEOGRAPH-FA91;Lo;0;L;6674;;;;N;;;;;
+FA92;CJK COMPATIBILITY IDEOGRAPH-FA92;Lo;0;L;6717;;;;N;;;;;
+FA93;CJK COMPATIBILITY IDEOGRAPH-FA93;Lo;0;L;671B;;;;N;;;;;
+FA94;CJK COMPATIBILITY IDEOGRAPH-FA94;Lo;0;L;6756;;;;N;;;;;
+FA95;CJK COMPATIBILITY IDEOGRAPH-FA95;Lo;0;L;6B79;;;;N;;;;;
+FA96;CJK COMPATIBILITY IDEOGRAPH-FA96;Lo;0;L;6BBA;;;;N;;;;;
+FA97;CJK COMPATIBILITY IDEOGRAPH-FA97;Lo;0;L;6D41;;;;N;;;;;
+FA98;CJK COMPATIBILITY IDEOGRAPH-FA98;Lo;0;L;6EDB;;;;N;;;;;
+FA99;CJK COMPATIBILITY IDEOGRAPH-FA99;Lo;0;L;6ECB;;;;N;;;;;
+FA9A;CJK COMPATIBILITY IDEOGRAPH-FA9A;Lo;0;L;6F22;;;;N;;;;;
+FA9B;CJK COMPATIBILITY IDEOGRAPH-FA9B;Lo;0;L;701E;;;;N;;;;;
+FA9C;CJK COMPATIBILITY IDEOGRAPH-FA9C;Lo;0;L;716E;;;;N;;;;;
+FA9D;CJK COMPATIBILITY IDEOGRAPH-FA9D;Lo;0;L;77A7;;;;N;;;;;
+FA9E;CJK COMPATIBILITY IDEOGRAPH-FA9E;Lo;0;L;7235;;;;N;;;;;
+FA9F;CJK COMPATIBILITY IDEOGRAPH-FA9F;Lo;0;L;72AF;;;;N;;;;;
+FAA0;CJK COMPATIBILITY IDEOGRAPH-FAA0;Lo;0;L;732A;;;;N;;;;;
+FAA1;CJK COMPATIBILITY IDEOGRAPH-FAA1;Lo;0;L;7471;;;;N;;;;;
+FAA2;CJK COMPATIBILITY IDEOGRAPH-FAA2;Lo;0;L;7506;;;;N;;;;;
+FAA3;CJK COMPATIBILITY IDEOGRAPH-FAA3;Lo;0;L;753B;;;;N;;;;;
+FAA4;CJK COMPATIBILITY IDEOGRAPH-FAA4;Lo;0;L;761D;;;;N;;;;;
+FAA5;CJK COMPATIBILITY IDEOGRAPH-FAA5;Lo;0;L;761F;;;;N;;;;;
+FAA6;CJK COMPATIBILITY IDEOGRAPH-FAA6;Lo;0;L;76CA;;;;N;;;;;
+FAA7;CJK COMPATIBILITY IDEOGRAPH-FAA7;Lo;0;L;76DB;;;;N;;;;;
+FAA8;CJK COMPATIBILITY IDEOGRAPH-FAA8;Lo;0;L;76F4;;;;N;;;;;
+FAA9;CJK COMPATIBILITY IDEOGRAPH-FAA9;Lo;0;L;774A;;;;N;;;;;
+FAAA;CJK COMPATIBILITY IDEOGRAPH-FAAA;Lo;0;L;7740;;;;N;;;;;
+FAAB;CJK COMPATIBILITY IDEOGRAPH-FAAB;Lo;0;L;78CC;;;;N;;;;;
+FAAC;CJK COMPATIBILITY IDEOGRAPH-FAAC;Lo;0;L;7AB1;;;;N;;;;;
+FAAD;CJK COMPATIBILITY IDEOGRAPH-FAAD;Lo;0;L;7BC0;;;;N;;;;;
+FAAE;CJK COMPATIBILITY IDEOGRAPH-FAAE;Lo;0;L;7C7B;;;;N;;;;;
+FAAF;CJK COMPATIBILITY IDEOGRAPH-FAAF;Lo;0;L;7D5B;;;;N;;;;;
+FAB0;CJK COMPATIBILITY IDEOGRAPH-FAB0;Lo;0;L;7DF4;;;;N;;;;;
+FAB1;CJK COMPATIBILITY IDEOGRAPH-FAB1;Lo;0;L;7F3E;;;;N;;;;;
+FAB2;CJK COMPATIBILITY IDEOGRAPH-FAB2;Lo;0;L;8005;;;;N;;;;;
+FAB3;CJK COMPATIBILITY IDEOGRAPH-FAB3;Lo;0;L;8352;;;;N;;;;;
+FAB4;CJK COMPATIBILITY IDEOGRAPH-FAB4;Lo;0;L;83EF;;;;N;;;;;
+FAB5;CJK COMPATIBILITY IDEOGRAPH-FAB5;Lo;0;L;8779;;;;N;;;;;
+FAB6;CJK COMPATIBILITY IDEOGRAPH-FAB6;Lo;0;L;8941;;;;N;;;;;
+FAB7;CJK COMPATIBILITY IDEOGRAPH-FAB7;Lo;0;L;8986;;;;N;;;;;
+FAB8;CJK COMPATIBILITY IDEOGRAPH-FAB8;Lo;0;L;8996;;;;N;;;;;
+FAB9;CJK COMPATIBILITY IDEOGRAPH-FAB9;Lo;0;L;8ABF;;;;N;;;;;
+FABA;CJK COMPATIBILITY IDEOGRAPH-FABA;Lo;0;L;8AF8;;;;N;;;;;
+FABB;CJK COMPATIBILITY IDEOGRAPH-FABB;Lo;0;L;8ACB;;;;N;;;;;
+FABC;CJK COMPATIBILITY IDEOGRAPH-FABC;Lo;0;L;8B01;;;;N;;;;;
+FABD;CJK COMPATIBILITY IDEOGRAPH-FABD;Lo;0;L;8AFE;;;;N;;;;;
+FABE;CJK COMPATIBILITY IDEOGRAPH-FABE;Lo;0;L;8AED;;;;N;;;;;
+FABF;CJK COMPATIBILITY IDEOGRAPH-FABF;Lo;0;L;8B39;;;;N;;;;;
+FAC0;CJK COMPATIBILITY IDEOGRAPH-FAC0;Lo;0;L;8B8A;;;;N;;;;;
+FAC1;CJK COMPATIBILITY IDEOGRAPH-FAC1;Lo;0;L;8D08;;;;N;;;;;
+FAC2;CJK COMPATIBILITY IDEOGRAPH-FAC2;Lo;0;L;8F38;;;;N;;;;;
+FAC3;CJK COMPATIBILITY IDEOGRAPH-FAC3;Lo;0;L;9072;;;;N;;;;;
+FAC4;CJK COMPATIBILITY IDEOGRAPH-FAC4;Lo;0;L;9199;;;;N;;;;;
+FAC5;CJK COMPATIBILITY IDEOGRAPH-FAC5;Lo;0;L;9276;;;;N;;;;;
+FAC6;CJK COMPATIBILITY IDEOGRAPH-FAC6;Lo;0;L;967C;;;;N;;;;;
+FAC7;CJK COMPATIBILITY IDEOGRAPH-FAC7;Lo;0;L;96E3;;;;N;;;;;
+FAC8;CJK COMPATIBILITY IDEOGRAPH-FAC8;Lo;0;L;9756;;;;N;;;;;
+FAC9;CJK COMPATIBILITY IDEOGRAPH-FAC9;Lo;0;L;97DB;;;;N;;;;;
+FACA;CJK COMPATIBILITY IDEOGRAPH-FACA;Lo;0;L;97FF;;;;N;;;;;
+FACB;CJK COMPATIBILITY IDEOGRAPH-FACB;Lo;0;L;980B;;;;N;;;;;
+FACC;CJK COMPATIBILITY IDEOGRAPH-FACC;Lo;0;L;983B;;;;N;;;;;
+FACD;CJK COMPATIBILITY IDEOGRAPH-FACD;Lo;0;L;9B12;;;;N;;;;;
+FACE;CJK COMPATIBILITY IDEOGRAPH-FACE;Lo;0;L;9F9C;;;;N;;;;;
+FACF;CJK COMPATIBILITY IDEOGRAPH-FACF;Lo;0;L;2284A;;;;N;;;;;
+FAD0;CJK COMPATIBILITY IDEOGRAPH-FAD0;Lo;0;L;22844;;;;N;;;;;
+FAD1;CJK COMPATIBILITY IDEOGRAPH-FAD1;Lo;0;L;233D5;;;;N;;;;;
+FAD2;CJK COMPATIBILITY IDEOGRAPH-FAD2;Lo;0;L;3B9D;;;;N;;;;;
+FAD3;CJK COMPATIBILITY IDEOGRAPH-FAD3;Lo;0;L;4018;;;;N;;;;;
+FAD4;CJK COMPATIBILITY IDEOGRAPH-FAD4;Lo;0;L;4039;;;;N;;;;;
+FAD5;CJK COMPATIBILITY IDEOGRAPH-FAD5;Lo;0;L;25249;;;;N;;;;;
+FAD6;CJK COMPATIBILITY IDEOGRAPH-FAD6;Lo;0;L;25CD0;;;;N;;;;;
+FAD7;CJK COMPATIBILITY IDEOGRAPH-FAD7;Lo;0;L;27ED3;;;;N;;;;;
+FAD8;CJK COMPATIBILITY IDEOGRAPH-FAD8;Lo;0;L;9F43;;;;N;;;;;
+FAD9;CJK COMPATIBILITY IDEOGRAPH-FAD9;Lo;0;L;9F8E;;;;N;;;;;
FB00;LATIN SMALL LIGATURE FF;Ll;0;L;<compat> 0066 0066;;;;N;;;;;
FB01;LATIN SMALL LIGATURE FI;Ll;0;L;<compat> 0066 0069;;;;N;;;;;
FB02;LATIN SMALL LIGATURE FL;Ll;0;L;<compat> 0066 006C;;;;N;;;;;
@@ -11007,7 +11986,7 @@ FB25;HEBREW LETTER WIDE LAMED;Lo;0;R;<font> 05DC;;;;N;;;;;
FB26;HEBREW LETTER WIDE FINAL MEM;Lo;0;R;<font> 05DD;;;;N;;;;;
FB27;HEBREW LETTER WIDE RESH;Lo;0;R;<font> 05E8;;;;N;;;;;
FB28;HEBREW LETTER WIDE TAV;Lo;0;R;<font> 05EA;;;;N;;;;;
-FB29;HEBREW LETTER ALTERNATIVE PLUS SIGN;Sm;0;ET;<font> 002B;;;;N;;;;;
+FB29;HEBREW LETTER ALTERNATIVE PLUS SIGN;Sm;0;ES;<font> 002B;;;;N;;;;;
FB2A;HEBREW LETTER SHIN WITH SHIN DOT;Lo;0;R;05E9 05C1;;;;N;;;;;
FB2B;HEBREW LETTER SHIN WITH SIN DOT;Lo;0;R;05E9 05C2;;;;N;;;;;
FB2C;HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT;Lo;0;R;FB49 05C1;;;;N;;;;;
@@ -11652,6 +12631,16 @@ FE0C;VARIATION SELECTOR-13;Mn;0;NSM;;;;;N;;;;;
FE0D;VARIATION SELECTOR-14;Mn;0;NSM;;;;;N;;;;;
FE0E;VARIATION SELECTOR-15;Mn;0;NSM;;;;;N;;;;;
FE0F;VARIATION SELECTOR-16;Mn;0;NSM;;;;;N;;;;;
+FE10;PRESENTATION FORM FOR VERTICAL COMMA;Po;0;ON;<vertical> 002C;;;;N;;;;;
+FE11;PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC COMMA;Po;0;ON;<vertical> 3001;;;;N;;;;;
+FE12;PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC FULL STOP;Po;0;ON;<vertical> 3002;;;;N;;;;;
+FE13;PRESENTATION FORM FOR VERTICAL COLON;Po;0;ON;<vertical> 003A;;;;N;;;;;
+FE14;PRESENTATION FORM FOR VERTICAL SEMICOLON;Po;0;ON;<vertical> 003B;;;;N;;;;;
+FE15;PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK;Po;0;ON;<vertical> 0021;;;;N;;;;;
+FE16;PRESENTATION FORM FOR VERTICAL QUESTION MARK;Po;0;ON;<vertical> 003F;;;;N;;;;;
+FE17;PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET;Ps;0;ON;<vertical> 3016;;;;N;;;;;
+FE18;PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET;Pe;0;ON;<vertical> 3017;;;;N;;;;;
+FE19;PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS;Po;0;ON;<vertical> 2026;;;;N;;;;;
FE20;COMBINING LIGATURE LEFT HALF;Mn;230;NSM;;;;;N;;;;;
FE21;COMBINING LIGATURE RIGHT HALF;Mn;230;NSM;;;;;N;;;;;
FE22;COMBINING DOUBLE TILDE LEFT HALF;Mn;230;NSM;;;;;N;;;;;
@@ -11705,8 +12694,8 @@ FE5E;SMALL RIGHT TORTOISE SHELL BRACKET;Pe;0;ON;<small> 3015;;;;N;SMALL CLOSING
FE5F;SMALL NUMBER SIGN;Po;0;ET;<small> 0023;;;;N;;;;;
FE60;SMALL AMPERSAND;Po;0;ON;<small> 0026;;;;N;;;;;
FE61;SMALL ASTERISK;Po;0;ON;<small> 002A;;;;N;;;;;
-FE62;SMALL PLUS SIGN;Sm;0;ET;<small> 002B;;;;N;;;;;
-FE63;SMALL HYPHEN-MINUS;Pd;0;ET;<small> 002D;;;;N;;;;;
+FE62;SMALL PLUS SIGN;Sm;0;ES;<small> 002B;;;;N;;;;;
+FE63;SMALL HYPHEN-MINUS;Pd;0;ES;<small> 002D;;;;N;;;;;
FE64;SMALL LESS-THAN SIGN;Sm;0;ON;<small> 003C;;;;N;;;;;
FE65;SMALL GREATER-THAN SIGN;Sm;0;ON;<small> 003E;;;;N;;;;;
FE66;SMALL EQUALS SIGN;Sm;0;ON;<small> 003D;;;;N;;;;;
@@ -11865,11 +12854,11 @@ FF07;FULLWIDTH APOSTROPHE;Po;0;ON;<wide> 0027;;;;N;;;;;
FF08;FULLWIDTH LEFT PARENTHESIS;Ps;0;ON;<wide> 0028;;;;Y;FULLWIDTH OPENING PARENTHESIS;;;;
FF09;FULLWIDTH RIGHT PARENTHESIS;Pe;0;ON;<wide> 0029;;;;Y;FULLWIDTH CLOSING PARENTHESIS;;;;
FF0A;FULLWIDTH ASTERISK;Po;0;ON;<wide> 002A;;;;N;;;;;
-FF0B;FULLWIDTH PLUS SIGN;Sm;0;ET;<wide> 002B;;;;N;;;;;
+FF0B;FULLWIDTH PLUS SIGN;Sm;0;ES;<wide> 002B;;;;N;;;;;
FF0C;FULLWIDTH COMMA;Po;0;CS;<wide> 002C;;;;N;;;;;
-FF0D;FULLWIDTH HYPHEN-MINUS;Pd;0;ET;<wide> 002D;;;;N;;;;;
+FF0D;FULLWIDTH HYPHEN-MINUS;Pd;0;ES;<wide> 002D;;;;N;;;;;
FF0E;FULLWIDTH FULL STOP;Po;0;CS;<wide> 002E;;;;N;FULLWIDTH PERIOD;;;;
-FF0F;FULLWIDTH SOLIDUS;Po;0;ES;<wide> 002F;;;;N;FULLWIDTH SLASH;;;;
+FF0F;FULLWIDTH SOLIDUS;Po;0;CS;<wide> 002F;;;;N;FULLWIDTH SLASH;;;;
FF10;FULLWIDTH DIGIT ZERO;Nd;0;EN;<wide> 0030;0;0;0;N;;;;;
FF11;FULLWIDTH DIGIT ONE;Nd;0;EN;<wide> 0031;1;1;1;N;;;;;
FF12;FULLWIDTH DIGIT TWO;Nd;0;EN;<wide> 0032;2;2;2;N;;;;;
@@ -11955,7 +12944,7 @@ FF61;HALFWIDTH IDEOGRAPHIC FULL STOP;Po;0;ON;<narrow> 3002;;;;N;HALFWIDTH IDEOGR
FF62;HALFWIDTH LEFT CORNER BRACKET;Ps;0;ON;<narrow> 300C;;;;Y;HALFWIDTH OPENING CORNER BRACKET;;;;
FF63;HALFWIDTH RIGHT CORNER BRACKET;Pe;0;ON;<narrow> 300D;;;;Y;HALFWIDTH CLOSING CORNER BRACKET;;;;
FF64;HALFWIDTH IDEOGRAPHIC COMMA;Po;0;ON;<narrow> 3001;;;;N;;;;;
-FF65;HALFWIDTH KATAKANA MIDDLE DOT;Pc;0;ON;<narrow> 30FB;;;;N;;;;;
+FF65;HALFWIDTH KATAKANA MIDDLE DOT;Po;0;ON;<narrow> 30FB;;;;N;;;;;
FF66;HALFWIDTH KATAKANA LETTER WO;Lo;0;L;<narrow> 30F2;;;;N;;;;;
FF67;HALFWIDTH KATAKANA LETTER SMALL A;Lo;0;L;<narrow> 30A1;;;;N;;;;;
FF68;HALFWIDTH KATAKANA LETTER SMALL I;Lo;0;L;<narrow> 30A3;;;;N;;;;;
@@ -12353,6 +13342,81 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1013D;AEGEAN LIQUID MEASURE FIRST SUBUNIT;So;0;L;;;;;N;;;;;
1013E;AEGEAN MEASURE SECOND SUBUNIT;So;0;L;;;;;N;;;;;
1013F;AEGEAN MEASURE THIRD SUBUNIT;So;0;L;;;;;N;;;;;
+10140;GREEK ACROPHONIC ATTIC ONE QUARTER;Nl;0;ON;;;;1/4;N;;;;;
+10141;GREEK ACROPHONIC ATTIC ONE HALF;Nl;0;ON;;;;1/2;N;;;;;
+10142;GREEK ACROPHONIC ATTIC ONE DRACHMA;Nl;0;ON;;;;1;N;;;;;
+10143;GREEK ACROPHONIC ATTIC FIVE;Nl;0;ON;;;;5;N;;;;;
+10144;GREEK ACROPHONIC ATTIC FIFTY;Nl;0;ON;;;;50;N;;;;;
+10145;GREEK ACROPHONIC ATTIC FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;;
+10146;GREEK ACROPHONIC ATTIC FIVE THOUSAND;Nl;0;ON;;;;5000;N;;;;;
+10147;GREEK ACROPHONIC ATTIC FIFTY THOUSAND;Nl;0;ON;;;;50000;N;;;;;
+10148;GREEK ACROPHONIC ATTIC FIVE TALENTS;Nl;0;ON;;;;5;N;;;;;
+10149;GREEK ACROPHONIC ATTIC TEN TALENTS;Nl;0;ON;;;;10;N;;;;;
+1014A;GREEK ACROPHONIC ATTIC FIFTY TALENTS;Nl;0;ON;;;;50;N;;;;;
+1014B;GREEK ACROPHONIC ATTIC ONE HUNDRED TALENTS;Nl;0;ON;;;;100;N;;;;;
+1014C;GREEK ACROPHONIC ATTIC FIVE HUNDRED TALENTS;Nl;0;ON;;;;500;N;;;;;
+1014D;GREEK ACROPHONIC ATTIC ONE THOUSAND TALENTS;Nl;0;ON;;;;1000;N;;;;;
+1014E;GREEK ACROPHONIC ATTIC FIVE THOUSAND TALENTS;Nl;0;ON;;;;5000;N;;;;;
+1014F;GREEK ACROPHONIC ATTIC FIVE STATERS;Nl;0;ON;;;;5;N;;;;;
+10150;GREEK ACROPHONIC ATTIC TEN STATERS;Nl;0;ON;;;;10;N;;;;;
+10151;GREEK ACROPHONIC ATTIC FIFTY STATERS;Nl;0;ON;;;;50;N;;;;;
+10152;GREEK ACROPHONIC ATTIC ONE HUNDRED STATERS;Nl;0;ON;;;;100;N;;;;;
+10153;GREEK ACROPHONIC ATTIC FIVE HUNDRED STATERS;Nl;0;ON;;;;500;N;;;;;
+10154;GREEK ACROPHONIC ATTIC ONE THOUSAND STATERS;Nl;0;ON;;;;1000;N;;;;;
+10155;GREEK ACROPHONIC ATTIC TEN THOUSAND STATERS;Nl;0;ON;;;;10000;N;;;;;
+10156;GREEK ACROPHONIC ATTIC FIFTY THOUSAND STATERS;Nl;0;ON;;;;50000;N;;;;;
+10157;GREEK ACROPHONIC ATTIC TEN MNAS;Nl;0;ON;;;;10;N;;;;;
+10158;GREEK ACROPHONIC HERAEUM ONE PLETHRON;Nl;0;ON;;;;1;N;;;;;
+10159;GREEK ACROPHONIC THESPIAN ONE;Nl;0;ON;;;;1;N;;;;;
+1015A;GREEK ACROPHONIC HERMIONIAN ONE;Nl;0;ON;;;;1;N;;;;;
+1015B;GREEK ACROPHONIC EPIDAUREAN TWO;Nl;0;ON;;;;2;N;;;;;
+1015C;GREEK ACROPHONIC THESPIAN TWO;Nl;0;ON;;;;2;N;;;;;
+1015D;GREEK ACROPHONIC CYRENAIC TWO DRACHMAS;Nl;0;ON;;;;2;N;;;;;
+1015E;GREEK ACROPHONIC EPIDAUREAN TWO DRACHMAS;Nl;0;ON;;;;2;N;;;;;
+1015F;GREEK ACROPHONIC TROEZENIAN FIVE;Nl;0;ON;;;;5;N;;;;;
+10160;GREEK ACROPHONIC TROEZENIAN TEN;Nl;0;ON;;;;10;N;;;;;
+10161;GREEK ACROPHONIC TROEZENIAN TEN ALTERNATE FORM;Nl;0;ON;;;;10;N;;;;;
+10162;GREEK ACROPHONIC HERMIONIAN TEN;Nl;0;ON;;;;10;N;;;;;
+10163;GREEK ACROPHONIC MESSENIAN TEN;Nl;0;ON;;;;10;N;;;;;
+10164;GREEK ACROPHONIC THESPIAN TEN;Nl;0;ON;;;;10;N;;;;;
+10165;GREEK ACROPHONIC THESPIAN THIRTY;Nl;0;ON;;;;30;N;;;;;
+10166;GREEK ACROPHONIC TROEZENIAN FIFTY;Nl;0;ON;;;;50;N;;;;;
+10167;GREEK ACROPHONIC TROEZENIAN FIFTY ALTERNATE FORM;Nl;0;ON;;;;50;N;;;;;
+10168;GREEK ACROPHONIC HERMIONIAN FIFTY;Nl;0;ON;;;;50;N;;;;;
+10169;GREEK ACROPHONIC THESPIAN FIFTY;Nl;0;ON;;;;50;N;;;;;
+1016A;GREEK ACROPHONIC THESPIAN ONE HUNDRED;Nl;0;ON;;;;100;N;;;;;
+1016B;GREEK ACROPHONIC THESPIAN THREE HUNDRED;Nl;0;ON;;;;300;N;;;;;
+1016C;GREEK ACROPHONIC EPIDAUREAN FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;;
+1016D;GREEK ACROPHONIC TROEZENIAN FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;;
+1016E;GREEK ACROPHONIC THESPIAN FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;;
+1016F;GREEK ACROPHONIC CARYSTIAN FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;;
+10170;GREEK ACROPHONIC NAXIAN FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;;
+10171;GREEK ACROPHONIC THESPIAN ONE THOUSAND;Nl;0;ON;;;;1000;N;;;;;
+10172;GREEK ACROPHONIC THESPIAN FIVE THOUSAND;Nl;0;ON;;;;5000;N;;;;;
+10173;GREEK ACROPHONIC DELPHIC FIVE MNAS;Nl;0;ON;;;;5;N;;;;;
+10174;GREEK ACROPHONIC STRATIAN FIFTY MNAS;Nl;0;ON;;;;50;N;;;;;
+10175;GREEK ONE HALF SIGN;No;0;ON;;;;1/2;N;;;;;
+10176;GREEK ONE HALF SIGN ALTERNATE FORM;No;0;ON;;;;1/2;N;;;;;
+10177;GREEK TWO THIRDS SIGN;No;0;ON;;;;2/3;N;;;;;
+10178;GREEK THREE QUARTERS SIGN;No;0;ON;;;;3/4;N;;;;;
+10179;GREEK YEAR SIGN;So;0;ON;;;;;N;;;;;
+1017A;GREEK TALENT SIGN;So;0;ON;;;;;N;;;;;
+1017B;GREEK DRACHMA SIGN;So;0;ON;;;;;N;;;;;
+1017C;GREEK OBOL SIGN;So;0;ON;;;;;N;;;;;
+1017D;GREEK TWO OBOLS SIGN;So;0;ON;;;;;N;;;;;
+1017E;GREEK THREE OBOLS SIGN;So;0;ON;;;;;N;;;;;
+1017F;GREEK FOUR OBOLS SIGN;So;0;ON;;;;;N;;;;;
+10180;GREEK FIVE OBOLS SIGN;So;0;ON;;;;;N;;;;;
+10181;GREEK METRETES SIGN;So;0;ON;;;;;N;;;;;
+10182;GREEK KYATHOS BASE SIGN;So;0;ON;;;;;N;;;;;
+10183;GREEK LITRA SIGN;So;0;ON;;;;;N;;;;;
+10184;GREEK OUNKIA SIGN;So;0;ON;;;;;N;;;;;
+10185;GREEK XESTES SIGN;So;0;ON;;;;;N;;;;;
+10186;GREEK ARTABE SIGN;So;0;ON;;;;;N;;;;;
+10187;GREEK AROURA SIGN;So;0;ON;;;;;N;;;;;
+10188;GREEK GRAMMA SIGN;So;0;ON;;;;;N;;;;;
+10189;GREEK TRYBLION BASE SIGN;So;0;ON;;;;;N;;;;;
+1018A;GREEK ZERO SIGN;No;0;ON;;;;0;N;;;;;
10300;OLD ITALIC LETTER A;Lo;0;L;;;;;N;;;;;
10301;OLD ITALIC LETTER BE;Lo;0;L;;;;;N;;;;;
10302;OLD ITALIC LETTER KE;Lo;0;L;;;;;N;;;;;
@@ -12414,7 +13478,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
10347;GOTHIC LETTER IGGWS;Lo;0;L;;;;;N;;;;;
10348;GOTHIC LETTER HWAIR;Lo;0;L;;;;;N;;;;;
10349;GOTHIC LETTER OTHAL;Lo;0;L;;;;;N;;;;;
-1034A;GOTHIC LETTER NINE HUNDRED;Nl;0;L;;;;;N;;;;;
+1034A;GOTHIC LETTER NINE HUNDRED;Nl;0;L;;;;900;N;;;;;
10380;UGARITIC LETTER ALPA;Lo;0;L;;;;;N;;;;;
10381;UGARITIC LETTER BETA;Lo;0;L;;;;;N;;;;;
10382;UGARITIC LETTER GAMLA;Lo;0;L;;;;;N;;;;;
@@ -12446,6 +13510,56 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1039C;UGARITIC LETTER U;Lo;0;L;;;;;N;;;;;
1039D;UGARITIC LETTER SSU;Lo;0;L;;;;;N;;;;;
1039F;UGARITIC WORD DIVIDER;Po;0;L;;;;;N;;;;;
+103A0;OLD PERSIAN SIGN A;Lo;0;L;;;;;N;;;;;
+103A1;OLD PERSIAN SIGN I;Lo;0;L;;;;;N;;;;;
+103A2;OLD PERSIAN SIGN U;Lo;0;L;;;;;N;;;;;
+103A3;OLD PERSIAN SIGN KA;Lo;0;L;;;;;N;;;;;
+103A4;OLD PERSIAN SIGN KU;Lo;0;L;;;;;N;;;;;
+103A5;OLD PERSIAN SIGN GA;Lo;0;L;;;;;N;;;;;
+103A6;OLD PERSIAN SIGN GU;Lo;0;L;;;;;N;;;;;
+103A7;OLD PERSIAN SIGN XA;Lo;0;L;;;;;N;;;;;
+103A8;OLD PERSIAN SIGN CA;Lo;0;L;;;;;N;;;;;
+103A9;OLD PERSIAN SIGN JA;Lo;0;L;;;;;N;;;;;
+103AA;OLD PERSIAN SIGN JI;Lo;0;L;;;;;N;;;;;
+103AB;OLD PERSIAN SIGN TA;Lo;0;L;;;;;N;;;;;
+103AC;OLD PERSIAN SIGN TU;Lo;0;L;;;;;N;;;;;
+103AD;OLD PERSIAN SIGN DA;Lo;0;L;;;;;N;;;;;
+103AE;OLD PERSIAN SIGN DI;Lo;0;L;;;;;N;;;;;
+103AF;OLD PERSIAN SIGN DU;Lo;0;L;;;;;N;;;;;
+103B0;OLD PERSIAN SIGN THA;Lo;0;L;;;;;N;;;;;
+103B1;OLD PERSIAN SIGN PA;Lo;0;L;;;;;N;;;;;
+103B2;OLD PERSIAN SIGN BA;Lo;0;L;;;;;N;;;;;
+103B3;OLD PERSIAN SIGN FA;Lo;0;L;;;;;N;;;;;
+103B4;OLD PERSIAN SIGN NA;Lo;0;L;;;;;N;;;;;
+103B5;OLD PERSIAN SIGN NU;Lo;0;L;;;;;N;;;;;
+103B6;OLD PERSIAN SIGN MA;Lo;0;L;;;;;N;;;;;
+103B7;OLD PERSIAN SIGN MI;Lo;0;L;;;;;N;;;;;
+103B8;OLD PERSIAN SIGN MU;Lo;0;L;;;;;N;;;;;
+103B9;OLD PERSIAN SIGN YA;Lo;0;L;;;;;N;;;;;
+103BA;OLD PERSIAN SIGN VA;Lo;0;L;;;;;N;;;;;
+103BB;OLD PERSIAN SIGN VI;Lo;0;L;;;;;N;;;;;
+103BC;OLD PERSIAN SIGN RA;Lo;0;L;;;;;N;;;;;
+103BD;OLD PERSIAN SIGN RU;Lo;0;L;;;;;N;;;;;
+103BE;OLD PERSIAN SIGN LA;Lo;0;L;;;;;N;;;;;
+103BF;OLD PERSIAN SIGN SA;Lo;0;L;;;;;N;;;;;
+103C0;OLD PERSIAN SIGN ZA;Lo;0;L;;;;;N;;;;;
+103C1;OLD PERSIAN SIGN SHA;Lo;0;L;;;;;N;;;;;
+103C2;OLD PERSIAN SIGN SSA;Lo;0;L;;;;;N;;;;;
+103C3;OLD PERSIAN SIGN HA;Lo;0;L;;;;;N;;;;;
+103C8;OLD PERSIAN SIGN AURAMAZDAA;Lo;0;L;;;;;N;;;;;
+103C9;OLD PERSIAN SIGN AURAMAZDAA-2;Lo;0;L;;;;;N;;;;;
+103CA;OLD PERSIAN SIGN AURAMAZDAAHA;Lo;0;L;;;;;N;;;;;
+103CB;OLD PERSIAN SIGN XSHAAYATHIYA;Lo;0;L;;;;;N;;;;;
+103CC;OLD PERSIAN SIGN DAHYAAUSH;Lo;0;L;;;;;N;;;;;
+103CD;OLD PERSIAN SIGN DAHYAAUSH-2;Lo;0;L;;;;;N;;;;;
+103CE;OLD PERSIAN SIGN BAGA;Lo;0;L;;;;;N;;;;;
+103CF;OLD PERSIAN SIGN BUUMISH;Lo;0;L;;;;;N;;;;;
+103D0;OLD PERSIAN WORD DIVIDER;So;0;L;;;;;N;;;;;
+103D1;OLD PERSIAN NUMBER ONE;Nl;0;ON;;;;1;N;;;;;
+103D2;OLD PERSIAN NUMBER TWO;Nl;0;ON;;;;2;N;;;;;
+103D3;OLD PERSIAN NUMBER TEN;Nl;0;ON;;;;10;N;;;;;
+103D4;OLD PERSIAN NUMBER TWENTY;Nl;0;ON;;;;20;N;;;;;
+103D5;OLD PERSIAN NUMBER HUNDRED;Nl;0;ON;;;;100;N;;;;;
10400;DESERET CAPITAL LETTER LONG I;Lu;0;L;;;;;N;;;;10428;
10401;DESERET CAPITAL LETTER LONG E;Lu;0;L;;;;;N;;;;10429;
10402;DESERET CAPITAL LETTER LONG A;Lu;0;L;;;;;N;;;;1042A;
@@ -12669,6 +13783,71 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
10838;CYPRIOT SYLLABLE XE;Lo;0;R;;;;;N;;;;;
1083C;CYPRIOT SYLLABLE ZA;Lo;0;R;;;;;N;;;;;
1083F;CYPRIOT SYLLABLE ZO;Lo;0;R;;;;;N;;;;;
+10A00;KHAROSHTHI LETTER A;Lo;0;R;;;;;N;;;;;
+10A01;KHAROSHTHI VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+10A02;KHAROSHTHI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+10A03;KHAROSHTHI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
+10A05;KHAROSHTHI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
+10A06;KHAROSHTHI VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;;
+10A0C;KHAROSHTHI VOWEL LENGTH MARK;Mn;0;NSM;;;;;N;;;;;
+10A0D;KHAROSHTHI SIGN DOUBLE RING BELOW;Mn;220;NSM;;;;;N;;;;;
+10A0E;KHAROSHTHI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+10A0F;KHAROSHTHI SIGN VISARGA;Mn;230;NSM;;;;;N;;;;;
+10A10;KHAROSHTHI LETTER KA;Lo;0;R;;;;;N;;;;;
+10A11;KHAROSHTHI LETTER KHA;Lo;0;R;;;;;N;;;;;
+10A12;KHAROSHTHI LETTER GA;Lo;0;R;;;;;N;;;;;
+10A13;KHAROSHTHI LETTER GHA;Lo;0;R;;;;;N;;;;;
+10A15;KHAROSHTHI LETTER CA;Lo;0;R;;;;;N;;;;;
+10A16;KHAROSHTHI LETTER CHA;Lo;0;R;;;;;N;;;;;
+10A17;KHAROSHTHI LETTER JA;Lo;0;R;;;;;N;;;;;
+10A19;KHAROSHTHI LETTER NYA;Lo;0;R;;;;;N;;;;;
+10A1A;KHAROSHTHI LETTER TTA;Lo;0;R;;;;;N;;;;;
+10A1B;KHAROSHTHI LETTER TTHA;Lo;0;R;;;;;N;;;;;
+10A1C;KHAROSHTHI LETTER DDA;Lo;0;R;;;;;N;;;;;
+10A1D;KHAROSHTHI LETTER DDHA;Lo;0;R;;;;;N;;;;;
+10A1E;KHAROSHTHI LETTER NNA;Lo;0;R;;;;;N;;;;;
+10A1F;KHAROSHTHI LETTER TA;Lo;0;R;;;;;N;;;;;
+10A20;KHAROSHTHI LETTER THA;Lo;0;R;;;;;N;;;;;
+10A21;KHAROSHTHI LETTER DA;Lo;0;R;;;;;N;;;;;
+10A22;KHAROSHTHI LETTER DHA;Lo;0;R;;;;;N;;;;;
+10A23;KHAROSHTHI LETTER NA;Lo;0;R;;;;;N;;;;;
+10A24;KHAROSHTHI LETTER PA;Lo;0;R;;;;;N;;;;;
+10A25;KHAROSHTHI LETTER PHA;Lo;0;R;;;;;N;;;;;
+10A26;KHAROSHTHI LETTER BA;Lo;0;R;;;;;N;;;;;
+10A27;KHAROSHTHI LETTER BHA;Lo;0;R;;;;;N;;;;;
+10A28;KHAROSHTHI LETTER MA;Lo;0;R;;;;;N;;;;;
+10A29;KHAROSHTHI LETTER YA;Lo;0;R;;;;;N;;;;;
+10A2A;KHAROSHTHI LETTER RA;Lo;0;R;;;;;N;;;;;
+10A2B;KHAROSHTHI LETTER LA;Lo;0;R;;;;;N;;;;;
+10A2C;KHAROSHTHI LETTER VA;Lo;0;R;;;;;N;;;;;
+10A2D;KHAROSHTHI LETTER SHA;Lo;0;R;;;;;N;;;;;
+10A2E;KHAROSHTHI LETTER SSA;Lo;0;R;;;;;N;;;;;
+10A2F;KHAROSHTHI LETTER SA;Lo;0;R;;;;;N;;;;;
+10A30;KHAROSHTHI LETTER ZA;Lo;0;R;;;;;N;;;;;
+10A31;KHAROSHTHI LETTER HA;Lo;0;R;;;;;N;;;;;
+10A32;KHAROSHTHI LETTER KKA;Lo;0;R;;;;;N;;;;;
+10A33;KHAROSHTHI LETTER TTTHA;Lo;0;R;;;;;N;;;;;
+10A38;KHAROSHTHI SIGN BAR ABOVE;Mn;230;NSM;;;;;N;;;;;
+10A39;KHAROSHTHI SIGN CAUDA;Mn;1;NSM;;;;;N;;;;;
+10A3A;KHAROSHTHI SIGN DOT BELOW;Mn;220;NSM;;;;;N;;;;;
+10A3F;KHAROSHTHI VIRAMA;Mn;9;NSM;;;;;N;;;;;
+10A40;KHAROSHTHI DIGIT ONE;No;0;R;;;1;1;N;;;;;
+10A41;KHAROSHTHI DIGIT TWO;No;0;R;;;2;2;N;;;;;
+10A42;KHAROSHTHI DIGIT THREE;No;0;R;;;3;3;N;;;;;
+10A43;KHAROSHTHI DIGIT FOUR;No;0;R;;;4;4;N;;;;;
+10A44;KHAROSHTHI NUMBER TEN;No;0;R;;;;10;N;;;;;
+10A45;KHAROSHTHI NUMBER TWENTY;No;0;R;;;;20;N;;;;;
+10A46;KHAROSHTHI NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;;
+10A47;KHAROSHTHI NUMBER ONE THOUSAND;No;0;R;;;;1000;N;;;;;
+10A50;KHAROSHTHI PUNCTUATION DOT;Po;0;R;;;;;N;;;;;
+10A51;KHAROSHTHI PUNCTUATION SMALL CIRCLE;Po;0;R;;;;;N;;;;;
+10A52;KHAROSHTHI PUNCTUATION CIRCLE;Po;0;R;;;;;N;;;;;
+10A53;KHAROSHTHI PUNCTUATION CRESCENT BAR;Po;0;R;;;;;N;;;;;
+10A54;KHAROSHTHI PUNCTUATION MANGALAM;Po;0;R;;;;;N;;;;;
+10A55;KHAROSHTHI PUNCTUATION LOTUS;Po;0;R;;;;;N;;;;;
+10A56;KHAROSHTHI PUNCTUATION DANDA;Po;0;R;;;;;N;;;;;
+10A57;KHAROSHTHI PUNCTUATION DOUBLE DANDA;Po;0;R;;;;;N;;;;;
+10A58;KHAROSHTHI PUNCTUATION LINES;Po;0;R;;;;;N;;;;;
1D000;BYZANTINE MUSICAL SYMBOL PSILI;So;0;L;;;;;N;;;;;
1D001;BYZANTINE MUSICAL SYMBOL DASEIA;So;0;L;;;;;N;;;;;
1D002;BYZANTINE MUSICAL SYMBOL PERISPOMENI;So;0;L;;;;;N;;;;;
@@ -13134,6 +14313,76 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1D1DB;MUSICAL SYMBOL SCANDICUS FLEXUS;So;0;L;;;;;N;;;;;
1D1DC;MUSICAL SYMBOL TORCULUS RESUPINUS;So;0;L;;;;;N;;;;;
1D1DD;MUSICAL SYMBOL PES SUBPUNCTIS;So;0;L;;;;;N;;;;;
+1D200;GREEK VOCAL NOTATION SYMBOL-1;So;0;ON;;;;;N;;;;;
+1D201;GREEK VOCAL NOTATION SYMBOL-2;So;0;ON;;;;;N;;;;;
+1D202;GREEK VOCAL NOTATION SYMBOL-3;So;0;ON;;;;;N;;;;;
+1D203;GREEK VOCAL NOTATION SYMBOL-4;So;0;ON;;;;;N;;;;;
+1D204;GREEK VOCAL NOTATION SYMBOL-5;So;0;ON;;;;;N;;;;;
+1D205;GREEK VOCAL NOTATION SYMBOL-6;So;0;ON;;;;;N;;;;;
+1D206;GREEK VOCAL NOTATION SYMBOL-7;So;0;ON;;;;;N;;;;;
+1D207;GREEK VOCAL NOTATION SYMBOL-8;So;0;ON;;;;;N;;;;;
+1D208;GREEK VOCAL NOTATION SYMBOL-9;So;0;ON;;;;;N;;;;;
+1D209;GREEK VOCAL NOTATION SYMBOL-10;So;0;ON;;;;;N;;;;;
+1D20A;GREEK VOCAL NOTATION SYMBOL-11;So;0;ON;;;;;N;;;;;
+1D20B;GREEK VOCAL NOTATION SYMBOL-12;So;0;ON;;;;;N;;;;;
+1D20C;GREEK VOCAL NOTATION SYMBOL-13;So;0;ON;;;;;N;;;;;
+1D20D;GREEK VOCAL NOTATION SYMBOL-14;So;0;ON;;;;;N;;;;;
+1D20E;GREEK VOCAL NOTATION SYMBOL-15;So;0;ON;;;;;N;;;;;
+1D20F;GREEK VOCAL NOTATION SYMBOL-16;So;0;ON;;;;;N;;;;;
+1D210;GREEK VOCAL NOTATION SYMBOL-17;So;0;ON;;;;;N;;;;;
+1D211;GREEK VOCAL NOTATION SYMBOL-18;So;0;ON;;;;;N;;;;;
+1D212;GREEK VOCAL NOTATION SYMBOL-19;So;0;ON;;;;;N;;;;;
+1D213;GREEK VOCAL NOTATION SYMBOL-20;So;0;ON;;;;;N;;;;;
+1D214;GREEK VOCAL NOTATION SYMBOL-21;So;0;ON;;;;;N;;;;;
+1D215;GREEK VOCAL NOTATION SYMBOL-22;So;0;ON;;;;;N;;;;;
+1D216;GREEK VOCAL NOTATION SYMBOL-23;So;0;ON;;;;;N;;;;;
+1D217;GREEK VOCAL NOTATION SYMBOL-24;So;0;ON;;;;;N;;;;;
+1D218;GREEK VOCAL NOTATION SYMBOL-50;So;0;ON;;;;;N;;;;;
+1D219;GREEK VOCAL NOTATION SYMBOL-51;So;0;ON;;;;;N;;;;;
+1D21A;GREEK VOCAL NOTATION SYMBOL-52;So;0;ON;;;;;N;;;;;
+1D21B;GREEK VOCAL NOTATION SYMBOL-53;So;0;ON;;;;;N;;;;;
+1D21C;GREEK VOCAL NOTATION SYMBOL-54;So;0;ON;;;;;N;;;;;
+1D21D;GREEK INSTRUMENTAL NOTATION SYMBOL-1;So;0;ON;;;;;N;;;;;
+1D21E;GREEK INSTRUMENTAL NOTATION SYMBOL-2;So;0;ON;;;;;N;;;;;
+1D21F;GREEK INSTRUMENTAL NOTATION SYMBOL-4;So;0;ON;;;;;N;;;;;
+1D220;GREEK INSTRUMENTAL NOTATION SYMBOL-5;So;0;ON;;;;;N;;;;;
+1D221;GREEK INSTRUMENTAL NOTATION SYMBOL-7;So;0;ON;;;;;N;;;;;
+1D222;GREEK INSTRUMENTAL NOTATION SYMBOL-8;So;0;ON;;;;;N;;;;;
+1D223;GREEK INSTRUMENTAL NOTATION SYMBOL-11;So;0;ON;;;;;N;;;;;
+1D224;GREEK INSTRUMENTAL NOTATION SYMBOL-12;So;0;ON;;;;;N;;;;;
+1D225;GREEK INSTRUMENTAL NOTATION SYMBOL-13;So;0;ON;;;;;N;;;;;
+1D226;GREEK INSTRUMENTAL NOTATION SYMBOL-14;So;0;ON;;;;;N;;;;;
+1D227;GREEK INSTRUMENTAL NOTATION SYMBOL-17;So;0;ON;;;;;N;;;;;
+1D228;GREEK INSTRUMENTAL NOTATION SYMBOL-18;So;0;ON;;;;;N;;;;;
+1D229;GREEK INSTRUMENTAL NOTATION SYMBOL-19;So;0;ON;;;;;N;;;;;
+1D22A;GREEK INSTRUMENTAL NOTATION SYMBOL-23;So;0;ON;;;;;N;;;;;
+1D22B;GREEK INSTRUMENTAL NOTATION SYMBOL-24;So;0;ON;;;;;N;;;;;
+1D22C;GREEK INSTRUMENTAL NOTATION SYMBOL-25;So;0;ON;;;;;N;;;;;
+1D22D;GREEK INSTRUMENTAL NOTATION SYMBOL-26;So;0;ON;;;;;N;;;;;
+1D22E;GREEK INSTRUMENTAL NOTATION SYMBOL-27;So;0;ON;;;;;N;;;;;
+1D22F;GREEK INSTRUMENTAL NOTATION SYMBOL-29;So;0;ON;;;;;N;;;;;
+1D230;GREEK INSTRUMENTAL NOTATION SYMBOL-30;So;0;ON;;;;;N;;;;;
+1D231;GREEK INSTRUMENTAL NOTATION SYMBOL-32;So;0;ON;;;;;N;;;;;
+1D232;GREEK INSTRUMENTAL NOTATION SYMBOL-36;So;0;ON;;;;;N;;;;;
+1D233;GREEK INSTRUMENTAL NOTATION SYMBOL-37;So;0;ON;;;;;N;;;;;
+1D234;GREEK INSTRUMENTAL NOTATION SYMBOL-38;So;0;ON;;;;;N;;;;;
+1D235;GREEK INSTRUMENTAL NOTATION SYMBOL-39;So;0;ON;;;;;N;;;;;
+1D236;GREEK INSTRUMENTAL NOTATION SYMBOL-40;So;0;ON;;;;;N;;;;;
+1D237;GREEK INSTRUMENTAL NOTATION SYMBOL-42;So;0;ON;;;;;N;;;;;
+1D238;GREEK INSTRUMENTAL NOTATION SYMBOL-43;So;0;ON;;;;;N;;;;;
+1D239;GREEK INSTRUMENTAL NOTATION SYMBOL-45;So;0;ON;;;;;N;;;;;
+1D23A;GREEK INSTRUMENTAL NOTATION SYMBOL-47;So;0;ON;;;;;N;;;;;
+1D23B;GREEK INSTRUMENTAL NOTATION SYMBOL-48;So;0;ON;;;;;N;;;;;
+1D23C;GREEK INSTRUMENTAL NOTATION SYMBOL-49;So;0;ON;;;;;N;;;;;
+1D23D;GREEK INSTRUMENTAL NOTATION SYMBOL-50;So;0;ON;;;;;N;;;;;
+1D23E;GREEK INSTRUMENTAL NOTATION SYMBOL-51;So;0;ON;;;;;N;;;;;
+1D23F;GREEK INSTRUMENTAL NOTATION SYMBOL-52;So;0;ON;;;;;N;;;;;
+1D240;GREEK INSTRUMENTAL NOTATION SYMBOL-53;So;0;ON;;;;;N;;;;;
+1D241;GREEK INSTRUMENTAL NOTATION SYMBOL-54;So;0;ON;;;;;N;;;;;
+1D242;COMBINING GREEK MUSICAL TRISEME;Mn;230;NSM;;;;;N;;;;;
+1D243;COMBINING GREEK MUSICAL TETRASEME;Mn;230;NSM;;;;;N;;;;;
+1D244;COMBINING GREEK MUSICAL PENTASEME;Mn;230;NSM;;;;;N;;;;;
+1D245;GREEK MUSICAL LEIMMA;So;0;ON;;;;;N;;;;;
1D300;MONOGRAM FOR EARTH;So;0;ON;;;;;N;;;;;
1D301;DIGRAM FOR HEAVENLY EARTH;So;0;ON;;;;;N;;;;;
1D302;DIGRAM FOR HUMAN EARTH;So;0;ON;;;;;N;;;;;
@@ -13873,6 +15122,8 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1D6A1;MATHEMATICAL MONOSPACE SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;
1D6A2;MATHEMATICAL MONOSPACE SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;
1D6A3;MATHEMATICAL MONOSPACE SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;
+1D6A4;MATHEMATICAL ITALIC SMALL DOTLESS I;Ll;0;L;<font> 0131;;;;N;;;;;
+1D6A5;MATHEMATICAL ITALIC SMALL DOTLESS J;Ll;0;L;<font> 0237;;;;N;;;;;
1D6A8;MATHEMATICAL BOLD CAPITAL ALPHA;Lu;0;L;<font> 0391;;;;N;;;;;
1D6A9;MATHEMATICAL BOLD CAPITAL BETA;Lu;0;L;<font> 0392;;;;N;;;;;
1D6AA;MATHEMATICAL BOLD CAPITAL GAMMA;Lu;0;L;<font> 0393;;;;N;;;;;
diff --git a/gnu/usr.bin/perl/lib/unicore/mktables b/gnu/usr.bin/perl/lib/unicore/mktables
index 58092f19c55..42003663849 100644
--- a/gnu/usr.bin/perl/lib/unicore/mktables
+++ b/gnu/usr.bin/perl/lib/unicore/mktables
@@ -1,3 +1,6 @@
+## !!!!!!!!!!!!!! IF YOU MODIFY THIS FILE !!!!!!!!!!!!!!!!!!!!!!!!!
+## Any files created or read by this program should be listed in 'mktables.lst'
+
#!/usr/bin/perl -w
require 5.008; # Needs pack "U". Probably safest to run on 5.8.x
use strict;
@@ -28,6 +31,9 @@ my %BaseNames;
my $Verbose = 0;
my $MakeTestScript = 0;
my $AlwaysWrite = 0;
+my $UseDir = "";
+my $FileList = "$0.lst";
+my $MakeList = 0;
while (@ARGV)
{
@@ -38,12 +44,96 @@ while (@ARGV)
$Verbose = 0;
} elsif ($arg eq '-w') {
$AlwaysWrite = 1; # update the files even if they havent changed
+ $FileList = "";
} elsif ($arg eq '-maketest') {
$MakeTestScript = 1;
- } elsif ($arg eq '-C' && defined (my $dir = shift)) {
- chdir $dir or die "chdir $_: $!";
+ } elsif ($arg eq '-makelist') {
+ $MakeList = 1;
+ } elsif ($arg eq '-C' && defined ($UseDir = shift)) {
+ -d $UseDir or die "Unknown directory '$UseDir'";
+ } elsif ($arg eq '-L' && defined ($FileList = shift)) {
+ -e $FileList or die "Filelist '$FileList' doesn't appear to exist!";
} else {
- die "usage: $0 [-v|-q|-C dir] [-maketest]";
+ die "usage: $0 [-v|-q|-w|-C dir|-L filelist] [-maketest] [-makelist]\n",
+ " -v : Verbose Mode\n",
+ " -q : Quiet Mode\n",
+ " -w : Write files regardless\n",
+ " -maketest : Make test script\n",
+ " -makelist : Rewrite the file list based on current setup\n",
+ " -L filelist : Use this file list, (defaults to $0)\n",
+ " -C dir : Change to this directory before proceding\n";
+ }
+}
+
+if ($FileList) {
+ print "Reading file list '$FileList'\n"
+ if $Verbose;
+ open my $fh,"<",$FileList or die "Failed to read '$FileList':$!";
+ my @input;
+ my @output;
+ for my $list ( \@input, \@output ) {
+ while (<$fh>) {
+ s/^ \s+ | \s+ $//xg;
+ next if /^ \s* (?: \# .* )? $/x;
+ last if /^ =+ $/x;
+ my ( $file ) = split /\t/, $_;
+ push @$list, $file;
+ }
+ my %dupe;
+ @$list = grep !$dupe{ $_ }++, @$list;
+ }
+ close $fh;
+ die "No input or output files in '$FileList'!"
+ if !@input or !@output;
+ if ( $MakeList ) {
+ foreach my $file (@output) {
+ unlink $file;
+ }
+ }
+ if ( $Verbose ) {
+ print "Expecting ".scalar( @input )." input files. ",
+ "Checking ".scalar( @output )." output files.\n";
+ }
+ # we set maxtime to be the youngest input file, including $0 itself.
+ my $maxtime = -M $0; # do this before the chdir!
+ if ($UseDir) {
+ chdir $UseDir or die "Failed to chdir to '$UseDir':$!";
+ }
+ foreach my $in (@input) {
+ my $time = -M $in;
+ die "Missing input file '$in'" unless defined $time;
+ $maxtime = $time if $maxtime < $time;
+ }
+
+ # now we check to see if any output files are older than maxtime, if
+ # they are we need to continue on, otherwise we can presumably bail.
+ my $ok = 1;
+ foreach my $out (@output) {
+ if ( ! -e $out ) {
+ print "'$out' is missing.\n"
+ if $Verbose;
+ $ok = 0;
+ last;
+ }
+ if ( -M $out > $maxtime ) {
+ print "'$out' is too old.\n"
+ if $Verbose;
+ $ok = 0;
+ last;
+ }
+ }
+ if ($ok) {
+ print "Files seem to be ok, not bothering to rebuild.\n";
+ exit(0);
+ }
+ print "Must rebuild tables.\n"
+ if $Verbose;
+} else {
+ if ($Verbose) {
+ print "Not checking filelist.\n";
+ }
+ if ($UseDir) {
+ chdir $UseDir or die "Failed to chdir to '$UseDir':$!";
}
}
@@ -300,32 +390,15 @@ sub Table::New
return $Table;
}
-##
-## Returns true if the Table has no code points
-##
-sub Table::IsEmpty
-{
- my $Table = shift; #self
- return not @$Table;
-}
-
-##
-## Returns true if the Table has code points
-##
-sub Table::NotEmpty
-{
- my $Table = shift; #self
- return @$Table;
-}
##
## Returns the maximum code point currently in the table.
##
sub Table::Max
{
- my $Table = shift; #self
- confess "oops" if $Table->IsEmpty; ## must have code points to have a max
- return $Table->[-1]->[RANGE_END];
+ my $last = $_[0]->[-1]; ## last code point
+ confess "oops" unless $last; ## must have code points to have a max
+ return $last->[RANGE_END];
}
##
@@ -344,6 +417,8 @@ sub Table::Replace($$)
## Given a new code point, make the last range of the Table extend to
## include the new (and all intervening) code points.
##
+## Takes the time to make sure that the extension is valid.
+##
sub Table::Extend
{
my $Table = shift; #self
@@ -353,7 +428,21 @@ sub Table::Extend
confess "oops ($codepoint <= $PrevMax)" if $codepoint <= $PrevMax;
- $Table->[-1]->[RANGE_END] = $codepoint;
+ $Table->ExtendNoCheck($codepoint);
+}
+
+
+##
+## Given a new code point, make the last range of the Table extend to
+## include the new (and all intervening) code points.
+##
+## Does NOT check that the extension is valid. Assumes that the caller
+## has already made this check.
+##
+sub Table::ExtendNoCheck
+{
+ ## Optmized adding: Assumes $Table and $codepoint as parms
+ $_[0]->[-1]->[RANGE_END] = $_[1];
}
##
@@ -391,13 +480,14 @@ sub Table::Append
## If we've already got a range working, and this code point is the next
## one in line, and if the name is the same, just extend the current range.
##
- if ($Table->NotEmpty
+ my $last = $Table->[-1];
+ if ($last
and
- $Table->Max == $codepoint - 1
+ $last->[RANGE_END] == $codepoint - 1
and
- $Table->[-1]->[RANGE_NAME] eq $name)
+ $last->[RANGE_NAME] eq $name)
{
- $Table->Extend($codepoint);
+ $Table->ExtendNoCheck($codepoint);
}
else
{
@@ -495,7 +585,7 @@ sub Table::Merge
if ($start > $New->Max) {
$New->AppendRange($start, $end);
} elsif ($end > $New->Max) {
- $New->Extend($end);
+ $New->ExtendNoCheck($end);
}
}
@@ -572,7 +662,7 @@ sub Table::InvalidCode
{
my $Table = shift; #self
- return 0x1234 if $Table->IsEmpty();
+ return 0x1234 if not @$Table;
for my $set (@$Table)
{
@@ -1167,14 +1257,18 @@ sub EastAsianWidth_txt()
while (<IN>)
{
- next unless /^[0-9A-Fa-f]+;/;
+ next unless /^[0-9A-Fa-f]+(\.\.[0-9A-Fa-f]+)?;/;
s/#.*//;
s/\s+$//;
- my ($hexcode, $pv) = split(/\s*;\s*/);
- my $code = hex($hexcode);
+ my ($hexcodes, $pv) = split(/\s*;\s*/);
$EAW{$pv} ||= Table->New(Is => "EastAsianWidth$pv");
- $EAW{$pv}->Append($code);
+ my ($start, $end) = split(/\.\./, $hexcodes);
+ if (defined $end) {
+ $EAW{$pv}->AppendRange(hex($start), hex($end));
+ } else {
+ $EAW{$pv}->Append(hex($start));
+ }
}
close IN;
@@ -1990,6 +2084,63 @@ Jamo_txt();
SpecialCasing_txt();
CaseFolding_txt();
+if ( $FileList and $MakeList ) {
+
+ print "Updating '$FileList'\n"
+ if ($Verbose);
+
+ open my $ofh,">",$FileList
+ or die "Can't write to '$FileList':$!";
+ print $ofh <<"EOFHEADER";
+#
+# mktables.lst -- File list for mktables.
+#
+# Autogenerated on @{[scalar localtime]}
+#
+# - First section is input files
+# (mktables itself is automatically included)
+# - Section seperator is /^=+\$/
+# - Second section is a list of output files.
+# - Lines matching /^\\s*#/ are treated as comments
+# which along with blank lines are ignored.
+#
+
+# Input files:
+
+EOFHEADER
+ my @input=("version",glob('*.txt'));
+ print $ofh "$_\n" for
+ @input,
+ "\n=================================\n",
+ "# Output files:\n",
+ # special files
+ "Properties";
+
+
+ require File::Find;
+ my $count=0;
+ File::Find::find({
+ no_chdir=>1,
+ wanted=>sub {
+ if (/\.pl$/) {
+ s!^\./!!;
+ print $ofh "$_\n";
+ $count++;
+ }
+ },
+ },".");
+
+ print $ofh "\n# ",scalar(@input)," input files\n",
+ "# ",scalar($count+1)," output files\n\n",
+ "# End list\n";
+ close $ofh
+ or warn "Failed to close $ofh: $!";
+
+ print "Filelist has ",scalar(@input)," input files and ",
+ scalar($count+1)," output files\n"
+ if $Verbose;
+}
+print "All done\n" if $Verbose;
exit(0);
## TRAILING CODE IS USED BY MakePropTestScript()
diff --git a/gnu/usr.bin/perl/lib/unicore/mktables.lst b/gnu/usr.bin/perl/lib/unicore/mktables.lst
new file mode 100644
index 00000000000..c3b6dc8b32b
--- /dev/null
+++ b/gnu/usr.bin/perl/lib/unicore/mktables.lst
@@ -0,0 +1,505 @@
+#
+# mktables.lst -- File list for mktables.
+#
+# Autogenerated on Sun Apr 24 21:25:22 2005
+#
+# - First section is input files
+# (mktables itself is automatically included)
+# - Section seperator is /^=+$/
+# - Second section is a list of output files.
+# - Lines matching /^\s*#/ are treated as comments
+# which along with blank lines are ignored.
+#
+
+# Input files:
+
+version
+ArabicShaping.txt
+BidiMirroring.txt
+Blocks.txt
+CaseFolding.txt
+CompositionExclusions.txt
+EastAsianWidth.txt
+HangulSyllableType.txt
+Index.txt
+Jamo.txt
+LineBreak.txt
+NamedSequences.txt
+NamesList.txt
+NormalizationCorrections.txt
+PropertyAliases.txt
+PropList.txt
+PropValueAliases.txt
+ReadMe.txt
+Scripts.txt
+SpecialCasing.txt
+StandardizedVariants.txt
+UnicodeData.txt
+
+=================================
+
+# Output files:
+
+Properties
+Canonical.pl
+CombiningClass.pl
+Decomposition.pl
+Exact.pl
+Name.pl
+PVA.pl
+lib/bc/AL.pl
+lib/bc/AN.pl
+lib/bc/B.pl
+lib/bc/BN.pl
+lib/bc/CS.pl
+lib/bc/EN.pl
+lib/bc/ES.pl
+lib/bc/ET.pl
+lib/bc/L.pl
+lib/bc/LRE.pl
+lib/bc/LRO.pl
+lib/bc/NSM.pl
+lib/bc/ON.pl
+lib/bc/PDF.pl
+lib/bc/R.pl
+lib/bc/RLE.pl
+lib/bc/RLO.pl
+lib/bc/S.pl
+lib/bc/WS.pl
+lib/ccc/A.pl
+lib/ccc/AL.pl
+lib/ccc/AR.pl
+lib/ccc/ATAR.pl
+lib/ccc/ATB.pl
+lib/ccc/ATBL.pl
+lib/ccc/B.pl
+lib/ccc/BL.pl
+lib/ccc/BR.pl
+lib/ccc/DA.pl
+lib/ccc/DB.pl
+lib/ccc/IS.pl
+lib/ccc/KV.pl
+lib/ccc/L.pl
+lib/ccc/NK.pl
+lib/ccc/NR.pl
+lib/ccc/OV.pl
+lib/ccc/R.pl
+lib/ccc/VR.pl
+lib/dt/can.pl
+lib/dt/com.pl
+lib/dt/enc.pl
+lib/dt/fin.pl
+lib/dt/font.pl
+lib/dt/fra.pl
+lib/dt/init.pl
+lib/dt/iso.pl
+lib/dt/med.pl
+lib/dt/nar.pl
+lib/dt/nb.pl
+lib/dt/sml.pl
+lib/dt/sqr.pl
+lib/dt/sub.pl
+lib/dt/sup.pl
+lib/dt/vert.pl
+lib/dt/wide.pl
+lib/ea/A.pl
+lib/ea/F.pl
+lib/ea/H.pl
+lib/ea/N.pl
+lib/ea/Na.pl
+lib/ea/W.pl
+lib/gc_sc/AHex.pl
+lib/gc_sc/Alnum.pl
+lib/gc_sc/Alpha.pl
+lib/gc_sc/Alphabet.pl
+lib/gc_sc/Any.pl
+lib/gc_sc/Arab.pl
+lib/gc_sc/Armn.pl
+lib/gc_sc/ASCII.pl
+lib/gc_sc/AsciiHex.pl
+lib/gc_sc/Assigned.pl
+lib/gc_sc/Beng.pl
+lib/gc_sc/BidiC.pl
+lib/gc_sc/BidiCont.pl
+lib/gc_sc/Blank.pl
+lib/gc_sc/Bopo.pl
+lib/gc_sc/Brai.pl
+lib/gc_sc/Bugi.pl
+lib/gc_sc/Buhd.pl
+lib/gc_sc/C.pl
+lib/gc_sc/Canadian.pl
+lib/gc_sc/Cc.pl
+lib/gc_sc/Cf.pl
+lib/gc_sc/Cher.pl
+lib/gc_sc/Cn.pl
+lib/gc_sc/Cntrl.pl
+lib/gc_sc/Co.pl
+lib/gc_sc/Copt.pl
+lib/gc_sc/Cprt.pl
+lib/gc_sc/Cs.pl
+lib/gc_sc/Cyrl.pl
+lib/gc_sc/Dash.pl
+lib/gc_sc/Dash2.pl
+lib/gc_sc/Dep.pl
+lib/gc_sc/Deprecat.pl
+lib/gc_sc/Deva.pl
+lib/gc_sc/Dia.pl
+lib/gc_sc/Diacriti.pl
+lib/gc_sc/Digit.pl
+lib/gc_sc/Dsrt.pl
+lib/gc_sc/Ethi.pl
+lib/gc_sc/Ext.pl
+lib/gc_sc/Extender.pl
+lib/gc_sc/Geor.pl
+lib/gc_sc/Glag.pl
+lib/gc_sc/Goth.pl
+lib/gc_sc/Graph.pl
+lib/gc_sc/Grapheme.pl
+lib/gc_sc/Grek.pl
+lib/gc_sc/GrLink.pl
+lib/gc_sc/Gujr.pl
+lib/gc_sc/Guru.pl
+lib/gc_sc/Hang.pl
+lib/gc_sc/Hani.pl
+lib/gc_sc/Hano.pl
+lib/gc_sc/Hebr.pl
+lib/gc_sc/Hex.pl
+lib/gc_sc/HexDigit.pl
+lib/gc_sc/Hira.pl
+lib/gc_sc/Hyphen.pl
+lib/gc_sc/Hyphen2.pl
+lib/gc_sc/IdContin.pl
+lib/gc_sc/Ideo.pl
+lib/gc_sc/Ideograp.pl
+lib/gc_sc/IDSB.pl
+lib/gc_sc/IdsBinar.pl
+lib/gc_sc/IDST.pl
+lib/gc_sc/IdStart.pl
+lib/gc_sc/IdsTrina.pl
+lib/gc_sc/InAegean.pl
+lib/gc_sc/InAlphab.pl
+lib/gc_sc/InAncie2.pl
+lib/gc_sc/InAncien.pl
+lib/gc_sc/InArabi2.pl
+lib/gc_sc/InArabi3.pl
+lib/gc_sc/InArabi4.pl
+lib/gc_sc/InArabic.pl
+lib/gc_sc/InArmeni.pl
+lib/gc_sc/InArrows.pl
+lib/gc_sc/InBasicL.pl
+lib/gc_sc/InBengal.pl
+lib/gc_sc/InBlockE.pl
+lib/gc_sc/InBopom2.pl
+lib/gc_sc/InBopomo.pl
+lib/gc_sc/InBoxDra.pl
+lib/gc_sc/InBraill.pl
+lib/gc_sc/InBugine.pl
+lib/gc_sc/InBuhid.pl
+lib/gc_sc/InByzant.pl
+lib/gc_sc/InCherok.pl
+lib/gc_sc/InCjkCo2.pl
+lib/gc_sc/InCjkCo3.pl
+lib/gc_sc/InCjkCo4.pl
+lib/gc_sc/InCjkCom.pl
+lib/gc_sc/InCjkRad.pl
+lib/gc_sc/InCjkStr.pl
+lib/gc_sc/InCjkSym.pl
+lib/gc_sc/InCjkUn2.pl
+lib/gc_sc/InCjkUn3.pl
+lib/gc_sc/InCjkUni.pl
+lib/gc_sc/InCombi2.pl
+lib/gc_sc/InCombi3.pl
+lib/gc_sc/InCombi4.pl
+lib/gc_sc/InCombin.pl
+lib/gc_sc/InContro.pl
+lib/gc_sc/InCoptic.pl
+lib/gc_sc/InCurren.pl
+lib/gc_sc/InCyprio.pl
+lib/gc_sc/InCyril2.pl
+lib/gc_sc/InCyrill.pl
+lib/gc_sc/InDesere.pl
+lib/gc_sc/InDevana.pl
+lib/gc_sc/InDingba.pl
+lib/gc_sc/InEnclo2.pl
+lib/gc_sc/InEnclos.pl
+lib/gc_sc/InEthio2.pl
+lib/gc_sc/InEthio3.pl
+lib/gc_sc/InEthiop.pl
+lib/gc_sc/InGenera.pl
+lib/gc_sc/InGeomet.pl
+lib/gc_sc/InGeorg2.pl
+lib/gc_sc/InGeorgi.pl
+lib/gc_sc/InGlagol.pl
+lib/gc_sc/InGothic.pl
+lib/gc_sc/InGreekA.pl
+lib/gc_sc/InGreekE.pl
+lib/gc_sc/InGujara.pl
+lib/gc_sc/InGurmuk.pl
+lib/gc_sc/InHalfwi.pl
+lib/gc_sc/InHangu2.pl
+lib/gc_sc/InHangu3.pl
+lib/gc_sc/InHangul.pl
+lib/gc_sc/InHanuno.pl
+lib/gc_sc/InHebrew.pl
+lib/gc_sc/InHighPr.pl
+lib/gc_sc/InHighSu.pl
+lib/gc_sc/InHiraga.pl
+lib/gc_sc/InIdeogr.pl
+lib/gc_sc/InIpaExt.pl
+lib/gc_sc/InKanbun.pl
+lib/gc_sc/InKangxi.pl
+lib/gc_sc/InKannad.pl
+lib/gc_sc/InKatak2.pl
+lib/gc_sc/InKataka.pl
+lib/gc_sc/InKharos.pl
+lib/gc_sc/InKhmer.pl
+lib/gc_sc/InKhmerS.pl
+lib/gc_sc/InLao.pl
+lib/gc_sc/InLatin1.pl
+lib/gc_sc/InLatin2.pl
+lib/gc_sc/InLatin3.pl
+lib/gc_sc/InLatinE.pl
+lib/gc_sc/InLetter.pl
+lib/gc_sc/InLimbu.pl
+lib/gc_sc/InLinea2.pl
+lib/gc_sc/InLinear.pl
+lib/gc_sc/InLowSur.pl
+lib/gc_sc/InMalaya.pl
+lib/gc_sc/InMathe2.pl
+lib/gc_sc/InMathem.pl
+lib/gc_sc/InMisce2.pl
+lib/gc_sc/InMisce3.pl
+lib/gc_sc/InMisce4.pl
+lib/gc_sc/InMisce5.pl
+lib/gc_sc/InMiscel.pl
+lib/gc_sc/InModifi.pl
+lib/gc_sc/InMongol.pl
+lib/gc_sc/InMusica.pl
+lib/gc_sc/InMyanma.pl
+lib/gc_sc/InNewTai.pl
+lib/gc_sc/InNumber.pl
+lib/gc_sc/InOgham.pl
+lib/gc_sc/InOldIta.pl
+lib/gc_sc/InOldPer.pl
+lib/gc_sc/InOptica.pl
+lib/gc_sc/InOriya.pl
+lib/gc_sc/InOsmany.pl
+lib/gc_sc/InPhone2.pl
+lib/gc_sc/InPhonet.pl
+lib/gc_sc/InPrivat.pl
+lib/gc_sc/InRunic.pl
+lib/gc_sc/InShavia.pl
+lib/gc_sc/InSinhal.pl
+lib/gc_sc/InSmallF.pl
+lib/gc_sc/InSpacin.pl
+lib/gc_sc/InSpecia.pl
+lib/gc_sc/InSupers.pl
+lib/gc_sc/InSuppl2.pl
+lib/gc_sc/InSuppl3.pl
+lib/gc_sc/InSuppl4.pl
+lib/gc_sc/InSuppl5.pl
+lib/gc_sc/InSuppl6.pl
+lib/gc_sc/InSupple.pl
+lib/gc_sc/InSyloti.pl
+lib/gc_sc/InSyriac.pl
+lib/gc_sc/InTagalo.pl
+lib/gc_sc/InTagban.pl
+lib/gc_sc/InTags.pl
+lib/gc_sc/InTaiLe.pl
+lib/gc_sc/InTaiXua.pl
+lib/gc_sc/InTamil.pl
+lib/gc_sc/InTelugu.pl
+lib/gc_sc/InThaana.pl
+lib/gc_sc/InThai.pl
+lib/gc_sc/InTibeta.pl
+lib/gc_sc/InTifina.pl
+lib/gc_sc/InUgarit.pl
+lib/gc_sc/InUnifie.pl
+lib/gc_sc/InVaria2.pl
+lib/gc_sc/InVariat.pl
+lib/gc_sc/InVertic.pl
+lib/gc_sc/InYijing.pl
+lib/gc_sc/InYiRadi.pl
+lib/gc_sc/InYiSyll.pl
+lib/gc_sc/JoinC.pl
+lib/gc_sc/JoinCont.pl
+lib/gc_sc/Kana.pl
+lib/gc_sc/Khar.pl
+lib/gc_sc/Khmr.pl
+lib/gc_sc/Knda.pl
+lib/gc_sc/L.pl
+lib/gc_sc/Laoo.pl
+lib/gc_sc/Latn.pl
+lib/gc_sc/LC.pl
+lib/gc_sc/Limb.pl
+lib/gc_sc/LinearB.pl
+lib/gc_sc/Ll.pl
+lib/gc_sc/Lm.pl
+lib/gc_sc/Lo.pl
+lib/gc_sc/LOE.pl
+lib/gc_sc/LogicalO.pl
+lib/gc_sc/Lower.pl
+lib/gc_sc/Lowercas.pl
+lib/gc_sc/Lt.pl
+lib/gc_sc/Lu.pl
+lib/gc_sc/M.pl
+lib/gc_sc/Math.pl
+lib/gc_sc/Mc.pl
+lib/gc_sc/Me.pl
+lib/gc_sc/Mlym.pl
+lib/gc_sc/Mn.pl
+lib/gc_sc/Mong.pl
+lib/gc_sc/Mymr.pl
+lib/gc_sc/N.pl
+lib/gc_sc/NChar.pl
+lib/gc_sc/Nd.pl
+lib/gc_sc/NewTaiLu.pl
+lib/gc_sc/Nl.pl
+lib/gc_sc/No.pl
+lib/gc_sc/Nonchara.pl
+lib/gc_sc/OAlpha.pl
+lib/gc_sc/ODI.pl
+lib/gc_sc/Ogam.pl
+lib/gc_sc/OGrExt.pl
+lib/gc_sc/OIDC.pl
+lib/gc_sc/OIDS.pl
+lib/gc_sc/OldItali.pl
+lib/gc_sc/OldPersi.pl
+lib/gc_sc/OLower.pl
+lib/gc_sc/OMath.pl
+lib/gc_sc/Orya.pl
+lib/gc_sc/Osma.pl
+lib/gc_sc/OtherAlp.pl
+lib/gc_sc/OtherDef.pl
+lib/gc_sc/OtherGra.pl
+lib/gc_sc/OtherIdC.pl
+lib/gc_sc/OtherIdS.pl
+lib/gc_sc/OtherLow.pl
+lib/gc_sc/OtherMat.pl
+lib/gc_sc/OtherUpp.pl
+lib/gc_sc/OUpper.pl
+lib/gc_sc/P.pl
+lib/gc_sc/PatSyn.pl
+lib/gc_sc/PatternS.pl
+lib/gc_sc/PatternW.pl
+lib/gc_sc/PatWS.pl
+lib/gc_sc/Pc.pl
+lib/gc_sc/Pd.pl
+lib/gc_sc/Pe.pl
+lib/gc_sc/Pf.pl
+lib/gc_sc/Pi.pl
+lib/gc_sc/Po.pl
+lib/gc_sc/Print.pl
+lib/gc_sc/Ps.pl
+lib/gc_sc/Punct.pl
+lib/gc_sc/Qaai.pl
+lib/gc_sc/QMark.pl
+lib/gc_sc/Quotatio.pl
+lib/gc_sc/Radical.pl
+lib/gc_sc/Radical2.pl
+lib/gc_sc/Runr.pl
+lib/gc_sc/S.pl
+lib/gc_sc/Sc.pl
+lib/gc_sc/SD.pl
+lib/gc_sc/Shaw.pl
+lib/gc_sc/Sinh.pl
+lib/gc_sc/Sk.pl
+lib/gc_sc/Sm.pl
+lib/gc_sc/So.pl
+lib/gc_sc/SoftDott.pl
+lib/gc_sc/Space.pl
+lib/gc_sc/SpacePer.pl
+lib/gc_sc/STerm.pl
+lib/gc_sc/Sterm2.pl
+lib/gc_sc/SylotiNa.pl
+lib/gc_sc/Syrc.pl
+lib/gc_sc/Tagb.pl
+lib/gc_sc/TaiLe.pl
+lib/gc_sc/Taml.pl
+lib/gc_sc/Telu.pl
+lib/gc_sc/Term.pl
+lib/gc_sc/Terminal.pl
+lib/gc_sc/Tfng.pl
+lib/gc_sc/Tglg.pl
+lib/gc_sc/Thaa.pl
+lib/gc_sc/Thai.pl
+lib/gc_sc/Tibt.pl
+lib/gc_sc/Title.pl
+lib/gc_sc/Ugar.pl
+lib/gc_sc/UIdeo.pl
+lib/gc_sc/UnifiedI.pl
+lib/gc_sc/Upper.pl
+lib/gc_sc/Uppercas.pl
+lib/gc_sc/Variatio.pl
+lib/gc_sc/VS.pl
+lib/gc_sc/WhiteSpa.pl
+lib/gc_sc/Word.pl
+lib/gc_sc/WSpace.pl
+lib/gc_sc/XDigit.pl
+lib/gc_sc/Yiii.pl
+lib/gc_sc/Z.pl
+lib/gc_sc/Zl.pl
+lib/gc_sc/Zp.pl
+lib/gc_sc/Zs.pl
+lib/gc_sc/Zyyy.pl
+lib/gc_sc/_CanonDC.pl
+lib/gc_sc/_CaseIgn.pl
+lib/gc_sc/_CombAbo.pl
+lib/hst/L.pl
+lib/hst/LV.pl
+lib/hst/LVT.pl
+lib/hst/T.pl
+lib/hst/V.pl
+lib/jt/C.pl
+lib/jt/D.pl
+lib/jt/R.pl
+lib/jt/U.pl
+lib/lb/AI.pl
+lib/lb/AL.pl
+lib/lb/B2.pl
+lib/lb/BA.pl
+lib/lb/BB.pl
+lib/lb/BK.pl
+lib/lb/CB.pl
+lib/lb/CL.pl
+lib/lb/CM.pl
+lib/lb/CR.pl
+lib/lb/EX.pl
+lib/lb/GL.pl
+lib/lb/H2.pl
+lib/lb/H3.pl
+lib/lb/HY.pl
+lib/lb/ID.pl
+lib/lb/IN.pl
+lib/lb/IS.pl
+lib/lb/JL.pl
+lib/lb/JT.pl
+lib/lb/JV.pl
+lib/lb/LF.pl
+lib/lb/NL.pl
+lib/lb/NS.pl
+lib/lb/NU.pl
+lib/lb/OP.pl
+lib/lb/PO.pl
+lib/lb/PR.pl
+lib/lb/QU.pl
+lib/lb/SA.pl
+lib/lb/SG.pl
+lib/lb/SP.pl
+lib/lb/SY.pl
+lib/lb/WJ.pl
+lib/lb/XX.pl
+lib/lb/ZW.pl
+lib/nt/De.pl
+lib/nt/Di.pl
+lib/nt/Nu.pl
+To/Digit.pl
+To/Fold.pl
+To/Lower.pl
+To/Title.pl
+To/Upper.pl
+
+# 22 input files
+# 458 output files
+
+# End list
diff --git a/gnu/usr.bin/perl/lib/unicore/version b/gnu/usr.bin/perl/lib/unicore/version
index 1454f6ed4b7..ee74734aa22 100644
--- a/gnu/usr.bin/perl/lib/unicore/version
+++ b/gnu/usr.bin/perl/lib/unicore/version
@@ -1 +1 @@
-4.0.1
+4.1.0
diff --git a/gnu/usr.bin/perl/lib/utf8.pm b/gnu/usr.bin/perl/lib/utf8.pm
index 817a61ccbd8..56c991bef9a 100644
--- a/gnu/usr.bin/perl/lib/utf8.pm
+++ b/gnu/usr.bin/perl/lib/utf8.pm
@@ -2,7 +2,7 @@ package utf8;
$utf8::hint_bits = 0x00800000;
-our $VERSION = '1.04';
+our $VERSION = '1.06';
sub import {
$^H |= $utf8::hint_bits;
@@ -16,6 +16,7 @@ sub unimport {
sub AUTOLOAD {
require "utf8_heavy.pl";
goto &$AUTOLOAD if defined &$AUTOLOAD;
+ require Carp;
Carp::croak("Undefined subroutine $AUTOLOAD called");
}
@@ -60,7 +61,7 @@ useful for their own purposes, but they are not really part of the
"pragmatic" effect.
Until UTF-8 becomes the default format for source text, either this
-pragma or the L</encoding> pragma should be used to recognize UTF-8
+pragma or the L<encoding> pragma should be used to recognize UTF-8
in the source. When UTF-8 becomes the standard source format, this
pragma will effectively become a no-op. For convenience in what
follows the term I<UTF-X> is used to refer to UTF-8 on ASCII and ISO
@@ -92,7 +93,7 @@ UTF-8. If you want to have such bytes and use utf8, you can disable
utf8 until the end the block (or file, if at top level) by C<no utf8;>.
If you want to automatically upgrade your 8-bit legacy bytes to UTF-8,
-use the L</encoding> pragma instead of this pragma. For example, if
+use the L<encoding> pragma instead of this pragma. For example, if
you want to implicitly upgrade your ISO 8859-1 (Latin-1) bytes to UTF-8
as used in e.g. C<chr()> and C<\x{...}>, try this:
diff --git a/gnu/usr.bin/perl/lib/vmsish.pm b/gnu/usr.bin/perl/lib/vmsish.pm
index 4907ad388d2..30c8eb1656d 100644
--- a/gnu/usr.bin/perl/lib/vmsish.pm
+++ b/gnu/usr.bin/perl/lib/vmsish.pm
@@ -1,6 +1,6 @@
package vmsish;
-our $VERSION = '1.01';
+our $VERSION = '1.02';
=head1 NAME
@@ -54,7 +54,7 @@ default of Universal Time (a.k.a Greenwich Mean Time, or GMT).
This suppresses printing of VMS status messages to SYS$OUTPUT and
SYS$ERROR if Perl terminates with an error status. and allows
programs that are expecting "unix-style" Perl to avoid having to parse
-VMS error messages. It does not supress any messages from Perl
+VMS error messages. It does not suppress any messages from Perl
itself, just the messages generated by DCL after Perl exits. The DCL
symbol $STATUS will still have the termination status, but with a
high-order bit set:
@@ -103,7 +103,7 @@ Note that an exit() or die() that is compiled 'hushed' because of "use
vmsish" is not un-hushed by calling vmsish::hushed(0) at runtime.
The messages from error exits from inside the Perl core are generally
-more serious, and are not supressed.
+more serious, and are not suppressed.
=back
diff --git a/gnu/usr.bin/perl/lib/warnings.pm b/gnu/usr.bin/perl/lib/warnings.pm
index 862f26d27c9..e43b686c908 100644
--- a/gnu/usr.bin/perl/lib/warnings.pm
+++ b/gnu/usr.bin/perl/lib/warnings.pm
@@ -1,4 +1,4 @@
-
+# -*- buffer-read-only: t -*-
# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
# This file was created by warnings.pl
# Any changes made here will be lost.
@@ -6,7 +6,7 @@
package warnings;
-our $VERSION = '1.03';
+our $VERSION = '1.05';
=head1 NAME
@@ -294,6 +294,7 @@ $All = "" ; vec($All, $Offsets{'all'}, 2) = 3 ;
sub Croaker
{
+ local $Carp::CarpInternal{'warnings'};
delete $Carp::CarpInternal{'warnings'};
Carp::croak(@_);
}
@@ -493,3 +494,4 @@ sub warnif
}
1;
+# ex: set ro:
diff --git a/gnu/usr.bin/perl/lib/warnings.t b/gnu/usr.bin/perl/lib/warnings.t
index 0647b552f4f..f23d9e67f80 100644
--- a/gnu/usr.bin/perl/lib/warnings.t
+++ b/gnu/usr.bin/perl/lib/warnings.t
@@ -5,6 +5,7 @@ BEGIN {
@INC = '../lib';
$ENV{PERL5LIB} = '../lib';
require Config; import Config;
+ require './test.pl';
}
use File::Path;
@@ -12,12 +13,8 @@ use File::Spec::Functions;
$| = 1;
-my $Is_VMS = $^O eq 'VMS';
-my $Is_MSWin32 = $^O eq 'MSWin32';
-my $Is_NetWare = $^O eq 'NetWare';
my $Is_MacOS = $^O eq 'MacOS';
my $tmpfile = "tmp0000";
-my $i = 0 ;
1 while -e ++$tmpfile;
END { if ($tmpfile) { 1 while unlink $tmpfile} }
@@ -59,7 +56,8 @@ foreach my $file (@w_files) {
undef $/;
-print "1.." . (scalar(@prgs)-$files) . "\n";
+plan tests => (scalar(@prgs)-$files);
+
for (@prgs){
@@ -73,13 +71,14 @@ for (@prgs){
my @temp_path = () ;
if (s/^\s*-\w+//){
$switch = $&;
- $switch =~ s/(-\S*[A-Z]\S*)/"$1"/ if $Is_VMS; # protect uc switches
}
my($prog,$expected) = split(/\nEXPECT\n/, $_);
+ my ($todo, $todo_reason);
+ $todo = $prog =~ s/^#\s*TODO(.*)\n//m and $todo_reason = $1;
if ( $prog =~ /--FILE--/) {
my(@files) = split(/\n--FILE--\s*([^\s\n]*)\s*\n/, $prog) ;
shift @files ;
- die "Internal error test $i didn't split into pairs, got " .
+ die "Internal error test $test didn't split into pairs, got " .
scalar(@files) . "[" . join("%%%%", @files) ."]\n"
if @files % 2 ;
while (@files > 2) {
@@ -114,15 +113,7 @@ for (@prgs){
print TEST "\n#line 1\n"; # So the line numbers don't get messed up.
print TEST $prog,"\n";
close TEST or die "Cannot close $tmpfile: $!";
- my $results = $Is_VMS ?
- `./perl "-I../lib" $switch $tmpfile` :
- $Is_MSWin32 ?
- `.\\perl -I../lib $switch $tmpfile` :
- $Is_NetWare ?
- `perl -I../lib $switch $tmpfile` :
- $Is_MacOS ?
- `$^X -I::lib $switch -MMac::err=unix $tmpfile` :
- `./perl -I../lib $switch $tmpfile`;
+ my $results = runperl( switches => [$switch], stderr => 1, progfile => $tmpfile );
my $status = $?;
$results =~ s/\n+$//;
# allow expected output to be written as if $prog is on STDIN
@@ -166,23 +157,34 @@ for (@prgs){
}
die "$0: can't have OPTION regex and random\n"
if $option_regex + option_random > 1;
+ my $ok = 1;
if ( $results =~ s/^SKIPPED\n//) {
print "$results\n" ;
}
elsif ($option_random)
{
- print "not " if !randomMatch($results, $expected);
+ $ok = randomMatch($results, $expected);
}
elsif (($prefix && (( $option_regex && $results !~ /^$expected/) ||
(!$option_regex && $results !~ /^\Q$expected/))) or
(!$prefix && (( $option_regex && $results !~ /^$expected/) ||
(!$option_regex && $results ne $expected)))) {
- print STDERR "PROG: $switch\n$prog\n";
- print STDERR "EXPECTED:\n$expected\n";
- print STDERR "GOT:\n$results\n";
- print "not ";
+ my $err_line = "PROG: $switch\n$prog\n" .
+ "EXPECTED:\n$expected\n" .
+ "GOT:\n$results\n";
+ if ($todo) {
+ $err_line =~ s/^/# /mg;
+ print $err_line; # Harness can't filter it out from STDERR.
+ }
+ else {
+ print STDERR $err_line;
+ }
+ $ok = 0;
}
- print "ok " . ++$i . "\n";
+
+ $TODO = $todo ? $todo_reason : 0;
+ ok($ok);
+
foreach (@temps)
{ unlink $_ if $_ }
foreach (@temp_path)
diff --git a/gnu/usr.bin/perl/lib/warnings/register.pm b/gnu/usr.bin/perl/lib/warnings/register.pm
index c5dc1999a03..57c865df522 100644
--- a/gnu/usr.bin/perl/lib/warnings/register.pm
+++ b/gnu/usr.bin/perl/lib/warnings/register.pm
@@ -1,6 +1,6 @@
-package warnings::register ;
+package warnings::register;
-our $VERSION = '1.00';
+our $VERSION = '1.01';
=pod
@@ -10,42 +10,42 @@ warnings::register - warnings import function
=head1 SYNOPSIS
- use warnings::register ;
+ use warnings::register;
=head1 DESCRIPTION
-Create a warnings category with the same name as the current package.
-
-See L<perlmodlib/Pragmatic Modules> and L<perllexwarn>.
+Creates a warnings category with the same name as the current package.
+See L<warnings> and L<perllexwarn> for more information on this module's
+usage.
=cut
-require warnings ;
+require warnings;
sub mkMask
{
- my ($bit) = @_ ;
- my $mask = "" ;
+ my ($bit) = @_;
+ my $mask = "";
- vec($mask, $bit, 1) = 1 ;
- return $mask ;
+ vec($mask, $bit, 1) = 1;
+ return $mask;
}
sub import
{
- shift ;
- my $package = (caller(0))[0] ;
+ shift;
+ my $package = (caller(0))[0];
if (! defined $warnings::Bits{$package}) {
- $warnings::Bits{$package} = mkMask($warnings::LAST_BIT) ;
- vec($warnings::Bits{'all'}, $warnings::LAST_BIT, 1) = 1 ;
- $warnings::Offsets{$package} = $warnings::LAST_BIT ++ ;
+ $warnings::Bits{$package} = mkMask($warnings::LAST_BIT);
+ vec($warnings::Bits{'all'}, $warnings::LAST_BIT, 1) = 1;
+ $warnings::Offsets{$package} = $warnings::LAST_BIT ++;
foreach my $k (keys %warnings::Bits) {
- vec($warnings::Bits{$k}, $warnings::LAST_BIT, 1) = 0 ;
+ vec($warnings::Bits{$k}, $warnings::LAST_BIT, 1) = 0;
}
$warnings::DeadBits{$package} = mkMask($warnings::LAST_BIT);
- vec($warnings::DeadBits{'all'}, $warnings::LAST_BIT++, 1) = 1 ;
+ vec($warnings::DeadBits{'all'}, $warnings::LAST_BIT++, 1) = 1;
}
}
-1 ;
+1;
diff --git a/gnu/usr.bin/perl/locale.c b/gnu/usr.bin/perl/locale.c
index a73c5d68d25..446cc92b975 100644
--- a/gnu/usr.bin/perl/locale.c
+++ b/gnu/usr.bin/perl/locale.c
@@ -1,7 +1,7 @@
/* locale.c
*
* Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999,
- * 2000, 2001, 2002, 2003, by Larry Wall and others
+ * 2000, 2001, 2002, 2003, 2005, 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.
@@ -36,6 +36,7 @@
#include "reentr.h"
+#if defined(USE_LOCALE_NUMERIC) || defined(USE_LOCALE_COLLATE)
/*
* Standardize the locale name from a string returned by 'setlocale'.
*
@@ -52,24 +53,19 @@
STATIC char *
S_stdize_locale(pTHX_ char *locs)
{
- char *s;
+ const char *s = strchr(locs, '=');
bool okay = TRUE;
- if ((s = strchr(locs, '='))) {
- char *t;
-
+ if (s) {
+ const char * const t = strchr(s, '.');
okay = FALSE;
- if ((t = strchr(s, '.'))) {
- char *u;
-
- if ((u = strchr(t, '\n'))) {
-
- if (u[1] == 0) {
- STRLEN len = u - s;
- Move(s + 1, locs, len, char);
- locs[len] = 0;
- okay = TRUE;
- }
+ if (t) {
+ const char * const u = strchr(t, '\n');
+ if (u && (u[1] == 0)) {
+ const STRLEN len = u - s;
+ Move(s + 1, locs, len, char);
+ locs[len] = 0;
+ okay = TRUE;
}
}
}
@@ -79,6 +75,7 @@ S_stdize_locale(pTHX_ char *locs)
return locs;
}
+#endif
void
Perl_set_numeric_radix(pTHX)
@@ -115,10 +112,8 @@ Perl_new_numeric(pTHX_ char *newnum)
#ifdef USE_LOCALE_NUMERIC
if (! newnum) {
- if (PL_numeric_name) {
- Safefree(PL_numeric_name);
- PL_numeric_name = NULL;
- }
+ Safefree(PL_numeric_name);
+ PL_numeric_name = NULL;
PL_numeric_standard = TRUE;
PL_numeric_local = TRUE;
return;
@@ -127,7 +122,8 @@ Perl_new_numeric(pTHX_ char *newnum)
if (! PL_numeric_name || strNE(PL_numeric_name, newnum)) {
Safefree(PL_numeric_name);
PL_numeric_name = stdize_locale(savepv(newnum));
- PL_numeric_standard = (strEQ(newnum, "C") || strEQ(newnum, "POSIX"));
+ PL_numeric_standard = ((*newnum == 'C' && newnum[1] == '\0')
+ || strEQ(newnum, "POSIX"));
PL_numeric_local = TRUE;
set_numeric_radix();
}
@@ -172,7 +168,6 @@ void
Perl_new_ctype(pTHX_ char *newctype)
{
#ifdef USE_LOCALE_CTYPE
-
int i;
for (i = 0; i < 256; i++) {
@@ -185,6 +180,7 @@ Perl_new_ctype(pTHX_ char *newctype)
}
#endif /* USE_LOCALE_CTYPE */
+ PERL_UNUSED_ARG(newctype);
}
/*
@@ -211,16 +207,17 @@ Perl_new_collate(pTHX_ char *newcoll)
++PL_collation_ix;
Safefree(PL_collation_name);
PL_collation_name = stdize_locale(savepv(newcoll));
- PL_collation_standard = (strEQ(newcoll, "C") || strEQ(newcoll, "POSIX"));
+ PL_collation_standard = ((*newcoll == 'C' && newcoll[1] == '\0')
+ || strEQ(newcoll, "POSIX"));
{
/* 2: at most so many chars ('a', 'b'). */
/* 50: surely no system expands a char more. */
#define XFRMBUFSIZE (2 * 50)
char xbuf[XFRMBUFSIZE];
- Size_t fa = strxfrm(xbuf, "a", XFRMBUFSIZE);
- Size_t fb = strxfrm(xbuf, "ab", XFRMBUFSIZE);
- SSize_t mult = fb - fa;
+ const Size_t fa = strxfrm(xbuf, "a", XFRMBUFSIZE);
+ const Size_t fb = strxfrm(xbuf, "ab", XFRMBUFSIZE);
+ const SSize_t mult = fb - fa;
if (mult < 1)
Perl_croak(aTHX_ "strxfrm() gets absurd");
PL_collxfrm_base = (fa > (Size_t)mult) ? (fa - mult) : 0;
@@ -534,16 +531,13 @@ Perl_init_i18nl10n(pTHX_ int printwarn)
#endif
#ifdef USE_LOCALE_CTYPE
- if (curctype != NULL)
- Safefree(curctype);
+ Safefree(curctype);
#endif /* USE_LOCALE_CTYPE */
#ifdef USE_LOCALE_COLLATE
- if (curcoll != NULL)
- Safefree(curcoll);
+ Safefree(curcoll);
#endif /* USE_LOCALE_COLLATE */
#ifdef USE_LOCALE_NUMERIC
- if (curnum != NULL)
- Safefree(curnum);
+ Safefree(curnum);
#endif /* USE_LOCALE_NUMERIC */
return ok;
}
@@ -575,7 +569,7 @@ Perl_mem_collxfrm(pTHX_ const char *s, STRLEN len, STRLEN *xlen)
/* the +1 is for the terminating NUL. */
xAlloc = sizeof(PL_collation_ix) + PL_collxfrm_base + (PL_collxfrm_mult * len) + 1;
- New(171, xbuf, xAlloc, char);
+ Newx(xbuf, xAlloc, char);
if (! xbuf)
goto bad;
@@ -615,3 +609,12 @@ Perl_mem_collxfrm(pTHX_ const char *s, STRLEN len, STRLEN *xlen)
#endif /* USE_LOCALE_COLLATE */
+/*
+ * Local variables:
+ * c-indentation-style: bsd
+ * c-basic-offset: 4
+ * indent-tabs-mode: t
+ * End:
+ *
+ * ex: set ts=8 sts=4 sw=4 noet:
+ */
diff --git a/gnu/usr.bin/perl/mpeix/mpeix.c b/gnu/usr.bin/perl/mpeix/mpeix.c
index 4898fd76254..a758c23be9e 100644
--- a/gnu/usr.bin/perl/mpeix/mpeix.c
+++ b/gnu/usr.bin/perl/mpeix/mpeix.c
@@ -194,10 +194,19 @@ void __perl_mpe_move_fast(int len, // %r26 == byte length
*
*/
+#ifndef _POSIX_SOURCE
+# define _POSIX_SOURCE
+#endif
+#ifndef _SOCKET_SOURCE
+# define _SOCKET_SOURCE
+#endif
#include <unistd.h>
#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
+#include <string.h>
+#include <sys/socket.h>
+#include <limits.h>
#include <mpe.h>
extern void FCONTROL(short, short, longpointer);
@@ -205,23 +214,28 @@ extern void PRINTFILEINFO(int);
int ftruncate(int fd, long wantsize);
-int ftruncate(int fd, long wantsize) {
-
-int ccode_return,dummy=0;
-
-if (lseek(fd, wantsize, SEEK_SET) < 0) {
- return (-1);
-}
+int
+ftruncate(int fd, long wantsize)
+{
+ int ccode_return,dummy=0;
-FCONTROL(_mpe_fileno(fd),6,__perl_mpe_longaddr(&dummy)); /* Write new EOF */
-if ((ccode_return=ccode()) != CCE) {
- fprintf(stderr,"MPE ftruncate failed, ccode=%d, wantsize=%ld\n",ccode_return,wantsize);
- PRINTFILEINFO(_mpe_fileno(fd));
- errno = ESYSERR;
- return (-1);
-}
+ if (lseek(fd, wantsize, SEEK_SET) < 0)
+ {
+ return (-1);
+ }
-return (0);
+ FCONTROL(_mpe_fileno(fd),6,__perl_mpe_longaddr(&dummy)); /* Write new EOF */
+ if ((ccode_return=ccode()) != CCE)
+ {
+ fprintf(stderr,
+ "MPE ftruncate failed, ccode=%d, wantsize=%ld\n",
+ ccode_return, wantsize);
+ PRINTFILEINFO(_mpe_fileno(fd));
+ errno = ESYSERR;
+ return (-1);
+ }
+
+ return (0);
}
/*
@@ -268,74 +282,71 @@ return (0);
PRINT_ERROR - make this function print an error message to stderr
*/
-#ifndef _POSIX_SOURCE
-# define _POSIX_SOURCE
-#endif
-#include <sys/types.h> /* off_t, required by open() */
-#include <sys/stat.h> /* required by open() */
-#include <fcntl.h> /* open() */
-#include <unistd.h> /* close() */
-#include <stdio.h> /* perror(), sprintf() */
+#include <sys/types.h> /* off_t, required by open() */
+#include <sys/stat.h> /* required by open() */
+#include <fcntl.h> /* open() */
+#include <unistd.h> /* close() */
+#include <stdio.h> /* perror(), sprintf() */
int
truncate(const char *pathname, off_t length)
{
- int fd;
+ int fd;
#ifdef PRINT_ERROR
- char error_msg[80+1];
+ char error_msg[80+1];
#endif
- if (length == 0)
- {
- if ( (fd = open(pathname, O_WRONLY | O_TRUNC)) < 0)
- {
- /* errno already set */
+ if (length == 0)
+ {
+ if ( (fd = open(pathname, O_WRONLY | O_TRUNC)) < 0)
+ {
+ /* errno already set */
#ifdef PRINT_ERROR
- sprintf(error_msg,
- "truncate(): open(%s, O_WRONLY | OTRUNC)\0",
- pathname);
- perror(error_msg);
+ sprintf(error_msg,
+ "truncate(): open(%s, O_WRONLY | OTRUNC)\0",
+ pathname);
+ perror(error_msg);
#endif
- return -1;
- }
- }
- else
- {
- if ( (fd = open(pathname, O_WRONLY)) < 0)
- {
- /* errno already set */
+ return -1;
+ }
+ }
+ else
+ {
+ if ( (fd = open(pathname, O_WRONLY)) < 0)
+ {
+ /* errno already set */
#ifdef PRINT_ERROR
- sprintf(error_msg,
- "truncate(): open(%s, O_WRONLY)\0",
- pathname);
- perror(error_msg);
+ sprintf(error_msg,
+ "truncate(): open(%s, O_WRONLY)\0",
+ pathname);
+ perror(error_msg);
#endif
- return -1;
- }
+ return -1;
+ }
- if (ftruncate(fd, length) < 0)
- {
- /* errno already set */
+ if (ftruncate(fd, length) < 0)
+ {
+ /* errno already set */
#ifdef PRINT_ERROR
- perror("truncate(): ftruncate()");
+ perror("truncate(): ftruncate()");
#endif
- return -1;
- }
- }
+ return -1;
+ }
+ }
- if (close(fd) < 0)
- {
- /* errno already set */
+ if (close(fd) < 0)
+ {
+ /* errno already set */
#ifdef PRINT_ERROR
- perror("truncate(): close()");
+ perror("truncate(): close()");
#endif
- return -1;
- }
+ return -1;
+ }
- return 0;
+ return 0;
} /* truncate() */
/*
@@ -378,9 +389,8 @@ truncate(const char *pathname, off_t length)
# define _SOCKET_SOURCE
#endif
-#include <time.h> /* structs timeval & timezone,
- difftime(), localtime(), mktime(), time() */
-#include <sys/time.h> /* gettimeofday() */
+#include <time.h> /* structs timeval & timezone,
+ difftime(), localtime(), mktime(), time() */
extern int TIMER();
@@ -455,15 +465,15 @@ struct timezone *tpz;
/*
** MPE_FCNTL -- shadow function for fcntl()
**
-** MPE requires sfcntl() for sockets, and fcntl() for everything
-** else. This shadow routine determines the descriptor type and
-** makes the appropriate call.
+** MPE requires sfcntl() for sockets, and fcntl() for everything
+** else. This shadow routine determines the descriptor type and
+** makes the appropriate call.
**
-** Parameters:
-** same as fcntl().
+** Parameters:
+** same as fcntl().
**
-** Returns:
-** same as fcntl().
+** Returns:
+** same as fcntl().
*/
#include <stdarg.h>
@@ -472,35 +482,321 @@ struct timezone *tpz;
int
mpe_fcntl(int fildes, int cmd, ...)
{
- int len, result;
- struct sockaddr sa;
-
- void *arg;
- va_list ap;
-
- va_start(ap, cmd);
- arg = va_arg(ap, void *);
- va_end(ap);
-
- len = sizeof sa;
- if (getsockname(fildes, &sa, &len) == -1)
- {
- if (errno == EAFNOSUPPORT)
- /* AF_UNIX socket */
- return sfcntl(fildes, cmd, arg);
-
- if (errno == ENOTSOCK)
- /* file or pipe */
- return fcntl(fildes, cmd, arg);
-
- /* unknown getsockname() failure */
- return (-1);
- }
- else
- {
- /* AF_INET socket */
- if ((result = sfcntl(fildes, cmd, arg)) != -1 && cmd == F_GETFL)
- result |= O_RDWR; /* fill in some missing flags */
- return result;
- }
+ int len, result;
+ struct sockaddr sa;
+
+ void *arg;
+ va_list ap;
+
+ va_start(ap, cmd);
+ arg = va_arg(ap, void *);
+ va_end(ap);
+
+ len = sizeof sa;
+ if (getsockname(fildes, &sa, &len) == -1)
+ {
+ if (errno == EAFNOSUPPORT)
+ /* AF_UNIX socket */
+ return sfcntl(fildes, cmd, arg);
+
+ if (errno == ENOTSOCK)
+ /* file or pipe */
+ return fcntl(fildes, cmd, arg);
+
+ /* unknown getsockname() failure */
+ return (-1);
+ }
+ else
+ {
+ /* AF_INET socket */
+ if ((result = sfcntl(fildes, cmd, arg)) != -1 && cmd == F_GETFL)
+ result |= O_RDWR; /* fill in some missing flags */
+ return result;
+ }
+}
+
+
+
+/*
+ * Stuff from here on down is written by Ken Hirsch
+ * and you may use it for any purpose.
+ * No warranty, express or implied.
+ */
+
+#include <stddef.h>
+#include <sys/ioctl.h>
+#include <netinet/in.h>
+
+#ifndef _SOCKLEN_T
+typedef unsigned int socklen_t;
+#define _SOCKLEN_T
+#endif
+
+static int max_io_size(int filedes);
+
+ssize_t
+mpe_read(int filedes, void *buffer, size_t len)
+{
+ int maxio;
+ if (len > 4096 && (len > (maxio = max_io_size(filedes))))
+ len = maxio;
+
+ return read(filedes, buffer, len);
+}
+
+ssize_t
+mpe_write(int filedes, const void *buffer, size_t len)
+{
+ int written = 0;
+ int orig_len = len;
+ int maxio = (len>4096)?max_io_size(filedes):INT_MAX;
+ const char *buf = (const char *)buffer;
+
+ do {
+ written = write(filedes, buf, len>maxio?maxio:len);
+ if (written < 0)
+ break;
+ len -= written;
+ buf += written;
+ } while (len > 0);
+
+ if (written < 0 && len == orig_len)
+ return -1;
+ else
+ return orig_len - len;
+}
+
+
+ssize_t
+mpe_send(int socket, const void *buffer, size_t len, int flags)
+{
+ int written = 0;
+ int orig_len = len;
+ int maxio = (len>4096)?max_io_size(socket):INT_MAX;
+ const char *buf = (const char *)buffer;
+
+ do {
+ written = send(socket, buf, len>maxio?maxio:len, flags);
+ if (written < 0)
+ break;
+ len -= written;
+ buf += written;
+ } while (len > 0);
+
+ if (written < 0 && len == orig_len)
+ return -1;
+ else
+ return orig_len - len;
+}
+
+ssize_t
+mpe_sendto(int socket, const void *buffer, size_t len,
+ int flags, const struct sockaddr *dest_addr,
+ socklen_t dest_len)
+{
+ int written = 0;
+ int orig_len = len;
+ int maxio = (len>4096)?max_io_size(socket):INT_MAX;
+ const char *buf = (const char *)buffer;
+
+ do {
+ written =
+ sendto(socket, buf, len>maxio?maxio:len, flags, dest_addr, dest_len);
+ if (written < 0)
+ break;
+ len -= written;
+ buf += written;
+ } while (len > 0);
+
+ if (written < 0 && len == orig_len)
+ return -1;
+ else
+ return orig_len - len;
+}
+
+
+ssize_t
+mpe_recv(int socket, void *buffer, size_t len, int flags)
+{
+ int maxio;
+ if (len > 4096 && (len > (maxio = max_io_size(socket))))
+ len = maxio;
+ return recv(socket, buffer, len, flags);
+}
+
+ssize_t
+mpe_recvfrom(int socket, void *buffer, size_t len,
+ int flags, struct sockaddr *address,
+ socklen_t *address_len)
+{
+ int maxio;
+ if (len > 4096 && (len > (maxio = max_io_size(socket))))
+ len = maxio;
+ return recvfrom(socket, buffer, len, flags, address, address_len);
+}
+
+/*
+ I didn't do thse two:
+ssize_t mpe_recvmsg(int, struct msghdr *, int);
+ssize_t mpe_sendmsg(int, const struct msghdr *, int);
+*/
+
+/*
+ * On MPE/iX (at least version 6.0), a getsockname()
+ * performed on a socket that is listening
+ * will return INADDR_ANY, even if you used
+ * bind to bind it to a particular IP address.
+ *
+ * (In fact, it appears that the socket always acts as
+ * if you used INADDR_ANY.)
+ *
+ * Here I save the IP address used in bind
+ * So I can get it in getsockname()
+ *
+ */
+
+/* I just save 40. Usually one or two should be enough
+ */
+
+int
+mpe_connect(int socket,
+ const struct sockaddr *address,
+ socklen_t address_len)
+{
+ int ret = connect(socket, address, address_len);
+ if (ret < 0 && errno == EINPROGRESS)
+ {
+ /* Need to call getsockopt to clear socket error */
+ int socket_error;
+ socklen_t err_size = sizeof(socket_error);
+ (void)getsockopt(socket, SOL_SOCKET, SO_ERROR,
+ &socket_error, &err_size);
+ errno = EINPROGRESS;
+ }
+ return ret;
+}
+
+static struct {
+ int fd;
+ struct in_addr holdaddr;
+} holdbind[40];
+#define HOLDBINDLAST ((sizeof(holdbind))/(sizeof(holdbind[0])))
+static int nextbind;
+
+/*
+ * Fix peculiarities of bind() on MPE
+ * 1. call GETPRIVMODE to bind to ports < 1024
+ * 2. save IP address for future calls to getsockname
+ * 3. set IP address to 0 (INADDR_ANY)
+ */
+
+int
+mpe_bind(int socket, const struct sockaddr *address, socklen_t address_len)
+{
+ int i;
+ int result;
+ int mpeprivmode=0;
+ extern void GETPRIVMODE(void);
+ extern void GETUSERMODE(void);
+
+ for (i = 0; i<HOLDBINDLAST; i++) {
+ if (holdbind[i].fd == socket)
+ break;
+ }
+ /* If we didn't find previously used slot, use next */
+ if (i == HOLDBINDLAST)
+ i = nextbind;
+
+ holdbind[i].fd = socket;
+
+ memset(&holdbind[i].holdaddr, '\0', sizeof(holdbind[i].holdaddr));
+ if (address->sa_family == AF_INET
+ && address_len >= offsetof(struct sockaddr_in, sin_addr)
+ +sizeof(struct in_addr)) {
+ holdbind[i].holdaddr = ((struct sockaddr_in *)address)->sin_addr;
+ }
+ if (i == nextbind)
+ {
+ if (++nextbind >= HOLDBINDLAST)
+ nextbind = 0;
+ }
+
+ if (address->sa_family == AF_INET)
+ {
+ /* The address *MUST* stupidly be zero. */
+ ((struct sockaddr_in *)address)->sin_addr.s_addr = INADDR_ANY;
+ /* PRIV mode is required to bind() to ports < 1024. */
+ if (((struct sockaddr_in *)address)->sin_port < 1024 &&
+ ((struct sockaddr_in *)address)->sin_port > 0) {
+ GETPRIVMODE(); /* If this fails, we are aborted by MPE/iX. */
+ mpeprivmode = 1;
+ }
+ }
+ result = bind(socket, address, address_len);
+ if (mpeprivmode)
+ {
+ GETUSERMODE();
+ }
+ return result;
+
+}
+
+int
+mpe_getsockname(int socket, struct sockaddr *address, socklen_t *address_len)
+{
+ int ret;
+ ret = getsockname(socket, address, address_len);
+ if (ret == 0
+ && address->sa_family == AF_INET
+ && *address_len >= offsetof(struct sockaddr_in, sin_addr)
+ +sizeof(struct in_addr)
+ && ((struct sockaddr_in *)address)->sin_addr.s_addr == INADDR_ANY) {
+ int i;
+ for (i=0; i<HOLDBINDLAST; i++) {
+ if (holdbind[i].fd == socket)
+ {
+ ((struct sockaddr_in *)address)->sin_addr.s_addr
+ = holdbind[i].holdaddr.s_addr;
+ break;
+ }
+ }
+ }
+ return ret;
+}
+
+int
+mpe_getpeername(int socket, struct sockaddr *address, socklen_t *address_len)
+{
+ int ret;
+ ret = getpeername(socket, address, address_len);
+ if (ret == 0)
+ {
+ /* Try a zero-length write to see if socket really connected */
+ int written = write(socket, "", 0);
+ if (written < 0)
+ ret = -1;
+ }
+ return ret;
+}
+
+
+static int
+max_io_size(int filedes)
+{
+ int save_errno;
+ struct sockaddr sa;
+ int len;
+ int result = INT_MAX; /* all other files */
+
+ save_errno = errno;
+ len = sizeof sa;
+ if (getsockname(filedes, &sa, &len) == -1)
+ {
+ if (errno == EAFNOSUPPORT) /* AF_UNIX socket */
+ result = 4096;
+ errno = save_errno;
+ } else {
+ result = 30000; /* AF_INET sock max */
+ }
+ return result;
}
diff --git a/gnu/usr.bin/perl/mpeix/mpeix_setjmp.c b/gnu/usr.bin/perl/mpeix/mpeix_setjmp.c
new file mode 100644
index 00000000000..955fe03d155
--- /dev/null
+++ b/gnu/usr.bin/perl/mpeix/mpeix_setjmp.c
@@ -0,0 +1,355 @@
+/* Workaround for CR JAGab60546 setjmp/longjmp and
+ JAGad55982 sigsetjmp/siglongjmp from shared libraries. */
+
+/*
+ * tabstop=4
+ *
+ * _setjmp/setjmp/sigsetjmp and
+ *_longjmp/longjmp/siglongjmp.
+ *
+ * Written by Mark Klein, 10 October, 2000
+ * Updated for gcc 3.x 6 October, 2005
+ *
+ * These routines are GCC specific and MUST BE COMPILED
+ * WITH -O2
+ *
+ * The existing setjmp/longjmp code in both libc.a and XL.PUB.SYS
+ * are not SR4 aware and cause problems when working with shared
+ * libraries (XLs), especially when executing a longjmp between
+ * XLs. This code preserves SR4 and will successfully handle
+ * a cross space longjmp. However, the setjmp code must be
+ * bound into each XL from which it will be called as well as
+ * being bound into the main program.
+ */
+
+/*
+ * The following macro takes the contents of the jmpbuf and
+ * restores the registers from them. There is other code
+ * elsewhere that ensures that __jmpbuf is %r26 at this
+ * point in time. If it becomes some other register, that
+ * register must be the last restored. At the end will
+ * be a branch external that will cause a cross space
+ * return if needed.
+ */
+#define RESTORE_REGS_AND_RETURN(__jmpbuf, __retval) \
+({ \
+ __asm__ __volatile__ ( \
+ " ldw 0(%%sr0, %0), %%rp\n" \
+ "\t ldw 4(%%sr0, %0), %%sp\n" \
+ "\t ldw 16(%%sr0, %0), %%r3\n" \
+ "\t ldw 20(%%sr0, %0), %%r4\n" \
+ "\t ldw 24(%%sr0, %0), %%r5\n" \
+ "\t ldw 28(%%sr0, %0), %%r6\n" \
+ "\t ldw 32(%%sr0, %0), %%r7\n" \
+ "\t ldw 36(%%sr0, %0), %%r8\n" \
+ "\t ldw 40(%%sr0, %0), %%r9\n" \
+ "\t ldw 44(%%sr0, %0), %%r10\n" \
+ "\t ldw 48(%%sr0, %0), %%r11\n" \
+ "\t ldw 52(%%sr0, %0), %%r12\n" \
+ "\t ldw 56(%%sr0, %0), %%r13\n" \
+ "\t ldw 60(%%sr0, %0), %%r14\n" \
+ "\t ldw 64(%%sr0, %0), %%r15\n" \
+ "\t ldw 68(%%sr0, %0), %%r16\n" \
+ "\t ldw 72(%%sr0, %0), %%r17\n" \
+ "\t ldw 76(%%sr0, %0), %%r18\n" \
+ "\t ldw 80(%%sr0, %0), %%r19\n" \
+ "\t ldw 84(%%sr0, %0), %%r20\n" \
+ "\t ldw 88(%%sr0, %0), %%r21\n" \
+ "\t ldw 92(%%sr0, %0), %%r22\n" \
+ "\t ldw 96(%%sr0, %0), %%r23\n" \
+ "\t ldw 100(%%sr0, %0), %%r24\n" \
+ "\t ldw 104(%%sr0, %0), %%r25\n" \
+ "\t ldw 112(%%sr0, %0), %%r27\n" \
+ "\t ldw 116(%%sr0, %0), %%r1\n" \
+ "\t mtsp %%r1, %%sr3\n" \
+ "\t ldw 120(%%sr0, %0), %%r1\n" \
+ "\t mtsp %%r1, %%sr1\n" \
+ "\t or,<> %%r0, %1, %%r0\n" \
+ "\t ldi 1, %%r28\n" \
+ "\t ldw 108(%%sr0, %0), %%r26\n" \
+ "\t be 0(%%sr1, %%rp)\n" \
+ "\t mtsp %%r1, %%sr4\n" \
+ : \
+ : "r" (__jmpbuf), \
+ "r" (__retval)); \
+})
+
+/*
+ * The following macro extracts the signal mask
+ * from __jmpbuf from the 3rd and 4th words and
+ * if non-zero, calls sigprocmask with that value
+ * to set the signal mask. This macro is usually
+ * invoked before the registers are restored in
+ * the longjmp routines and it can clobber things
+ * without needing to spill them as a result.
+ * A quick frame is built before making the
+ * call and cut back just afterwards.
+ * The ldi 2, %r26 is actually SIG_SETMASK from
+ * /usr/include/signal.h.
+ */
+#define RESTORE_SIGNAL_MASK(__jmpbuf) \
+({ \
+ __asm__ __volatile__ ( \
+ " ldw 8(%0), %%r26\n" \
+ "\t comibt,=,n 0,%%r26,.+36\n" \
+ "\t ldo 64(%%sp), %%sp\n" \
+ "\t stw %0, -28(%%sp)\n" \
+ "\t ldi 0, %%r24\n" \
+ "\t ldo 8(%0), %%r25\n" \
+ "\t .import sigprocmask,code\n" \
+ "\t bl sigprocmask,%%rp\n" \
+ "\t ldi 2, %%r26\n" \
+ "\t ldw -28(%%sr0, %%sp), %0\n" \
+ "\t ldo -64(%%sp), %%sp\n" \
+ : \
+ : "r" (__jmpbuf)); \
+})
+
+/*
+ * This macro saves the current contents of the
+ * registers to __jmpbuf. Note that __jmpbuf is
+ * guaranteed elsewhere to be in %r26. We do not
+ * want it spilled, nor do we want a new frame
+ * built.
+ */
+#define SAVE_REGS(__jmpbuf) \
+({ \
+ __asm__ __volatile__ ( \
+ " stw %%rp, 0(%%sr0, %0)\n" \
+ "\t stw %%sp, 4(%%sr0, %0)\n" \
+ "\t stw %%r0, 8(%%sr0, %0)\n" \
+ "\t stw %%r3, 16(%%sr0, %0)\n" \
+ "\t stw %%r4, 20(%%sr0, %0)\n" \
+ "\t stw %%r5, 24(%%sr0, %0)\n" \
+ "\t stw %%r6, 28(%%sr0, %0)\n" \
+ "\t stw %%r7, 32(%%sr0, %0)\n" \
+ "\t stw %%r8, 36(%%sr0, %0)\n" \
+ "\t stw %%r9, 40(%%sr0, %0)\n" \
+ "\t stw %%r10, 44(%%sr0, %0)\n" \
+ "\t stw %%r11, 48(%%sr0, %0)\n" \
+ "\t stw %%r12, 52(%%sr0, %0)\n" \
+ "\t stw %%r13, 56(%%sr0, %0)\n" \
+ "\t stw %%r14, 60(%%sr0, %0)\n" \
+ "\t stw %%r15, 64(%%sr0, %0)\n" \
+ "\t stw %%r16, 68(%%sr0, %0)\n" \
+ "\t stw %%r17, 72(%%sr0, %0)\n" \
+ "\t stw %%r18, 76(%%sr0, %0)\n" \
+ "\t stw %%r19, 80(%%sr0, %0)\n" \
+ "\t stw %%r20, 84(%%sr0, %0)\n" \
+ "\t stw %%r21, 88(%%sr0, %0)\n" \
+ "\t stw %%r22, 92(%%sr0, %0)\n" \
+ "\t stw %%r23, 96(%%sr0, %0)\n" \
+ "\t stw %%r24, 100(%%sr0, %0)\n" \
+ "\t stw %%r25, 104(%%sr0, %0)\n" \
+ "\t stw %%r26, 108(%%sr0, %0)\n" \
+ "\t stw %%r27, 112(%%sr0, %0)\n" \
+ "\t mfsp %%sr3, %%r1\n" \
+ "\t stw %%r1, 116(%%sr0, %0)\n" \
+ "\t mfsp %%sr4, %%r1\n" \
+ "\t stw %%r1, 120(%%sr0, %0)\n" \
+ : \
+ : "r" (__jmpbuf)); \
+})
+
+/*
+ * This macro will save the signal mask to the
+ * __jmpbuf if __savemask is non-zero. By this
+ * point in time, the other resisters have been
+ * saved into the __jmpbuf.
+ * The ldi 0, %r26 is actually SIG_BLOCK from
+ * /usr/include/signal.h. Since the block is
+ * an OR of the bits, this does not change the
+ * mask, but returns it into the double word at
+ * the address in %r24.
+ */
+#define SAVE_SIGNAL_MASK(__jmpbuf,__savemask) \
+({ \
+ __asm__ __volatile__ ( \
+ " comibt,=,n 0,%1,.+36\n" \
+ "\t stw %%rp, -20(%%sr0, %%sp)\n" \
+ "\t ldo 64(%%sp), %%sp\n" \
+ "\t ldo 8(%0), %%r24\n" \
+ "\t ldi 0, %%r25\n" \
+ "\t .import sigprocmask,code\n" \
+ "\t bl sigprocmask,%%rp\n" \
+ "\t ldi 0, %%r26\n" \
+ "\t ldo -64(%%sp), %%sp\n" \
+ "\t ldw -20(%%sr0, %%sp), %%rp\n" \
+ : \
+ : "r" (__jmpbuf), \
+ "r" (__savemask)); \
+})
+
+/*
+ * Construct a jump buffer and unconditionally save
+ * the signal mask. Return a 0 unconditinoally.
+ * Care is taken here and in the macros to assume
+ * the __jumpbuf is in %r26 and that the return
+ * value will be in %r28. It is done this way to
+ * prevent a frame from being built and any registers
+ * from being spilled.
+ */
+int setjmp(register void *jmpbuf)
+{
+ register int __jmpbuf asm ("%r26");
+
+ SAVE_REGS(__jmpbuf);
+ SAVE_SIGNAL_MASK(__jmpbuf, 1);
+ return 0;
+}
+
+/*
+ * Construct a jump buffer but do not save the
+ * signal mask.
+ */
+int _setjmp(register void *jmpbuf)
+{
+ register int __jmpbuf asm ("%r26");
+
+ SAVE_REGS(__jmpbuf);
+ return 0;
+}
+
+/*
+ * Construct a jump buffer and conditionally save
+ * the signal mask. The mask is saved if the
+ * savemask parameter is non-zero.
+ */
+int sigsetjmp(register void *jmpbuf, register int savemask)
+{
+ register int __jmpbuf asm ("%r26");
+ register int __savemask asm ("%r25");
+
+ SAVE_REGS(__jmpbuf);
+ SAVE_SIGNAL_MASK(__jmpbuf, __savemask);
+ return 0;
+}
+
+/*
+ * Return to the location established in the jmpbuf,
+ * and place the value in i2 in %r28. Registers
+ * %r4 and %r5 are co-opted to save the address and
+ * value of jmpbuf and the return value. The signal
+ * mask is re-established if needed, then the
+ * address of jmpbuf and value of retval are placed
+ * into %r26 and %r28 correspondingly. This routine
+ * will never return to its caller and the stack
+ * will be cut back to whatever exists in the jmpbuf.
+ */
+void longjmp(register void *jmpbuf, register int i2)
+{
+ register int __jmpbuf asm ("%r26");
+ register int __retval asm ("%r28");
+
+ __asm__ __volatile__ (
+ " copy %0, %%r4\n"
+ "\t copy %1, %%r5\n"
+ :
+ : "r" (jmpbuf),
+ "r" (i2));
+
+ RESTORE_SIGNAL_MASK (__jmpbuf);
+
+ __asm__ __volatile__ (
+ " copy %%r4, %0\n"
+ "\t copy %%r5, %1\n"
+ : "=r" (__jmpbuf),
+ "=r" (__retval));
+
+ RESTORE_REGS_AND_RETURN (__jmpbuf, __retval);
+}
+
+/*
+ * Return to the location established in the jmpbuf,
+ * but do not restore the signal mask.
+ */
+void _longjmp(register void *jmpbuf, register int i2)
+{
+ register int __retval asm ("%r28");
+ register int __jmpbuf asm ("%r26");
+
+ __jmpbuf = (int)jmpbuf;
+ __retval = i2;
+
+ RESTORE_REGS_AND_RETURN (__jmpbuf, __retval);
+}
+
+/*
+ * Return to the location establsihed in the jmpbuf,
+ * and conditionally re-establish the signal mask.
+ */
+void siglongjmp(register void *jmpbuf, register int i2)
+{
+ register int __jmpbuf asm ("%r26");
+ register int __retval asm ("%r28");
+
+ __asm__ __volatile__ (
+ " copy %0, %%r4\n"
+ "\t copy %1, %%r5\n"
+ :
+ : "r" (jmpbuf),
+ "r" (i2));
+
+ RESTORE_SIGNAL_MASK (__jmpbuf);
+
+ __asm__ __volatile__ (
+ " copy %%r4, %0\n"
+ "\t copy %%r5, %1\n"
+ : "=r" (__jmpbuf),
+ "=r" (__retval));
+
+ RESTORE_REGS_AND_RETURN (__jmpbuf, __retval);
+}
+
+#ifdef TEST
+int buf1[50];
+int buf2[50];
+
+foo() {
+ printf("In routine foo(). Doing Longjmp.\n");
+ longjmp(buf1, 123);
+ printf("This is in foo after the longjmp() call. Should not reach here.\n");
+}
+
+bar(int ret) {
+ printf("In routine bar(%d). Doing siglongjmp.\n",ret);
+ siglongjmp(buf2, ret);
+ printf("This is in bar after the siglongjmp() call. Should not reach here.\n");
+}
+
+main() {
+ int i;
+ if ((i = setjmp(buf1)))
+ {
+ printf("This is the return from the longjmp. i: %d\n",i);
+ }
+ else
+ {
+ printf("Jump buffer established, i: %d. Calling foo()\n",i);
+ foo();
+ printf("This is in main after the foo() call. Should not reach here.\n ");
+ }
+
+ if ((i = sigsetjmp(buf2,0)))
+ {
+ printf("This is the return from the longjmp. i: %d\n",i);
+ }
+ else
+ {
+ printf("Jump buffer established, i: %d. Calling bar(456)\n",i);
+ bar(456);
+ printf("This is in main after the bar(456) call. Should not reach here.\n");
+ }
+
+ if ((i = sigsetjmp(buf2,1)))
+ {
+ printf("This is the return from the longjmp. i: %d\n",i);
+ }
+ else
+ {
+ printf("Jump buffer established, i: %d. Calling bar(789)\n",i);
+ bar(789);
+ printf("This is in main after the bar(789) call. Should not reach here.\n");
+ }
+}
+#endif
diff --git a/gnu/usr.bin/perl/mpeix/mpeixish.h b/gnu/usr.bin/perl/mpeix/mpeixish.h
index 49ef4355fec..165aae7f9ea 100644
--- a/gnu/usr.bin/perl/mpeix/mpeixish.h
+++ b/gnu/usr.bin/perl/mpeix/mpeixish.h
@@ -138,6 +138,14 @@ extern key_t ftok (char *pathname, char id);
extern char *gcvt (double value, int ndigit, char *buf);
extern int isnan (double value);
extern void srand48(long int seedval);
+extern double drand48(void);
+extern double erand48(unsigned short xsubi[3]);
+extern long jrand48(unsigned short xsubi[3]);
+extern void lcong48(unsigned short param[7]);
+extern long lrand48(void);
+extern long mrand48(void);
+extern long nrand48(unsigned short xsubi[3]);
+extern unsigned short *seed48(unsigned short seed16v[3]);
/* various missing constants -- define 'em */
@@ -146,10 +154,40 @@ extern void srand48(long int seedval);
/* declarations for wrappers in mpeix.c */
#include <time.h>
-#include <sys/time.h>
+#include <sys/wait.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+
extern int ftruncate(int fd, long wantsize);
extern int gettimeofday( struct timeval *tp, struct timezone *tpz );
extern int truncate(const char *pathname, off_t length);
+extern int mpe_read(int filedes, void *buffer, size_t len);
+extern int mpe_write(int filedes, const void *buffer, size_t len);
+extern int mpe_send(int socket, const void *buffer, size_t len, int flags);
+extern int mpe_sendto(int socket, const void *buffer, size_t len,
+ int flags, const struct sockaddr *dest_addr,
+ size_t dest_len);
+extern int mpe_recv(int socket, void *buffer, size_t length, int flags);
+extern int mpe_recvfrom(int socket, void *buffer, size_t length,
+ int flags, struct sockaddr *address,
+ size_t *address_len) ;
+extern int mpe_bind(int socket, const struct sockaddr *address,
+ size_t address_len);
+extern int mpe_getsockname(int socket, struct sockaddr *address,
+ size_t *address_len);
+extern int mpe_getpeername(int socket, struct sockaddr *address,
+ size_t *address_len);
+
+/* Replacements to fix various socket problems -- see mpeix.c */
#define fcntl mpe_fcntl
+#define read mpe_read
+#define write mpe_write
+#define send mpe_send
+#define sendto mpe_sendto
+#define recv mpe_recv
+#define recvfrom mpe_recvfrom
+#define bind mpe_bind
+#define getsockname mpe_getsockname
+#define getpeername mpe_getpeername
diff --git a/gnu/usr.bin/perl/numeric.c b/gnu/usr.bin/perl/numeric.c
index a6d9c90844d..03115b050f1 100644
--- a/gnu/usr.bin/perl/numeric.c
+++ b/gnu/usr.bin/perl/numeric.c
@@ -1,7 +1,7 @@
/* numeric.c
*
* Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999,
- * 2000, 2001, 2002, 2003, by Larry Wall and others
+ * 2000, 2001, 2002, 2003, 2004, 2005, 2006, 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.
@@ -129,7 +129,7 @@ invalid character will also trigger a warning.
On return I<*len> is set to the length of the scanned string,
and I<*flags> gives output flags.
-If the value is <= UV_MAX it is returned as a UV, the output flags are clear,
+If the value is <= C<UV_MAX> it is returned as a UV, the output flags are clear,
and nothing is written to I<*result>. If the value is > UV_MAX C<grok_bin>
returns UV_MAX, sets C<PERL_SCAN_GREATER_THAN_UV_MAX> in the output flags,
and writes the value to I<*result> (or the value is discarded if I<result>
@@ -151,8 +151,9 @@ Perl_grok_bin(pTHX_ char *start, STRLEN *len_p, I32 *flags, NV *result) {
NV value_nv = 0;
const UV max_div_2 = UV_MAX / 2;
- bool allow_underscores = *flags & PERL_SCAN_ALLOW_UNDERSCORES;
+ const bool allow_underscores = (bool)(*flags & PERL_SCAN_ALLOW_UNDERSCORES);
bool overflowed = FALSE;
+ char bit;
if (!(*flags & PERL_SCAN_DISALLOW_PREFIX)) {
/* strip off leading b or 0b.
@@ -170,8 +171,7 @@ Perl_grok_bin(pTHX_ char *start, STRLEN *len_p, I32 *flags, NV *result) {
}
}
- for (; len-- && *s; s++) {
- char bit = *s;
+ 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.
@@ -267,9 +267,8 @@ Perl_grok_hex(pTHX_ char *start, STRLEN *len_p, I32 *flags, NV *result) {
NV value_nv = 0;
const UV max_div_16 = UV_MAX / 16;
- bool allow_underscores = *flags & PERL_SCAN_ALLOW_UNDERSCORES;
+ const bool allow_underscores = (bool)(*flags & PERL_SCAN_ALLOW_UNDERSCORES);
bool overflowed = FALSE;
- const char *hexdigit;
if (!(*flags & PERL_SCAN_DISALLOW_PREFIX)) {
/* strip off leading x or 0x.
@@ -288,7 +287,7 @@ Perl_grok_hex(pTHX_ char *start, STRLEN *len_p, I32 *flags, NV *result) {
}
for (; len-- && *s; s++) {
- hexdigit = strchr((char *) PL_hexdigit, *s);
+ const char *hexdigit = strchr(PL_hexdigit, *s);
if (hexdigit) {
/* 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.
@@ -317,7 +316,7 @@ Perl_grok_hex(pTHX_ char *start, STRLEN *len_p, I32 *flags, NV *result) {
continue;
}
if (*s == '_' && len && allow_underscores && s[1]
- && (hexdigit = strchr((char *) PL_hexdigit, s[1])))
+ && (hexdigit = strchr(PL_hexdigit, s[1])))
{
--len;
++s;
@@ -382,7 +381,7 @@ Perl_grok_oct(pTHX_ char *start, STRLEN *len_p, I32 *flags, NV *result) {
NV value_nv = 0;
const UV max_div_8 = UV_MAX / 8;
- bool allow_underscores = *flags & PERL_SCAN_ALLOW_UNDERSCORES;
+ const bool allow_underscores = (bool)(*flags & PERL_SCAN_ALLOW_UNDERSCORES);
bool overflowed = FALSE;
for (; len-- && *s; s++) {
@@ -475,7 +474,7 @@ Perl_scan_bin(pTHX_ char *start, STRLEN len, STRLEN *retlen)
{
NV rnv;
I32 flags = *retlen ? PERL_SCAN_ALLOW_UNDERSCORES : 0;
- UV ruv = grok_bin (start, &len, &flags, &rnv);
+ const UV ruv = grok_bin (start, &len, &flags, &rnv);
*retlen = len;
return (flags & PERL_SCAN_GREATER_THAN_UV_MAX) ? rnv : (NV)ruv;
@@ -486,7 +485,7 @@ Perl_scan_oct(pTHX_ char *start, STRLEN len, STRLEN *retlen)
{
NV rnv;
I32 flags = *retlen ? PERL_SCAN_ALLOW_UNDERSCORES : 0;
- UV ruv = grok_oct (start, &len, &flags, &rnv);
+ const UV ruv = grok_oct (start, &len, &flags, &rnv);
*retlen = len;
return (flags & PERL_SCAN_GREATER_THAN_UV_MAX) ? rnv : (NV)ruv;
@@ -497,7 +496,7 @@ Perl_scan_hex(pTHX_ char *start, STRLEN len, STRLEN *retlen)
{
NV rnv;
I32 flags = *retlen ? PERL_SCAN_ALLOW_UNDERSCORES : 0;
- UV ruv = grok_hex (start, &len, &flags, &rnv);
+ const UV ruv = grok_hex (start, &len, &flags, &rnv);
*retlen = len;
return (flags & PERL_SCAN_GREATER_THAN_UV_MAX) ? rnv : (NV)ruv;
@@ -516,7 +515,7 @@ Perl_grok_numeric_radix(pTHX_ const char **sp, const char *send)
#ifdef USE_LOCALE_NUMERIC
if (PL_numeric_radix_sv && IN_LOCALE) {
STRLEN len;
- char* radix = SvPV(PL_numeric_radix_sv, len);
+ const char* radix = SvPV(PL_numeric_radix_sv, len);
if (*sp + len <= send && memEQ(*sp, radix, len)) {
*sp += len;
return TRUE;
@@ -757,7 +756,7 @@ S_mulexp10(NV value, I32 exponent)
if (exponent == 0)
return value;
if (value == 0)
- return 0;
+ return (NV)0;
/* On OpenVMS VAX we by default use the D_FLOAT double format,
* and that format does not have *easy* capabilities [1] for
@@ -843,11 +842,11 @@ char*
Perl_my_atof2(pTHX_ const char* orig, NV* value)
{
NV result[3] = {0.0, 0.0, 0.0};
- char* s = (char*)orig;
+ const char* s = orig;
#ifdef USE_PERL_ATOF
UV accumulator[2] = {0,0}; /* before/after dp */
bool negative = 0;
- char* send = s + strlen(orig) - 1;
+ const char* send = s + strlen(orig) - 1;
bool seen_digit = 0;
I32 exp_adjust[2] = {0,0};
I32 exp_acc[2] = {-1, -1};
@@ -893,6 +892,21 @@ Perl_my_atof2(pTHX_ const char* orig, NV* value)
++s;
}
+ /* punt to strtod for NaN/Inf; if no support for it there, tough luck */
+
+#ifdef HAS_STRTOD
+ if (*s == 'n' || *s == 'N' || *s == 'i' || *s == 'I') {
+ const char *p = negative ? s - 1 : s;
+ char *endp;
+ NV rslt;
+ rslt = strtod(p, &endp);
+ if (endp != p) {
+ *value = rslt;
+ return (char *)endp;
+ }
+ }
+#endif
+
/* we accumulate digits into an integer; when this becomes too
* large, we add the total to NV and start again */
@@ -945,7 +959,7 @@ Perl_my_atof2(pTHX_ const char* orig, NV* value)
++exp_acc[seen_dp];
}
}
- else if (!seen_dp && GROK_NUMERIC_RADIX((const char **)&s, send)) {
+ else if (!seen_dp && GROK_NUMERIC_RADIX(&s, send)) {
seen_dp = 1;
if (sig_digits > MAX_SIG_DIGITS) {
++s;
@@ -998,7 +1012,7 @@ Perl_my_atof2(pTHX_ const char* orig, NV* value)
result[2] = -result[2];
#endif /* USE_PERL_ATOF */
*value = result[2];
- return s;
+ return (char *)s;
}
#if ! defined(HAS_MODFL) && defined(HAS_AINTL) && defined(HAS_COPYSIGNL)
@@ -1017,3 +1031,13 @@ Perl_my_frexpl(long double x, int *e) {
return (scalbnl(x, -*e));
}
#endif
+
+/*
+ * Local variables:
+ * c-indentation-style: bsd
+ * c-basic-offset: 4
+ * indent-tabs-mode: t
+ * End:
+ *
+ * ex: set ts=8 sts=4 sw=4 noet:
+ */
diff --git a/gnu/usr.bin/perl/opnames.h b/gnu/usr.bin/perl/opnames.h
index ef34bb31113..cb6ce096eb0 100644
--- a/gnu/usr.bin/perl/opnames.h
+++ b/gnu/usr.bin/perl/opnames.h
@@ -1,7 +1,9 @@
-/*
+/* -*- buffer-read-only: t -*-
+ *
* opnames.h
*
- * Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, by Larry Wall and others
+ * Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
+ * 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.
@@ -418,3 +420,4 @@ typedef enum opcode {
(op) == OP_FTTTY || \
(op) == OP_FTZERO)
+/* ex: set ro: */
diff --git a/gnu/usr.bin/perl/pad.c b/gnu/usr.bin/perl/pad.c
index b866aaef2eb..21e1e6d2708 100644
--- a/gnu/usr.bin/perl/pad.c
+++ b/gnu/usr.bin/perl/pad.c
@@ -1,6 +1,6 @@
/* pad.c
*
- * Copyright (C) 2002, 2003, 2004, by Larry Wall and others
+ * Copyright (C) 2002, 2003, 2004, 2005, 2006, 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.
@@ -74,7 +74,7 @@ The SVs in the names AV have their PV being the name of the variable.
NV+1..IV inclusive is a range of cop_seq numbers for which the name is
valid. For typed lexicals name SV is SVt_PVMG and SvSTASH points at the
type. For C<our> lexicals, the type is SVt_PVGV, and GvSTASH points at the
-stash of the associated global (so that duplicate C<our> delarations in the
+stash of the associated global (so that duplicate C<our> declarations in the
same package can be detected). SvCUR is sometimes hijacked to
store the generation number during compilation.
@@ -124,7 +124,7 @@ can be OR'ed together:
PADLIST *
Perl_pad_new(pTHX_ int flags)
{
- AV *padlist, *padname, *pad, *a0;
+ AV *padlist, *padname, *pad;
ASSERT_CURPAD_LEGAL("pad_new");
@@ -164,15 +164,15 @@ Perl_pad_new(pTHX_ int flags)
* dispensed with eventually ???
*/
- a0 = newAV(); /* will be @_ */
+ AV * const a0 = newAV(); /* will be @_ */
av_extend(a0, 0);
av_store(pad, 0, (SV*)a0);
AvFLAGS(a0) = AVf_REIFY;
}
else {
#ifdef USE_5005THREADS
+ AV * const a0 = newAV(); /* will be @_ */
av_store(padname, 0, newSVpvn("@_", 2));
- a0 = newAV();
SvPADMY_on((SV*)a0); /* XXX Needed? */
av_store(pad, 0, (SV*)a0);
#else
@@ -226,7 +226,7 @@ void
Perl_pad_undef(pTHX_ CV* cv)
{
I32 ix;
- PADLIST *padlist = CvPADLIST(cv);
+ const PADLIST * const padlist = CvPADLIST(cv);
if (!padlist)
return;
@@ -244,26 +244,29 @@ Perl_pad_undef(pTHX_ CV* cv)
* children, or integrate this loop with general cleanup */
if (!PL_dirty) { /* don't bother during global destruction */
- CV *outercv = CvOUTSIDE(cv);
- U32 seq = CvOUTSIDE_SEQ(cv);
- AV *comppad_name = (AV*)AvARRAY(padlist)[0];
- SV **namepad = AvARRAY(comppad_name);
- AV *comppad = (AV*)AvARRAY(padlist)[1];
- SV **curpad = AvARRAY(comppad);
+ CV * const outercv = CvOUTSIDE(cv);
+ const U32 seq = CvOUTSIDE_SEQ(cv);
+ AV * const comppad_name = (AV*)AvARRAY(padlist)[0];
+ SV ** const namepad = AvARRAY(comppad_name);
+ AV * const comppad = (AV*)AvARRAY(padlist)[1];
+ SV ** const curpad = AvARRAY(comppad);
for (ix = AvFILLp(comppad_name); ix > 0; ix--) {
- SV *namesv = namepad[ix];
+ SV * const namesv = namepad[ix];
if (namesv && namesv != &PL_sv_undef
- && *SvPVX(namesv) == '&')
+ && *SvPVX_const(namesv) == '&')
{
- CV *innercv = (CV*)curpad[ix];
+ CV * const innercv = (CV*)curpad[ix];
+ U32 inner_rc = SvREFCNT(innercv);
+ assert(inner_rc);
namepad[ix] = Nullsv;
SvREFCNT_dec(namesv);
if (SvREFCNT(comppad) < 2) { /* allow for /(?{ sub{} })/ */
curpad[ix] = Nullsv;
SvREFCNT_dec(innercv);
+ inner_rc--;
}
- if (SvREFCNT(innercv) /* in use, not just a prototype */
+ if (inner_rc /* in use, not just a prototype */
&& CvOUTSIDE(innercv) == cv)
{
assert(CvWEAKOUTSIDE(innercv));
@@ -272,7 +275,7 @@ Perl_pad_undef(pTHX_ CV* cv)
CvWEAKOUTSIDE_off(innercv);
CvOUTSIDE(innercv) = outercv;
CvOUTSIDE_SEQ(innercv) = seq;
- SvREFCNT_inc(outercv);
+ (void)SvREFCNT_inc(outercv);
}
else {
CvOUTSIDE(innercv) = Nullcv;
@@ -286,7 +289,7 @@ Perl_pad_undef(pTHX_ CV* cv)
ix = AvFILLp(padlist);
while (ix >= 0) {
- SV* sv = AvARRAY(padlist)[ix--];
+ SV* const sv = AvARRAY(padlist)[ix--];
if (!sv)
continue;
if (sv == (SV*)PL_comppad_name)
@@ -330,8 +333,8 @@ If fake, it means we're cloning an existing entry
PADOFFSET
Perl_pad_add_name(pTHX_ char *name, HV* typestash, HV* ourstash, bool fake)
{
- PADOFFSET offset = pad_alloc(OP_PADSV, SVs_PADMY);
- SV* namesv = NEWSV(1102, 0);
+ const PADOFFSET offset = pad_alloc(OP_PADSV, SVs_PADMY);
+ SV* const namesv = NEWSV(1102, 0);
ASSERT_CURPAD_ACTIVE("pad_add_name");
@@ -347,7 +350,7 @@ Perl_pad_add_name(pTHX_ char *name, HV* typestash, HV* ourstash, bool fake)
if (typestash) {
SvFLAGS(namesv) |= SVpad_TYPED;
- SvSTASH(namesv) = (HV*)SvREFCNT_inc((SV*) typestash);
+ SvSTASH_set(namesv, (HV*)SvREFCNT_inc((SV*) typestash));
}
if (ourstash) {
SvFLAGS(namesv) |= SVpad_OUR;
@@ -359,8 +362,8 @@ Perl_pad_add_name(pTHX_ char *name, HV* typestash, HV* ourstash, bool fake)
SvFAKE_on(namesv);
else {
/* not yet introduced */
- SvNVX(namesv) = (NV)PAD_MAX; /* min */
- SvIVX(namesv) = 0; /* max */
+ SvNV_set(namesv, (NV)PAD_MAX); /* min */
+ SvIV_set(namesv, 0); /* max */
if (!PL_min_intro_pending)
PL_min_intro_pending = offset;
@@ -385,7 +388,7 @@ Perl_pad_add_name(pTHX_ char *name, HV* typestash, HV* ourstash, bool fake)
Allocate a new my or tmp pad entry. For a my, simply push a null SV onto
the end of PL_comppad, but for a tmp, scan the pad from PL_padix upwards
-for a slot which has no name and and no active value.
+for a slot which has no name and no active value.
=cut
*/
@@ -413,8 +416,8 @@ Perl_pad_alloc(pTHX_ I32 optype, U32 tmptype)
retval = AvFILLp(PL_comppad);
}
else {
- SV **names = AvARRAY(PL_comppad_name);
- SSize_t names_fill = AvFILLp(PL_comppad_name);
+ SV * const * const names = AvARRAY(PL_comppad_name);
+ const SSize_t names_fill = AvFILLp(PL_comppad_name);
for (;;) {
/*
* "foreach" index vars temporarily become aliases to non-"my"
@@ -454,13 +457,11 @@ PADOFFSET
Perl_pad_add_anon(pTHX_ SV* sv, OPCODE op_type)
{
PADOFFSET ix;
- SV* name;
-
- name = NEWSV(1106, 0);
+ SV* const name = NEWSV(1106, 0);
sv_upgrade(name, SVt_PVNV);
sv_setpvn(name, "&", 1);
- SvIVX(name) = -1;
- SvNVX(name) = 1;
+ SvIV_set(name, -1);
+ SvNV_set(name, 1);
ix = pad_alloc(op_type, SVs_PADMY);
av_store(PL_comppad_name, ix, name);
/* XXX DAPM use PL_curpad[] ? */
@@ -496,11 +497,11 @@ C<is_our> indicates that the name to check is an 'our' declaration
void
Perl_pad_check_dup(pTHX_ char *name, bool is_our, HV *ourstash)
{
- SV **svp, *sv;
+ SV **svp;
PADOFFSET top, off;
ASSERT_CURPAD_ACTIVE("pad_check_dup");
- if (!ckWARN(WARN_MISC) || AvFILLp(PL_comppad_name) < 0)
+ if (AvFILLp(PL_comppad_name) < 0 || !ckWARN(WARN_MISC))
return; /* nothing to check */
svp = AvARRAY(PL_comppad_name);
@@ -509,13 +510,14 @@ Perl_pad_check_dup(pTHX_ char *name, bool is_our, HV *ourstash)
/* XXX DAPM - why the (I32) cast - shouldn't we ensure they're the same
* type ? */
for (off = top; (I32)off > PL_comppad_name_floor; off--) {
- if ((sv = svp[off])
+ SV * const sv = svp[off];
+ if (sv
&& sv != &PL_sv_undef
&& !SvFAKE(sv)
&& (SvIVX(sv) == PAD_MAX || SvIVX(sv) == 0)
&& (!is_our
|| ((SvFLAGS(sv) & SVpad_OUR) && GvSTASH(sv) == ourstash))
- && strEQ(name, SvPVX(sv)))
+ && strEQ(name, SvPVX_const(sv)))
{
Perl_warner(aTHX_ packWARN(WARN_MISC),
"\"%s\" variable %s masks earlier declaration in same %s",
@@ -529,12 +531,13 @@ Perl_pad_check_dup(pTHX_ char *name, bool is_our, HV *ourstash)
/* check the rest of the pad */
if (is_our) {
do {
- if ((sv = svp[off])
+ SV * const sv = svp[off];
+ if (sv
&& sv != &PL_sv_undef
&& !SvFAKE(sv)
&& (SvIVX(sv) == PAD_MAX || SvIVX(sv) == 0)
&& ((SvFLAGS(sv) & SVpad_OUR) && GvSTASH(sv) == ourstash)
- && strEQ(name, SvPVX(sv)))
+ && strEQ(name, SvPVX_const(sv)))
{
Perl_warner(aTHX_ packWARN(WARN_MISC),
"\"our\" variable %s redeclared", name);
@@ -589,7 +592,7 @@ Perl_pad_findmy(pTHX_ char *name)
/* The one we're looking for is probably just before comppad_name_fill. */
for (off = AvFILLp(PL_comppad_name); off > 0; off--) {
sv = svp[off];
- if (!sv || sv == &PL_sv_undef || !strEQ(SvPVX(sv), name))
+ if (!sv || sv == &PL_sv_undef || !strEQ(SvPVX_const(sv), name))
continue;
if (SvFAKE(sv)) {
/* we'll use this later if we don't find a real entry */
@@ -638,7 +641,7 @@ ref to it at newoff in the current pad.
*/
STATIC PADOFFSET
-S_pad_findlex(pTHX_ char *name, PADOFFSET newoff, CV* innercv)
+S_pad_findlex(pTHX_ const char *name, PADOFFSET newoff, const CV* innercv)
{
CV *cv;
I32 off = 0;
@@ -681,7 +684,7 @@ S_pad_findlex(pTHX_ char *name, PADOFFSET newoff, CV* innercv)
depth = CvDEPTH(cv);
for (off = AvFILLp(curname); off > 0; off--) {
sv = svp[off];
- if (!sv || sv == &PL_sv_undef || !strEQ(SvPVX(sv), name))
+ if (!sv || sv == &PL_sv_undef || !strEQ(SvPVX_const(sv), name))
continue;
if (SvFAKE(sv)) {
/* we'll use this later if we don't find a real entry */
@@ -913,7 +916,6 @@ U32
Perl_intro_my(pTHX)
{
SV **svp;
- SV *sv;
I32 i;
ASSERT_CURPAD_ACTIVE("intro_my");
@@ -922,14 +924,14 @@ Perl_intro_my(pTHX)
svp = AvARRAY(PL_comppad_name);
for (i = PL_min_intro_pending; i <= PL_max_intro_pending; i++) {
- if ((sv = svp[i]) && sv != &PL_sv_undef
- && !SvFAKE(sv) && !SvIVX(sv))
- {
- SvIVX(sv) = PAD_MAX; /* Don't know scope end yet. */
- SvNVX(sv) = (NV)PL_cop_seqmax;
+ SV * const sv = svp[i];
+
+ if (sv && sv != &PL_sv_undef && !SvFAKE(sv) && !SvIVX(sv)) {
+ SvIV_set(sv, PAD_MAX); /* Don't know scope end yet. */
+ SvNV_set(sv, (NV)PL_cop_seqmax);
DEBUG_Xv(PerlIO_printf(Perl_debug_log,
"Pad intromy: %ld \"%s\", (%lu,%lu)\n",
- (long)i, SvPVX(sv),
+ (long)i, SvPVX_const(sv),
(unsigned long)U_32(SvNVX(sv)), (unsigned long)SvIVX(sv))
);
}
@@ -955,15 +957,15 @@ void
Perl_pad_leavemy(pTHX)
{
I32 off;
- SV **svp = AvARRAY(PL_comppad_name);
- SV *sv;
+ SV * const * const svp = AvARRAY(PL_comppad_name);
PL_pad_reset_pending = FALSE;
ASSERT_CURPAD_ACTIVE("pad_leavemy");
if (PL_min_intro_pending && PL_comppad_name_fill < PL_min_intro_pending) {
for (off = PL_max_intro_pending; off >= PL_min_intro_pending; off--) {
- if ((sv = svp[off]) && sv != &PL_sv_undef
+ const SV * const sv = svp[off];
+ if (sv && sv != &PL_sv_undef
&& !SvFAKE(sv) && ckWARN_d(WARN_INTERNAL))
Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
"%"SVf" never introduced", sv);
@@ -971,13 +973,12 @@ Perl_pad_leavemy(pTHX)
}
/* "Deintroduce" my variables that are leaving with this scope. */
for (off = AvFILLp(PL_comppad_name); off > PL_comppad_name_fill; off--) {
- if ((sv = svp[off]) && sv != &PL_sv_undef
- && !SvFAKE(sv) && SvIVX(sv) == PAD_MAX)
- {
- SvIVX(sv) = PL_cop_seqmax;
+ const SV * const sv = svp[off];
+ if (sv && sv != &PL_sv_undef && !SvFAKE(sv) && SvIVX(sv) == PAD_MAX) {
+ SvIV_set(sv, PL_cop_seqmax);
DEBUG_Xv(PerlIO_printf(Perl_debug_log,
"Pad leavemy: %ld \"%s\", (%lu,%lu)\n",
- (long)off, SvPVX(sv),
+ (long)off, SvPVX_const(sv),
(unsigned long)U_32(SvNVX(sv)), (unsigned long)SvIVX(sv))
);
}
@@ -1017,8 +1018,15 @@ Perl_pad_swipe(pTHX_ PADOFFSET po, bool refadjust)
if (refadjust)
SvREFCNT_dec(PL_curpad[po]);
+
+ /* if pad tmps aren't shared between ops, then there's no need to
+ * create a new tmp when an existing op is freed */
+#ifdef USE_BROKEN_PAD_RESET
PL_curpad[po] = NEWSV(1107,0);
SvPADTMP_on(PL_curpad[po]);
+#else
+ PL_curpad[po] = &PL_sv_undef;
+#endif
if ((I32)po < PL_padix)
PL_padix = po - 1;
}
@@ -1042,8 +1050,6 @@ void
Perl_pad_reset(pTHX)
{
#ifdef USE_BROKEN_PAD_RESET
- register I32 po;
-
if (AvARRAY(PL_comppad) != PL_curpad)
Perl_croak(aTHX_ "panic: pad_reset curpad");
@@ -1055,6 +1061,7 @@ Perl_pad_reset(pTHX)
);
if (!PL_tainting) { /* Can't mix tainted and non-tainted temporaries. */
+ register I32 po;
for (po = AvMAX(PL_comppad); po > PL_padix_floor; po--) {
if (PL_curpad[po] && !SvIMMORTAL(PL_curpad[po]))
SvPADTMP_off(PL_curpad[po]);
@@ -1085,7 +1092,6 @@ Tidy up a pad after we've finished compiling it:
void
Perl_pad_tidy(pTHX_ padtidy_type type)
{
- PADOFFSET ix;
ASSERT_CURPAD_ACTIVE("pad_tidy");
/* extend curpad to match namepad */
@@ -1093,7 +1099,8 @@ Perl_pad_tidy(pTHX_ padtidy_type type)
av_store(PL_comppad_name, AvFILLp(PL_comppad), Nullsv);
if (type == padtidy_SUBCLONE) {
- SV **namep = AvARRAY(PL_comppad_name);
+ SV * const * const namep = AvARRAY(PL_comppad_name);
+ PADOFFSET ix;
for (ix = AvFILLp(PL_comppad); ix > 0; ix--) {
SV *namesv;
@@ -1107,7 +1114,7 @@ Perl_pad_tidy(pTHX_ padtidy_type type)
if (!((namesv = namep[ix]) != Nullsv &&
namesv != &PL_sv_undef &&
(SvFAKE(namesv) ||
- *SvPVX(namesv) == '&')))
+ *SvPVX_const(namesv) == '&')))
{
SvREFCNT_dec(PL_curpad[ix]);
PL_curpad[ix] = Nullsv;
@@ -1116,7 +1123,7 @@ Perl_pad_tidy(pTHX_ padtidy_type type)
}
else if (type == padtidy_SUB) {
/* XXX DAPM this same bit of code keeps appearing !!! Rationalise? */
- AV *av = newAV(); /* Will be @_ */
+ AV * const av = newAV(); /* Will be @_ */
av_extend(av, 0);
av_store(PL_comppad, 0, (SV*)av);
AvFLAGS(av) = AVf_REIFY;
@@ -1125,6 +1132,7 @@ Perl_pad_tidy(pTHX_ padtidy_type type)
/* XXX DAPM rationalise these two similar branches */
if (type == padtidy_SUB) {
+ PADOFFSET ix;
for (ix = AvFILLp(PL_comppad); ix > 0; ix--) {
if (SvIMMORTAL(PL_curpad[ix]) || IS_PADGV(PL_curpad[ix]) || IS_PADCONST(PL_curpad[ix]))
continue;
@@ -1133,6 +1141,7 @@ Perl_pad_tidy(pTHX_ padtidy_type type)
}
}
else if (type == padtidy_FORMAT) {
+ PADOFFSET ix;
for (ix = AvFILLp(PL_comppad); ix > 0; ix--) {
if (!SvPADMY(PL_curpad[ix]) && !SvIMMORTAL(PL_curpad[ix]))
SvPADTMP_on(PL_curpad[ix]);
@@ -1145,7 +1154,7 @@ Perl_pad_tidy(pTHX_ padtidy_type type)
/*
=for apidoc pad_free
-Free the SV at offet po in the current pad.
+Free the SV at offset po in the current pad.
=cut
*/
@@ -1193,11 +1202,10 @@ Dump the contents of a padlist
void
Perl_do_dump_pad(pTHX_ I32 level, PerlIO *file, PADLIST *padlist, int full)
{
- AV *pad_name;
- AV *pad;
+ const AV *pad_name;
+ const AV *pad;
SV **pname;
SV **ppad;
- SV *namesv;
I32 ix;
if (!padlist) {
@@ -1213,7 +1221,7 @@ Perl_do_dump_pad(pTHX_ I32 level, PerlIO *file, PADLIST *padlist, int full)
);
for (ix = 1; ix <= AvFILLp(pad_name); ix++) {
- namesv = pname[ix];
+ const SV *namesv = pname[ix];
if (namesv && namesv == &PL_sv_undef) {
namesv = Nullsv;
}
@@ -1224,7 +1232,7 @@ Perl_do_dump_pad(pTHX_ I32 level, PerlIO *file, PADLIST *padlist, int full)
(int) ix,
PTR2UV(ppad[ix]),
(unsigned long) (ppad[ix] ? SvREFCNT(ppad[ix]) : 0),
- SvPVX(namesv)
+ SvPVX_const(namesv)
);
else
Perl_dump_indent(aTHX_ level+1, file,
@@ -1234,7 +1242,7 @@ Perl_do_dump_pad(pTHX_ I32 level, PerlIO *file, PADLIST *padlist, int full)
(unsigned long) (ppad[ix] ? SvREFCNT(ppad[ix]) : 0),
(unsigned long)U_32(SvNVX(namesv)),
(unsigned long)SvIVX(namesv),
- SvPVX(namesv)
+ SvPVX_const(namesv)
);
}
else if (full) {
@@ -1260,10 +1268,10 @@ dump the contents of a CV
#ifdef DEBUGGING
STATIC void
-S_cv_dump(pTHX_ CV *cv, char *title)
+S_cv_dump(pTHX_ const CV *cv, const char *title)
{
- CV *outside = CvOUTSIDE(cv);
- AV* padlist = CvPADLIST(cv);
+ const CV * const outside = CvOUTSIDE(cv);
+ AV* const padlist = CvPADLIST(cv);
PerlIO_printf(Perl_debug_log,
" %s: CV=0x%"UVxf" (%s), OUTSIDE=0x%"UVxf" (%s)\n",
@@ -1320,14 +1328,13 @@ STATIC CV *
S_cv_clone2(pTHX_ CV *proto, CV *outside)
{
I32 ix;
- AV* protopadlist = CvPADLIST(proto);
- AV* protopad_name = (AV*)*av_fetch(protopadlist, 0, FALSE);
- AV* protopad = (AV*)*av_fetch(protopadlist, 1, FALSE);
- SV** pname = AvARRAY(protopad_name);
- SV** ppad = AvARRAY(protopad);
- I32 fname = AvFILLp(protopad_name);
- I32 fpad = AvFILLp(protopad);
- AV* comppadlist;
+ AV* const protopadlist = CvPADLIST(proto);
+ const AV* const protopad_name = (AV*)*av_fetch(protopadlist, 0, FALSE);
+ const AV* const protopad = (AV*)*av_fetch(protopadlist, 1, FALSE);
+ SV** const pname = AvARRAY(protopad_name);
+ SV** const ppad = AvARRAY(protopad);
+ const I32 fname = AvFILLp(protopad_name);
+ const I32 fpad = AvFILLp(protopad);
CV* cv;
assert(!CvUNIQUE(proto));
@@ -1353,7 +1360,9 @@ S_cv_clone2(pTHX_ CV *proto, CV *outside)
#endif
CvGV(cv) = CvGV(proto);
CvSTASH(cv) = CvSTASH(proto);
+ OP_REFCNT_LOCK;
CvROOT(cv) = OpREFCNT_inc(CvROOT(proto));
+ OP_REFCNT_UNLOCK;
CvSTART(cv) = CvSTART(proto);
if (outside) {
CvOUTSIDE(cv) = (CV*)SvREFCNT_inc(outside);
@@ -1361,9 +1370,9 @@ S_cv_clone2(pTHX_ CV *proto, CV *outside)
}
if (SvPOK(proto))
- sv_setpvn((SV*)cv, SvPVX(proto), SvCUR(proto));
+ sv_setpvn((SV*)cv, SvPVX_const(proto), SvCUR(proto));
- CvPADLIST(cv) = comppadlist = pad_new(padnew_CLONE|padnew_SAVE);
+ CvPADLIST(cv) = pad_new(padnew_CLONE|padnew_SAVE);
for (ix = fname; ix >= 0; ix--)
av_store(PL_comppad_name, ix, SvREFCNT_inc(pname[ix]));
@@ -1372,9 +1381,9 @@ S_cv_clone2(pTHX_ CV *proto, CV *outside)
PL_curpad = AvARRAY(PL_comppad);
for (ix = fpad; ix > 0; ix--) {
- SV* namesv = (ix <= fname) ? pname[ix] : Nullsv;
+ SV* const namesv = (ix <= fname) ? pname[ix] : Nullsv;
if (namesv && namesv != &PL_sv_undef) {
- char *name = SvPVX(namesv); /* XXX */
+ const char *name = SvPVX_const(namesv); /* XXX */
if (SvFLAGS(namesv) & SVf_FAKE) { /* lexical from outside? */
I32 off = pad_findlex(name, ix, cv);
if (!off)
@@ -1440,11 +1449,11 @@ S_cv_clone2(pTHX_ CV *proto, CV *outside)
LEAVE;
if (CvCONST(cv)) {
- SV* const_sv = op_const_sv(CvSTART(cv), cv);
+ SV* const const_sv = op_const_sv(CvSTART(cv), cv);
assert(const_sv);
/* constant sub () { $x } closing over $x - see lib/constant.pm */
SvREFCNT_dec(cv);
- cv = newCONSTSUB(CvSTASH(proto), 0, const_sv);
+ cv = newCONSTSUB(CvSTASH(proto), Nullch, const_sv);
}
return cv;
@@ -1465,16 +1474,16 @@ void
Perl_pad_fixup_inner_anons(pTHX_ PADLIST *padlist, CV *old_cv, CV *new_cv)
{
I32 ix;
- AV *comppad_name = (AV*)AvARRAY(padlist)[0];
- AV *comppad = (AV*)AvARRAY(padlist)[1];
- SV **namepad = AvARRAY(comppad_name);
- SV **curpad = AvARRAY(comppad);
+ AV * const comppad_name = (AV*)AvARRAY(padlist)[0];
+ AV * const comppad = (AV*)AvARRAY(padlist)[1];
+ SV ** const namepad = AvARRAY(comppad_name);
+ SV ** const curpad = AvARRAY(comppad);
for (ix = AvFILLp(comppad_name); ix > 0; ix--) {
- SV *namesv = namepad[ix];
+ const SV * const namesv = namepad[ix];
if (namesv && namesv != &PL_sv_undef
- && *SvPVX(namesv) == '&')
+ && *SvPVX_const(namesv) == '&')
{
- CV *innercv = (CV*)curpad[ix];
+ CV * const innercv = (CV*)curpad[ix];
assert(CvWEAKOUTSIDE(innercv));
assert(CvOUTSIDE(innercv) == old_cv);
CvOUTSIDE(innercv) = new_cv;
@@ -1503,16 +1512,16 @@ Perl_pad_push(pTHX_ PADLIST *padlist, int depth, int has_args)
return;
{
- SV** svp = AvARRAY(padlist);
- AV *newpad = newAV();
- SV **oldpad = AvARRAY(svp[depth-1]);
+ SV** const svp = AvARRAY(padlist);
+ AV* const newpad = newAV();
+ SV** const oldpad = AvARRAY(svp[depth-1]);
I32 ix = AvFILLp((AV*)svp[1]);
I32 names_fill = AvFILLp((AV*)svp[0]);
- SV** names = AvARRAY(svp[0]);
+ SV** const names = AvARRAY(svp[0]);
SV* sv;
for ( ;ix > 0; ix--) {
if (names_fill >= ix && names[ix] != &PL_sv_undef) {
- char *name = SvPVX(names[ix]);
+ const char *name = SvPVX_const(names[ix]);
if ((SvFLAGS(names[ix]) & SVf_FAKE) || *name == '&') {
/* outer lexical or anon code */
av_store(newpad, ix, SvREFCNT_inc(oldpad[ix]));
@@ -1546,3 +1555,24 @@ Perl_pad_push(pTHX_ PADLIST *padlist, int depth, int has_args)
AvFILLp(padlist) = depth;
}
}
+
+
+HV *
+Perl_pad_compname_type(pTHX_ const PADOFFSET po)
+{
+ SV* const * const av = av_fetch(PL_comppad_name, po, FALSE);
+ if ( SvFLAGS(*av) & SVpad_TYPED ) {
+ return SvSTASH(*av);
+ }
+ return Nullhv;
+}
+
+/*
+ * Local variables:
+ * c-indentation-style: bsd
+ * c-basic-offset: 4
+ * indent-tabs-mode: t
+ * End:
+ *
+ * ex: set ts=8 sts=4 sw=4 noet:
+ */
diff --git a/gnu/usr.bin/perl/pad.h b/gnu/usr.bin/perl/pad.h
index d69f8ec26fb..50db6ab7386 100644
--- a/gnu/usr.bin/perl/pad.h
+++ b/gnu/usr.bin/perl/pad.h
@@ -1,6 +1,6 @@
/* pad.h
*
- * Copyright (C) 2002, by Larry Wall and others
+ * Copyright (C) 2002, 2003, 2005, 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.
@@ -77,7 +77,7 @@ Save a pad slot (used to restore after an iteration)
XXX DAPM it would make more sense to make the arg a PADOFFSET
=for apidoc m|void|SAVECLEARSV |SV **svp
-Clear the pointed to pad value on scope exit. (ie the runtime action of 'my')
+Clear the pointed to pad value on scope exit. (i.e. the runtime action of 'my')
=for apidoc m|void|SAVECOMPPAD
save PL_comppad and PL_curpad
@@ -103,7 +103,12 @@ Get the value from slot C<po> in the base (DEPTH=1) pad of a padlist
=for apidoc m|void|PAD_SET_CUR |PADLIST padlist|I32 n
Set the current pad to be pad C<n> in the padlist, saving
-the previous current pad.
+the previous current pad. NB currently this macro expands to a string too
+long for some compilers, so it's best to replace it with
+
+ SAVECOMPPAD();
+ PAD_SET_CUR_NOSAVE(padlist,n);
+
=for apidoc m|void|PAD_SET_CUR_NOSAVE |PADLIST padlist|I32 n
like PAD_SET_CUR, but without the save
@@ -205,23 +210,25 @@ Assumes the slot entry is a valid C<our> lexical.
The generation number of the name at offset C<po> in the current
compiling pad (lvalue). Note that C<SvCUR> is hijacked for this purpose.
+=for apidoc m|STRLEN|PAD_COMPNAME_GEN_set|PADOFFSET po|int gen
+Sets the generation number of the name at offset C<po> in the current
+ling pad (lvalue) to C<gen>. Note that C<SvCUR_set> is hijacked for this purpose.
+
=cut
+
*/
#define PAD_COMPNAME_FLAGS(po) SvFLAGS(*av_fetch(PL_comppad_name, (po), FALSE))
#define PAD_COMPNAME_PV(po) SvPV_nolen(*av_fetch(PL_comppad_name, (po), FALSE))
-/* XXX DAPM yuk - using av_fetch twice. Is there a better way? */
-#define PAD_COMPNAME_TYPE(po) \
- ((SvFLAGS(*av_fetch(PL_comppad_name, (po), FALSE)) & SVpad_TYPED) \
- ? (SvSTASH(*av_fetch(PL_comppad_name, (po), FALSE))) : Nullhv)
+#define PAD_COMPNAME_TYPE(po) pad_compname_type(po)
#define PAD_COMPNAME_OURSTASH(po) \
(GvSTASH(*av_fetch(PL_comppad_name, (po), FALSE)))
#define PAD_COMPNAME_GEN(po) SvCUR(AvARRAY(PL_comppad_name)[po])
-
+#define PAD_COMPNAME_GEN_set(po, gen) SvCUR_set(AvARRAY(PL_comppad_name)[po], gen)
/*
diff --git a/gnu/usr.bin/perl/perl_keyword.pl b/gnu/usr.bin/perl/perl_keyword.pl
new file mode 100644
index 00000000000..0ce4624d10d
--- /dev/null
+++ b/gnu/usr.bin/perl/perl_keyword.pl
@@ -0,0 +1,79 @@
+
+# How to generate the logic of the lookup table Perl_keyword() in toke.c
+
+use Devel::Tokenizer::C 0.05;
+use strict;
+use warnings;
+
+my @pos = qw(__DATA__ __END__ AUTOLOAD BEGIN CHECK DESTROY do delete defined
+ END else eval elsif exists for format foreach grep goto glob INIT
+ if last local m my map next no our pos print printf package
+ prototype q qr qq qw qx redo return require s scalar sort split
+ study sub tr tie tied use undef until untie unless while y);
+
+# In 5.8.x there is no err
+my @neg = qw(__FILE__ __LINE__ __PACKAGE__ and abs alarm atan2 accept bless
+ bind binmode CORE cmp chr cos chop close chdir chomp chmod chown
+ crypt chroot caller connect closedir continue die dump dbmopen
+ dbmclose eq eof exp exit exec each endgrent endpwent
+ endnetent endhostent endservent endprotoent fork fcntl flock
+ fileno formline getppid getpgrp getpwent getpwnam getpwuid
+ getpeername getprotoent getpriority getprotobyname
+ getprotobynumber gethostbyname gethostbyaddr gethostent
+ getnetbyname getnetbyaddr getnetent getservbyname getservbyport
+ getservent getsockname getsockopt getgrent getgrnam getgrgid
+ getlogin getc gt ge gmtime hex int index ioctl join keys kill lt
+ le lc log link lock lstat length listen lcfirst localtime mkdir
+ msgctl msgget msgrcv msgsnd ne not or ord oct open opendir pop
+ push pack pipe quotemeta ref read rand recv rmdir reset rename
+ rindex reverse readdir readlink readline readpipe rewinddir seek
+ send semop select semctl semget setpgrp seekdir setpwent setgrent
+ setnetent setsockopt sethostent setservent setpriority
+ setprotoent shift shmctl shmget shmread shmwrite shutdown sin
+ sleep socket socketpair sprintf splice sqrt srand stat substr
+ system symlink syscall sysopen sysread sysseek syswrite tell time
+ times telldir truncate uc utime umask unpack unlink unshift
+ ucfirst values vec warn wait write waitpid wantarray x xor);
+
+my %pos = map { ($_ => 1) } @pos;
+
+my $t = Devel::Tokenizer::C->new( TokenFunc => \&perl_keyword
+ , TokenString => 'name'
+ , StringLength => 'len'
+ , MergeSwitches => 1
+ );
+
+$t->add_tokens(@pos, @neg, 'elseif');
+
+my $switch = $t->generate(Indent => ' ');
+
+print <<END;
+/*
+ * The following code was generated by $0.
+ */
+
+I32
+Perl_keyword (pTHX_ char *name, I32 len)
+{
+$switch
+unknown:
+ return 0;
+}
+END
+
+sub perl_keyword
+{
+ my $k = shift;
+ my $sign = $pos{$k} ? '' : '-';
+
+ if ($k eq 'elseif') {
+ return <<END;
+if(ckWARN_d(WARN_SYNTAX))
+ Perl_warner(aTHX_ packWARN(WARN_SYNTAX), "elseif should be elsif");
+END
+ }
+
+ return <<END;
+return ${sign}KEY_$k;
+END
+}
diff --git a/gnu/usr.bin/perl/perlapi.c b/gnu/usr.bin/perl/perlapi.c
index 10f8f2a2876..4a8be39b8d4 100644
--- a/gnu/usr.bin/perl/perlapi.c
+++ b/gnu/usr.bin/perl/perlapi.c
@@ -1,7 +1,9 @@
-/*
+/* -*- buffer-read-only: t -*-
+ *
* perlapi.c
*
- * Copyright (C) 1999, 2000, 2001, by Larry Wall and others
+ * Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+ * 2000, 2001, 2002, 2003, 2004, 2005, 2006, 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.
@@ -64,3 +66,5 @@ START_EXTERN_C
END_EXTERN_C
#endif /* MULTIPLICITY */
+
+/* ex: set ro: */
diff --git a/gnu/usr.bin/perl/perlapi.h b/gnu/usr.bin/perl/perlapi.h
index 5a5df61f511..7e5e6969a17 100644
--- a/gnu/usr.bin/perl/perlapi.h
+++ b/gnu/usr.bin/perl/perlapi.h
@@ -1,7 +1,9 @@
-/*
+/* -*- buffer-read-only: t -*-
+ *
* perlapi.h
*
- * Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, by Larry Wall and others
+ * Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+ * 2000, 2001, 2002, 2003, 2004, 2005, 2006, 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.
@@ -67,10 +69,27 @@ EXT void *PL_force_link_funcs[] = {
#define PERLVARI(v,t,i) PERLVAR(v,t)
#define PERLVARIC(v,t,i) PERLVAR(v,t)
+/* In Tru64 (__DEC && __osf__) the cc option -std1 causes that one
+ * cannot cast between void pointers and function pointers without
+ * info level warnings. The PL_force_link_funcs[] would cause a few
+ * hundred of those warnings. In code one can circumnavigate this by using
+ * unions that overlay the different pointers, but in declarations one
+ * cannot use this trick. Therefore we just disable the warning here
+ * for the duration of the PL_force_link_funcs[] declaration. */
+
+#if defined(__DECC) && defined(__osf__)
+#pragma message save
+#pragma message disable (nonstandcast)
+#endif
+
#include "thrdvar.h"
#include "intrpvar.h"
#include "perlvars.h"
+#if defined(__DECC) && defined(__osf__)
+#pragma message restore
+#endif
+
#undef PERLVAR
#undef PERLVARA
#undef PERLVARI
@@ -218,6 +237,8 @@ END_EXTERN_C
#define PL_doswitches (*Perl_Idoswitches_ptr(aTHX))
#undef PL_dowarn
#define PL_dowarn (*Perl_Idowarn_ptr(aTHX))
+#undef PL_dumper_fd
+#define PL_dumper_fd (*Perl_Idumper_fd_ptr(aTHX))
#undef PL_e_script
#define PL_e_script (*Perl_Ie_script_ptr(aTHX))
#undef PL_egid
@@ -496,6 +517,10 @@ END_EXTERN_C
#define PL_psig_pend (*Perl_Ipsig_pend_ptr(aTHX))
#undef PL_psig_ptr
#define PL_psig_ptr (*Perl_Ipsig_ptr_ptr(aTHX))
+#undef PL_pte_arenaroot
+#define PL_pte_arenaroot (*Perl_Ipte_arenaroot_ptr(aTHX))
+#undef PL_pte_root
+#define PL_pte_root (*Perl_Ipte_root_ptr(aTHX))
#undef PL_ptr_table
#define PL_ptr_table (*Perl_Iptr_table_ptr(aTHX))
#undef PL_reentrant_buffer
@@ -1028,3 +1053,4 @@ END_EXTERN_C
#endif /* __perlapi_h__ */
+/* ex: set ro: */
diff --git a/gnu/usr.bin/perl/perliol.h b/gnu/usr.bin/perl/perliol.h
index 47fe6fc679c..c6da2b6ffdf 100644
--- a/gnu/usr.bin/perl/perliol.h
+++ b/gnu/usr.bin/perl/perliol.h
@@ -15,7 +15,7 @@ struct PerlIO_list_s {
struct _PerlIO_funcs {
Size_t fsize;
- char *name;
+ const char *name;
Size_t size;
U32 kind;
IV (*Pushed) (pTHX_ PerlIO *f, const char *mode, SV *arg, PerlIO_funcs *tab);
@@ -96,23 +96,29 @@ struct _PerlIO {
#define PerlIOValid(f) ((f) && *(f))
/*--------------------------------------------------------------------------------------*/
-/* Data exports - EXT rather than extern is needed for Cygwin */
-EXT PerlIO_funcs PerlIO_unix;
-EXT PerlIO_funcs PerlIO_perlio;
-EXT PerlIO_funcs PerlIO_stdio;
-EXT PerlIO_funcs PerlIO_crlf;
-EXT PerlIO_funcs PerlIO_utf8;
-EXT PerlIO_funcs PerlIO_byte;
-EXT PerlIO_funcs PerlIO_raw;
-EXT PerlIO_funcs PerlIO_pending;
+/* Data exports - EXTCONST rather than extern is needed for Cygwin */
+#undef EXTPERLIO
+#ifdef PERLIO_FUNCS_CONST
+#define EXTPERLIO EXTCONST
+#else
+#define EXTPERLIO EXT
+#endif
+EXTPERLIO PerlIO_funcs PerlIO_unix;
+EXTPERLIO PerlIO_funcs PerlIO_perlio;
+EXTPERLIO PerlIO_funcs PerlIO_stdio;
+EXTPERLIO PerlIO_funcs PerlIO_crlf;
+EXTPERLIO PerlIO_funcs PerlIO_utf8;
+EXTPERLIO PerlIO_funcs PerlIO_byte;
+EXTPERLIO PerlIO_funcs PerlIO_raw;
+EXTPERLIO PerlIO_funcs PerlIO_pending;
#ifdef HAS_MMAP
-EXT PerlIO_funcs PerlIO_mmap;
+EXTPERLIO PerlIO_funcs PerlIO_mmap;
#endif
#ifdef WIN32
-EXT PerlIO_funcs PerlIO_win32;
+EXTPERLIO PerlIO_funcs PerlIO_win32;
#endif
-extern PerlIO *PerlIO_allocate(pTHX);
-extern SV *PerlIO_arg_fetch(PerlIO_list_t *av, IV n);
+PERL_EXPORT_C PerlIO *PerlIO_allocate(pTHX);
+PERL_EXPORT_C SV *PerlIO_arg_fetch(PerlIO_list_t *av, IV n);
#define PerlIOArg PerlIO_arg_fetch(layers,n)
#ifdef PERLIO_USING_CRLF
@@ -122,27 +128,6 @@ extern SV *PerlIO_arg_fetch(PerlIO_list_t *av, IV n);
#endif
/*--------------------------------------------------------------------------------------*/
-/* Generic, or stub layer functions */
-
-extern IV PerlIOBase_fileno(pTHX_ PerlIO *f);
-extern PerlIO *PerlIOBase_dup(pTHX_ PerlIO *f, PerlIO *o, CLONE_PARAMS *param, int flags);
-extern IV PerlIOBase_pushed(pTHX_ PerlIO *f, const char *mode, SV *arg, PerlIO_funcs *tab);
-extern IV PerlIOBase_popped(pTHX_ PerlIO *f);
-extern IV PerlIOBase_binmode(pTHX_ PerlIO *f);
-extern SSize_t PerlIOBase_read(pTHX_ PerlIO *f, void *vbuf, Size_t count);
-extern SSize_t PerlIOBase_unread(pTHX_ PerlIO *f, const void *vbuf,
- Size_t count);
-extern IV PerlIOBase_eof(pTHX_ PerlIO *f);
-extern IV PerlIOBase_error(pTHX_ PerlIO *f);
-extern void PerlIOBase_clearerr(pTHX_ PerlIO *f);
-extern IV PerlIOBase_close(pTHX_ PerlIO *f);
-extern void PerlIOBase_setlinebuf(pTHX_ PerlIO *f);
-extern void PerlIOBase_flush_linebuf(pTHX);
-
-extern IV PerlIOBase_noop_ok(pTHX_ PerlIO *f);
-extern IV PerlIOBase_noop_fail(pTHX_ PerlIO *f);
-
-/*--------------------------------------------------------------------------------------*/
/* perlio buffer layer
As this is reasonably generic its struct and "methods" are declared here
so they can be used to "inherit" from it.
@@ -158,37 +143,141 @@ typedef struct {
IV oneword; /* Emergency buffer */
} PerlIOBuf;
-extern int PerlIO_apply_layera(pTHX_ PerlIO *f, const char *mode,
+PERL_EXPORT_C int PerlIO_apply_layera(pTHX_ PerlIO *f, const char *mode,
PerlIO_list_t *layers, IV n, IV max);
-extern int PerlIO_parse_layers(pTHX_ PerlIO_list_t *av, const char *names);
-extern void PerlIO_list_free(pTHX_ PerlIO_list_t *list);
-extern PerlIO_funcs *PerlIO_layer_fetch(pTHX_ PerlIO_list_t *av, IV n, PerlIO_funcs *def);
-
-
-extern SV *PerlIO_sv_dup(pTHX_ SV *arg, CLONE_PARAMS *param);
-extern PerlIO *PerlIOBuf_open(pTHX_ PerlIO_funcs *self,
- PerlIO_list_t *layers, IV n,
- const char *mode, int fd, int imode,
- int perm, PerlIO *old, int narg, SV **args);
-extern IV PerlIOBuf_pushed(pTHX_ PerlIO *f, const char *mode, SV *arg, PerlIO_funcs *tab);
-extern IV PerlIOBuf_popped(pTHX_ PerlIO *f);
-extern PerlIO *PerlIOBuf_dup(pTHX_ PerlIO *f, PerlIO *o, CLONE_PARAMS *param, int flags);
-extern SSize_t PerlIOBuf_read(pTHX_ PerlIO *f, void *vbuf, Size_t count);
-extern SSize_t PerlIOBuf_unread(pTHX_ PerlIO *f, const void *vbuf, Size_t count);
-extern SSize_t PerlIOBuf_write(pTHX_ PerlIO *f, const void *vbuf, Size_t count);
-extern IV PerlIOBuf_seek(pTHX_ PerlIO *f, Off_t offset, int whence);
-extern Off_t PerlIOBuf_tell(pTHX_ PerlIO *f);
-extern IV PerlIOBuf_close(pTHX_ PerlIO *f);
-extern IV PerlIOBuf_flush(pTHX_ PerlIO *f);
-extern IV PerlIOBuf_fill(pTHX_ PerlIO *f);
-extern STDCHAR *PerlIOBuf_get_base(pTHX_ PerlIO *f);
-extern Size_t PerlIOBuf_bufsiz(pTHX_ PerlIO *f);
-extern STDCHAR *PerlIOBuf_get_ptr(pTHX_ PerlIO *f);
-extern SSize_t PerlIOBuf_get_cnt(pTHX_ PerlIO *f);
-extern void PerlIOBuf_set_ptrcnt(pTHX_ PerlIO *f, STDCHAR * ptr, SSize_t cnt);
-
-extern int PerlIOUnix_oflags(const char *mode);
+PERL_EXPORT_C int PerlIO_parse_layers(pTHX_ PerlIO_list_t *av, const char *names);
+PERL_EXPORT_C PerlIO_funcs *PerlIO_layer_fetch(pTHX_ PerlIO_list_t *av, IV n, PerlIO_funcs *def);
+
+
+PERL_EXPORT_C SV *PerlIO_sv_dup(pTHX_ SV *arg, CLONE_PARAMS *param);
+PERL_EXPORT_C void PerlIO_cleantable(pTHX_ PerlIO **tablep);
+PERL_EXPORT_C SV * PerlIO_tab_sv(pTHX_ PerlIO_funcs *tab);
+PERL_EXPORT_C void PerlIO_default_buffer(pTHX_ PerlIO_list_t *av);
+PERL_EXPORT_C void PerlIO_stdstreams(pTHX);
+PERL_EXPORT_C int PerlIO__close(pTHX_ PerlIO *f);
+PERL_EXPORT_C PerlIO_list_t * PerlIO_resolve_layers(pTHX_ const char *layers, const char *mode, int narg, SV **args);
+PERL_EXPORT_C PerlIO_funcs * PerlIO_default_layer(pTHX_ I32 n);
+PERL_EXPORT_C PerlIO_list_t * PerlIO_default_layers(pTHX);
+PERL_EXPORT_C PerlIO * PerlIO_reopen(const char *path, const char *mode, PerlIO *f);
+PERL_EXPORT_C int PerlIO_vsprintf(char *s, int n, const char *fmt, va_list ap)
+ __attribute__format__(__printf__,3,0);
+
+PERL_EXPORT_C PerlIO_list_t *PerlIO_list_alloc(pTHX);
+PERL_EXPORT_C PerlIO_list_t *PerlIO_clone_list(pTHX_ PerlIO_list_t *proto, CLONE_PARAMS *param);
+PERL_EXPORT_C void PerlIO_list_free(pTHX_ PerlIO_list_t *list);
+PERL_EXPORT_C void PerlIO_list_push(pTHX_ PerlIO_list_t *list, PerlIO_funcs *funcs, SV *arg);
+PERL_EXPORT_C void PerlIO_list_free(pTHX_ PerlIO_list_t *list);
/*--------------------------------------------------------------------------------------*/
+/* Generic, or stub layer functions */
+
+PERL_EXPORT_C IV PerlIOBase_binmode(pTHX_ PerlIO *f);
+PERL_EXPORT_C void PerlIOBase_clearerr(pTHX_ PerlIO *f);
+PERL_EXPORT_C IV PerlIOBase_close(pTHX_ PerlIO *f);
+PERL_EXPORT_C PerlIO * PerlIOBase_dup(pTHX_ PerlIO *f, PerlIO *o, CLONE_PARAMS *param, int flags);
+PERL_EXPORT_C IV PerlIOBase_eof(pTHX_ PerlIO *f);
+PERL_EXPORT_C IV PerlIOBase_error(pTHX_ PerlIO *f);
+PERL_EXPORT_C IV PerlIOBase_fileno(pTHX_ PerlIO *f);
+PERL_EXPORT_C void PerlIOBase_flush_linebuf(pTHX);
+PERL_EXPORT_C IV PerlIOBase_noop_fail(pTHX_ PerlIO *f);
+PERL_EXPORT_C IV PerlIOBase_noop_ok(pTHX_ PerlIO *f);
+PERL_EXPORT_C IV PerlIOBase_popped(pTHX_ PerlIO *f);
+PERL_EXPORT_C IV PerlIOBase_pushed(pTHX_ PerlIO *f, const char *mode, SV *arg, PerlIO_funcs *tab);
+PERL_EXPORT_C SSize_t PerlIOBase_read(pTHX_ PerlIO *f, void *vbuf, Size_t count);
+PERL_EXPORT_C void PerlIOBase_setlinebuf(pTHX_ PerlIO *f);
+PERL_EXPORT_C SSize_t PerlIOBase_unread(pTHX_ PerlIO *f, const void *vbuf, Size_t count);
+
+/* Buf */
+PERL_EXPORT_C Size_t PerlIOBuf_bufsiz(pTHX_ PerlIO *f);
+PERL_EXPORT_C IV PerlIOBuf_close(pTHX_ PerlIO *f);
+PERL_EXPORT_C PerlIO * PerlIOBuf_dup(pTHX_ PerlIO *f, PerlIO *o, CLONE_PARAMS *param, int flags);
+PERL_EXPORT_C IV PerlIOBuf_fill(pTHX_ PerlIO *f);
+PERL_EXPORT_C IV PerlIOBuf_flush(pTHX_ PerlIO *f);
+PERL_EXPORT_C STDCHAR * PerlIOBuf_get_base(pTHX_ PerlIO *f);
+PERL_EXPORT_C SSize_t PerlIOBuf_get_cnt(pTHX_ PerlIO *f);
+PERL_EXPORT_C STDCHAR * PerlIOBuf_get_ptr(pTHX_ PerlIO *f);
+PERL_EXPORT_C PerlIO * PerlIOBuf_open(pTHX_ PerlIO_funcs *self, PerlIO_list_t *layers, IV n, const char *mode, int fd, int imode, int perm, PerlIO *old, int narg, SV **args);
+PERL_EXPORT_C IV PerlIOBuf_popped(pTHX_ PerlIO *f);
+PERL_EXPORT_C IV PerlIOBuf_pushed(pTHX_ PerlIO *f, const char *mode, SV *arg, PerlIO_funcs *tab);
+PERL_EXPORT_C SSize_t PerlIOBuf_read(pTHX_ PerlIO *f, void *vbuf, Size_t count);
+PERL_EXPORT_C IV PerlIOBuf_seek(pTHX_ PerlIO *f, Off_t offset, int whence);
+PERL_EXPORT_C void PerlIOBuf_set_ptrcnt(pTHX_ PerlIO *f, STDCHAR * ptr, SSize_t cnt);
+PERL_EXPORT_C Off_t PerlIOBuf_tell(pTHX_ PerlIO *f);
+PERL_EXPORT_C SSize_t PerlIOBuf_unread(pTHX_ PerlIO *f, const void *vbuf, Size_t count);
+PERL_EXPORT_C SSize_t PerlIOBuf_write(pTHX_ PerlIO *f, const void *vbuf, Size_t count);
+
+/* Crlf */
+PERL_EXPORT_C IV PerlIOCrlf_binmode(pTHX_ PerlIO *f);
+PERL_EXPORT_C IV PerlIOCrlf_flush(pTHX_ PerlIO *f);
+PERL_EXPORT_C SSize_t PerlIOCrlf_get_cnt(pTHX_ PerlIO *f);
+PERL_EXPORT_C IV PerlIOCrlf_pushed(pTHX_ PerlIO *f, const char *mode, SV *arg, PerlIO_funcs *tab);
+PERL_EXPORT_C void PerlIOCrlf_set_ptrcnt(pTHX_ PerlIO *f, STDCHAR * ptr, SSize_t cnt);
+PERL_EXPORT_C SSize_t PerlIOCrlf_unread(pTHX_ PerlIO *f, const void *vbuf, Size_t count);
+PERL_EXPORT_C SSize_t PerlIOCrlf_unread(pTHX_ PerlIO *f, const void *vbuf, Size_t count);
+PERL_EXPORT_C SSize_t PerlIOCrlf_write(pTHX_ PerlIO *f, const void *vbuf, Size_t count);
+
+/* Mmap */
+PERL_EXPORT_C IV PerlIOMmap_close(pTHX_ PerlIO *f);
+PERL_EXPORT_C PerlIO * PerlIOMmap_dup(pTHX_ PerlIO *f, PerlIO *o, CLONE_PARAMS *param, int flags);
+PERL_EXPORT_C IV PerlIOMmap_fill(pTHX_ PerlIO *f);
+PERL_EXPORT_C IV PerlIOMmap_flush(pTHX_ PerlIO *f);
+PERL_EXPORT_C STDCHAR * PerlIOMmap_get_base(pTHX_ PerlIO *f);
+PERL_EXPORT_C IV PerlIOMmap_map(pTHX_ PerlIO *f);
+PERL_EXPORT_C IV PerlIOMmap_unmap(pTHX_ PerlIO *f);
+PERL_EXPORT_C SSize_t PerlIOMmap_unread(pTHX_ PerlIO *f, const void *vbuf, Size_t count);
+PERL_EXPORT_C SSize_t PerlIOMmap_write(pTHX_ PerlIO *f, const void *vbuf, Size_t count);
+
+/* Pending */
+PERL_EXPORT_C IV PerlIOPending_close(pTHX_ PerlIO *f);
+PERL_EXPORT_C IV PerlIOPending_fill(pTHX_ PerlIO *f);
+PERL_EXPORT_C IV PerlIOPending_flush(pTHX_ PerlIO *f);
+PERL_EXPORT_C IV PerlIOPending_pushed(pTHX_ PerlIO *f, const char *mode, SV *arg, PerlIO_funcs *tab);
+PERL_EXPORT_C SSize_t PerlIOPending_read(pTHX_ PerlIO *f, void *vbuf, Size_t count);
+PERL_EXPORT_C IV PerlIOPending_seek(pTHX_ PerlIO *f, Off_t offset, int whence);
+PERL_EXPORT_C void PerlIOPending_set_ptrcnt(pTHX_ PerlIO *f, STDCHAR * ptr, SSize_t cnt);
+
+/* Pop */
+PERL_EXPORT_C IV PerlIOPop_pushed(pTHX_ PerlIO *f, const char *mode, SV *arg, PerlIO_funcs *tab);
+
+/* Raw */
+PERL_EXPORT_C PerlIO * PerlIORaw_open(pTHX_ PerlIO_funcs *self, PerlIO_list_t *layers, IV n, const char *mode, int fd, int imode, int perm, PerlIO *old, int narg, SV **args);
+PERL_EXPORT_C IV PerlIORaw_pushed(pTHX_ PerlIO *f, const char *mode, SV *arg, PerlIO_funcs *tab);
+
+/* Stdio */
+PERL_EXPORT_C void PerlIOStdio_clearerr(pTHX_ PerlIO *f);
+PERL_EXPORT_C IV PerlIOStdio_close(pTHX_ PerlIO *f);
+PERL_EXPORT_C PerlIO * PerlIOStdio_dup(pTHX_ PerlIO *f, PerlIO *o, CLONE_PARAMS *param, int flags);
+PERL_EXPORT_C IV PerlIOStdio_eof(pTHX_ PerlIO *f);
+PERL_EXPORT_C IV PerlIOStdio_error(pTHX_ PerlIO *f);
+PERL_EXPORT_C IV PerlIOStdio_fileno(pTHX_ PerlIO *f);
+PERL_EXPORT_C IV PerlIOStdio_fill(pTHX_ PerlIO *f);
+PERL_EXPORT_C IV PerlIOStdio_flush(pTHX_ PerlIO *f);
+PERL_EXPORT_C STDCHAR * PerlIOStdio_get_base(pTHX_ PerlIO *f);
+PERL_EXPORT_C char * PerlIOStdio_mode(const char *mode, char *tmode);
+PERL_EXPORT_C PerlIO * PerlIOStdio_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);
+PERL_EXPORT_C IV PerlIOStdio_pushed(pTHX_ PerlIO *f, const char *mode, SV *arg, PerlIO_funcs *tab);
+PERL_EXPORT_C SSize_t PerlIOStdio_read(pTHX_ PerlIO *f, void *vbuf, Size_t count);
+PERL_EXPORT_C IV PerlIOStdio_seek(pTHX_ PerlIO *f, Off_t offset, int whence);
+PERL_EXPORT_C void PerlIOStdio_setlinebuf(pTHX_ PerlIO *f);
+PERL_EXPORT_C Off_t PerlIOStdio_tell(pTHX_ PerlIO *f);
+PERL_EXPORT_C SSize_t PerlIOStdio_unread(pTHX_ PerlIO *f, const void *vbuf, Size_t count);
+PERL_EXPORT_C SSize_t PerlIOStdio_write(pTHX_ PerlIO *f, const void *vbuf, Size_t count);
+
+/* Unix */
+PERL_EXPORT_C IV PerlIOUnix_close(pTHX_ PerlIO *f);
+PERL_EXPORT_C PerlIO * PerlIOUnix_dup(pTHX_ PerlIO *f, PerlIO *o, CLONE_PARAMS *param, int flags);
+PERL_EXPORT_C IV PerlIOUnix_fileno(pTHX_ PerlIO *f);
+PERL_EXPORT_C int PerlIOUnix_oflags(const char *mode);
+PERL_EXPORT_C PerlIO * PerlIOUnix_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);
+PERL_EXPORT_C IV PerlIOUnix_pushed(pTHX_ PerlIO *f, const char *mode, SV *arg, PerlIO_funcs *tab);
+PERL_EXPORT_C SSize_t PerlIOUnix_read(pTHX_ PerlIO *f, void *vbuf, Size_t count);
+PERL_EXPORT_C int PerlIOUnix_refcnt_dec(int fd);
+PERL_EXPORT_C void PerlIOUnix_refcnt_inc(int fd);
+PERL_EXPORT_C IV PerlIOUnix_seek(pTHX_ PerlIO *f, Off_t offset, int whence);
+PERL_EXPORT_C Off_t PerlIOUnix_tell(pTHX_ PerlIO *f);
+PERL_EXPORT_C SSize_t PerlIOUnix_write(pTHX_ PerlIO *f, const void *vbuf, Size_t count);
+
+/* Utf8 */
+PERL_EXPORT_C IV PerlIOUtf8_pushed(pTHX_ PerlIO *f, const char *mode, SV *arg, PerlIO_funcs *tab);
#endif /* _PERLIOL_H */
diff --git a/gnu/usr.bin/perl/perlvars.h b/gnu/usr.bin/perl/perlvars.h
index e0bebeb4011..e40b4106a60 100644
--- a/gnu/usr.bin/perl/perlvars.h
+++ b/gnu/usr.bin/perl/perlvars.h
@@ -53,7 +53,7 @@ PERLVAR(Gdollarzero_mutex, perl_mutex) /* Modifying $0 */
#endif
/* This is constant on most architectures, a global on OS/2 */
-PERLVARI(Gsh_path, char *, SH_PATH)/* full path of shell */
+PERLVARI(Gsh_path, const char *, SH_PATH)/* full path of shell */
#ifndef PERL_MICRO
/* If Perl has to ignore SIGPFE, this is its saved state.
@@ -66,7 +66,7 @@ PERLVAR(Gsigfpe_saved, Sighandler_t)
PERLVAR(Gsv_placeholder, SV)
#ifndef PERL_MICRO
-PERLVARI(Gcsighandlerp, Sighandler_t, &Perl_csighandler) /* Pointer to C-level sighandler */
+PERLVARI(Gcsighandlerp, Sighandler_t, Perl_csighandler) /* Pointer to C-level sighandler */
#endif
#ifndef PERL_USE_SAFE_PUTENV
diff --git a/gnu/usr.bin/perl/plan9/config_sh.sample b/gnu/usr.bin/perl/plan9/config_sh.sample
index 9b14b391ec3..751e01ac4d7 100644
--- a/gnu/usr.bin/perl/plan9/config_sh.sample
+++ b/gnu/usr.bin/perl/plan9/config_sh.sample
@@ -111,7 +111,13 @@ d_archlib='define'
d_asctime_r='undef'
d_atolf='undef'
d_atoll='define'
-d_attribut='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_bcmp='define'
d_bcopy='define'
d_bsd='undef'
@@ -125,6 +131,7 @@ d_chown='define'
d_chroot='undef'
d_chsize='undef'
d_class='undef'
+d_clearenv='undef'
d_closedir='define'
d_cmsghdr_s='undef'
d_const='define'
@@ -193,6 +200,7 @@ d_fstatvfs='undef'
d_fsync='define'
d_ftello='undef'
d_ftime='undef'
+d_futimes='undef'
d_getcwd='define'
d_getespwnam='undef'
d_getfsstat='undef'
@@ -275,6 +283,8 @@ d_longlong='define'
d_lseekproto='undef'
d_lstat='define'
d_madvise='undef'
+d_malloc_good_size='undef'
+d_malloc_size='undef'
d_mblen='define'
d_mbstowcs='define'
d_mbtowc='define'
@@ -291,6 +301,7 @@ d_mkstemps='undef'
d_mktime='define'
d_mmap='undef'
d_modfl='undef'
+d_modflproto='undef'
d_modfl_pow32_bug='undef'
d_mprotect='undef'
d_msg='undef'
@@ -310,6 +321,7 @@ d_mymalloc='define'
d_nice='undef'
d_nl_langinfo='undef'
d_nv_preserves_uv='undef'
+d_nv_zero_is_allbits_zero='undef'
d_off64_t='undef'
d_old_pthread_create_joinable='undef'
d_oldpthreads='undef'
@@ -404,6 +416,8 @@ d_shmget='undef'
d_sigaction='define'
d_sigprocmask='define'
d_sigsetjmp='define'
+d_sprintf_returns_strlen='undef'
+d_snprintf='undef'
d_sockatmark='undef'
d_sockatmarkproto='undef'
d_socket='define'
@@ -433,6 +447,8 @@ d_strerrm='strerror(e)'
d_strerror='define'
d_strerror_r='undef'
d_strftime='define'
+d_strlcat='undef'
+d_strlcpy='undef'
d_strtod='define'
d_strtol='define'
d_strtold='undef'
@@ -468,6 +484,7 @@ d_umask='define'
d_uname='define'
d_union_semun='undef'
d_unordered='undef'
+d_unsetenv='undef'
d_usleep='undef'
d_usleepproto='undef'
d_ustat='undef'
@@ -480,6 +497,7 @@ d_voidsig='define'
d_voidtty=''
d_volatile='define'
d_vprintf='define'
+d_vsnprintf='undef'
d_wait4='undef'
d_waitpid='define'
d_wcstombs='define'
@@ -928,6 +946,7 @@ usefaststdio='define'
useithreads='undef'
uselargefiles='define'
uselongdouble='undef'
+usemallocwrap='undef'
usemorebits='undef'
usemultiplicity='undef'
usemymalloc='y'
@@ -936,8 +955,10 @@ useopcode='true'
useperlio='define'
useposix='true'
usereentrant='undef'
+userelocatableinc='undef'
usesfio='false'
useshrplib='false'
+usesitecustomize='undef'
usesocks='undef'
usethreads='undef'
usevendorprefix='undef'
diff --git a/gnu/usr.bin/perl/pod.lst b/gnu/usr.bin/perl/pod.lst
index 8a25ec47901..e5a66b05418 100644
--- a/gnu/usr.bin/perl/pod.lst
+++ b/gnu/usr.bin/perl/pod.lst
@@ -94,6 +94,8 @@ h Reference Manual
perlfilter Perl source filters
+ perlglossary Perl Glossary
+
h Internals and C Language Interface
perlembed Perl ways to embed perl in your C or C++ application
@@ -120,7 +122,9 @@ h Miscellaneous
perlhist Perl history records
d perldelta Perl changes since previous version
-D perl586delta Perl changes in version 5.8.6
+D perl588delta Perl changes in version 5.8.8
+ perl587delta Perl changes in version 5.8.7
+ perl586delta Perl changes in version 5.8.6
perl585delta Perl changes in version 5.8.5
perl584delta Perl changes in version 5.8.4
perl583delta Perl changes in version 5.8.3
@@ -162,12 +166,14 @@ r perlfreebsd Perl notes for FreeBSD
r perlhpux Perl notes for HP-UX
r perlhurd Perl notes for Hurd
r perlirix Perl notes for Irix
+r perllinux Perl notes for Linux
r perlmachten Perl notes for Power MachTen
r perlmacos Perl notes for Mac OS (Classic)
r perlmacosx Perl notes for Mac OS X
r perlmint Perl notes for MiNT
r perlmpeix Perl notes for MPE/iX
r perlnetware Perl notes for NetWare
+r perlopenbsd Perl notes for OpenBSD
r perlos2 Perl notes for OS/2
r perlos390 Perl notes for OS/390
r perlos400 Perl notes for OS/400
diff --git a/gnu/usr.bin/perl/pod/Makefile.SH b/gnu/usr.bin/perl/pod/Makefile.SH
index a1c6a33c038..46647781d9e 100644
--- a/gnu/usr.bin/perl/pod/Makefile.SH
+++ b/gnu/usr.bin/perl/pod/Makefile.SH
@@ -154,10 +154,9 @@ podchecker: podchecker.PL ../lib/Config.pm
podselect: podselect.PL ../lib/Config.pm
$(PERL) -I ../lib podselect.PL
-perlmodlib.pod: $(PERL) perlmodlib.PL ../mv-if-diff ../MANIFEST
- rm -f perlmodlib.tmp
+perlmodlib.pod: $(PERL) perlmodlib.PL ../MANIFEST
+ rm -f perlmodlib.pod
$(PERL) -I ../lib perlmodlib.PL
- sh ../mv-if-diff perlmodlib.tmp perlmodlib.pod
compile: all
$(REALPERL) -I../lib ../utils/perlcc -I .. -L .. -o pod2latex.exe pod2latex -log ../compilelog
diff --git a/gnu/usr.bin/perl/pod/perl561delta.pod b/gnu/usr.bin/perl/pod/perl561delta.pod
index fa36ebcf1c5..ab6067ca208 100644
--- a/gnu/usr.bin/perl/pod/perl561delta.pod
+++ b/gnu/usr.bin/perl/pod/perl561delta.pod
@@ -763,13 +763,13 @@ as requiring an automatic lock() when it is entered, you had to declare
that with a C<use attrs> pragma in the body of the subroutine.
That can now be accomplished with declaration syntax, like this:
- sub mymethod : locked method ;
+ sub mymethod : locked method;
...
sub mymethod : locked method {
...
}
- sub othermethod :locked :method ;
+ sub othermethod :locked :method;
...
sub othermethod :locked :method {
...
@@ -1388,6 +1388,12 @@ C<fred.com> if you don't backslash the C<@>.
See http://www.plover.com/~mjd/perl/at-error.html for more details
about the history here.
+=head2 @- and @+ provide starting/ending offsets of regex submatches
+
+The new magic variables @- and @+ provide the starting and ending
+offsets, respectively, of $&, $1, $2, etc. See L<perlvar> for
+details.
+
=head1 Modules and Pragmata
=head2 Modules
diff --git a/gnu/usr.bin/perl/pod/perl56delta.pod b/gnu/usr.bin/perl/pod/perl56delta.pod
index 097f43e6b5b..89d62371d89 100644
--- a/gnu/usr.bin/perl/pod/perl56delta.pod
+++ b/gnu/usr.bin/perl/pod/perl56delta.pod
@@ -165,13 +165,13 @@ as requiring an automatic lock() when it is entered, you had to declare
that with a C<use attrs> pragma in the body of the subroutine.
That can now be accomplished with declaration syntax, like this:
- sub mymethod : locked method ;
+ sub mymethod : locked method;
...
sub mymethod : locked method {
...
}
- sub othermethod :locked :method ;
+ sub othermethod :locked :method;
...
sub othermethod :locked :method {
...
@@ -790,6 +790,12 @@ C<fred.com> if you don't backslash the C<@>.
See http://www.plover.com/~mjd/perl/at-error.html for more details
about the history here.
+=head2 @- and @+ provide starting/ending offsets of regex matches
+
+The new magic variables @- and @+ provide the starting and ending
+offsets, respectively, of $&, $1, $2, etc. See L<perlvar> for
+details.
+
=head1 Modules and Pragmata
=head2 Modules
diff --git a/gnu/usr.bin/perl/pod/perl573delta.pod b/gnu/usr.bin/perl/pod/perl573delta.pod
index ea496789d34..42ed2615613 100644
--- a/gnu/usr.bin/perl/pod/perl573delta.pod
+++ b/gnu/usr.bin/perl/pod/perl573delta.pod
@@ -149,7 +149,7 @@ unpack("Z*Z*", pack("Z*Z*", ..)) was broken
=item 12243
-Devel::Peek: display UTF-8 SVs also also as \x{...}
+Devel::Peek: display UTF-8 SVs also as \x{...}
=item 12288
diff --git a/gnu/usr.bin/perl/pod/perl585delta.pod b/gnu/usr.bin/perl/pod/perl585delta.pod
index f8e4e1183a2..1717c74e028 100644
--- a/gnu/usr.bin/perl/pod/perl585delta.pod
+++ b/gnu/usr.bin/perl/pod/perl585delta.pod
@@ -20,8 +20,6 @@ classes.
=head1 Modules and Pragmata
-FIXME test 12 in ext/List/Util/t/lln.t at RC1 time
-
=over 4
=item *
diff --git a/gnu/usr.bin/perl/pod/perl586delta.pod b/gnu/usr.bin/perl/pod/perl586delta.pod
index ab72bea47dc..6cd0fa85496 100644
--- a/gnu/usr.bin/perl/pod/perl586delta.pod
+++ b/gnu/usr.bin/perl/pod/perl586delta.pod
@@ -1,6 +1,6 @@
=head1 NAME
-perldelta - what is new for perl v5.8.6
+perl586delta - what is new for perl v5.8.6
=head1 DESCRIPTION
@@ -117,7 +117,7 @@ C<read> into a UTF8-encoded buffer with an offset off the end of the buffer
no longer mis-calculates buffer lengths.
Although Perl has promised since version 5.8 that C<sort()> would be
-stable, the two cases C<sort {$b cmp $a}> and C<<sort {$b <=> $a}>> could
+stable, the two cases C<sort {$b cmp $a}> and C<< sort {$b <=> $a} >> could
produce non-stable sorts. This is corrected in perl5.8.6.
Localising C<$^D> no longer generates a diagnostic message about valid -D
diff --git a/gnu/usr.bin/perl/pod/perl587delta.pod b/gnu/usr.bin/perl/pod/perl587delta.pod
new file mode 100644
index 00000000000..021fc3d7d65
--- /dev/null
+++ b/gnu/usr.bin/perl/pod/perl587delta.pod
@@ -0,0 +1,379 @@
+=head1 NAME
+
+perldelta - what is new for perl v5.8.7
+
+=head1 DESCRIPTION
+
+This document describes differences between the 5.8.6 release and
+the 5.8.7 release.
+
+=head1 Incompatible Changes
+
+There are no changes incompatible with 5.8.6.
+
+=head1 Core Enhancements
+
+=head2 Unicode Character Database 4.1.0
+
+The copy of the Unicode Character Database included in Perl 5.8 has
+been updated to 4.1.0 from 4.0.1. See
+L<http://www.unicode.org/versions/Unicode4.1.0/#NotableChanges> for the
+notable changes.
+
+=head2 suidperl less insecure
+
+A pair of exploits in C<suidperl> involving debugging code have been closed.
+
+For new projects the core perl team strongly recommends that you use
+dedicated, single purpose security tools such as C<sudo> in preference to
+C<suidperl>.
+
+=head2 Optional site customization script
+
+The perl interpreter can be built to allow the use of a site customization
+script. By default this is not enabled, to be consistent with previous perl
+releases. To use this, add C<-Dusesitecustomize> to the command line flags
+when running the C<Configure> script. See also L<perlrun/-f>.
+
+=head2 C<Config.pm> is now much smaller.
+
+C<Config.pm> is now about 3K rather than 32K, with the infrequently used
+code and C<%Config> values loaded on demand. This is transparent to the
+programmer, but means that most code will save parsing and loading 29K of
+script (for example, code that uses C<File::Find>).
+
+=head1 Modules and Pragmata
+
+=over 4
+
+=item *
+
+B upgraded to version 1.09
+
+=item *
+
+base upgraded to version 2.07
+
+=item *
+
+bignum upgraded to version 0.17
+
+=item *
+
+bytes upgraded to version 1.02
+
+=item *
+
+Carp upgraded to version 1.04
+
+=item *
+
+CGI upgraded to version 3.10
+
+=item *
+
+Class::ISA upgraded to version 0.33
+
+=item *
+
+Data::Dumper upgraded to version 2.121_02
+
+=item *
+
+DB_File upgraded to version 1.811
+
+=item *
+
+Devel::PPPort upgraded to version 3.06
+
+=item *
+
+Digest upgraded to version 1.10
+
+=item *
+
+Encode upgraded to version 2.10
+
+=item *
+
+FileCache upgraded to version 1.05
+
+=item *
+
+File::Path upgraded to version 1.07
+
+=item *
+
+File::Temp upgraded to version 0.16
+
+=item *
+
+IO::File upgraded to version 1.11
+
+=item *
+
+IO::Socket upgraded to version 1.28
+
+=item *
+
+Math::BigInt upgraded to version 1.77
+
+=item *
+
+Math::BigRat upgraded to version 0.15
+
+=item *
+
+overload upgraded to version 1.03
+
+=item *
+
+PathTools upgraded to version 3.05
+
+=item *
+
+Pod::HTML upgraded to version 1.0503
+
+=item *
+
+Pod::Perldoc upgraded to version 3.14
+
+=item *
+
+Pod::LaTeX upgraded to version 0.58
+
+=item *
+
+Pod::Parser upgraded to version 1.30
+
+=item *
+
+Symbol upgraded to version 1.06
+
+=item *
+
+Term::ANSIColor upgraded to version 1.09
+
+=item *
+
+Test::Harness upgraded to version 2.48
+
+=item *
+
+Test::Simple upgraded to version 0.54
+
+=item *
+
+Text::Wrap upgraded to version 2001.09293, to fix a bug when wrap() was
+called with a non-space separator.
+
+=item *
+
+threads::shared upgraded to version 0.93
+
+=item *
+
+Time::HiRes upgraded to version 1.66
+
+=item *
+
+Time::Local upgraded to version 1.11
+
+=item *
+
+Unicode::Normalize upgraded to version 0.32
+
+=item *
+
+utf8 upgraded to version 1.05
+
+=item *
+
+Win32 upgraded to version 0.24, which provides Win32::GetFileVersion
+
+=back
+
+=head1 Utility Changes
+
+=head2 find2perl enhancements
+
+C<find2perl> has new options C<-iname>, C<-path> and C<-ipath>.
+
+=head1 Performance Enhancements
+
+The internal pointer mapping hash used during ithreads cloning now uses an
+arena for memory allocation. In tests this reduced ithreads cloning time by
+about 10%.
+
+=head1 Installation and Configuration Improvements
+
+=over 4
+
+=item *
+
+The Win32 "dmake" makefile.mk has been updated to make it compatible
+with the latest versions of dmake.
+
+=item *
+
+C<PERL_MALLOC>, C<DEBUG_MSTATS>, C<PERL_HASH_SEED_EXPLICIT> and C<NO_HASH_SEED>
+should now work in Win32 makefiles.
+
+=back
+
+=head1 Selected Bug Fixes
+
+=over 4
+
+=item *
+
+The socket() function on Win32 has been fixed so that it is able to use
+transport providers which specify a protocol of 0 (meaning any protocol
+is allowed) once more. (This was broken in 5.8.6, and typically caused
+the use of ICMP sockets to fail.)
+
+=item *
+
+Another obscure bug involving C<substr> and UTF-8 caused by bad internal
+offset caching has been identified and fixed.
+
+=item *
+
+A bug involving the loading of UTF-8 tables by the regexp engine has been
+fixed - code such as C<"\x{100}" =~ /[[:print:]]/> will no longer give
+corrupt results.
+
+=item *
+
+Case conversion operations such as C<uc> on a long Unicode string could
+exhaust memory. This has been fixed.
+
+=item *
+
+C<index>/C<rindex> were buggy for some combinations of Unicode and
+non-Unicode data. This has been fixed.
+
+=item *
+
+C<read> (and presumably C<sysread>) would expose the UTF-8 internals when
+reading from a byte oriented file handle into a UTF-8 scalar. This has
+been fixed.
+
+=item *
+
+Several C<pack>/C<unpack> bug fixes:
+
+=over 4
+
+=item *
+
+Checksums with C<b> or C<B> formats were broken.
+
+=item *
+
+C<unpack> checksums could overflow with the C<C> format.
+
+=item *
+
+C<U0> and C<C0> are now scoped to C<()> C<pack> sub-templates.
+
+=item *
+
+Counted length prefixes now don't change C<C0>/C<U0> mode.
+
+=item *
+
+C<pack> C<Z0> used to destroy the preceding character.
+
+=item *
+
+C<P>/C<p> C<pack> formats used to only recognise literal C<undef>
+
+=back
+
+=item *
+
+Using closures with ithreads could cause perl to crash. This was due to
+failure to correctly lock internal OP structures, and has been fixed.
+
+=item *
+
+The return value of C<close> now correctly reflects any file errors that
+occur while flushing the handle's data, instead of just giving failure if
+the actual underlying file close operation failed.
+
+=item *
+
+C<not() || 1> used to segfault. C<not()> now behaves like C<not(0)>, which was
+the pre 5.6.0 behaviour.
+
+=item *
+
+C<h2ph> has various enhancements to cope with constructs in header files that
+used to result in incorrect or invalid output.
+
+=back
+
+=head1 New or Changed Diagnostics
+
+There is a new taint error, "%ENV is aliased to %s". This error is thrown
+when taint checks are enabled and when C<*ENV> has been aliased, so that
+C<%ENV> has no env-magic anymore and hence the environment cannot be verified
+as taint-free.
+
+The internals of C<pack> and C<unpack> have been updated. All legitimate
+templates should work as before, but there may be some changes in the error
+reported for complex failure cases. Any behaviour changes for non-error cases
+are bugs, and should be reported.
+
+=head1 Changed Internals
+
+There has been a fair amount of refactoring of the C<C> source code, partly to
+make it tidier and more maintainable. The resulting object code and the
+C<perl> binary may well be smaller than 5.8.6, and hopefully faster in some
+cases, but apart from this there should be no user-detectable changes.
+
+C<${^UTF8LOCALE}> has been added to give perl space access to C<PL_utf8locale>.
+
+The size of the arenas used to allocate SV heads and most SV bodies can now
+be changed at compile time. The old size was 1008 bytes, the new default size
+is 4080 bytes.
+
+=head1 Known Problems
+
+Unicode strings returned from overloaded operators can be buggy. This is a
+long standing bug reported since 5.8.6 was released, but we do not yet have
+a suitable fix for it.
+
+=head1 Platform Specific Problems
+
+On UNICOS, lib/Math/BigInt/t/bigintc.t hangs burning CPU.
+ext/B/t/bytecode.t and ext/Socket/t/socketpair.t both fail tests.
+These are unlikely to be resolved, as our valiant UNICOS porter's last
+Cray is being decommissioned.
+
+=head1 Reporting Bugs
+
+If you find what you think is a bug, you might check the articles
+recently posted to the comp.lang.perl.misc newsgroup and the perl
+bug database at http://bugs.perl.org. There may also be
+information at http://www.perl.org, the Perl Home Page.
+
+If you believe you have an unreported bug, please run the B<perlbug>
+program included with your release. Be sure to trim your bug down
+to a tiny but sufficient test case. Your bug report, along with the
+output of C<perl -V>, will be sent off to perlbug@perl.org to be
+analysed by the Perl porting team. You can browse and search
+the Perl 5 bugs at http://bugs.perl.org/
+
+=head1 SEE ALSO
+
+The F<Changes> file for exhaustive details on what changed.
+
+The F<INSTALL> file for how to build Perl.
+
+The F<README> file for general stuff.
+
+The F<Artistic> and F<Copying> files for copyright information.
+
+=cut
diff --git a/gnu/usr.bin/perl/pod/perl588delta.pod b/gnu/usr.bin/perl/pod/perl588delta.pod
new file mode 100644
index 00000000000..344d8f43480
--- /dev/null
+++ b/gnu/usr.bin/perl/pod/perl588delta.pod
@@ -0,0 +1,1632 @@
+=head1 NAME
+
+perldelta - what is new for perl v5.8.8
+
+=head1 DESCRIPTION
+
+This document describes differences between the 5.8.7 release and
+the 5.8.8 release.
+
+=head1 Incompatible Changes
+
+There are no changes intentionally incompatible with 5.8.7. If any exist,
+they are bugs and reports are welcome.
+
+=head1 Core Enhancements
+
+=over
+
+=item *
+
+C<chdir>, C<chmod> and C<chown> can now work on filehandles as well as
+filenames, if the system supports respectively C<fchdir>, C<fchmod> and
+C<fchown>, thanks to a patch provided by Gisle Aas.
+
+=back
+
+=head1 Modules and Pragmata
+
+=over
+
+=item *
+
+C<Attribute::Handlers> upgraded to version 0.78_02
+
+=over
+
+=item *
+
+Documentation typo fix
+
+=back
+
+=item *
+
+C<attrs> upgraded to version 1.02
+
+=over
+
+=item *
+
+Internal cleanup only
+
+=back
+
+=item *
+
+C<autouse> upgraded to version 1.05
+
+=over
+
+=item *
+
+Simplified implementation
+
+=back
+
+=item *
+
+C<B> upgraded to version 1.09_01
+
+=over
+
+=item *
+
+The inheritance hierarchy of the C<B::> modules has been corrected;
+C<B::NV> now inherits from C<B::SV> (instead of C<B::IV>).
+
+=back
+
+=item *
+
+C<blib> upgraded to version 1.03
+
+=over
+
+=item *
+
+Documentation typo fix
+
+=back
+
+=item *
+
+C<ByteLoader> upgraded to version 0.06
+
+=over
+
+=item *
+
+Internal cleanup
+
+=back
+
+=item *
+
+C<CGI> upgraded to version 3.15
+
+=over
+
+=item *
+
+Extraneous "?" from C<self_url()> removed
+
+=item *
+
+C<scrolling_list()> select attribute fixed
+
+=item *
+
+C<virtual_port> now works properly with the https protocol
+
+=item *
+
+C<upload_hook()> and C<append()> now works in function-oriented mode
+
+=item *
+
+C<POST_MAX> doesn't cause the client to hang any more
+
+=item *
+
+Automatic tab indexes are now disabled and new C<-tabindex> pragma has
+been added to turn automatic indexes back on
+
+=item *
+
+C<end_form()> doesn't emit empty (and non-validating) C<< <div> >>
+
+=item *
+
+C<CGI::Carp> works better in certain mod_perl configurations
+
+=item *
+
+Setting C<$CGI::TMPDIRECTORY> is now effective
+
+=item *
+
+Enhanced documentation
+
+=back
+
+=item *
+
+C<charnames> upgraded to version 1.05
+
+=over
+
+=item *
+
+C<viacode()> now accept hex strings and has been optimized.
+
+=back
+
+=item *
+
+C<CPAN> upgraded to version 1.76_02
+
+=over
+
+=item *
+
+1 minor bug fix for Win32
+
+=back
+
+=item *
+
+C<Cwd> upgraded to version 3.12
+
+=over
+
+=item *
+
+C<canonpath()> on Win32 now collapses F<foo\..> sections correctly.
+
+=item *
+
+Improved behaviour on Symbian OS.
+
+=item *
+
+Enhanced documentation and typo fixes
+
+=item *
+
+Internal cleanup
+
+=back
+
+=item *
+
+C<Data::Dumper> upgraded to version 2.121_08
+
+=over
+
+=item *
+
+A problem where C<Data::Dumper> would sometimes update the iterator state
+of hashes has been fixed
+
+=item *
+
+Numeric labels now work
+
+=item *
+
+Internal cleanup
+
+=back
+
+=item *
+
+C<DB> upgraded to version 1.01
+
+=over
+
+=item *
+
+A problem where the state of the regexp engine would sometimes get clobbered when running
+under the debugger has been fixed.
+
+=back
+
+=item *
+
+C<DB_File> upgraded to version 1.814
+
+=over
+
+=item *
+
+Adds support for Berkeley DB 4.4.
+
+=back
+
+=item *
+
+C<Devel::DProf> upgraded to version 20050603.00
+
+=over
+
+=item *
+
+Internal cleanup
+
+=back
+
+=item *
+
+C<Devel::Peek> upgraded to version 1.03
+
+=over
+
+=item *
+
+Internal cleanup
+
+=back
+
+=item *
+
+C<Devel::PPPort> upgraded to version 3.06_01
+
+=over
+
+=item *
+
+C<--compat-version> argument checking has been improved
+
+=item *
+
+Files passed on the command line are filtered by default
+
+=item *
+
+C<--nofilter> option to override the filtering has been added
+
+=item *
+
+Enhanced documentation
+
+=back
+
+=item *
+
+C<diagnostics> upgraded to version 1.15
+
+=over
+
+=item *
+
+Documentation typo fix
+
+=back
+
+=item *
+
+C<Digest> upgraded to version 1.14
+
+=over
+
+=item *
+
+The constructor now knows which module implements SHA-224
+
+=item *
+
+Documentation tweaks and typo fixes
+
+=back
+
+=item *
+
+C<Digest::MD5> upgraded to version 2.36
+
+=over
+
+=item *
+
+C<XSLoader> is now used for faster loading
+
+=item *
+
+Enhanced documentation including MD5 weaknesses discovered lately
+
+=back
+
+=item *
+
+C<Dumpvalue> upgraded to version 1.12
+
+=over
+
+=item *
+
+Documentation fix
+
+=back
+
+=item *
+
+C<DynaLoader> upgraded but unfortunately we're not able to increment its version number :-(
+
+=over
+
+=item *
+
+Implements C<dl_unload_file> on Win32
+
+=item *
+
+Internal cleanup
+
+=item *
+
+C<XSLoader> 0.06 incorporated; small optimisation for calling
+C<bootstrap_inherit()> and documentation enhancements.
+
+=back
+
+=item *
+
+C<Encode> upgraded to version 2.12
+
+=over
+
+=item *
+
+A coderef is now acceptable for C<CHECK>!
+
+=item *
+
+3 new characters added to the ISO-8859-7 encoding
+
+=item *
+
+New encoding C<MIME-Header-ISO_2022_JP> added
+
+=item *
+
+Problem with partial characters and C<< encoding(utf-8-strict) >> fixed.
+
+=item *
+
+Documentation enhancements and typo fixes
+
+=back
+
+=item *
+
+C<English> upgraded to version 1.02
+
+=over
+
+=item *
+
+the C<< $COMPILING >> variable has been added
+
+=back
+
+=item *
+
+C<ExtUtils::Constant> upgraded to version 0.17
+
+=over
+
+=item *
+
+Improved compatibility with older versions of perl
+
+=back
+
+=item *
+
+C<ExtUtils::MakeMaker> upgraded to version 6.30 (was 6.17)
+
+=over
+
+=item *
+
+Too much to list here; see L<http://search.cpan.org/src/MSCHWERN/ExtUtils-MakeMaker-6.30/Changes>
+
+=back
+
+=item *
+
+C<File::Basename> upgraded to version 2.74, with changes contributed by Michael Schwern.
+
+=over
+
+=item *
+
+Documentation clarified and errors corrected.
+
+=item *
+
+C<basename> now strips trailing path separators before processing the name.
+
+=item *
+
+C<basename> now returns C</> for parameter C</>, to make C<basename>
+consistent with the shell utility of the same name.
+
+=item *
+
+The suffix is no longer stripped if it is identical to the remaining characters
+in the name, again for consistency with the shell utility.
+
+=item *
+
+Some internal code cleanup.
+
+=back
+
+=item *
+
+C<File::Copy> upgraded to version 2.09
+
+=over
+
+=item *
+
+Copying a file onto itself used to fail.
+
+=item *
+
+Moving a file between file systems now preserves the access and
+modification time stamps
+
+=back
+
+=item *
+
+C<File::Find> upgraded to version 1.10
+
+=over
+
+=item *
+
+Win32 portability fixes
+
+=item *
+
+Enhanced documentation
+
+=back
+
+=item *
+
+C<File::Glob> upgraded to version 1.05
+
+=over
+
+=item *
+
+Internal cleanup
+
+=back
+
+=item *
+
+C<File::Path> upgraded to version 1.08
+
+=over
+
+=item *
+
+C<mkpath> now preserves C<errno> when C<mkdir> fails
+
+=back
+
+=item *
+
+C<File::Spec> upgraded to version 3.12
+
+=over
+
+=item *
+
+C<File::Spec->rootdir()> now returns C<\> on Win32, instead of C</>
+
+=item *
+
+C<$^O> could sometimes become tainted. This has been fixed.
+
+=item *
+
+C<canonpath> on Win32 now collapses C<foo/..> (or C<foo\..>) sections
+correctly, rather than doing the "misguided" work it was previously doing.
+Note that C<canonpath> on Unix still does B<not> collapse these sections, as
+doing so would be incorrect.
+
+=item *
+
+Some documentation improvements
+
+=item *
+
+Some internal code cleanup
+
+=back
+
+=item *
+
+C<FileCache> upgraded to version 1.06
+
+=over
+
+=item *
+
+POD formatting errors in the documentation fixed
+
+=back
+
+=item *
+
+C<Filter::Simple> upgraded to version 0.82
+
+=item *
+
+C<FindBin> upgraded to version 1.47
+
+=over
+
+=item *
+
+Now works better with directories where access rights are more
+restrictive than usual.
+
+=back
+
+=item *
+
+C<GDBM_File> upgraded to version 1.08
+
+=over
+
+=item *
+
+Internal cleanup
+
+=back
+
+=item *
+
+C<Getopt::Long> upgraded to version 2.35
+
+=over
+
+=item *
+
+C<prefix_pattern> has now been complemented by a new configuration
+option C<long_prefix_pattern> that allows the user to specify what
+prefix patterns should have long option style semantics applied.
+
+=item *
+
+Options can now take multiple values at once (experimental)
+
+=item *
+
+Various bug fixes
+
+=back
+
+=item *
+
+C<if> upgraded to version 0.05
+
+=over
+
+=item *
+
+Give more meaningful error messages from C<if> when invoked with a
+condition in list context.
+
+=item *
+
+Restore backwards compatibility with earlier versions of perl
+
+=back
+
+=item *
+
+C<IO> upgraded to version 1.22
+
+=over
+
+=item *
+
+Enhanced documentation
+
+=item *
+
+Internal cleanup
+
+=back
+
+=item *
+
+C<IPC::Open2> upgraded to version 1.02
+
+=over
+
+=item *
+
+Enhanced documentation
+
+=back
+
+=item *
+
+C<IPC::Open3> upgraded to version 1.02
+
+=over
+
+=item *
+
+Enhanced documentation
+
+=back
+
+=item *
+
+C<List::Util> upgraded to version 1.18 (was 1.14)
+
+=over
+
+=item *
+
+Fix pure-perl version of C<refaddr> to avoid blessing an un-blessed reference
+
+=item *
+
+Use C<XSLoader> for faster loading
+
+=item *
+
+Fixed various memory leaks
+
+=item *
+
+Internal cleanup and portability fixes
+
+=back
+
+=item *
+
+C<Math::Complex> upgraded to version 1.35
+
+=over
+
+=item *
+
+C<atan2(0, i)> now works, as do all the (computable) complex argument cases
+
+=item *
+
+Fixes for certain bugs in C<make> and C<emake>
+
+=item *
+
+Support returning the I<k>th root directly
+
+=item *
+
+Support C<[2,-3pi/8]> in C<emake>
+
+=item *
+
+Support C<inf> for C<make>/C<emake>
+
+=item *
+
+Document C<make>/C<emake> more visibly
+
+=back
+
+=item *
+
+C<Math::Trig> upgraded to version 1.03
+
+=over
+
+=item *
+
+Add more great circle routines: C<great_circle_waypoint> and
+C<great_circle_destination>
+
+=back
+
+=item *
+
+C<MIME::Base64> upgraded to version 3.07
+
+=over
+
+=item *
+
+Use C<XSLoader> for faster loading
+
+=item *
+
+Enhanced documentation
+
+=item *
+
+Internal cleanup
+
+=back
+
+=item *
+
+C<NDBM_File> upgraded to version 1.06
+
+=over
+
+=item *
+
+Enhanced documentation
+
+=back
+
+=item *
+
+C<ODBM_File> upgraded to version 1.06
+
+=over
+
+=item *
+
+Documentation typo fixed
+
+=item *
+
+Internal cleanup
+
+=back
+
+=item *
+
+C<Opcode> upgraded to version 1.06
+
+=over
+
+=item *
+
+Enhanced documentation
+
+=item *
+
+Internal cleanup
+
+=back
+
+=item *
+
+C<open> upgraded to version 1.05
+
+=over
+
+=item *
+
+Enhanced documentation
+
+=back
+
+=item *
+
+C<overload> upgraded to version 1.04
+
+=over
+
+=item *
+
+Enhanced documentation
+
+=back
+
+=item *
+
+C<PerlIO> upgraded to version 1.04
+
+=over
+
+=item *
+
+C<PerlIO::via> iterate over layers properly now
+
+=item *
+
+C<PerlIO::scalar> understands C<< $/ = "" >> now
+
+=item *
+
+C<encoding(utf-8-strict)> with partial characters now works
+
+=item *
+
+Enhanced documentation
+
+=item *
+
+Internal cleanup
+
+=back
+
+=item *
+
+C<Pod::Functions> upgraded to version 1.03
+
+=over
+
+=item *
+
+Documentation typos fixed
+
+=back
+
+=item *
+
+C<Pod::Html> upgraded to version 1.0504
+
+=over
+
+=item *
+
+HTML output will now correctly link
+to C<=item>s on the same page, and should be valid XHTML.
+
+=item *
+
+Variable names are recognized as intended
+
+=item *
+
+Documentation typos fixed
+
+=back
+
+=item *
+
+C<Pod::Parser> upgraded to version 1.32
+
+=over
+
+=item *
+
+Allow files that start with C<=head> on the first line
+
+=item *
+
+Win32 portability fix
+
+=item *
+
+Exit status of C<pod2usage> fixed
+
+=item *
+
+New C<-noperldoc> switch for C<pod2usage>
+
+=item *
+
+Arbitrary URL schemes now allowed
+
+=item *
+
+Documentation typos fixed
+
+=back
+
+=item *
+
+C<POSIX> upgraded to version 1.09
+
+=over
+
+=item *
+
+Documentation typos fixed
+
+=item *
+
+Internal cleanup
+
+=back
+
+=item *
+
+C<re> upgraded to version 0.05
+
+=over
+
+=item *
+
+Documentation typo fixed
+
+=back
+
+=item *
+
+C<Safe> upgraded to version 2.12
+
+=over
+
+=item *
+
+Minor documentation enhancement
+
+=back
+
+=item *
+
+C<SDBM_File> upgraded to version 1.05
+
+=over
+
+=item *
+
+Documentation typo fixed
+
+=item *
+
+Internal cleanup
+
+=back
+
+=item *
+
+C<Socket> upgraded to version 1.78
+
+=over
+
+=item *
+
+Internal cleanup
+
+=back
+
+=item *
+
+C<Storable> upgraded to version 2.15
+
+=over
+
+=item *
+
+This includes the C<STORABLE_attach> hook functionality added by
+Adam Kennedy, and more frugal memory requirements when storing under C<ithreads>, by
+using the C<ithreads> cloning tracking code.
+
+=back
+
+=item *
+
+C<Switch> upgraded to version 2.10_01
+
+=over
+
+=item *
+
+Documentation typos fixed
+
+=back
+
+=item *
+
+C<Sys::Syslog> upgraded to version 0.13
+
+=over
+
+=item *
+
+Now provides numeric macros and meaningful C<Exporter> tags.
+
+=item *
+
+No longer uses C<Sys::Hostname> as it may provide useless values in
+unconfigured network environments, so instead uses C<INADDR_LOOPBACK> directly.
+
+=item *
+
+C<syslog()> now uses local timestamp.
+
+=item *
+
+C<setlogmask()> now behaves like its C counterpart.
+
+=item *
+
+C<setlogsock()> will now C<croak()> as documented.
+
+=item *
+
+Improved error and warnings messages.
+
+=item *
+
+Improved documentation.
+
+=back
+
+=item *
+
+C<Term::ANSIColor> upgraded to version 1.10
+
+=over
+
+=item *
+
+Fixes a bug in C<colored> when C<$EACHLINE> is set that caused it to not color
+lines consisting solely of 0 (literal zero).
+
+=item *
+
+Improved tests.
+
+=back
+
+=item *
+
+C<Term::ReadLine> upgraded to version 1.02
+
+=over
+
+=item *
+
+Documentation tweaks
+
+=back
+
+=item *
+
+C<Test::Harness> upgraded to version 2.56 (was 2.48)
+
+=over
+
+=item *
+
+The C<Test::Harness> timer is now off by default.
+
+=item *
+
+Now shows elapsed time in milliseconds.
+
+=item *
+
+Various bug fixes
+
+=back
+
+=item *
+
+C<Test::Simple> upgraded to version 0.62 (was 0.54)
+
+=over
+
+=item *
+
+C<is_deeply()> no longer fails to work for many cases
+
+=item *
+
+Various minor bug fixes
+
+=item *
+
+Documentation enhancements
+
+=back
+
+=item *
+
+C<Text::Tabs> upgraded to version 2005.0824
+
+=over
+
+=item *
+
+Provides a faster implementation of C<expand>
+
+=back
+
+=item *
+
+C<Text::Wrap> upgraded to version 2005.082401
+
+=over
+
+=item *
+
+Adds C<$Text::Wrap::separator2>, which allows you to preserve existing newlines
+but add line-breaks with some other string.
+
+=back
+
+=item *
+
+C<threads> upgraded to version 1.07
+
+=over
+
+=item *
+
+C<threads> will now honour C<no warnings 'threads'>
+
+=item *
+
+A thread's interpreter is now freed after C<< $t->join() >> rather than after
+C<undef $t>, which should fix some C<ithreads> memory leaks. (Fixed by Dave
+Mitchell)
+
+=item *
+
+Some documentation typo fixes.
+
+=back
+
+=item *
+
+C<threads::shared> upgraded to version 0.94
+
+=over
+
+=item *
+
+Documentation changes only
+
+=item *
+
+Note: An improved implementation of C<threads::shared> is available on
+CPAN - this will be merged into 5.8.9 if it proves stable.
+
+=back
+
+=item *
+
+C<Tie::Hash> upgraded to version 1.02
+
+=over
+
+=item *
+
+Documentation typo fixed
+
+=back
+
+=item *
+
+C<Time::HiRes> upgraded to version 1.86 (was 1.66)
+
+=over
+
+=item *
+
+C<clock_nanosleep()> and C<clock()> functions added
+
+=item *
+
+Support for the POSIX C<clock_gettime()> and C<clock_getres()> has been added
+
+=item *
+
+Return C<undef> or an empty list if the C C<gettimeofday()> function fails
+
+=item *
+
+Improved C<nanosleep> detection
+
+=item *
+
+Internal cleanup
+
+=item *
+
+Enhanced documentation
+
+=back
+
+=item *
+
+C<Unicode::Collate> upgraded to version 0.52
+
+=over
+
+=item *
+
+Now implements UCA Revision 14 (based on Unicode 4.1.0).
+
+=item *
+
+C<Unicode::Collate->new> method no longer overwrites user's C<$_>
+
+=item *
+
+Enhanced documentation
+
+=back
+
+=item *
+
+C<Unicode::UCD> upgraded to version 0.24
+
+=over
+
+=item *
+
+Documentation typos fixed
+
+=back
+
+=item *
+
+C<User::grent> upgraded to version 1.01
+
+=over
+
+=item *
+
+Documentation typo fixed
+
+=back
+
+=item *
+
+C<utf8> upgraded to version 1.06
+
+=over
+
+=item *
+
+Documentation typos fixed
+
+=back
+
+=item *
+
+C<vmsish> upgraded to version 1.02
+
+=over
+
+=item *
+
+Documentation typos fixed
+
+=back
+
+=item *
+
+C<warnings> upgraded to version 1.05
+
+=over
+
+=item *
+
+Gentler messing with C<Carp::> internals
+
+=item *
+
+Internal cleanup
+
+=item *
+
+Documentation update
+
+=back
+
+=item *
+
+C<Win32> upgraded to version 0.2601
+
+=for cynics And how many perl 5.8.x versions can I release ahead of Vista?
+
+=over
+
+=item *
+
+Provides Windows Vista support to C<Win32::GetOSName>
+
+=item *
+
+Documentation enhancements
+
+=back
+
+=item *
+
+C<XS::Typemap> upgraded to version 0.02
+
+=over
+
+=item *
+
+Internal cleanup
+
+=back
+
+=back
+
+=head1 Utility Changes
+
+=head2 C<h2xs> enhancements
+
+C<h2xs> implements new option C<--use-xsloader> to force use of
+C<XSLoader> even in backwards compatible modules.
+
+The handling of authors' names that had apostrophes has been fixed.
+
+Any enums with negative values are now skipped.
+
+=head2 C<perlivp> enhancements
+
+C<perlivp> implements new option C<-a> and will not check for F<*.ph>
+files by default any more. Use the C<-a> option to run I<all> tests.
+
+=head1 New Documentation
+
+The L<perlglossary> manpage is a glossary of terms used in the Perl
+documentation, technical and otherwise, kindly provided by O'Reilly Media,
+inc.
+
+=head1 Performance Enhancements
+
+=over 4
+
+=item *
+
+Weak reference creation is now I<O(1)> rather than I<O(n)>, courtesy of
+Nicholas Clark. Weak reference deletion remains I<O(n)>, but if deletion only
+happens at program exit, it may be skipped completely.
+
+=item *
+
+Salvador Fandiño provided improvements to reduce the memory usage of C<sort>
+and to speed up some cases.
+
+=item *
+
+Jarkko Hietaniemi and Andy Lester worked to mark as much data as possible in
+the C source files as C<static>, to increase the proportion of the executable
+file that the operating system can share between process, and thus reduce
+real memory usage on multi-user systems.
+
+=back
+
+=head1 Installation and Configuration Improvements
+
+Parallel makes should work properly now, although there may still be problems
+if C<make test> is instructed to run in parallel.
+
+Building with Borland's compilers on Win32 should work more smoothly. In
+particular Steve Hay has worked to side step many warnings emitted by their
+compilers and at least one C compiler internal error.
+
+C<Configure> will now detect C<clearenv> and C<unsetenv>, thanks to a patch
+from Alan Burlison. It will also probe for C<futimes> and whether C<sprintf>
+correctly returns the length of the formatted string, which will both be used
+in perl 5.8.9.
+
+There are improved hints for next-3.0, vmesa, IX, Darwin, Solaris, Linux,
+DEC/OSF, HP-UX and MPE/iX
+
+Perl extensions on Windows now can be statically built into the Perl DLL,
+thanks to a work by Vadim Konovalov. (This improvement was actually in 5.8.7,
+but was accidentally omitted from L<perl587delta>).
+
+=head1 Selected Bug Fixes
+
+=head2 no warnings 'category' works correctly with -w
+
+Previously when running with warnings enabled globally via C<-w>, selective
+disabling of specific warning categories would actually turn off all warnings.
+This is now fixed; now C<no warnings 'io';> will only turn off warnings in the
+C<io> class. Previously it would erroneously turn off all warnings.
+
+This bug fix may cause some programs to start correctly issuing warnings.
+
+=head2 Remove over-optimisation
+
+Perl 5.8.4 introduced a change so that assignments of C<undef> to a
+scalar, or of an empty list to an array or a hash, were optimised away. As
+this could cause problems when C<goto> jumps were involved, this change
+has been backed out.
+
+=head2 sprintf() fixes
+
+Using the sprintf() function with some formats could lead to a buffer
+overflow in some specific cases. This has been fixed, along with several
+other bugs, notably in bounds checking.
+
+In related fixes, it was possible for badly written code that did not follow
+the documentation of C<Sys::Syslog> to have formatting vulnerabilities.
+C<Sys::Syslog> has been changed to protect people from poor quality third
+party code.
+
+=head2 Debugger and Unicode slowdown
+
+It had been reported that running under perl's debugger when processing
+Unicode data could cause unexpectedly large slowdowns. The most likely cause
+of this was identified and fixed by Nicholas Clark.
+
+=head2 Smaller fixes
+
+=over 4
+
+=item *
+
+C<FindBin> now works better with directories where access rights are more
+restrictive than usual.
+
+=item *
+
+Several memory leaks in ithreads were closed. An improved implementation of
+C<threads::shared> is available on CPAN - this will be merged into 5.8.9 if
+it proves stable.
+
+=item *
+
+Trailing spaces are now trimmed from C<$!> and C<$^E>.
+
+=item *
+
+Operations that require perl to read a process' list of groups, such as reads
+of C<$(> and C<$)>, now dynamically allocate memory rather than using a
+fixed sized array. The fixed size array could cause C stack exhaustion on
+systems configured to use large numbers of groups.
+
+=item *
+
+C<PerlIO::scalar> now works better with non-default C<$/> settings.
+
+=item *
+
+You can now use the C<x> operator to repeat a C<qw//> list. This used
+to raise a syntax error.
+
+=item *
+
+The debugger now traces correctly execution in eval("")uated code that
+contains #line directives.
+
+=item *
+
+The value of the C<open> pragma is no longer ignored for three-argument
+opens.
+
+=item *
+
+The optimisation of C<for (reverse @a)> introduced in perl 5.8.6 could
+misbehave when the array had undefined elements and was used in LVALUE
+context. Dave Mitchell provided a fix.
+
+=item *
+
+Some case insensitive matches between UTF-8 encoded data and 8 bit regexps,
+and vice versa, could give malformed character warnings. These have been
+fixed by Dave Mitchell and Yves Orton.
+
+=item *
+
+C<lcfirst> and C<ucfirst> could corrupt the string for certain cases where
+the length UTF-8 encoding of the string in lower case, upper case or title
+case differed. This was fixed by Nicholas Clark.
+
+=item *
+
+Perl will now use the C library calls C<unsetenv> and C<clearenv> if present
+to delete keys from C<%ENV> and delete C<%ENV> entirely, thanks to a patch
+from Alan Burlison.
+
+=back
+
+=head1 New or Changed Diagnostics
+
+=head2 Attempt to set length of freed array
+
+This is a new warning, produced in situations such as this:
+
+ $r = do {my @a; \$#a};
+ $$r = 503;
+
+=head2 Non-string passed as bitmask
+
+This is a new warning, produced when number has been passed as a argument to
+select(), instead of a bitmask.
+
+ # Wrong, will now warn
+ $rin = fileno(STDIN);
+ ($nfound,$timeleft) = select($rout=$rin, undef, undef, $timeout);
+
+ # Should be
+ $rin = '';
+ vec($rin,fileno(STDIN),1) = 1;
+ ($nfound,$timeleft) = select($rout=$rin, undef, undef, $timeout);
+
+=head2 Search pattern not terminated or ternary operator parsed as search pattern
+
+This syntax error indicates that the lexer couldn't find the final
+delimiter of a C<?PATTERN?> construct. Mentioning the ternary operator in
+this error message makes it easier to diagnose syntax errors.
+
+=head1 Changed Internals
+
+There has been a fair amount of refactoring of the C<C> source code, partly to
+make it tidier and more maintainable. The resulting object code and the
+C<perl> binary may well be smaller than 5.8.7, in particular due to a change
+contributed by Dave Mitchell which reworked the warnings code to be
+significantly smaller. Apart from being smaller and possibly faster, there
+should be no user-detectable changes.
+
+Andy Lester supplied many improvements to determine which function
+parameters and local variables could actually be declared C<const> to the C
+compiler. Steve Peters provided new C<*_set> macros and reworked the core to
+use these rather than assigning to macros in LVALUE context.
+
+Dave Mitchell improved the lexer debugging output under C<-DT>
+
+Nicholas Clark changed the string buffer allocation so that it is now rounded
+up to the next multiple of 4 (or 8 on platforms with 64 bit pointers). This
+should reduce the number of calls to C<realloc> without actually using any
+extra memory.
+
+The C<HV>'s array of C<HE*>s is now allocated at the correct (minimal) size,
+thanks to another change by Nicholas Clark. Compile with
+C<-DPERL_USE_LARGE_HV_ALLOC> to use the old, sloppier, default.
+
+For XS or embedding debugging purposes, if perl is compiled with
+C<-DDEBUG_LEAKING_SCALARS_FORK_DUMP> in addition to
+C<-DDEBUG_LEAKING_SCALARS> then a child process is C<fork>ed just before
+global destruction, which is used to display the values of any scalars
+found to have leaked at the end of global destruction. Without this, the
+scalars have already been freed sufficiently at the point of detection that
+it is impossible to produce any meaningful dump of their contents. This
+feature was implemented by the indefatigable Nicholas Clark, based on an idea
+by Mike Giroux.
+
+=head1 Platform Specific Problems
+
+The optimiser on HP-UX 11.23 (Itanium 2) is currently partly disabled (scaled
+down to +O1) when using HP C-ANSI-C; the cause of problems at higher
+optimisation levels is still unclear.
+
+There are a handful of remaining test failures on VMS, mostly due to
+test fixes and minor module tweaks with too many dependencies to
+integrate into this release from the development stream, where they have
+all been corrected. The following is a list of expected failures with
+the patch number of the fix where that is known:
+
+ ext/Devel/PPPort/t/ppphtest.t #26913
+ ext/List/Util/t/p_tainted.t #26912
+ lib/ExtUtils/t/PL_FILES.t #26813
+ lib/ExtUtils/t/basic.t #26813
+ t/io/fs.t
+ t/op/cmp.t
+
+=head1 Reporting Bugs
+
+If you find what you think is a bug, you might check the articles
+recently posted to the comp.lang.perl.misc newsgroup and the perl
+bug database at http://bugs.perl.org. There may also be
+information at http://www.perl.org, the Perl Home Page.
+
+If you believe you have an unreported bug, please run the B<perlbug>
+program included with your release. Be sure to trim your bug down
+to a tiny but sufficient test case. Your bug report, along with the
+output of C<perl -V>, will be sent off to perlbug@perl.org to be
+analysed by the Perl porting team. You can browse and search
+the Perl 5 bugs at http://bugs.perl.org/
+
+=head1 SEE ALSO
+
+The F<Changes> file for exhaustive details on what changed.
+
+The F<INSTALL> file for how to build Perl.
+
+The F<README> file for general stuff.
+
+The F<Artistic> and F<Copying> files for copyright information.
+
+=cut
diff --git a/gnu/usr.bin/perl/pod/perlclib.pod b/gnu/usr.bin/perl/pod/perlclib.pod
index e89a67a1409..837a36da674 100644
--- a/gnu/usr.bin/perl/pod/perlclib.pod
+++ b/gnu/usr.bin/perl/pod/perlclib.pod
@@ -99,8 +99,8 @@ There is no equivalent to C<fgets>; one should use C<sv_gets> instead:
Instead Of: Use:
- t* p = malloc(n) New(id, p, n, t)
- t* p = calloc(n, s) Newz(id, p, n, t)
+ t* p = malloc(n) Newx(id, p, n, t)
+ t* p = calloc(n, s) Newxz(id, p, n, t)
p = realloc(p, n) Renew(p, n, t)
memcpy(dst, src, n) Copy(src, dst, n, t)
memmove(dst, src, n) Move(src, dst, n, t)
@@ -132,7 +132,7 @@ instead of raw C<char *> strings:
Note also the existence of C<sv_catpvf> and C<sv_vcatpvfn>, combining
concatenation with formatting.
-Sometimes instead of zeroing the allocated heap by using Newz() you
+Sometimes instead of zeroing the allocated heap by using Newxz() you
should consider "poisoning" the data. This means writing a bit
pattern into it that should be illegal as pointers (and floating point
numbers), and also hopefully surprising enough as integers, so that
diff --git a/gnu/usr.bin/perl/pod/perldbmfilter.pod b/gnu/usr.bin/perl/pod/perldbmfilter.pod
index d62e496f9f1..f145b8aa1bd 100644
--- a/gnu/usr.bin/perl/pod/perldbmfilter.pod
+++ b/gnu/usr.bin/perl/pod/perldbmfilter.pod
@@ -6,10 +6,10 @@ perldbmfilter - Perl DBM Filters
$db = tie %hash, 'DBM', ...
- $old_filter = $db->filter_store_key ( sub { ... } ) ;
- $old_filter = $db->filter_store_value( sub { ... } ) ;
- $old_filter = $db->filter_fetch_key ( sub { ... } ) ;
- $old_filter = $db->filter_fetch_value( sub { ... } ) ;
+ $old_filter = $db->filter_store_key ( sub { ... } );
+ $old_filter = $db->filter_store_value( sub { ... } );
+ $old_filter = $db->filter_fetch_key ( sub { ... } );
+ $old_filter = $db->filter_fetch_value( sub { ... } );
=head1 DESCRIPTION
@@ -73,7 +73,7 @@ when Perl writes to DBM databases it doesn't use NULL termination, so
your Perl application will have to manage NULL termination itself. When
you write to the database you will have to use something like this:
- $hash{"$key\0"} = "$value\0" ;
+ $hash{"$key\0"} = "$value\0";
Similarly the NULL needs to be taken into account when you are considering
the length of existing keys/values.
@@ -85,30 +85,30 @@ the database and have them removed when you read from the database. As I'm
sure you have already guessed, this is a problem that DBM Filters can
fix very easily.
- use strict ;
- use warnings ;
- use SDBM_File ;
- use Fcntl ;
+ use strict;
+ use warnings;
+ use SDBM_File;
+ use Fcntl;
- my %hash ;
- my $filename = "filt" ;
- unlink $filename ;
+ my %hash;
+ my $filename = "filt";
+ unlink $filename;
my $db = tie(%hash, 'SDBM_File', $filename, O_RDWR|O_CREAT, 0640)
- or die "Cannot open $filename: $!\n" ;
+ or die "Cannot open $filename: $!\n";
# Install DBM Filters
- $db->filter_fetch_key ( sub { s/\0$// } ) ;
- $db->filter_store_key ( sub { $_ .= "\0" } ) ;
+ $db->filter_fetch_key ( sub { s/\0$// } );
+ $db->filter_store_key ( sub { $_ .= "\0" } );
$db->filter_fetch_value(
- sub { no warnings 'uninitialized' ;s/\0$// } ) ;
- $db->filter_store_value( sub { $_ .= "\0" } ) ;
+ sub { no warnings 'uninitialized'; s/\0$// } );
+ $db->filter_store_value( sub { $_ .= "\0" } );
- $hash{"abc"} = "def" ;
- my $a = $hash{"ABC"} ;
+ $hash{"abc"} = "def";
+ my $a = $hash{"ABC"};
# ...
- undef $db ;
- untie %hash ;
+ undef $db;
+ untie %hash;
The code above uses SDBM_File, but it will work with any of the DBM
modules.
@@ -124,7 +124,7 @@ Here is another real-life example. By default, whenever Perl writes to
a DBM database it always writes the key and value as strings. So when
you use this:
- $hash{12345} = "something" ;
+ $hash{12345} = "something";
the key 12345 will get stored in the DBM database as the 5 byte string
"12345". If you actually want the key to be stored in the DBM database
@@ -133,23 +133,23 @@ when reading.
Here is a DBM Filter that does it:
- use strict ;
- use warnings ;
- use DB_File ;
- my %hash ;
- my $filename = "filt" ;
- unlink $filename ;
+ use strict;
+ use warnings;
+ use DB_File;
+ my %hash;
+ my $filename = "filt";
+ unlink $filename;
my $db = tie %hash, 'DB_File', $filename, O_CREAT|O_RDWR, 0666, $DB_HASH
- or die "Cannot open $filename: $!\n" ;
+ or die "Cannot open $filename: $!\n";
- $db->filter_fetch_key ( sub { $_ = unpack("i", $_) } ) ;
- $db->filter_store_key ( sub { $_ = pack ("i", $_) } ) ;
- $hash{123} = "def" ;
+ $db->filter_fetch_key ( sub { $_ = unpack("i", $_) } );
+ $db->filter_store_key ( sub { $_ = pack ("i", $_) } );
+ $hash{123} = "def";
# ...
- undef $db ;
- untie %hash ;
+ undef $db;
+ untie %hash;
The code above uses DB_File, but again it will work with any of the
DBM modules.
diff --git a/gnu/usr.bin/perl/pod/perldebguts.pod b/gnu/usr.bin/perl/pod/perldebguts.pod
index 7cce15631a2..44bb5115bee 100644
--- a/gnu/usr.bin/perl/pod/perldebguts.pod
+++ b/gnu/usr.bin/perl/pod/perldebguts.pod
@@ -867,157 +867,6 @@ never touched.
=back
-=head2 Example of using B<-DL> switch
-
-(Note that -DL is obsolete since circa 5.6.0, and even before that
-Perl needed to be compiled with -DDEBUGGING.)
-
-Below we show how to analyse memory usage by
-
- do 'lib/auto/POSIX/autosplit.ix';
-
-The file in question contains a header and 146 lines similar to
-
- sub getcwd;
-
-B<WARNING>: The discussion below supposes 32-bit architecture. In
-newer releases of Perl, memory usage of the constructs discussed
-here is greatly improved, but the story discussed below is a real-life
-story. This story is mercilessly terse, and assumes rather more than cursory
-knowledge of Perl internals. Type space to continue, `q' to quit.
-(Actually, you just want to skip to the next section.)
-
-Here is the itemized list of Perl allocations performed during parsing
-of this file:
-
- !!! "after" at test.pl line 3.
- Id subtot 4 8 12 16 20 24 28 32 36 40 48 56 64 72 80 80+
- 0 02 13752 . . . . 294 . . . . . . . . . . 4
- 0 54 5545 . . 8 124 16 . . . 1 1 . . . . . 3
- 5 05 32 . . . . . . . 1 . . . . . . . .
- 6 02 7152 . . . . . . . . . . 149 . . . . .
- 7 02 3600 . . . . . 150 . . . . . . . . . .
- 7 03 64 . -1 . 1 . . 2 . . . . . . . . .
- 7 04 7056 . . . . . . . . . . . . . . . 7
- 7 17 38404 . . . . . . . 1 . . 442 149 . . 147 .
- 9 03 2078 17 249 32 . . . . 2 . . . . . . . .
-
-
-To see this list, insert two C<warn('!...')> statements around the call:
-
- warn('!');
- do 'lib/auto/POSIX/autosplit.ix';
- warn('!!! "after"');
-
-and run it with Perl's B<-DL> option. The first warn() will print
-memory allocation info before parsing the file and will memorize
-the statistics at this point (we ignore what it prints). The second
-warn() prints increments with respect to these memorized data. This
-is the printout shown above.
-
-Different I<Id>s on the left correspond to different subsystems of
-the perl interpreter. They are just the first argument given to
-the perl memory allocation API named New(). To find what C<9 03>
-means, just B<grep> the perl source for C<903>. You'll find it in
-F<util.c>, function savepvn(). (I know, you wonder why we told you
-to B<grep> and then gave away the answer. That's because grepping
-the source is good for the soul.) This function is used to store
-a copy of an existing chunk of memory. Using a C debugger, one can
-see that the function was called either directly from gv_init() or
-via sv_magic(), and that gv_init() is called from gv_fetchpv()--which
-was itself called from newSUB(). Please stop to catch your breath now.
-
-B<NOTE>: To reach this point in the debugger and skip the calls to
-savepvn() during the compilation of the main program, you should
-set a C breakpoint
-in Perl_warn(), continue until this point is reached, and I<then> set
-a C breakpoint in Perl_savepvn(). Note that you may need to skip a
-handful of Perl_savepvn() calls that do not correspond to mass production
-of CVs (there are more C<903> allocations than 146 similar lines of
-F<lib/auto/POSIX/autosplit.ix>). Note also that C<Perl_> prefixes are
-added by macroization code in perl header files to avoid conflicts
-with external libraries.
-
-Anyway, we see that C<903> ids correspond to creation of globs, twice
-per glob - for glob name, and glob stringification magic.
-
-Here are explanations for other I<Id>s above:
-
-=over 4
-
-=item C<717>
-
-Creates bigger C<XPV*> structures. In the case above, it
-creates 3 C<AV>s per subroutine, one for a list of lexical variable
-names, one for a scratchpad (which contains lexical variables and
-C<targets>), and one for the array of scratchpads needed for
-recursion.
-
-It also creates a C<GV> and a C<CV> per subroutine, all called from
-start_subparse().
-
-=item C<002>
-
-Creates a C array corresponding to the C<AV> of scratchpads and the
-scratchpad itself. The first fake entry of this scratchpad is
-created though the subroutine itself is not defined yet.
-
-It also creates C arrays to keep data for the stash. This is one HV,
-but it grows; thus, there are 4 big allocations: the big chunks are not
-freed, but are kept as additional arenas for C<SV> allocations.
-
-=item C<054>
-
-Creates a C<HEK> for the name of the glob for the subroutine. This
-name is a key in a I<stash>.
-
-Big allocations with this I<Id> correspond to allocations of new
-arenas to keep C<HE>.
-
-=item C<602>
-
-Creates a C<GP> for the glob for the subroutine.
-
-=item C<702>
-
-Creates the C<MAGIC> for the glob for the subroutine.
-
-=item C<704>
-
-Creates I<arenas> which keep SVs.
-
-=back
-
-=head2 B<-DL> details
-
-If Perl is run with B<-DL> option, then warn()s that start with `!'
-behave specially. They print a list of I<categories> of memory
-allocations, and statistics of allocations of different sizes for
-these categories.
-
-If warn() string starts with
-
-=over 4
-
-=item C<!!!>
-
-print changed categories only, print the differences in counts of allocations.
-
-=item C<!!>
-
-print grown categories only; print the absolute values of counts, and totals.
-
-=item C<!>
-
-print nonempty categories, print the absolute values of counts and totals.
-
-=back
-
-=head2 Limitations of B<-DL> statistics
-
-If an extension or external library does not use the Perl API to
-allocate memory, such allocations are not counted.
-
=head1 SEE ALSO
L<perldebug>,
diff --git a/gnu/usr.bin/perl/pod/perldoc.pod b/gnu/usr.bin/perl/pod/perldoc.pod
index 123dea10dfe..9042316be44 100644
--- a/gnu/usr.bin/perl/pod/perldoc.pod
+++ b/gnu/usr.bin/perl/pod/perldoc.pod
@@ -115,7 +115,7 @@ Pod::LATEX.
=item B<-M> I<module-name>
This specifies the module that you want to try using for formatting the
-pod. The class must must at least provide a C<parse_from_file> method.
+pod. The class must at least provide a C<parse_from_file> method.
For example: C<perldoc -MPod::Perldoc::ToChecker>.
You can specify several classes to try by joining them with commas
diff --git a/gnu/usr.bin/perl/pod/perlfilter.pod b/gnu/usr.bin/perl/pod/perlfilter.pod
index 51cd8ced753..d43028c2a52 100644
--- a/gnu/usr.bin/perl/pod/perlfilter.pod
+++ b/gnu/usr.bin/perl/pod/perlfilter.pod
@@ -89,10 +89,10 @@ Below is an example program, C<cpp_test>, which makes use of this filter.
Line numbers have been added to allow specific lines to be referenced
easily.
- 1: use Filter::cpp ;
+ 1: use Filter::cpp;
2: #define TRUE 1
- 3: $a = TRUE ;
- 4: print "a = $a\n" ;
+ 3: $a = TRUE;
+ 4: print "a = $a\n";
When you execute this script, Perl creates a source stream for the
file. Before the parser processes any of the lines from the file, the
@@ -122,18 +122,18 @@ inserted back into the source stream by the filter.
The parser then sees the following code:
- use Filter::cpp ;
- $a = 1 ;
- print "a = $a\n" ;
+ use Filter::cpp;
+ $a = 1;
+ print "a = $a\n";
Let's consider what happens when the filtered code includes another
module with use:
- 1: use Filter::cpp ;
+ 1: use Filter::cpp;
2: #define TRUE 1
- 3: use Fred ;
- 4: $a = TRUE ;
- 5: print "a = $a\n" ;
+ 3: use Fred;
+ 4: $a = TRUE;
+ 5: print "a = $a\n";
The C<cpp> filter does not apply to the text of the Fred module, only
to the text of the file that used it (C<cpp_test>). Although the use
@@ -160,7 +160,7 @@ For example, if you have a uuencoded and compressed source file, it is
possible to stack a uudecode filter and an uncompression filter like
this:
- use Filter::uudecode ; use Filter::uncompress ;
+ use Filter::uudecode; use Filter::uncompress;
M'XL(".H<US4''V9I;F%L')Q;>7/;1I;_>_I3=&E=%:F*I"T?22Q/
M6]9*<IQCO*XFT"0[PL%%'Y+IG?WN^ZYN-$'J.[.JE$,20/?K=_[>
...
@@ -245,9 +245,9 @@ redirection facilities.
Here is an example script that uses C<Filter::sh>:
- use Filter::sh 'tr XYZ PQR' ;
- $a = 1 ;
- print "XYZ a = $a\n" ;
+ use Filter::sh 'tr XYZ PQR';
+ $a = 1;
+ print "XYZ a = $a\n";
The output you'll get when the script is executed:
@@ -274,23 +274,23 @@ forward thirteen places, so that A becomes N, B becomes O, and Z
becomes M.)
- package Rot13 ;
+ package Rot13;
- use Filter::Util::Call ;
+ use Filter::Util::Call;
sub import {
- my ($type) = @_ ;
- my ($ref) = [] ;
- filter_add(bless $ref) ;
+ my ($type) = @_;
+ my ($ref) = [];
+ filter_add(bless $ref);
}
sub filter {
- my ($self) = @_ ;
- my ($status) ;
+ my ($self) = @_;
+ my ($status);
tr/n-za-mN-ZA-M/a-zA-Z/
- if ($status = filter_read()) > 0 ;
- $status ;
+ if ($status = filter_read()) > 0;
+ $status;
}
1;
@@ -339,16 +339,16 @@ In order to make use of the rot13 filter we need some way of encoding
the source file in rot13 format. The script below, C<mkrot13>, does
just that.
- die "usage mkrot13 filename\n" unless @ARGV ;
- my $in = $ARGV[0] ;
- my $out = "$in.tmp" ;
+ die "usage mkrot13 filename\n" unless @ARGV;
+ my $in = $ARGV[0];
+ my $out = "$in.tmp";
open(IN, "<$in") or die "Cannot open file $in: $!\n";
open(OUT, ">$out") or die "Cannot open file $out: $!\n";
- print OUT "use Rot13;\n" ;
+ print OUT "use Rot13;\n";
while (<IN>) {
- tr/a-zA-Z/n-za-mN-ZA-M/ ;
- print OUT ;
+ tr/a-zA-Z/n-za-mN-ZA-M/;
+ print OUT;
}
close IN;
@@ -358,12 +358,12 @@ just that.
If we encrypt this with C<mkrot13>:
- print " hello fred \n" ;
+ print " hello fred \n";
the result will be this:
use Rot13;
- cevag "uryyb serq\a" ;
+ cevag "uryyb serq\a";
Running it produces this output:
@@ -385,7 +385,7 @@ Two special marker lines will bracket debugging code, like this:
## DEBUG_BEGIN
if ($year > 1999) {
- warn "Debug: millennium bug in year $year\n" ;
+ warn "Debug: millennium bug in year $year\n";
}
## DEBUG_END
@@ -400,7 +400,7 @@ between the two markers into comments:
## DEBUG_BEGIN
#if ($year > 1999) {
- # warn "Debug: millennium bug in year $year\n" ;
+ # warn "Debug: millennium bug in year $year\n";
#}
## DEBUG_END
@@ -410,62 +410,62 @@ Here is the complete Debug filter:
use strict;
use warnings;
- use Filter::Util::Call ;
+ use Filter::Util::Call;
- use constant TRUE => 1 ;
- use constant FALSE => 0 ;
+ use constant TRUE => 1;
+ use constant FALSE => 0;
sub import {
- my ($type) = @_ ;
+ my ($type) = @_;
my (%context) = (
Enabled => defined $ENV{DEBUG},
InTraceBlock => FALSE,
Filename => (caller)[1],
LineNo => 0,
LastBegin => 0,
- ) ;
- filter_add(bless \%context) ;
+ );
+ filter_add(bless \%context);
}
sub Die {
- my ($self) = shift ;
- my ($message) = shift ;
- my ($line_no) = shift || $self->{LastBegin} ;
+ my ($self) = shift;
+ my ($message) = shift;
+ my ($line_no) = shift || $self->{LastBegin};
die "$message at $self->{Filename} line $line_no.\n"
}
sub filter {
- my ($self) = @_ ;
- my ($status) ;
- $status = filter_read() ;
- ++ $self->{LineNo} ;
+ my ($self) = @_;
+ my ($status);
+ $status = filter_read();
+ ++ $self->{LineNo};
# deal with EOF/error first
if ($status <= 0) {
$self->Die("DEBUG_BEGIN has no DEBUG_END")
- if $self->{InTraceBlock} ;
- return $status ;
+ if $self->{InTraceBlock};
+ return $status;
}
if ($self->{InTraceBlock}) {
if (/^\s*##\s*DEBUG_BEGIN/ ) {
$self->Die("Nested DEBUG_BEGIN", $self->{LineNo})
} elsif (/^\s*##\s*DEBUG_END/) {
- $self->{InTraceBlock} = FALSE ;
+ $self->{InTraceBlock} = FALSE;
}
# comment out the debug lines when the filter is disabled
- s/^/#/ if ! $self->{Enabled} ;
+ s/^/#/ if ! $self->{Enabled};
} elsif ( /^\s*##\s*DEBUG_BEGIN/ ) {
- $self->{InTraceBlock} = TRUE ;
- $self->{LastBegin} = $self->{LineNo} ;
+ $self->{InTraceBlock} = TRUE;
+ $self->{LastBegin} = $self->{LineNo};
} elsif ( /^\s*##\s*DEBUG_END/ ) {
$self->Die("DEBUG_END has no DEBUG_BEGIN", $self->{LineNo});
}
- return $status ;
+ return $status;
}
- 1 ;
+ 1;
The big difference between this filter and the previous example is the
use of context data in the filter object. The filter object is based on
@@ -481,23 +481,23 @@ If you ignore all the error checking that most of the code does, the
essence of the filter is as follows:
sub filter {
- my ($self) = @_ ;
- my ($status) ;
- $status = filter_read() ;
+ my ($self) = @_;
+ my ($status);
+ $status = filter_read();
# deal with EOF/error first
- return $status if $status <= 0 ;
+ return $status if $status <= 0;
if ($self->{InTraceBlock}) {
if (/^\s*##\s*DEBUG_END/) {
$self->{InTraceBlock} = FALSE
}
# comment out debug lines when the filter is disabled
- s/^/#/ if ! $self->{Enabled} ;
+ s/^/#/ if ! $self->{Enabled};
} elsif ( /^\s*##\s*DEBUG_BEGIN/ ) {
- $self->{InTraceBlock} = TRUE ;
+ $self->{InTraceBlock} = TRUE;
}
- return $status ;
+ return $status;
}
Be warned: just as the C-preprocessor doesn't know C, the Debug filter
@@ -539,9 +539,9 @@ parameter list. Such a filter would turn this:
into this:
sub MySub($$@) {
- my ($first) = shift ;
- my ($second) = shift ;
- my (@rest) = @_ ;
+ my ($first) = shift;
+ my ($second) = shift;
+ my (@rest) = @_;
...
}
diff --git a/gnu/usr.bin/perl/pod/perlglossary.pod b/gnu/usr.bin/perl/pod/perlglossary.pod
new file mode 100644
index 00000000000..b27444023c1
--- /dev/null
+++ b/gnu/usr.bin/perl/pod/perlglossary.pod
@@ -0,0 +1,3383 @@
+=head1 NAME
+
+perlglossary - Perl Glossary
+
+=head1 DESCRIPTION
+
+A glossary of terms (technical and otherwise) used in the Perl documentation.
+Other useful sources include the Free On-Line Dictionary of Computing
+L<http://foldoc.doc.ic.ac.uk/foldoc/index.html>, the Jargon File
+L<http://catb.org/~esr/jargon/>, and Wikipedia L<http://www.wikipedia.org/>.
+
+=head2 A
+
+=over 4
+
+=item accessor methods
+
+A L</method> used to indirectly inspect or update an L</object>'s
+state (its L<instance variables|/instance variable>).
+
+=item actual arguments
+
+The L<scalar values|/scalar value> that you supply to a L</function>
+or L</subroutine> when you call it. For instance, when you call
+C<power("puff")>, the string C<"puff"> is the actual argument. See
+also L</argument> and L</formal arguments>.
+
+=item address operator
+
+Some languages work directly with the memory addresses of values, but
+this can be like playing with fire. Perl provides a set of asbestos
+gloves for handling all memory management. The closest to an address
+operator in Perl is the backslash operator, but it gives you a L</hard
+reference>, which is much safer than a memory address.
+
+=item algorithm
+
+A well-defined sequence of steps, clearly enough explained that even a
+computer could do them.
+
+=item alias
+
+A nickname for something, which behaves in all ways as though you'd
+used the original name instead of the nickname. Temporary aliases are
+implicitly created in the loop variable for C<foreach> loops, in the
+C<$_> variable for L<map|perlfunc/map> or L<grep|perlfunc/grep>
+operators, in C<$a> and C<$b> during L<sort|perlfunc/sort>'s
+comparison function, and in each element of C<@_> for the L</actual
+arguments> of a subroutine call. Permanent aliases are explicitly
+created in L<packages|/package> by L<importing|/import> symbols or by
+assignment to L<typeglobs|/typeglob>. Lexically scoped aliases for
+package variables are explicitly created by the L<our|perlfunc/our>
+declaration.
+
+=item alternatives
+
+A list of possible choices from which you may select only one, as in
+"Would you like door A, B, or C?" Alternatives in regular expressions
+are separated with a single vertical bar: C<|>. Alternatives in
+normal Perl expressions are separated with a double vertical bar:
+C<||>. Logical alternatives in L</Boolean> expressions are separated
+with either C<||> or C<or>.
+
+=item anonymous
+
+Used to describe a L</referent> that is not directly accessible
+through a named L</variable>. Such a referent must be indirectly
+accessible through at least one L</hard reference>. When the last
+hard reference goes away, the anonymous referent is destroyed without
+pity.
+
+=item architecture
+
+The kind of computer you're working on, where one "kind" of computer
+means all those computers sharing a compatible machine language.
+Since Perl programs are (typically) simple text files, not executable
+images, a Perl program is much less sensitive to the architecture it's
+running on than programs in other languages, such as C, that are
+compiled into machine code. See also L</platform> and L</operating
+system>.
+
+=item argument
+
+A piece of data supplied to a L<program|/executable file>,
+L</subroutine>, L</function>, or L</method> to tell it what it's
+supposed to do. Also called a "parameter".
+
+=item ARGV
+
+The name of the array containing the L</argument> L</vector> from the
+command line. If you use the empty C<< E<lt>E<gt> >> operator, L</ARGV> is
+the name of both the L</filehandle> used to traverse the arguments and
+the L</scalar> containing the name of the current input file.
+
+=item arithmetical operator
+
+A L</symbol> such as C<+> or C</> that tells Perl to do the arithmetic
+you were supposed to learn in grade school.
+
+=item array
+
+An ordered sequence of L<values|/value>, stored such that you can
+easily access any of the values using an integer L</subscript>
+that specifies the value's L</offset> in the sequence.
+
+=item array context
+
+An archaic expression for what is more correctly referred to as
+L</list context>.
+
+=item ASCII
+
+The American Standard Code for Information Interchange (a 7-bit
+character set adequate only for poorly representing English text).
+Often used loosely to describe the lowest 128 values of the various
+ISO-8859-X character sets, a bunch of mutually incompatible 8-bit
+codes best described as half ASCII. See also L</Unicode>.
+
+=item assertion
+
+A component of a L</regular expression> that must be true for the
+pattern to match but does not necessarily match any characters itself.
+Often used specifically to mean a L</zero width> assertion.
+
+=item assignment
+
+An L</operator> whose assigned mission in life is to change the value
+of a L</variable>.
+
+=item assignment operator
+
+Either a regular L</assignment>, or a compound L</operator> composed
+of an ordinary assignment and some other operator, that changes the
+value of a variable in place, that is, relative to its old value. For
+example, C<$a += 2> adds C<2> to C<$a>.
+
+=item associative array
+
+See L</hash>. Please.
+
+=item associativity
+
+Determines whether you do the left L</operator> first or the right
+L</operator> first when you have "A L</operator> B L</operator> C" and
+the two operators are of the same precedence. Operators like C<+> are
+left associative, while operators like C<**> are right associative.
+See L<perlop> for a list of operators and their associativity.
+
+=item asynchronous
+
+Said of events or activities whose relative temporal ordering is
+indeterminate because too many things are going on at once. Hence, an
+asynchronous event is one you didn't know when to expect.
+
+=item atom
+
+A L</regular expression> component potentially matching a
+L</substring> containing one or more characters and treated as an
+indivisible syntactic unit by any following L</quantifier>. (Contrast
+with an L</assertion> that matches something of L</zero width> and may
+not be quantified.)
+
+=item atomic operation
+
+When Democritus gave the word "atom" to the indivisible bits of
+matter, he meant literally something that could not be cut: I<a->
+(not) + I<tomos> (cuttable). An atomic operation is an action that
+can't be interrupted, not one forbidden in a nuclear-free zone.
+
+=item attribute
+
+A new feature that allows the declaration of L<variables|/variable>
+and L<subroutines|/subroutine> with modifiers as in C<sub foo : locked
+method>. Also, another name for an L</instance variable> of an
+L</object>.
+
+=item autogeneration
+
+A feature of L</operator overloading> of L<objects|/object>, whereby
+the behavior of certain L<operators|/operator> can be reasonably
+deduced using more fundamental operators. This assumes that the
+overloaded operators will often have the same relationships as the
+regular operators. See L<perlop>.
+
+=item autoincrement
+
+To add one to something automatically, hence the name of the C<++>
+operator. To instead subtract one from something automatically is
+known as an "autodecrement".
+
+=item autoload
+
+To load on demand. (Also called "lazy" loading.) Specifically, to
+call an L<AUTOLOAD|perlsub/Autoloading> subroutine on behalf of an
+undefined subroutine.
+
+=item autosplit
+
+To split a string automatically, as the B<-a> L</switch> does when
+running under B<-p> or B<-n> in order to emulate L</awk>. (See also
+the L<AutoSplit> module, which has nothing to do with the B<-a>
+switch, but a lot to do with autoloading.)
+
+=item autovivification
+
+A Greco-Roman word meaning "to bring oneself to life". In Perl,
+storage locations (L<lvalues|/lvalue>) spontaneously generate
+themselves as needed, including the creation of any L</hard reference>
+values to point to the next level of storage. The assignment
+C<$a[5][5][5][5][5] = "quintet"> potentially creates five scalar
+storage locations, plus four references (in the first four scalar
+locations) pointing to four new anonymous arrays (to hold the last
+four scalar locations). But the point of autovivification is that you
+don't have to worry about it.
+
+=item AV
+
+Short for "array value", which refers to one of Perl's internal data
+types that holds an L</array>. The L</AV> type is a subclass of
+L</SV>.
+
+=item awk
+
+Descriptive editing term--short for "awkward". Also coincidentally
+refers to a venerable text-processing language from which Perl derived
+some of its high-level ideas.
+
+=back
+
+=head2 B
+
+=over 4
+
+=item backreference
+
+A substring L<captured|/capturing> by a subpattern within
+unadorned parentheses in a L</regex>. Backslashed decimal numbers
+(C<\1>, C<\2>, etc.) later in the same pattern refer back to the
+corresponding subpattern in the current match. Outside the pattern,
+the numbered variables (C<$1>, C<$2>, etc.) continue to refer to these
+same values, as long as the pattern was the last successful match of
+the current dynamic scope.
+
+=item backtracking
+
+The practice of saying, "If I had to do it all over, I'd do it
+differently," and then actually going back and doing it all over
+differently. Mathematically speaking, it's returning from an
+unsuccessful recursion on a tree of possibilities. Perl backtracks
+when it attempts to match patterns with a L</regular expression>, and
+its earlier attempts don't pan out. See L<perlre/Backtracking>.
+
+=item backward compatibility
+
+Means you can still run your old program because we didn't break any
+of the features or bugs it was relying on.
+
+=item bareword
+
+A word sufficiently ambiguous to be deemed illegal under L<use strict
+'subs'|strict/strict subs>. In the absence of that stricture, a
+bareword is treated as if quotes were around it.
+
+=item base class
+
+A generic L</object> type; that is, a L</class> from which other, more
+specific classes are derived genetically by L</inheritance>. Also
+called a "superclass" by people who respect their ancestors.
+
+=item big-endian
+
+From Swift: someone who eats eggs big end first. Also used of
+computers that store the most significant L</byte> of a word at a
+lower byte address than the least significant byte. Often considered
+superior to little-endian machines. See also L</little-endian>.
+
+=item binary
+
+Having to do with numbers represented in base 2. That means there's
+basically two numbers, 0 and 1. Also used to describe a "non-text
+file", presumably because such a file makes full use of all the binary
+bits in its bytes. With the advent of L</Unicode>, this distinction,
+already suspect, loses even more of its meaning.
+
+=item binary operator
+
+An L</operator> that takes two L<operands|/operand>.
+
+=item bind
+
+To assign a specific L</network address> to a L</socket>.
+
+=item bit
+
+An integer in the range from 0 to 1, inclusive. The smallest possible
+unit of information storage. An eighth of a L</byte> or of a dollar.
+(The term "Pieces of Eight" comes from being able to split the old
+Spanish dollar into 8 bits, each of which still counted for money.
+That's why a 25-cent piece today is still "two bits".)
+
+=item bit shift
+
+The movement of bits left or right in a computer word, which has the
+effect of multiplying or dividing by a power of 2.
+
+=item bit string
+
+A sequence of L<bits|/bit> that is actually being thought of as a
+sequence of bits, for once.
+
+=item bless
+
+In corporate life, to grant official approval to a thing, as in, "The
+VP of Engineering has blessed our WebCruncher project." Similarly in
+Perl, to grant official approval to a L</referent> so that it can
+function as an L</object>, such as a WebCruncher object. See
+L<perlfunc/"bless">.
+
+=item block
+
+What a L</process> does when it has to wait for something: "My process
+blocked waiting for the disk." As an unrelated noun, it refers to a
+large chunk of data, of a size that the L</operating system> likes to
+deal with (normally a power of two such as 512 or 8192). Typically
+refers to a chunk of data that's coming from or going to a disk file.
+
+=item BLOCK
+
+A syntactic construct consisting of a sequence of Perl
+L<statements|/statement> that is delimited by braces. The C<if> and
+C<while> statements are defined in terms of L<BLOCKs|/BLOCK>, for instance.
+Sometimes we also say "block" to mean a lexical scope; that is, a
+sequence of statements that act like a L</BLOCK>, such as within an
+L<eval|perlfunc/eval> or a file, even though the statements aren't
+delimited by braces.
+
+=item block buffering
+
+A method of making input and output efficient by passing one L</block>
+at a time. By default, Perl does block buffering to disk files. See
+L</buffer> and L</command buffering>.
+
+=item Boolean
+
+A value that is either L</true> or L</false>.
+
+=item Boolean context
+
+A special kind of L</scalar context> used in conditionals to decide
+whether the L</scalar value> returned by an expression is L</true> or
+L</false>. Does not evaluate as either a string or a number. See
+L</context>.
+
+=item breakpoint
+
+A spot in your program where you've told the debugger to stop
+L<execution|/execute> so you can poke around and see whether anything
+is wrong yet.
+
+=item broadcast
+
+To send a L</datagram> to multiple destinations simultaneously.
+
+=item BSD
+
+A psychoactive drug, popular in the 80s, probably developed at
+U. C. Berkeley or thereabouts. Similar in many ways to the
+prescription-only medication called "System V", but infinitely more
+useful. (Or, at least, more fun.) The full chemical name is
+"Berkeley Standard Distribution".
+
+=item bucket
+
+A location in a L</hash table> containing (potentially) multiple
+entries whose keys "hash" to the same hash value according to its hash
+function. (As internal policy, you don't have to worry about it,
+unless you're into internals, or policy.)
+
+=item buffer
+
+A temporary holding location for data. L<Block buffering|/block
+buffering> means that the data is passed on to its destination
+whenever the buffer is full. L<Line buffering|/line buffering> means
+that it's passed on whenever a complete line is received. L<Command
+buffering|/command buffering> means that it's passed every time you do
+a L<print|perlfunc/print> command (or equivalent). If your output is
+unbuffered, the system processes it one byte at a time without the use
+of a holding area. This can be rather inefficient.
+
+=item built-in
+
+A L</function> that is predefined in the language. Even when hidden
+by L</overriding>, you can always get at a built-in function by
+L<qualifying|/qualified> its name with the C<CORE::> pseudo-package.
+
+=item bundle
+
+A group of related modules on L</CPAN>. (Also, sometimes refers to a
+group of command-line switches grouped into one L</switch cluster>.)
+
+=item byte
+
+A piece of data worth eight L<bits|/bit> in most places.
+
+=item bytecode
+
+A pidgin-like language spoken among 'droids when they don't wish to
+reveal their orientation (see L</endian>). Named after some similar
+languages spoken (for similar reasons) between compilers and
+interpreters in the late 20th century. These languages are
+characterized by representing everything as a
+non-architecture-dependent sequence of bytes.
+
+=back
+
+=head2 C
+
+=over 4
+
+=item C
+
+A language beloved by many for its inside-out L</type> definitions,
+inscrutable L</precedence> rules, and heavy L</overloading> of the
+function-call mechanism. (Well, actually, people first switched to C
+because they found lowercase identifiers easier to read than upper.)
+Perl is written in C, so it's not surprising that Perl borrowed a few
+ideas from it.
+
+=item C preprocessor
+
+The typical C compiler's first pass, which processes lines beginning
+with C<#> for conditional compilation and macro definition and does
+various manipulations of the program text based on the current
+definitions. Also known as I<cpp>(1).
+
+=item call by reference
+
+An L</argument>-passing mechanism in which the L</formal arguments>
+refer directly to the L</actual arguments>, and the L</subroutine> can
+change the actual arguments by changing the formal arguments. That
+is, the formal argument is an L</alias> for the actual argument. See
+also L</call by value>.
+
+=item call by value
+
+An L</argument>-passing mechanism in which the L</formal arguments>
+refer to a copy of the L</actual arguments>, and the L</subroutine>
+cannot change the actual arguments by changing the formal arguments.
+See also L</call by reference>.
+
+=item callback
+
+A L</handler> that you register with some other part of your program
+in the hope that the other part of your program will L</trigger> your
+handler when some event of interest transpires.
+
+=item canonical
+
+Reduced to a standard form to facilitate comparison.
+
+=item capturing
+
+The use of parentheses around a L</subpattern> in a L</regular
+expression> to store the matched L</substring> as a L</backreference>.
+(Captured strings are also returned as a list in L</list context>.)
+
+=item character
+
+A small integer representative of a unit of orthography.
+Historically, characters were usually stored as fixed-width integers
+(typically in a byte, or maybe two, depending on the character set),
+but with the advent of UTF-8, characters are often stored in a
+variable number of bytes depending on the size of the integer that
+represents the character. Perl manages this transparently for you,
+for the most part.
+
+=item character class
+
+A square-bracketed list of characters used in a L</regular expression>
+to indicate that any character of the set may occur at a given point.
+Loosely, any predefined set of characters so used.
+
+=item character property
+
+A predefined L</character class> matchable by the C<\p>
+L</metasymbol>. Many standard properties are defined for L</Unicode>.
+
+=item circumfix operator
+
+An L</operator> that surrounds its L</operand>, like the angle
+operator, or parentheses, or a hug.
+
+=item class
+
+A user-defined L</type>, implemented in Perl via a L</package> that
+provides (either directly or by inheritance) L<methods|/method> (that
+is, L<subroutines|/subroutine>) to handle L<instances|/instance> of
+the class (its L<objects|/object>). See also L</inheritance>.
+
+=item class method
+
+A L</method> whose L</invocant> is a L</package> name, not an
+L</object> reference. A method associated with the class as a whole.
+
+=item client
+
+In networking, a L</process> that initiates contact with a L</server>
+process in order to exchange data and perhaps receive a service.
+
+=item cloister
+
+A L</cluster> used to restrict the scope of a L</regular expression
+modifier>.
+
+=item closure
+
+An L</anonymous> subroutine that, when a reference to it is generated
+at run time, keeps track of the identities of externally visible
+L<lexical variables|/lexical variable> even after those lexical
+variables have supposedly gone out of L</scope>. They're called
+"closures" because this sort of behavior gives mathematicians a sense
+of closure.
+
+=item cluster
+
+A parenthesized L</subpattern> used to group parts of a L</regular
+expression> into a single L</atom>.
+
+=item CODE
+
+The word returned by the L<ref|perlfunc/ref> function when you apply
+it to a reference to a subroutine. See also L</CV>.
+
+=item code generator
+
+A system that writes code for you in a low-level language, such as
+code to implement the backend of a compiler. See L</program
+generator>.
+
+=item code subpattern
+
+A L</regular expression> subpattern whose real purpose is to execute
+some Perl code, for example, the C<(?{...})> and C<(??{...})>
+subpatterns.
+
+=item collating sequence
+
+The order into which L<characters|/character> sort. This is used by
+L</string> comparison routines to decide, for example, where in this
+glossary to put "collating sequence".
+
+=item command
+
+In L</shell> programming, the syntactic combination of a program name
+and its arguments. More loosely, anything you type to a shell (a
+command interpreter) that starts it doing something. Even more
+loosely, a Perl L</statement>, which might start with a L</label> and
+typically ends with a semicolon.
+
+=item command buffering
+
+A mechanism in Perl that lets you store up the output of each Perl
+L</command> and then flush it out as a single request to the
+L</operating system>. It's enabled by setting the C<$|>
+(C<$AUTOFLUSH>) variable to a true value. It's used when you don't
+want data sitting around not going where it's supposed to, which may
+happen because the default on a L</file> or L</pipe> is to use
+L</block buffering>.
+
+=item command name
+
+The name of the program currently executing, as typed on the command
+line. In C, the L</command> name is passed to the program as the
+first command-line argument. In Perl, it comes in separately as
+C<$0>.
+
+=item command-line arguments
+
+The L<values|/value> you supply along with a program name when you
+tell a L</shell> to execute a L</command>. These values are passed to
+a Perl program through C<@ARGV>.
+
+=item comment
+
+A remark that doesn't affect the meaning of the program. In Perl, a
+comment is introduced by a C<#> character and continues to the end of
+the line.
+
+=item compilation unit
+
+The L</file> (or L</string>, in the case of L<eval|perlfunc/eval>)
+that is currently being compiled.
+
+=item compile phase
+
+Any time before Perl starts running your main program. See also
+L</run phase>. Compile phase is mostly spent in L</compile time>, but
+may also be spent in L</run time> when C<BEGIN> blocks,
+L<use|perlfunc/use> declarations, or constant subexpressions are being
+evaluated. The startup and import code of any L<use|perlfunc/use>
+declaration is also run during compile phase.
+
+=item compile time
+
+The time when Perl is trying to make sense of your code, as opposed to
+when it thinks it knows what your code means and is merely trying to
+do what it thinks your code says to do, which is L</run time>.
+
+=item compiler
+
+Strictly speaking, a program that munches up another program and spits
+out yet another file containing the program in a "more executable"
+form, typically containing native machine instructions. The I<perl>
+program is not a compiler by this definition, but it does contain a
+kind of compiler that takes a program and turns it into a more
+executable form (L<syntax trees|/syntax tree>) within the I<perl>
+process itself, which the L</interpreter> then interprets. There are,
+however, extension L<modules|/module> to get Perl to act more like a
+"real" compiler. See L<O>.
+
+=item composer
+
+A "constructor" for a L</referent> that isn't really an L</object>,
+like an anonymous array or a hash (or a sonata, for that matter). For
+example, a pair of braces acts as a composer for a hash, and a pair of
+brackets acts as a composer for an array. See L<perlref/Making
+References>.
+
+=item concatenation
+
+The process of gluing one cat's nose to another cat's tail. Also, a
+similar operation on two L<strings|/string>.
+
+=item conditional
+
+Something "iffy". See L</Boolean context>.
+
+=item connection
+
+In telephony, the temporary electrical circuit between the caller's
+and the callee's phone. In networking, the same kind of temporary
+circuit between a L</client> and a L</server>.
+
+=item construct
+
+As a noun, a piece of syntax made up of smaller pieces. As a
+transitive verb, to create an L</object> using a L</constructor>.
+
+=item constructor
+
+Any L</class method>, instance L</method>, or L</subroutine>
+that composes, initializes, blesses, and returns an L</object>.
+Sometimes we use the term loosely to mean a L</composer>.
+
+=item context
+
+The surroundings, or environment. The context given by the
+surrounding code determines what kind of data a particular
+L</expression> is expected to return. The three primary contexts are
+L</list context>, L</scalar context>, and L</void context>. Scalar
+context is sometimes subdivided into L</Boolean context>, L</numeric
+context>, L</string context>, and L</void context>. There's also a
+"don't care" scalar context (which is dealt with in Programming Perl,
+Third Edition, Chapter 2, "Bits and Pieces" if you care).
+
+=item continuation
+
+The treatment of more than one physical L</line> as a single logical
+line. L</Makefile> lines are continued by putting a backslash before
+the L</newline>. Mail headers as defined by RFC 822 are continued by
+putting a space or tab I<after> the newline. In general, lines in
+Perl do not need any form of continuation mark, because L</whitespace>
+(including newlines) is gleefully ignored. Usually.
+
+=item core dump
+
+The corpse of a L</process>, in the form of a file left in the
+L</working directory> of the process, usually as a result of certain
+kinds of fatal error.
+
+=item CPAN
+
+The Comprehensive Perl Archive Network. (See L<perlfaq2/What modules and extensions are available for Perl? What is CPAN? What does CPANE<sol>srcE<sol>... mean?>).
+
+=item cracker
+
+Someone who breaks security on computer systems. A cracker may be a
+true L</hacker> or only a L</script kiddie>.
+
+=item current package
+
+The L</package> in which the current statement is compiled. Scan
+backwards in the text of your program through the current L<lexical
+scope|/lexical scoping> or any enclosing lexical scopes till you find
+a package declaration. That's your current package name.
+
+=item current working directory
+
+See L</working directory>.
+
+=item currently selected output channel
+
+The last L</filehandle> that was designated with
+L<select|perlfunc/select>(C<FILEHANDLE>); L</STDOUT>, if no filehandle
+has been selected.
+
+=item CV
+
+An internal "code value" typedef, holding a L</subroutine>. The L</CV>
+type is a subclass of L</SV>.
+
+=back
+
+=head2 D
+
+=over 4
+
+=item dangling statement
+
+A bare, single L</statement>, without any braces, hanging off an C<if>
+or C<while> conditional. C allows them. Perl doesn't.
+
+=item data structure
+
+How your various pieces of data relate to each other and what shape
+they make when you put them all together, as in a rectangular table or
+a triangular-shaped tree.
+
+=item data type
+
+A set of possible values, together with all the operations that know
+how to deal with those values. For example, a numeric data type has a
+certain set of numbers that you can work with and various mathematical
+operations that you can do on the numbers but would make little sense
+on, say, a string such as C<"Kilroy">. Strings have their own
+operations, such as L</concatenation>. Compound types made of a
+number of smaller pieces generally have operations to compose and
+decompose them, and perhaps to rearrange them. L<Objects|/object>
+that model things in the real world often have operations that
+correspond to real activities. For instance, if you model an
+elevator, your elevator object might have an C<open_door()>
+L</method>.
+
+=item datagram
+
+A packet of data, such as a L</UDP> message, that (from the viewpoint
+of the programs involved) can be sent independently over the network.
+(In fact, all packets are sent independently at the L</IP> level, but
+L</stream> protocols such as L</TCP> hide this from your program.)
+
+=item DBM
+
+Stands for "Data Base Management" routines, a set of routines that
+emulate an L</associative array> using disk files. The routines use a
+dynamic hashing scheme to locate any entry with only two disk
+accesses. DBM files allow a Perl program to keep a persistent
+L</hash> across multiple invocations. You can L<tie|perlfunc/tie>
+your hash variables to various DBM implementations--see L<AnyDBM_File>
+and L<DB_File>.
+
+=item declaration
+
+An L</assertion> that states something exists and perhaps describes
+what it's like, without giving any commitment as to how or where
+you'll use it. A declaration is like the part of your recipe that
+says, "two cups flour, one large egg, four or five tadpoles..." See
+L</statement> for its opposite. Note that some declarations also
+function as statements. Subroutine declarations also act as
+definitions if a body is supplied.
+
+=item decrement
+
+To subtract a value from a variable, as in "decrement C<$x>" (meaning
+to remove 1 from its value) or "decrement C<$x> by 3".
+
+=item default
+
+A L</value> chosen for you if you don't supply a value of your own.
+
+=item defined
+
+Having a meaning. Perl thinks that some of the things people try to
+do are devoid of meaning, in particular, making use of variables that
+have never been given a L</value> and performing certain operations on
+data that isn't there. For example, if you try to read data past the
+end of a file, Perl will hand you back an undefined value. See also
+L</false> and L<perlfunc/defined>.
+
+=item delimiter
+
+A L</character> or L</string> that sets bounds to an arbitrarily-sized
+textual object, not to be confused with a L</separator> or
+L</terminator>. "To delimit" really just means "to surround" or "to
+enclose" (like these parentheses are doing).
+
+=item dereference
+
+A fancy computer science term meaning "to follow a L</reference> to
+what it points to". The "de" part of it refers to the fact that
+you're taking away one level of L</indirection>.
+
+=item derived class
+
+A L</class> that defines some of its L<methods|/method> in terms of a
+more generic class, called a L</base class>. Note that classes aren't
+classified exclusively into base classes or derived classes: a class
+can function as both a derived class and a base class simultaneously,
+which is kind of classy.
+
+=item descriptor
+
+See L</file descriptor>.
+
+=item destroy
+
+To deallocate the memory of a L</referent> (first triggering its
+C<DESTROY> method, if it has one).
+
+=item destructor
+
+A special L</method> that is called when an L</object> is thinking
+about L<destroying|/destroy> itself. A Perl program's C<DESTROY>
+method doesn't do the actual destruction; Perl just
+L<triggers|/trigger> the method in case the L</class> wants to do any
+associated cleanup.
+
+=item device
+
+A whiz-bang hardware gizmo (like a disk or tape drive or a modem or a
+joystick or a mouse) attached to your computer, that the L</operating
+system> tries to make look like a L</file> (or a bunch of files).
+Under Unix, these fake files tend to live in the I</dev> directory.
+
+=item directive
+
+A L</pod> directive. See L<perlpod>.
+
+=item directory
+
+A special file that contains other files. Some L<operating
+systems|/operating system> call these "folders", "drawers", or
+"catalogs".
+
+=item directory handle
+
+A name that represents a particular instance of opening a directory to
+read it, until you close it. See the L<opendir|perlfunc/opendir>
+function.
+
+=item dispatch
+
+To send something to its correct destination. Often used
+metaphorically to indicate a transfer of programmatic control to a
+destination selected algorithmically, often by lookup in a table of
+function L<references|/reference> or, in the case of object
+L<methods|/method>, by traversing the inheritance tree looking for the
+most specific definition for the method.
+
+=item distribution
+
+A standard, bundled release of a system of software. The default
+usage implies source code is included. If that is not the case, it
+will be called a "binary-only" distribution.
+
+=item dweomer
+
+An enchantment, illusion, phantasm, or jugglery. Said when Perl's
+magical L</dwimmer> effects don't do what you expect, but rather seem
+to be the product of arcane dweomercraft, sorcery, or wonder working.
+[From Old English]
+
+=item dwimmer
+
+DWIM is an acronym for "Do What I Mean", the principle that something
+should just do what you want it to do without an undue amount of fuss.
+A bit of code that does "dwimming" is a "dwimmer". Dwimming can
+require a great deal of behind-the-scenes magic, which (if it doesn't
+stay properly behind the scenes) is called a L</dweomer> instead.
+
+=item dynamic scoping
+
+Dynamic scoping works over a dynamic scope, making variables visible
+throughout the rest of the L</block> in which they are first used and
+in any L<subroutines|/subroutine> that are called by the rest of the
+block. Dynamically scoped variables can have their values temporarily
+changed (and implicitly restored later) by a L<local|perlfunc/local>
+operator. (Compare L</lexical scoping>.) Used more loosely to mean
+how a subroutine that is in the middle of calling another subroutine
+"contains" that subroutine at L</run time>.
+
+=back
+
+=head2 E
+
+=over 4
+
+=item eclectic
+
+Derived from many sources. Some would say I<too> many.
+
+=item element
+
+A basic building block. When you're talking about an L</array>, it's
+one of the items that make up the array.
+
+=item embedding
+
+When something is contained in something else, particularly when that
+might be considered surprising: "I've embedded a complete Perl
+interpreter in my editor!"
+
+=item empty subclass test
+
+The notion that an empty L</derived class> should behave exactly like
+its L</base class>.
+
+=item en passant
+
+When you change a L</value> as it is being copied. [From French, "in
+passing", as in the exotic pawn-capturing maneuver in chess.]
+
+=item encapsulation
+
+The veil of abstraction separating the L</interface> from the
+L</implementation> (whether enforced or not), which mandates that all
+access to an L</object>'s state be through L<methods|/method> alone.
+
+=item endian
+
+See L</little-endian> and L</big-endian>.
+
+=item environment
+
+The collective set of L<environment variables|/environment variable>
+your L</process> inherits from its parent. Accessed via C<%ENV>.
+
+=item environment variable
+
+A mechanism by which some high-level agent such as a user can pass its
+preferences down to its future offspring (child L<processes|/process>,
+grandchild processes, great-grandchild processes, and so on). Each
+environment variable is a L</key>/L</value> pair, like one entry in a
+L</hash>.
+
+=item EOF
+
+End of File. Sometimes used metaphorically as the terminating string
+of a L</here document>.
+
+=item errno
+
+The error number returned by a L</syscall> when it fails. Perl refers
+to the error by the name C<$!> (or C<$OS_ERROR> if you use the English
+module).
+
+=item error
+
+See L</exception> or L</fatal error>.
+
+=item escape sequence
+
+See L</metasymbol>.
+
+=item exception
+
+A fancy term for an error. See L</fatal error>.
+
+=item exception handling
+
+The way a program responds to an error. The exception handling
+mechanism in Perl is the L<eval|perlfunc/eval> operator.
+
+=item exec
+
+To throw away the current L</process>'s program and replace it with
+another without exiting the process or relinquishing any resources
+held (apart from the old memory image).
+
+=item executable file
+
+A L</file> that is specially marked to tell the L</operating system>
+that it's okay to run this file as a program. Usually shortened to
+"executable".
+
+=item execute
+
+To run a L<program|/executable file> or L</subroutine>. (Has nothing
+to do with the L<kill|perlfunc/kill> built-in, unless you're trying to
+run a L</signal handler>.)
+
+=item execute bit
+
+The special mark that tells the operating system it can run this
+program. There are actually three execute bits under Unix, and which
+bit gets used depends on whether you own the file singularly,
+collectively, or not at all.
+
+=item exit status
+
+See L</status>.
+
+=item export
+
+To make symbols from a L</module> available for L</import> by other modules.
+
+=item expression
+
+Anything you can legally say in a spot where a L</value> is required.
+Typically composed of L<literals|/literal>, L<variables|/variable>,
+L<operators|/operator>, L<functions|/function>, and L</subroutine>
+calls, not necessarily in that order.
+
+=item extension
+
+A Perl module that also pulls in compiled C or C++ code. More
+generally, any experimental option that can be compiled into Perl,
+such as multithreading.
+
+=back
+
+=head2 F
+
+=over 4
+
+=item false
+
+In Perl, any value that would look like C<""> or C<"0"> if evaluated
+in a string context. Since undefined values evaluate to C<"">, all
+undefined values are false, but not all false values are undefined.
+
+=item FAQ
+
+Frequently Asked Question (although not necessarily frequently
+answered, especially if the answer appears in the Perl FAQ shipped
+standard with Perl).
+
+=item fatal error
+
+An uncaught L</exception>, which causes termination of the L</process>
+after printing a message on your L</standard error> stream. Errors
+that happen inside an L<eval|perlfunc/eval> are not fatal. Instead,
+the L<eval|perlfunc/eval> terminates after placing the exception
+message in the C<$@> (C<$EVAL_ERROR>) variable. You can try to
+provoke a fatal error with the L<die|perlfunc/die> operator (known as
+throwing or raising an exception), but this may be caught by a
+dynamically enclosing L<eval|perlfunc/eval>. If not caught, the
+L<die|perlfunc/die> becomes a fatal error.
+
+=item field
+
+A single piece of numeric or string data that is part of a longer
+L</string>, L</record>, or L</line>. Variable-width fields are usually
+split up by L<separators|/separator> (so use L<split|perlfunc/split> to
+extract the fields), while fixed-width fields are usually at fixed
+positions (so use L<unpack|perlfunc/unpack>). L<Instance
+variables|/instance variable> are also known as fields.
+
+=item FIFO
+
+First In, First Out. See also L</LIFO>. Also, a nickname for a
+L</named pipe>.
+
+=item file
+
+A named collection of data, usually stored on disk in a L</directory>
+in a L</filesystem>. Roughly like a document, if you're into office
+metaphors. In modern filesystems, you can actually give a file more
+than one name. Some files have special properties, like directories
+and devices.
+
+=item file descriptor
+
+The little number the L</operating system> uses to keep track of which
+opened L</file> you're talking about. Perl hides the file descriptor
+inside a L</standard IE<sol>O> stream and then attaches the stream to
+a L</filehandle>.
+
+=item file test operator
+
+A built-in unary operator that you use to determine whether something
+is L</true> about a file, such as C<-o $filename> to test whether
+you're the owner of the file.
+
+=item fileglob
+
+A "wildcard" match on L<filenames|/filename>. See the
+L<glob|perlfunc/glob> function.
+
+=item filehandle
+
+An identifier (not necessarily related to the real name of a file)
+that represents a particular instance of opening a file until you
+close it. If you're going to open and close several different files
+in succession, it's fine to open each of them with the same
+filehandle, so you don't have to write out separate code to process
+each file.
+
+=item filename
+
+One name for a file. This name is listed in a L</directory>, and you
+can use it in an L<open|perlfunc/open> to tell the L</operating
+system> exactly which file you want to open, and associate the file
+with a L</filehandle> which will carry the subsequent identity of that
+file in your program, until you close it.
+
+=item filesystem
+
+A set of L<directories|/directory> and L<files|/file> residing on a
+partition of the disk. Sometimes known as a "partition". You can
+change the file's name or even move a file around from directory to
+directory within a filesystem without actually moving the file itself,
+at least under Unix.
+
+=item filter
+
+A program designed to take a L</stream> of input and transform it into
+a stream of output.
+
+=item flag
+
+We tend to avoid this term because it means so many things. It may
+mean a command-line L</switch> that takes no argument
+itself (such as Perl's B<-n> and B<-p>
+flags) or, less frequently, a single-bit indicator (such as the
+C<O_CREAT> and C<O_EXCL> flags used in
+L<sysopen|perlfunc/sysopen>).
+
+=item floating point
+
+A method of storing numbers in "scientific notation", such that the
+precision of the number is independent of its magnitude (the decimal
+point "floats"). Perl does its numeric work with floating-point
+numbers (sometimes called "floats"), when it can't get away with
+using L<integers|/integer>. Floating-point numbers are mere
+approximations of real numbers.
+
+=item flush
+
+The act of emptying a L</buffer>, often before it's full.
+
+=item FMTEYEWTK
+
+Far More Than Everything You Ever Wanted To Know. An exhaustive
+treatise on one narrow topic, something of a super-L</FAQ>. See Tom
+for far more.
+
+=item fork
+
+To create a child L</process> identical to the parent process at its
+moment of conception, at least until it gets ideas of its own. A
+thread with protected memory.
+
+=item formal arguments
+
+The generic names by which a L</subroutine> knows its
+L<arguments|/argument>. In many languages, formal arguments are
+always given individual names, but in Perl, the formal arguments are
+just the elements of an array. The formal arguments to a Perl program
+are C<$ARGV[0]>, C<$ARGV[1]>, and so on. Similarly, the formal
+arguments to a Perl subroutine are C<$_[0]>, C<$_[1]>, and so on. You
+may give the arguments individual names by assigning the values to a
+L<my|perlfunc/my> list. See also L</actual arguments>.
+
+=item format
+
+A specification of how many spaces and digits and things to put
+somewhere so that whatever you're printing comes out nice and pretty.
+
+=item freely available
+
+Means you don't have to pay money to get it, but the copyright on it
+may still belong to someone else (like Larry).
+
+=item freely redistributable
+
+Means you're not in legal trouble if you give a bootleg copy of it to
+your friends and we find out about it. In fact, we'd rather you gave
+a copy to all your friends.
+
+=item freeware
+
+Historically, any software that you give away, particularly if you
+make the source code available as well. Now often called C<open
+source software>. Recently there has been a trend to use the term in
+contradistinction to L</open source software>, to refer only to free
+software released under the Free Software Foundation's GPL (General
+Public License), but this is difficult to justify etymologically.
+
+=item function
+
+Mathematically, a mapping of each of a set of input values to a
+particular output value. In computers, refers to a L</subroutine> or
+L</operator> that returns a L</value>. It may or may not have input
+values (called L<arguments|/argument>).
+
+=item funny character
+
+Someone like Larry, or one of his peculiar friends. Also refers to
+the strange prefixes that Perl requires as noun markers on its
+variables.
+
+=item garbage collection
+
+A misnamed feature--it should be called, "expecting your mother to
+pick up after you". Strictly speaking, Perl doesn't do this, but it
+relies on a reference-counting mechanism to keep things tidy.
+However, we rarely speak strictly and will often refer to the
+reference-counting scheme as a form of garbage collection. (If it's
+any comfort, when your interpreter exits, a "real" garbage collector
+runs to make sure everything is cleaned up if you've been messy with
+circular references and such.)
+
+=back
+
+=head2 G
+
+=over 4
+
+=item GID
+
+Group ID--in Unix, the numeric group ID that the L</operating system>
+uses to identify you and members of your L</group>.
+
+=item glob
+
+Strictly, the shell's C<*> character, which will match a "glob" of
+characters when you're trying to generate a list of filenames.
+Loosely, the act of using globs and similar symbols to do pattern
+matching. See also L</fileglob> and L</typeglob>.
+
+=item global
+
+Something you can see from anywhere, usually used of
+L<variables|/variable> and L<subroutines|/subroutine> that are visible
+everywhere in your program. In Perl, only certain special variables
+are truly global--most variables (and all subroutines) exist only in
+the current L</package>. Global variables can be declared with
+L<our|perlfunc/our>. See L<perlfunc/our>.
+
+=item global destruction
+
+The L</garbage collection> of globals (and the running of any
+associated object destructors) that takes place when a Perl
+L</interpreter> is being shut down. Global destruction should not be
+confused with the Apocalypse, except perhaps when it should.
+
+=item glue language
+
+A language such as Perl that is good at hooking things together that
+weren't intended to be hooked together.
+
+=item granularity
+
+The size of the pieces you're dealing with, mentally speaking.
+
+=item greedy
+
+A L</subpattern> whose L</quantifier> wants to match as many things as
+possible.
+
+=item grep
+
+Originally from the old Unix editor command for "Globally search for a
+Regular Expression and Print it", now used in the general sense of any
+kind of search, especially text searches. Perl has a built-in
+L<grep|perlfunc/grep> function that searches a list for elements
+matching any given criterion, whereas the I<grep>(1) program searches
+for lines matching a L</regular expression> in one or more files.
+
+=item group
+
+A set of users of which you are a member. In some operating systems
+(like Unix), you can give certain file access permissions to other
+members of your group.
+
+=item GV
+
+An internal "glob value" typedef, holding a L</typeglob>. The L</GV>
+type is a subclass of L</SV>.
+
+=back
+
+=head2 H
+
+=over 4
+
+=item hacker
+
+Someone who is brilliantly persistent in solving technical problems,
+whether these involve golfing, fighting orcs, or programming. Hacker
+is a neutral term, morally speaking. Good hackers are not to be
+confused with evil L<crackers|/cracker> or clueless L<script
+kiddies|/script kiddie>. If you confuse them, we will presume that
+you are either evil or clueless.
+
+=item handler
+
+A L</subroutine> or L</method> that is called by Perl when your
+program needs to respond to some internal event, such as a L</signal>,
+or an encounter with an operator subject to L</operator overloading>.
+See also L</callback>.
+
+=item hard reference
+
+A L</scalar> L</value> containing the actual address of a
+L</referent>, such that the referent's L</reference> count accounts
+for it. (Some hard references are held internally, such as the
+implicit reference from one of a L</typeglob>'s variable slots to its
+corresponding referent.) A hard reference is different from a
+L</symbolic reference>.
+
+=item hash
+
+An unordered association of L</key>/L</value> pairs, stored such that
+you can easily use a string L</key> to look up its associated data
+L</value>. This glossary is like a hash, where the word to be defined
+is the key, and the definition is the value. A hash is also sometimes
+septisyllabically called an "associative array", which is a pretty
+good reason for simply calling it a "hash" instead.
+
+=item hash table
+
+A data structure used internally by Perl for implementing associative
+arrays (hashes) efficiently. See also L</bucket>.
+
+=item header file
+
+A file containing certain required definitions that you must include
+"ahead" of the rest of your program to do certain obscure operations.
+A C header file has a I<.h> extension. Perl doesn't really have
+header files, though historically Perl has sometimes used translated
+I<.h> files with a I<.ph> extension. See L<perlfunc/require>.
+(Header files have been superseded by the L</module> mechanism.)
+
+=item here document
+
+So called because of a similar construct in L<shells|/shell> that
+pretends that the L<lines|/line> following the L</command> are a
+separate L</file> to be fed to the command, up to some terminating
+string. In Perl, however, it's just a fancy form of quoting.
+
+=item hexadecimal
+
+A number in base 16, "hex" for short. The digits for 10 through 16
+are customarily represented by the letters C<a> through C<f>.
+Hexadecimal constants in Perl start with C<0x>. See also
+L<perlfunc/hex>.
+
+=item home directory
+
+The directory you are put into when you log in. On a Unix system, the
+name is often placed into C<$ENV{HOME}> or C<$ENV{LOGDIR}> by
+I<login>, but you can also find it with C<(getpwuid($E<lt>))[7]>.
+(Some platforms do not have a concept of a home directory.)
+
+=item host
+
+The computer on which a program or other data resides.
+
+=item hubris
+
+Excessive pride, the sort of thing Zeus zaps you for. Also the
+quality that makes you write (and maintain) programs that other people
+won't want to say bad things about. Hence, the third great virtue of
+a programmer. See also L</laziness> and L</impatience>.
+
+=item HV
+
+Short for a "hash value" typedef, which holds Perl's internal
+representation of a hash. The L</HV> type is a subclass of L</SV>.
+
+=back
+
+=head2 I
+
+=over 4
+
+=item identifier
+
+A legally formed name for most anything in which a computer program
+might be interested. Many languages (including Perl) allow
+identifiers that start with a letter and contain letters and digits.
+Perl also counts the underscore character as a valid letter. (Perl
+also has more complicated names, such as L</qualified> names.)
+
+=item impatience
+
+The anger you feel when the computer is being lazy. This makes you
+write programs that don't just react to your needs, but actually
+anticipate them. Or at least that pretend to. Hence, the second
+great virtue of a programmer. See also L</laziness> and L</hubris>.
+
+=item implementation
+
+How a piece of code actually goes about doing its job. Users of the
+code should not count on implementation details staying the same
+unless they are part of the published L</interface>.
+
+=item import
+
+To gain access to symbols that are exported from another module. See
+L<perlfunc/use>.
+
+=item increment
+
+To increase the value of something by 1 (or by some other number, if
+so specified).
+
+=item indexing
+
+In olden days, the act of looking up a L</key> in an actual index
+(such as a phone book), but now merely the act of using any kind of
+key or position to find the corresponding L</value>, even if no index
+is involved. Things have degenerated to the point that Perl's
+L<index|perlfunc/index> function merely locates the position (index)
+of one string in another.
+
+=item indirect filehandle
+
+An L</expression> that evaluates to something that can be used as a
+L</filehandle>: a L</string> (filehandle name), a L</typeglob>, a
+typeglob L</reference>, or a low-level L</IO> object.
+
+=item indirect object
+
+In English grammar, a short noun phrase between a verb and its direct
+object indicating the beneficiary or recipient of the action. In
+Perl, C<print STDOUT "$foo\n";> can be understood as "verb
+indirect-object object" where L</STDOUT> is the recipient of the
+L<print|perlfunc/print> action, and C<"$foo"> is the object being
+printed. Similarly, when invoking a L</method>, you might place the
+invocant between the method and its arguments:
+
+ $gollum = new Pathetic::Creature "Smeagol";
+ give $gollum "Fisssssh!";
+ give $gollum "Precious!";
+
+=item indirect object slot
+
+The syntactic position falling between a method call and its arguments
+when using the indirect object invocation syntax. (The slot is
+distinguished by the absence of a comma between it and the next
+argument.) L</STDERR> is in the indirect object slot here:
+
+ print STDERR "Awake! Awake! Fear, Fire,
+ Foes! Awake!\n";
+
+=item indirection
+
+If something in a program isn't the value you're looking for but
+indicates where the value is, that's indirection. This can be done
+with either L<symbolic references|/symbolic reference> or L<hard
+references|/hard reference>.
+
+=item infix
+
+An L</operator> that comes in between its L<operands|/operand>, such
+as multiplication in C<24 * 7>.
+
+=item inheritance
+
+What you get from your ancestors, genetically or otherwise. If you
+happen to be a L</class>, your ancestors are called L<base
+classes|/base class> and your descendants are called L<derived
+classes|/derived class>. See L</single inheritance> and L</multiple
+inheritance>.
+
+=item instance
+
+Short for "an instance of a class", meaning an L</object> of that L</class>.
+
+=item instance variable
+
+An L</attribute> of an L</object>; data stored with the particular
+object rather than with the class as a whole.
+
+=item integer
+
+A number with no fractional (decimal) part. A counting number, like
+1, 2, 3, and so on, but including 0 and the negatives.
+
+=item interface
+
+The services a piece of code promises to provide forever, in contrast to
+its L</implementation>, which it should feel free to change whenever it
+likes.
+
+=item interpolation
+
+The insertion of a scalar or list value somewhere in the middle of
+another value, such that it appears to have been there all along. In
+Perl, variable interpolation happens in double-quoted strings and
+patterns, and list interpolation occurs when constructing the list of
+values to pass to a list operator or other such construct that takes a
+L</LIST>.
+
+=item interpreter
+
+Strictly speaking, a program that reads a second program and does what
+the second program says directly without turning the program into a
+different form first, which is what L<compilers|/compiler> do. Perl
+is not an interpreter by this definition, because it contains a kind
+of compiler that takes a program and turns it into a more executable
+form (L<syntax trees|/syntax tree>) within the I<perl> process itself,
+which the Perl L</run time> system then interprets.
+
+=item invocant
+
+The agent on whose behalf a L</method> is invoked. In a L</class>
+method, the invocant is a package name. In an L</instance> method,
+the invocant is an object reference.
+
+=item invocation
+
+The act of calling up a deity, daemon, program, method, subroutine, or
+function to get it do what you think it's supposed to do. We usually
+"call" subroutines but "invoke" methods, since it sounds cooler.
+
+=item I/O
+
+Input from, or output to, a L</file> or L</device>.
+
+=item IO
+
+An internal I/O object. Can also mean L</indirect object>.
+
+=item IP
+
+Internet Protocol, or Intellectual Property.
+
+=item IPC
+
+Interprocess Communication.
+
+=item is-a
+
+A relationship between two L<objects|/object> in which one object is
+considered to be a more specific version of the other, generic object:
+"A camel is a mammal." Since the generic object really only exists in
+a Platonic sense, we usually add a little abstraction to the notion of
+objects and think of the relationship as being between a generic
+L</base class> and a specific L</derived class>. Oddly enough,
+Platonic classes don't always have Platonic relationships--see
+L</inheritance>.
+
+=item iteration
+
+Doing something repeatedly.
+
+=item iterator
+
+A special programming gizmo that keeps track of where you are in
+something that you're trying to iterate over. The C<foreach> loop in
+Perl contains an iterator; so does a hash, allowing you to
+L<each|perlfunc/each> through it.
+
+=item IV
+
+The integer four, not to be confused with six, Tom's favorite editor.
+IV also means an internal Integer Value of the type a L</scalar> can
+hold, not to be confused with an L</NV>.
+
+=back
+
+=head2 J
+
+=over 4
+
+=item JAPH
+
+"Just Another Perl Hacker," a clever but cryptic bit of Perl code that
+when executed, evaluates to that string. Often used to illustrate a
+particular Perl feature, and something of an ungoing Obfuscated Perl
+Contest seen in Usenix signatures.
+
+=back
+
+=head2 K
+
+=over 4
+
+=item key
+
+The string index to a L</hash>, used to look up the L</value>
+associated with that key.
+
+=item keyword
+
+See L</reserved words>.
+
+=back
+
+=head2 L
+
+=over 4
+
+=item label
+
+A name you give to a L</statement> so that you can talk about that
+statement elsewhere in the program.
+
+=item laziness
+
+The quality that makes you go to great effort to reduce overall energy
+expenditure. It makes you write labor-saving programs that other
+people will find useful, and document what you wrote so you don't have
+to answer so many questions about it. Hence, the first great virtue
+of a programmer. Also hence, this book. See also L</impatience> and
+L</hubris>.
+
+=item left shift
+
+A L</bit shift> that multiplies the number by some power of 2.
+
+=item leftmost longest
+
+The preference of the L</regular expression> engine to match the
+leftmost occurrence of a L</pattern>, then given a position at which a
+match will occur, the preference for the longest match (presuming the
+use of a L</greedy> quantifier). See L<perlre> for I<much> more on
+this subject.
+
+=item lexeme
+
+Fancy term for a L</token>.
+
+=item lexer
+
+Fancy term for a L</tokener>.
+
+=item lexical analysis
+
+Fancy term for L</tokenizing>.
+
+=item lexical scoping
+
+Looking at your I<Oxford English Dictionary> through a microscope.
+(Also known as L</static scoping>, because dictionaries don't change
+very fast.) Similarly, looking at variables stored in a private
+dictionary (namespace) for each scope, which are visible only from
+their point of declaration down to the end of the lexical scope in
+which they are declared. --Syn. L</static scoping>.
+--Ant. L</dynamic scoping>.
+
+=item lexical variable
+
+A L</variable> subject to L</lexical scoping>, declared by
+L<my|perlfunc/my>. Often just called a "lexical". (The
+L<our|perlfunc/our> declaration declares a lexically scoped name for a
+global variable, which is not itself a lexical variable.)
+
+=item library
+
+Generally, a collection of procedures. In ancient days, referred to a
+collection of subroutines in a I<.pl> file. In modern times, refers
+more often to the entire collection of Perl L<modules|/module> on your
+system.
+
+=item LIFO
+
+Last In, First Out. See also L</FIFO>. A LIFO is usually called a
+L</stack>.
+
+=item line
+
+In Unix, a sequence of zero or more non-newline characters terminated
+with a L</newline> character. On non-Unix machines, this is emulated
+by the C library even if the underlying L</operating system> has
+different ideas.
+
+=item line buffering
+
+Used by a L</standard IE<sol>O> output stream that flushes its
+L</buffer> after every L</newline>. Many standard I/O libraries
+automatically set up line buffering on output that is going to the
+terminal.
+
+=item line number
+
+The number of lines read previous to this one, plus 1. Perl keeps a
+separate line number for each source or input file it opens. The
+current source file's line number is represented by C<__LINE__>. The
+current input line number (for the file that was most recently read
+via C<< E<lt>FHE<gt> >>) is represented by the C<$.>
+(C<$INPUT_LINE_NUMBER>) variable. Many error messages report both
+values, if available.
+
+=item link
+
+Used as a noun, a name in a L</directory>, representing a L</file>. A
+given file can have multiple links to it. It's like having the same
+phone number listed in the phone directory under different names. As
+a verb, to resolve a partially compiled file's unresolved symbols into
+a (nearly) executable image. Linking can generally be static or
+dynamic, which has nothing to do with static or dynamic scoping.
+
+=item LIST
+
+A syntactic construct representing a comma-separated list of
+expressions, evaluated to produce a L</list value>. Each
+L</expression> in a L</LIST> is evaluated in L</list context> and
+interpolated into the list value.
+
+=item list
+
+An ordered set of scalar values.
+
+=item list context
+
+The situation in which an L</expression> is expected by its
+surroundings (the code calling it) to return a list of values rather
+than a single value. Functions that want a L</LIST> of arguments tell
+those arguments that they should produce a list value. See also
+L</context>.
+
+=item list operator
+
+An L</operator> that does something with a list of values, such as
+L<join|perlfunc/join> or L<grep|perlfunc/grep>. Usually used for
+named built-in operators (such as L<print|perlfunc/print>,
+L<unlink|perlfunc/unlink>, and L<system|perlfunc/system>) that do not
+require parentheses around their L</argument> list.
+
+=item list value
+
+An unnamed list of temporary scalar values that may be passed around
+within a program from any list-generating function to any function or
+construct that provides a L</list context>.
+
+=item literal
+
+A token in a programming language such as a number or L</string> that
+gives you an actual L</value> instead of merely representing possible
+values as a L</variable> does.
+
+=item little-endian
+
+From Swift: someone who eats eggs little end first. Also used of
+computers that store the least significant L</byte> of a word at a
+lower byte address than the most significant byte. Often considered
+superior to big-endian machines. See also L</big-endian>.
+
+=item local
+
+Not meaning the same thing everywhere. A global variable in Perl can
+be localized inside a L<dynamic scope|/dynamic scoping> via the
+L<local|perlfunc/local> operator.
+
+=item logical operator
+
+Symbols representing the concepts "and", "or", "xor", and "not".
+
+=item lookahead
+
+An L</assertion> that peeks at the string to the right of the current
+match location.
+
+=item lookbehind
+
+An L</assertion> that peeks at the string to the left of the current
+match location.
+
+=item loop
+
+A construct that performs something repeatedly, like a roller coaster.
+
+=item loop control statement
+
+Any statement within the body of a loop that can make a loop
+prematurely stop looping or skip an L</iteration>. Generally you
+shouldn't try this on roller coasters.
+
+=item loop label
+
+A kind of key or name attached to a loop (or roller coaster) so that
+loop control statements can talk about which loop they want to
+control.
+
+=item lvaluable
+
+Able to serve as an L</lvalue>.
+
+=item lvalue
+
+Term used by language lawyers for a storage location you can assign a
+new L</value> to, such as a L</variable> or an element of an
+L</array>. The "l" is short for "left", as in the left side of an
+assignment, a typical place for lvalues. An L</lvaluable> function or
+expression is one to which a value may be assigned, as in C<pos($x) =
+10>.
+
+=item lvalue modifier
+
+An adjectival pseudofunction that warps the meaning of an L</lvalue>
+in some declarative fashion. Currently there are three lvalue
+modifiers: L<my|perlfunc/my>, L<our|perlfunc/our>, and
+L<local|perlfunc/local>.
+
+=back
+
+=head2 M
+
+=over 4
+
+=item magic
+
+Technically speaking, any extra semantics attached to a variable such
+as C<$!>, C<$0>, C<%ENV>, or C<%SIG>, or to any tied variable.
+Magical things happen when you diddle those variables.
+
+=item magical increment
+
+An L</increment> operator that knows how to bump up alphabetics as
+well as numbers.
+
+=item magical variables
+
+Special variables that have side effects when you access them or
+assign to them. For example, in Perl, changing elements of the
+C<%ENV> array also changes the corresponding environment variables
+that subprocesses will use. Reading the C<$!> variable gives you the
+current system error number or message.
+
+=item Makefile
+
+A file that controls the compilation of a program. Perl programs
+don't usually need a L</Makefile> because the Perl compiler has plenty
+of self-control.
+
+=item man
+
+The Unix program that displays online documentation (manual pages) for
+you.
+
+=item manpage
+
+A "page" from the manuals, typically accessed via the I<man>(1)
+command. A manpage contains a SYNOPSIS, a DESCRIPTION, a list of
+BUGS, and so on, and is typically longer than a page. There are
+manpages documenting L<commands|/command>, L<syscalls|/syscall>,
+L</library> L<functions|/function>, L<devices|/device>,
+L<protocols|/protocol>, L<files|/file>, and such. In this book, we
+call any piece of standard Perl documentation (like I<perlop> or
+I<perldelta>) a manpage, no matter what format it's installed in on
+your system.
+
+=item matching
+
+See L</pattern matching>.
+
+=item member data
+
+See L</instance variable>.
+
+=item memory
+
+This always means your main memory, not your disk. Clouding the issue
+is the fact that your machine may implement L</virtual> memory; that
+is, it will pretend that it has more memory than it really does, and
+it'll use disk space to hold inactive bits. This can make it seem
+like you have a little more memory than you really do, but it's not a
+substitute for real memory. The best thing that can be said about
+virtual memory is that it lets your performance degrade gradually
+rather than suddenly when you run out of real memory. But your
+program can die when you run out of virtual memory too, if you haven't
+thrashed your disk to death first.
+
+=item metacharacter
+
+A L</character> that is I<not> supposed to be treated normally. Which
+characters are to be treated specially as metacharacters varies
+greatly from context to context. Your L</shell> will have certain
+metacharacters, double-quoted Perl L<strings|/string> have other
+metacharacters, and L</regular expression> patterns have all the
+double-quote metacharacters plus some extra ones of their own.
+
+=item metasymbol
+
+Something we'd call a L</metacharacter> except that it's a sequence of
+more than one character. Generally, the first character in the
+sequence must be a true metacharacter to get the other characters in
+the metasymbol to misbehave along with it.
+
+=item method
+
+A kind of action that an L</object> can take if you tell it to. See
+L<perlobj>.
+
+=item minimalism
+
+The belief that "small is beautiful." Paradoxically, if you say
+something in a small language, it turns out big, and if you say it in
+a big language, it turns out small. Go figure.
+
+=item mode
+
+In the context of the L<stat> syscall, refers to the field holding
+the L</permission bits> and the type of the L</file>.
+
+=item modifier
+
+See L</statement modifier>, L</regular expression modifier>, and
+L</lvalue modifier>, not necessarily in that order.
+
+=item module
+
+A L</file> that defines a L</package> of (almost) the same name, which
+can either L</export> symbols or function as an L</object> class. (A
+module's main I<.pm> file may also load in other files in support of
+the module.) See the L<use|perlfunc/use> built-in.
+
+=item modulus
+
+An integer divisor when you're interested in the remainder instead of
+the quotient.
+
+=item monger
+
+Short for Perl Monger, a purveyor of Perl.
+
+=item mortal
+
+A temporary value scheduled to die when the current statement
+finishes.
+
+=item multidimensional array
+
+An array with multiple subscripts for finding a single element. Perl
+implements these using L<references|/reference>--see L<perllol> and
+L<perldsc>.
+
+=item multiple inheritance
+
+The features you got from your mother and father, mixed together
+unpredictably. (See also L</inheritance>, and L</single
+inheritance>.) In computer languages (including Perl), the notion
+that a given class may have multiple direct ancestors or L<base
+classes|/base class>.
+
+=back
+
+=head2 N
+
+=over 4
+
+=item named pipe
+
+A L</pipe> with a name embedded in the L</filesystem> so that it can
+be accessed by two unrelated L<processes|/process>.
+
+=item namespace
+
+A domain of names. You needn't worry about whether the names in one
+such domain have been used in another. See L</package>.
+
+=item network address
+
+The most important attribute of a socket, like your telephone's
+telephone number. Typically an IP address. See also L</port>.
+
+=item newline
+
+A single character that represents the end of a line, with the ASCII
+value of 012 octal under Unix (but 015 on a Mac), and represented by
+C<\n> in Perl strings. For Windows machines writing text files, and
+for certain physical devices like terminals, the single newline gets
+automatically translated by your C library into a line feed and a
+carriage return, but normally, no translation is done.
+
+=item NFS
+
+Network File System, which allows you to mount a remote filesystem as
+if it were local.
+
+=item null character
+
+A character with the ASCII value of zero. It's used by C to terminate
+strings, but Perl allows strings to contain a null.
+
+=item null list
+
+A L</list value> with zero elements, represented in Perl by C<()>.
+
+=item null string
+
+A L</string> containing no characters, not to be confused with a
+string containing a L</null character>, which has a positive length
+and is L</true>.
+
+=item numeric context
+
+The situation in which an expression is expected by its surroundings
+(the code calling it) to return a number. See also L</context> and
+L</string context>.
+
+=item NV
+
+Short for Nevada, no part of which will ever be confused with
+civilization. NV also means an internal floating-point Numeric Value
+of the type a L</scalar> can hold, not to be confused with an L</IV>.
+
+=item nybble
+
+Half a L</byte>, equivalent to one L</hexadecimal> digit, and worth
+four L<bits|/bit>.
+
+=back
+
+=head2 O
+
+=over 4
+
+=item object
+
+An L</instance> of a L</class>. Something that "knows" what
+user-defined type (class) it is, and what it can do because of what
+class it is. Your program can request an object to do things, but the
+object gets to decide whether it wants to do them or not. Some
+objects are more accommodating than others.
+
+=item octal
+
+A number in base 8. Only the digits 0 through 7 are allowed. Octal
+constants in Perl start with 0, as in 013. See also the
+L<oct|perlfunc/oct> function.
+
+=item offset
+
+How many things you have to skip over when moving from the beginning
+of a string or array to a specific position within it. Thus, the
+minimum offset is zero, not one, because you don't skip anything to
+get to the first item.
+
+=item one-liner
+
+An entire computer program crammed into one line of text.
+
+=item open source software
+
+Programs for which the source code is freely available and freely
+redistributable, with no commercial strings attached. For a more
+detailed definition, see L<http://www.opensource.org/osd.html>.
+
+=item operand
+
+An L</expression> that yields a L</value> that an L</operator>
+operates on. See also L</precedence>.
+
+=item operating system
+
+A special program that runs on the bare machine and hides the gory
+details of managing L<processes|/process> and L<devices|/device>.
+Usually used in a looser sense to indicate a particular culture of
+programming. The loose sense can be used at varying levels of
+specificity. At one extreme, you might say that all versions of Unix
+and Unix-lookalikes are the same operating system (upsetting many
+people, especially lawyers and other advocates). At the other
+extreme, you could say this particular version of this particular
+vendor's operating system is different from any other version of this
+or any other vendor's operating system. Perl is much more portable
+across operating systems than many other languages. See also
+L</architecture> and L</platform>.
+
+=item operator
+
+A gizmo that transforms some number of input values to some number of
+output values, often built into a language with a special syntax or
+symbol. A given operator may have specific expectations about what
+L<types|/type> of data you give as its arguments
+(L<operands|/operand>) and what type of data you want back from it.
+
+=item operator overloading
+
+A kind of L</overloading> that you can do on built-in
+L<operators|/operator> to make them work on L<objects|/object> as if
+the objects were ordinary scalar values, but with the actual semantics
+supplied by the object class. This is set up with the L<overload>
+L</pragma>.
+
+=item options
+
+See either L<switches|/switch> or L</regular expression modifier>.
+
+=item overloading
+
+Giving additional meanings to a symbol or construct. Actually, all
+languages do overloading to one extent or another, since people are
+good at figuring out things from L</context>.
+
+=item overriding
+
+Hiding or invalidating some other definition of the same name. (Not
+to be confused with L</overloading>, which adds definitions that must
+be disambiguated some other way.) To confuse the issue further, we use
+the word with two overloaded definitions: to describe how you can
+define your own L</subroutine> to hide a built-in L</function> of the
+same name (see L<perlsub/Overriding Built-in Functions>) and to
+describe how you can define a replacement L</method> in a L</derived
+class> to hide a L</base class>'s method of the same name (see
+L<perlobj>).
+
+=item owner
+
+The one user (apart from the superuser) who has absolute control over
+a L</file>. A file may also have a L</group> of users who may
+exercise joint ownership if the real owner permits it. See
+L</permission bits>.
+
+=back
+
+=head2 P
+
+=over 4
+
+=item package
+
+A L</namespace> for global L<variables|/variable>,
+L<subroutines|/subroutine>, and the like, such that they can be kept
+separate from like-named L<symbols|/symbol> in other namespaces. In a
+sense, only the package is global, since the symbols in the package's
+symbol table are only accessible from code compiled outside the
+package by naming the package. But in another sense, all package
+symbols are also globals--they're just well-organized globals.
+
+=item pad
+
+Short for L</scratchpad>.
+
+=item parameter
+
+See L</argument>.
+
+=item parent class
+
+See L</base class>.
+
+=item parse tree
+
+See L</syntax tree>.
+
+=item parsing
+
+The subtle but sometimes brutal art of attempting to turn your
+possibly malformed program into a valid L</syntax tree>.
+
+=item patch
+
+To fix by applying one, as it were. In the realm of hackerdom, a
+listing of the differences between two versions of a program as might
+be applied by the I<patch>(1) program when you want to fix a bug or
+upgrade your old version.
+
+=item PATH
+
+The list of L<directories|/directory> the system searches to find a
+program you want to L</execute>. The list is stored as one of your
+L<environment variables|/environment variable>, accessible in Perl as
+C<$ENV{PATH}>.
+
+=item pathname
+
+A fully qualified filename such as I</usr/bin/perl>. Sometimes
+confused with L</PATH>.
+
+=item pattern
+
+A template used in L</pattern matching>.
+
+=item pattern matching
+
+Taking a pattern, usually a L</regular expression>, and trying the
+pattern various ways on a string to see whether there's any way to
+make it fit. Often used to pick interesting tidbits out of a file.
+
+=item permission bits
+
+Bits that the L</owner> of a file sets or unsets to allow or disallow
+access to other people. These flag bits are part of the L</mode> word
+returned by the L<stat|perlfunc/stat> built-in when you ask about a
+file. On Unix systems, you can check the I<ls>(1) manpage for more
+information.
+
+=item Pern
+
+What you get when you do C<Perl++> twice. Doing it only once will
+curl your hair. You have to increment it eight times to shampoo your
+hair. Lather, rinse, iterate.
+
+=item pipe
+
+A direct L</connection> that carries the output of one L</process> to
+the input of another without an intermediate temporary file. Once the
+pipe is set up, the two processes in question can read and write as if
+they were talking to a normal file, with some caveats.
+
+=item pipeline
+
+A series of L<processes|/process> all in a row, linked by
+L<pipes|/pipe>, where each passes its output stream to the next.
+
+=item platform
+
+The entire hardware and software context in which a program runs. A
+ program written in a platform-dependent language might break if you
+change any of: machine, operating system, libraries, compiler, or
+system configuration. The I<perl> interpreter has to be compiled
+differently for each platform because it is implemented in C, but
+programs written in the Perl language are largely
+platform-independent.
+
+=item pod
+
+The markup used to embed documentation into your Perl code. See
+L<perlpod>.
+
+=item pointer
+
+A L</variable> in a language like C that contains the exact memory
+location of some other item. Perl handles pointers internally so you
+don't have to worry about them. Instead, you just use symbolic
+pointers in the form of L<keys|/key> and L</variable> names, or L<hard
+references|/hard reference>, which aren't pointers (but act like
+pointers and do in fact contain pointers).
+
+=item polymorphism
+
+The notion that you can tell an L</object> to do something generic,
+and the object will interpret the command in different ways depending
+on its type. [E<lt>Gk many shapes]
+
+=item port
+
+The part of the address of a TCP or UDP socket that directs packets to
+the correct process after finding the right machine, something like
+the phone extension you give when you reach the company operator.
+Also, the result of converting code to run on a different platform
+than originally intended, or the verb denoting this conversion.
+
+=item portable
+
+Once upon a time, C code compilable under both BSD and SysV. In
+general, code that can be easily converted to run on another
+L</platform>, where "easily" can be defined however you like, and
+usually is. Anything may be considered portable if you try hard
+enough. See I<mobile home> or I<London Bridge>.
+
+=item porter
+
+Someone who "carries" software from one L</platform> to another.
+Porting programs written in platform-dependent languages such as C can
+be difficult work, but porting programs like Perl is very much worth
+the agony.
+
+=item POSIX
+
+The Portable Operating System Interface specification.
+
+=item postfix
+
+An L</operator> that follows its L</operand>, as in C<$x++>.
+
+=item pp
+
+An internal shorthand for a "push-pop" code, that is, C code
+implementing Perl's stack machine.
+
+=item pragma
+
+A standard module whose practical hints and suggestions are received
+(and possibly ignored) at compile time. Pragmas are named in all
+lowercase.
+
+=item precedence
+
+The rules of conduct that, in the absence of other guidance, determine
+what should happen first. For example, in the absence of parentheses,
+you always do multiplication before addition.
+
+=item prefix
+
+An L</operator> that precedes its L</operand>, as in C<++$x>.
+
+=item preprocessing
+
+What some helper L</process> did to transform the incoming data into a
+form more suitable for the current process. Often done with an
+incoming L</pipe>. See also L</C preprocessor>.
+
+=item procedure
+
+A L</subroutine>.
+
+=item process
+
+An instance of a running program. Under multitasking systems like
+Unix, two or more separate processes could be running the same program
+independently at the same time--in fact, the L<fork|perlfunc/fork>
+function is designed to bring about this happy state of affairs.
+Under other operating systems, processes are sometimes called
+"threads", "tasks", or "jobs", often with slight nuances in meaning.
+
+=item program generator
+
+A system that algorithmically writes code for you in a high-level
+language. See also L</code generator>.
+
+=item progressive matching
+
+L<Pattern matching|/pattern matching> that picks up where it left off before.
+
+=item property
+
+See either L</instance variable> or L</character property>.
+
+=item protocol
+
+In networking, an agreed-upon way of sending messages back and forth
+so that neither correspondent will get too confused.
+
+=item prototype
+
+An optional part of a L</subroutine> declaration telling the Perl
+compiler how many and what flavor of arguments may be passed as
+L</actual arguments>, so that you can write subroutine calls that
+parse much like built-in functions. (Or don't parse, as the case may
+be.)
+
+=item pseudofunction
+
+A construct that sometimes looks like a function but really isn't.
+Usually reserved for L</lvalue> modifiers like L<my|perlfunc/my>, for
+L</context> modifiers like L<scalar|perlfunc/scalar>, and for the
+pick-your-own-quotes constructs, C<q//>, C<qq//>, C<qx//>, C<qw//>,
+C<qr//>, C<m//>, C<s///>, C<y///>, and C<tr///>.
+
+=item pseudohash
+
+A reference to an array whose initial element happens to hold a
+reference to a hash. You can treat a pseudohash reference as either
+an array reference or a hash reference.
+
+=item pseudoliteral
+
+An L</operator> that looks something like a L</literal>, such as the
+output-grabbing operator, C<`>I<C<command>>C<`>.
+
+=item public domain
+
+Something not owned by anybody. Perl is copyrighted and is thus
+I<not> in the public domain--it's just L</freely available> and
+L</freely redistributable>.
+
+=item pumpkin
+
+A notional "baton" handed around the Perl community indicating who is
+the lead integrator in some arena of development.
+
+=item pumpking
+
+A L</pumpkin> holder, the person in charge of pumping the pump, or at
+least priming it. Must be willing to play the part of the Great
+Pumpkin now and then.
+
+=item PV
+
+A "pointer value", which is Perl Internals Talk for a C<char*>.
+
+=back
+
+=head2 Q
+
+=over 4
+
+=item qualified
+
+Possessing a complete name. The symbol C<$Ent::moot> is qualified;
+C<$moot> is unqualified. A fully qualified filename is specified from
+the top-level directory.
+
+=item quantifier
+
+A component of a L</regular expression> specifying how many times the
+foregoing L</atom> may occur.
+
+=back
+
+=head2 R
+
+=over 4
+
+=item readable
+
+With respect to files, one that has the proper permission bit set to
+let you access the file. With respect to computer programs, one
+that's written well enough that someone has a chance of figuring out
+what it's trying to do.
+
+=item reaping
+
+The last rites performed by a parent L</process> on behalf of a
+deceased child process so that it doesn't remain a L</zombie>. See
+the L<wait|perlfunc/wait> and L<waitpid|perlfunc/waitpid> function
+calls.
+
+=item record
+
+A set of related data values in a L</file> or L</stream>, often
+associated with a unique L</key> field. In Unix, often commensurate
+with a L</line>, or a blank-line-terminated set of lines (a
+"paragraph"). Each line of the I</etc/passwd> file is a record, keyed
+on login name, containing information about that user.
+
+=item recursion
+
+The art of defining something (at least partly) in terms of itself,
+which is a naughty no-no in dictionaries but often works out okay in
+computer programs if you're careful not to recurse forever, which is
+like an infinite loop with more spectacular failure modes.
+
+=item reference
+
+Where you look to find a pointer to information somewhere else. (See
+L</indirection>.) References come in two flavors, L<symbolic
+references|/symbolic reference> and L<hard references|/hard
+reference>.
+
+=item referent
+
+Whatever a reference refers to, which may or may not have a name.
+Common types of referents include scalars, arrays, hashes, and
+subroutines.
+
+=item regex
+
+See L</regular expression>.
+
+=item regular expression
+
+A single entity with various interpretations, like an elephant. To a
+computer scientist, it's a grammar for a little language in which some
+strings are legal and others aren't. To normal people, it's a pattern
+you can use to find what you're looking for when it varies from case
+to case. Perl's regular expressions are far from regular in the
+theoretical sense, but in regular use they work quite well. Here's a
+regular expression: C</Oh s.*t./>. This will match strings like "C<Oh
+say can you see by the dawn's early light>" and "C<Oh sit!>". See
+L<perlre>.
+
+=item regular expression modifier
+
+An option on a pattern or substitution, such as C</i> to render the
+pattern case insensitive. See also L</cloister>.
+
+=item regular file
+
+A L</file> that's not a L</directory>, a L</device>, a named L</pipe>
+or L</socket>, or a L</symbolic link>. Perl uses the C<-f> file test
+operator to identify regular files. Sometimes called a "plain" file.
+
+=item relational operator
+
+An L</operator> that says whether a particular ordering relationship
+is L</true> about a pair of L<operands|/operand>. Perl has both
+numeric and string relational operators. See L</collating sequence>.
+
+=item reserved words
+
+A word with a specific, built-in meaning to a L</compiler>, such as
+C<if> or L<delete|perlfunc/delete>. In many languages (not Perl),
+it's illegal to use reserved words to name anything else. (Which is
+why they're reserved, after all.) In Perl, you just can't use them to
+name L<labels|/label> or L<filehandles|/filehandle>. Also called
+"keywords".
+
+=item return value
+
+The L</value> produced by a L</subroutine> or L</expression> when
+evaluated. In Perl, a return value may be either a L</list> or a
+L</scalar>.
+
+=item RFC
+
+Request For Comment, which despite the timid connotations is the name
+of a series of important standards documents.
+
+=item right shift
+
+A L</bit shift> that divides a number by some power of 2.
+
+=item root
+
+The superuser (UID == 0). Also, the top-level directory of the
+filesystem.
+
+=item RTFM
+
+What you are told when someone thinks you should Read The Fine Manual.
+
+=item run phase
+
+Any time after Perl starts running your main program. See also
+L</compile phase>. Run phase is mostly spent in L</run time> but may
+also be spent in L</compile time> when L<require|perlfunc/require>,
+L<do|perlfunc/do> C<FILE>, or L<eval|perlfunc/eval> C<STRING>
+operators are executed or when a substitution uses the C</ee>
+modifier.
+
+=item run time
+
+The time when Perl is actually doing what your code says to do, as
+opposed to the earlier period of time when it was trying to figure out
+whether what you said made any sense whatsoever, which is L</compile
+time>.
+
+=item run-time pattern
+
+A pattern that contains one or more variables to be interpolated
+before parsing the pattern as a L</regular expression>, and that
+therefore cannot be analyzed at compile time, but must be re-analyzed
+each time the pattern match operator is evaluated. Run-time patterns
+are useful but expensive.
+
+=item RV
+
+A recreational vehicle, not to be confused with vehicular recreation.
+RV also means an internal Reference Value of the type a L</scalar> can
+hold. See also L</IV> and L</NV> if you're not confused yet.
+
+=item rvalue
+
+A L</value> that you might find on the right side of an
+L</assignment>. See also L</lvalue>.
+
+=back
+
+=head2 S
+
+=over 4
+
+=item scalar
+
+A simple, singular value; a number, L</string>, or L</reference>.
+
+=item scalar context
+
+The situation in which an L</expression> is expected by its
+surroundings (the code calling it) to return a single L</value> rather
+than a L</list> of values. See also L</context> and L</list context>.
+A scalar context sometimes imposes additional constraints on the
+return value--see L</string context> and L</numeric context>.
+Sometimes we talk about a L</Boolean context> inside conditionals, but
+this imposes no additional constraints, since any scalar value,
+whether numeric or L</string>, is already true or false.
+
+=item scalar literal
+
+A number or quoted L</string>--an actual L</value> in the text of your
+program, as opposed to a L</variable>.
+
+=item scalar value
+
+A value that happens to be a L</scalar> as opposed to a L</list>.
+
+=item scalar variable
+
+A L</variable> prefixed with C<$> that holds a single value.
+
+=item scope
+
+How far away you can see a variable from, looking through one. Perl
+has two visibility mechanisms: it does L</dynamic scoping> of
+L<local|perlfunc/local> L<variables|/variable>, meaning that the rest
+of the L</block>, and any L<subroutines|/subroutine> that are called
+by the rest of the block, can see the variables that are local to the
+block. Perl does L</lexical scoping> of L<my|perlfunc/my> variables,
+meaning that the rest of the block can see the variable, but other
+subroutines called by the block I<cannot> see the variable.
+
+=item scratchpad
+
+The area in which a particular invocation of a particular file or
+subroutine keeps some of its temporary values, including any lexically
+scoped variables.
+
+=item script
+
+A text L</file> that is a program intended to be L<executed|/execute>
+directly rather than L<compiled|/compiler> to another form of file
+before execution. Also, in the context of L</Unicode>, a writing
+system for a particular language or group of languages, such as Greek,
+Bengali, or Klingon.
+
+=item script kiddie
+
+A L</cracker> who is not a L</hacker>, but knows just enough to run
+canned scripts. A cargo-cult programmer.
+
+=item sed
+
+A venerable Stream EDitor from which Perl derives some of its ideas.
+
+=item semaphore
+
+A fancy kind of interlock that prevents multiple L<threads|/thread> or
+L<processes|/process> from using up the same resources simultaneously.
+
+=item separator
+
+A L</character> or L</string> that keeps two surrounding strings from
+being confused with each other. The L<split|perlfunc/split> function
+works on separators. Not to be confused with L<delimiters|/delimiter>
+or L<terminators|/terminator>. The "or" in the previous sentence
+separated the two alternatives.
+
+=item serialization
+
+Putting a fancy L</data structure> into linear order so that it can be
+stored as a L</string> in a disk file or database or sent through a
+L</pipe>. Also called marshalling.
+
+=item server
+
+In networking, a L</process> that either advertises a L</service> or
+just hangs around at a known location and waits for L<clients|/client>
+who need service to get in touch with it.
+
+=item service
+
+Something you do for someone else to make them happy, like giving them
+the time of day (or of their life). On some machines, well-known
+services are listed by the L<getservent|perlfunc/getservent> function.
+
+=item setgid
+
+Same as L</setuid>, only having to do with giving away L</group>
+privileges.
+
+=item setuid
+
+Said of a program that runs with the privileges of its L</owner>
+rather than (as is usually the case) the privileges of whoever is
+running it. Also describes the bit in the mode word (L</permission
+bits>) that controls the feature. This bit must be explicitly set by
+the owner to enable this feature, and the program must be carefully
+written not to give away more privileges than it ought to.
+
+=item shared memory
+
+A piece of L</memory> accessible by two different
+L<processes|/process> who otherwise would not see each other's memory.
+
+=item shebang
+
+Irish for the whole McGillicuddy. In Perl culture, a portmanteau of
+"sharp" and "bang", meaning the C<#!> sequence that tells the system
+where to find the interpreter.
+
+=item shell
+
+A L</command>-line L</interpreter>. The program that interactively
+gives you a prompt, accepts one or more L<lines|/line> of input, and
+executes the programs you mentioned, feeding each of them their proper
+L<arguments|/argument> and input data. Shells can also execute
+scripts containing such commands. Under Unix, typical shells include
+the Bourne shell (I</bin/sh>), the C shell (I</bin/csh>), and the Korn
+shell (I</bin/ksh>). Perl is not strictly a shell because it's not
+interactive (although Perl programs can be interactive).
+
+=item side effects
+
+Something extra that happens when you evaluate an L</expression>.
+Nowadays it can refer to almost anything. For example, evaluating a
+simple assignment statement typically has the "side effect" of
+assigning a value to a variable. (And you thought assigning the value
+was your primary intent in the first place!) Likewise, assigning a
+value to the special variable C<$|> (C<$AUTOFLUSH>) has the side
+effect of forcing a flush after every L<write|perlfunc/write> or
+L<print|perlfunc/print> on the currently selected filehandle.
+
+=item signal
+
+A bolt out of the blue; that is, an event triggered by the
+L</operating system>, probably when you're least expecting it.
+
+=item signal handler
+
+A L</subroutine> that, instead of being content to be called in the
+normal fashion, sits around waiting for a bolt out of the blue before
+it will deign to L</execute>. Under Perl, bolts out of the blue are
+called signals, and you send them with the L<kill|perlfunc/kill>
+built-in. See L<perlvar/%SIG> and L<perlipc/Signals>.
+
+=item single inheritance
+
+The features you got from your mother, if she told you that you don't
+have a father. (See also L</inheritance> and L</multiple
+inheritance>.) In computer languages, the notion that
+L<classes|/class> reproduce asexually so that a given class can only
+have one direct ancestor or L</base class>. Perl supplies no such
+restriction, though you may certainly program Perl that way if you
+like.
+
+=item slice
+
+A selection of any number of L<elements|/element> from a L</list>,
+L</array>, or L</hash>.
+
+=item slurp
+
+To read an entire L</file> into a L</string> in one operation.
+
+=item socket
+
+An endpoint for network communication among multiple
+L<processes|/process> that works much like a telephone or a post
+office box. The most important thing about a socket is its L</network
+address> (like a phone number). Different kinds of sockets have
+different kinds of addresses--some look like filenames, and some
+don't.
+
+=item soft reference
+
+See L</symbolic reference>.
+
+=item source filter
+
+A special kind of L</module> that does L</preprocessing> on your
+script just before it gets to the L</tokener>.
+
+=item stack
+
+A device you can put things on the top of, and later take them back
+off in the opposite order in which you put them on. See L</LIFO>.
+
+=item standard
+
+Included in the official Perl distribution, as in a standard module, a
+standard tool, or a standard Perl L</manpage>.
+
+=item standard error
+
+The default output L</stream> for nasty remarks that don't belong in
+L</standard output>. Represented within a Perl program by the
+L</filehandle> L</STDERR>. You can use this stream explicitly, but the
+L<die|perlfunc/die> and L<warn|perlfunc/warn> built-ins write to your
+standard error stream automatically.
+
+=item standard I/O
+
+A standard C library for doing L<buffered|/buffer> input and output to
+the L</operating system>. (The "standard" of standard I/O is only
+marginally related to the "standard" of standard input and output.)
+In general, Perl relies on whatever implementation of standard I/O a
+given operating system supplies, so the buffering characteristics of a
+Perl program on one machine may not exactly match those on another
+machine. Normally this only influences efficiency, not semantics. If
+your standard I/O package is doing block buffering and you want it to
+L</flush> the buffer more often, just set the C<$|> variable to a true
+value.
+
+=item standard input
+
+The default input L</stream> for your program, which if possible
+shouldn't care where its data is coming from. Represented within a
+Perl program by the L</filehandle> L</STDIN>.
+
+=item standard output
+
+The default output L</stream> for your program, which if possible
+shouldn't care where its data is going. Represented within a Perl
+program by the L</filehandle> L</STDOUT>.
+
+=item stat structure
+
+A special internal spot in which Perl keeps the information about the
+last L</file> on which you requested information.
+
+=item statement
+
+A L</command> to the computer about what to do next, like a step in a
+recipe: "Add marmalade to batter and mix until mixed." A statement is
+distinguished from a L</declaration>, which doesn't tell the computer
+to do anything, but just to learn something.
+
+=item statement modifier
+
+A L</conditional> or L</loop> that you put after the L</statement>
+instead of before, if you know what we mean.
+
+=item static
+
+Varying slowly compared to something else. (Unfortunately, everything
+is relatively stable compared to something else, except for certain
+elementary particles, and we're not so sure about them.) In
+computers, where things are supposed to vary rapidly, "static" has a
+derogatory connotation, indicating a slightly dysfunctional
+L</variable>, L</subroutine>, or L</method>. In Perl culture, the
+word is politely avoided.
+
+=item static method
+
+No such thing. See L</class method>.
+
+=item static scoping
+
+No such thing. See L</lexical scoping>.
+
+=item static variable
+
+No such thing. Just use a L</lexical variable> in a scope larger than
+your L</subroutine>.
+
+=item status
+
+The L</value> returned to the parent L</process> when one of its child
+processes dies. This value is placed in the special variable C<$?>.
+Its upper eight L<bits|/bit> are the exit status of the defunct
+process, and its lower eight bits identify the signal (if any) that
+the process died from. On Unix systems, this status value is the same
+as the status word returned by I<wait>(2). See L<perlfunc/system>.
+
+=item STDERR
+
+See L</standard error>.
+
+=item STDIN
+
+See L</standard input>.
+
+=item STDIO
+
+See L</standard IE<sol>O>.
+
+=item STDOUT
+
+See L</standard output>.
+
+=item stream
+
+A flow of data into or out of a process as a steady sequence of bytes
+or characters, without the appearance of being broken up into packets.
+This is a kind of L</interface>--the underlying L</implementation> may
+well break your data up into separate packets for delivery, but this
+is hidden from you.
+
+=item string
+
+A sequence of characters such as "He said !@#*&%@#*?!". A string does
+not have to be entirely printable.
+
+=item string context
+
+The situation in which an expression is expected by its surroundings
+(the code calling it) to return a L</string>. See also L</context>
+and L</numeric context>.
+
+=item stringification
+
+The process of producing a L</string> representation of an abstract
+object.
+
+=item struct
+
+C keyword introducing a structure definition or name.
+
+=item structure
+
+See L</data structure>.
+
+=item subclass
+
+See L</derived class>.
+
+=item subpattern
+
+A component of a L</regular expression> pattern.
+
+=item subroutine
+
+A named or otherwise accessible piece of program that can be invoked
+from elsewhere in the program in order to accomplish some sub-goal of
+the program. A subroutine is often parameterized to accomplish
+different but related things depending on its input
+L<arguments|/argument>. If the subroutine returns a meaningful
+L</value>, it is also called a L</function>.
+
+=item subscript
+
+A L</value> that indicates the position of a particular L</array>
+L</element> in an array.
+
+=item substitution
+
+Changing parts of a string via the C<s///> operator. (We avoid use of
+this term to mean L</variable interpolation>.)
+
+=item substring
+
+A portion of a L</string>, starting at a certain L</character>
+position (L</offset>) and proceeding for a certain number of
+characters.
+
+=item superclass
+
+See L</base class>.
+
+=item superuser
+
+The person whom the L</operating system> will let do almost anything.
+Typically your system administrator or someone pretending to be your
+system administrator. On Unix systems, the L</root> user. On Windows
+systems, usually the Administrator user.
+
+=item SV
+
+Short for "scalar value". But within the Perl interpreter every
+L</referent> is treated as a member of a class derived from SV, in an
+object-oriented sort of way. Every L</value> inside Perl is passed
+around as a C language C<SV*> pointer. The SV L</struct> knows its
+own "referent type", and the code is smart enough (we hope) not to try
+to call a L</hash> function on a L</subroutine>.
+
+=item switch
+
+An option you give on a command line to influence the way your program
+works, usually introduced with a minus sign. The word is also used as
+a nickname for a L</switch statement>.
+
+=item switch cluster
+
+The combination of multiple command-line switches (e.g., B<-a -b -c>)
+into one switch (e.g., B<-abc>). Any switch with an additional
+L</argument> must be the last switch in a cluster.
+
+=item switch statement
+
+A program technique that lets you evaluate an L</expression> and then,
+based on the value of the expression, do a multiway branch to the
+appropriate piece of code for that value. Also called a "case
+structure", named after the similar Pascal construct. Most switch
+statements in Perl are spelled C<for>. See L<perlsyn/Basic BLOCKs and
+Switch Statements>.
+
+=item symbol
+
+Generally, any L</token> or L</metasymbol>. Often used more
+specifically to mean the sort of name you might find in a L</symbol
+table>.
+
+=item symbol table
+
+Where a L</compiler> remembers symbols. A program like Perl must
+somehow remember all the names of all the L<variables|/variable>,
+L<filehandles|/filehandle>, and L<subroutines|/subroutine> you've
+used. It does this by placing the names in a symbol table, which is
+implemented in Perl using a L</hash table>. There is a separate
+symbol table for each L</package> to give each package its own
+L</namespace>.
+
+=item symbolic debugger
+
+A program that lets you step through the L<execution|/execute> of your
+program, stopping or printing things out here and there to see whether
+anything has gone wrong, and if so, what. The "symbolic" part just
+means that you can talk to the debugger using the same symbols with
+which your program is written.
+
+=item symbolic link
+
+An alternate filename that points to the real L</filename>, which in
+turn points to the real L</file>. Whenever the L</operating system>
+is trying to parse a L</pathname> containing a symbolic link, it
+merely substitutes the new name and continues parsing.
+
+=item symbolic reference
+
+A variable whose value is the name of another variable or subroutine.
+By L<dereferencing|/dereference> the first variable, you can get at
+the second one. Symbolic references are illegal under L<use strict
+'refs'|strict/strict refs>.
+
+=item synchronous
+
+Programming in which the orderly sequence of events can be determined;
+that is, when things happen one after the other, not at the same time.
+
+=item syntactic sugar
+
+An alternative way of writing something more easily; a shortcut.
+
+=item syntax
+
+From Greek, "with-arrangement". How things (particularly symbols) are
+put together with each other.
+
+=item syntax tree
+
+An internal representation of your program wherein lower-level
+L<constructs|/construct> dangle off the higher-level constructs
+enclosing them.
+
+=item syscall
+
+A L</function> call directly to the L</operating system>. Many of the
+important subroutines and functions you use aren't direct system
+calls, but are built up in one or more layers above the system call
+level. In general, Perl programmers don't need to worry about the
+distinction. However, if you do happen to know which Perl functions
+are really syscalls, you can predict which of these will set the C<$!>
+(C<$ERRNO>) variable on failure. Unfortunately, beginning programmers
+often confusingly employ the term "system call" to mean what happens
+when you call the Perl L<system|perlfunc/system> function, which
+actually involves many syscalls. To avoid any confusion, we nearly
+always use say "syscall" for something you could call indirectly via
+Perl's L<syscall|perlfunc/syscall> function, and never for something
+you would call with Perl's L<system|perlfunc/system> function.
+
+=back
+
+=head2 T
+
+=over 4
+
+=item tainted
+
+Said of data derived from the grubby hands of a user and thus unsafe
+for a secure program to rely on. Perl does taint checks if you run a
+L</setuid> (or L</setgid>) program, or if you use the B<-T> switch.
+
+=item TCP
+
+Short for Transmission Control Protocol. A protocol wrapped around
+the Internet Protocol to make an unreliable packet transmission
+mechanism appear to the application program to be a reliable
+L</stream> of bytes. (Usually.)
+
+=item term
+
+Short for a "terminal", that is, a leaf node of a L</syntax tree>. A
+thing that functions grammatically as an L</operand> for the operators
+in an expression.
+
+=item terminator
+
+A L</character> or L</string> that marks the end of another string.
+The C<$/> variable contains the string that terminates a
+L<readline|perlfunc/readline> operation, which L<chomp|perlfunc/chomp>
+deletes from the end. Not to be confused with
+L<delimiters|/delimiter> or L<separators|/separator>. The period at
+the end of this sentence is a terminator.
+
+=item ternary
+
+An L</operator> taking three L<operands|/operand>. Sometimes
+pronounced L</trinary>.
+
+=item text
+
+A L</string> or L</file> containing primarily printable characters.
+
+=item thread
+
+Like a forked process, but without L</fork>'s inherent memory
+protection. A thread is lighter weight than a full process, in that a
+process could have multiple threads running around in it, all fighting
+over the same process's memory space unless steps are taken to protect
+threads from each other. See L<threads>.
+
+=item tie
+
+The bond between a magical variable and its implementation class. See
+L<perlfunc/tie> and L<perltie>.
+
+=item TMTOWTDI
+
+There's More Than One Way To Do It, the Perl Motto. The notion that
+there can be more than one valid path to solving a programming problem
+in context. (This doesn't mean that more ways are always better or
+that all possible paths are equally desirable--just that there need
+not be One True Way.) Pronounced TimToady.
+
+=item token
+
+A morpheme in a programming language, the smallest unit of text with
+semantic significance.
+
+=item tokener
+
+A module that breaks a program text into a sequence of
+L<tokens|/token> for later analysis by a parser.
+
+=item tokenizing
+
+Splitting up a program text into L<tokens|/token>. Also known as
+"lexing", in which case you get "lexemes" instead of tokens.
+
+=item toolbox approach
+
+The notion that, with a complete set of simple tools that work well
+together, you can build almost anything you want. Which is fine if
+you're assembling a tricycle, but if you're building a defranishizing
+comboflux regurgalator, you really want your own machine shop in which
+to build special tools. Perl is sort of a machine shop.
+
+=item transliterate
+
+To turn one string representation into another by mapping each
+character of the source string to its corresponding character in the
+result string. See
+L<perlop/trE<sol>SEARCHLISTE<sol>REPLACEMENTLISTE<sol>cds>.
+
+=item trigger
+
+An event that causes a L</handler> to be run.
+
+=item trinary
+
+Not a stellar system with three stars, but an L</operator> taking
+three L<operands|/operand>. Sometimes pronounced L</ternary>.
+
+=item troff
+
+A venerable typesetting language from which Perl derives the name of
+its C<$%> variable and which is secretly used in the production of
+Camel books.
+
+=item true
+
+Any scalar value that doesn't evaluate to 0 or C<"">.
+
+=item truncating
+
+Emptying a file of existing contents, either automatically when
+opening a file for writing or explicitly via the
+L<truncate|perlfunc/truncate> function.
+
+=item type
+
+See L</data type> and L</class>.
+
+=item type casting
+
+Converting data from one type to another. C permits this. Perl does
+not need it. Nor want it.
+
+=item typed lexical
+
+A L</lexical variable> that is declared with a L</class> type: C<my
+Pony $bill>.
+
+=item typedef
+
+A type definition in the C language.
+
+=item typeglob
+
+Use of a single identifier, prefixed with C<*>. For example, C<*name>
+stands for any or all of C<$name>, C<@name>, C<%name>, C<&name>, or
+just C<name>. How you use it determines whether it is interpreted as
+all or only one of them. See L<perldata/Typeglobs and Filehandles>.
+
+=item typemap
+
+A description of how C types may be transformed to and from Perl types
+within an L</extension> module written in L</XS>.
+
+=back
+
+=head2 U
+
+=over 4
+
+=item UDP
+
+User Datagram Protocol, the typical way to send L<datagrams|/datagram>
+over the Internet.
+
+=item UID
+
+A user ID. Often used in the context of L</file> or L</process>
+ownership.
+
+=item umask
+
+A mask of those L</permission bits> that should be forced off when
+creating files or directories, in order to establish a policy of whom
+you'll ordinarily deny access to. See the L<umask|perlfunc/umask>
+function.
+
+=item unary operator
+
+An operator with only one L</operand>, like C<!> or
+L<chdir|perlfunc/chdir>. Unary operators are usually prefix
+operators; that is, they precede their operand. The C<++> and C<-->
+operators can be either prefix or postfix. (Their position I<does>
+change their meanings.)
+
+=item Unicode
+
+A character set comprising all the major character sets of the world,
+more or less. See L<http://www.unicode.org>.
+
+=item Unix
+
+A very large and constantly evolving language with several alternative
+and largely incompatible syntaxes, in which anyone can define anything
+any way they choose, and usually do. Speakers of this language think
+it's easy to learn because it's so easily twisted to one's own ends,
+but dialectical differences make tribal intercommunication nearly
+impossible, and travelers are often reduced to a pidgin-like subset of
+the language. To be universally understood, a Unix shell programmer
+must spend years of study in the art. Many have abandoned this
+discipline and now communicate via an Esperanto-like language called
+Perl.
+
+In ancient times, Unix was also used to refer to some code that a
+couple of people at Bell Labs wrote to make use of a PDP-7 computer
+that wasn't doing much of anything else at the time.
+
+=back
+
+=head2 V
+
+=over 4
+
+=item value
+
+An actual piece of data, in contrast to all the variables, references,
+keys, indexes, operators, and whatnot that you need to access the
+value.
+
+=item variable
+
+A named storage location that can hold any of various kinds of
+L</value>, as your program sees fit.
+
+=item variable interpolation
+
+The L</interpolation> of a scalar or array variable into a string.
+
+=item variadic
+
+Said of a L</function> that happily receives an indeterminate number
+of L</actual arguments>.
+
+=item vector
+
+Mathematical jargon for a list of L<scalar values|/scalar value>.
+
+=item virtual
+
+Providing the appearance of something without the reality, as in:
+virtual memory is not real memory. (See also L</memory>.) The
+opposite of "virtual" is "transparent", which means providing the
+reality of something without the appearance, as in: Perl handles the
+variable-length UTF-8 character encoding transparently.
+
+=item void context
+
+A form of L</scalar context> in which an L</expression> is not
+expected to return any L</value> at all and is evaluated for its
+L</side effects> alone.
+
+=item v-string
+
+A "version" or "vector" L</string> specified with a C<v> followed by a
+series of decimal integers in dot notation, for instance,
+C<v1.20.300.4000>. Each number turns into a L</character> with the
+specified ordinal value. (The C<v> is optional when there are at
+least three integers.)
+
+=back
+
+=head2 W
+
+=over 4
+
+=item warning
+
+A message printed to the L</STDERR> stream to the effect that something
+might be wrong but isn't worth blowing up over. See L<perlfunc/warn>
+and the L<warnings> pragma.
+
+=item watch expression
+
+An expression which, when its value changes, causes a breakpoint in
+the Perl debugger.
+
+=item whitespace
+
+A L</character> that moves your cursor but doesn't otherwise put
+anything on your screen. Typically refers to any of: space, tab, line
+feed, carriage return, or form feed.
+
+=item word
+
+In normal "computerese", the piece of data of the size most
+efficiently handled by your computer, typically 32 bits or so, give or
+take a few powers of 2. In Perl culture, it more often refers to an
+alphanumeric L</identifier> (including underscores), or to a string of
+nonwhitespace L<characters|/character> bounded by whitespace or string
+boundaries.
+
+=item working directory
+
+Your current L</directory>, from which relative pathnames are
+interpreted by the L</operating system>. The operating system knows
+your current directory because you told it with a
+L<chdir|perlfunc/chdir> or because you started out in the place where
+your parent L</process> was when you were born.
+
+=item wrapper
+
+A program or subroutine that runs some other program or subroutine for
+you, modifying some of its input or output to better suit your
+purposes.
+
+=item WYSIWYG
+
+What You See Is What You Get. Usually used when something that
+appears on the screen matches how it will eventually look, like Perl's
+L<format|perlfunc/format> declarations. Also used to mean the
+opposite of magic because everything works exactly as it appears, as
+in the three-argument form of L<open|perlfunc/open>.
+
+=back
+
+=head2 X
+
+=over 4
+
+=item XS
+
+An extraordinarily exported, expeditiously excellent, expressly
+eXternal Subroutine, executed in existing C or C++ or in an exciting
+new extension language called (exasperatingly) XS. Examine L<perlxs>
+for the exact explanation or L<perlxstut> for an exemplary unexacting
+one.
+
+=item XSUB
+
+An external L</subroutine> defined in L</XS>.
+
+=back
+
+=head2 Y
+
+=over 4
+
+=item yacc
+
+Yet Another Compiler Compiler. A parser generator without which Perl
+probably would not have existed. See the file I<perly.y> in the Perl
+source distribution.
+
+=back
+
+=head2 Z
+
+=over 4
+
+=item zero width
+
+A subpattern L</assertion> matching the L</null string> between
+L<characters|/character>.
+
+=item zombie
+
+A process that has died (exited) but whose parent has not yet received
+proper notification of its demise by virtue of having called
+L<wait|perlfunc/wait> or L<waitpid|perlfunc/waitpid>. If you
+L<fork|perlfunc/fork>, you must clean up after your child processes
+when they exit, or else the process table will fill up and your system
+administrator will Not Be Happy with you.
+
+=back
+
+=head1 AUTHOR AND COPYRIGHT
+
+Based on the Glossary of Programming Perl, Third Edition,
+by Larry Wall, Tom Christiansen & Jon Orwant.
+Copyright (c) 2000, 1996, 1991 O'Reilly Media, Inc.
+This document may be distributed under the same terms as Perl itself.
diff --git a/gnu/usr.bin/perl/pod/perlgpl.pod b/gnu/usr.bin/perl/pod/perlgpl.pod
index aa07d5a35b5..2fc157817bc 100644
--- a/gnu/usr.bin/perl/pod/perlgpl.pod
+++ b/gnu/usr.bin/perl/pod/perlgpl.pod
@@ -352,13 +352,13 @@ If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) 19yy name of author
- Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type "show w".
This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
+ under certain conditions; type "show c" for details.
-The hypothetical commands `show w' and `show c' should show the appropriate
+The hypothetical commands "show w" and "show c" should show the appropriate
parts of the General Public License. Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
+be called something other than "show w" and "show c"; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
@@ -366,7 +366,7 @@ school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
- `Gnomovision' (which makes passes at compilers) written by James Hacker.
+ "Gnomovision" (which makes passes at compilers) written by James Hacker.
<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice
diff --git a/gnu/usr.bin/perl/pod/perlhack.pod b/gnu/usr.bin/perl/pod/perlhack.pod
index f0b2ead4d1f..5b7c6c69d59 100644
--- a/gnu/usr.bin/perl/pod/perlhack.pod
+++ b/gnu/usr.bin/perl/pod/perlhack.pod
@@ -34,13 +34,12 @@ words, it's your usual mix of technical people.
Over this group of porters presides Larry Wall. He has the final word
in what does and does not change in the Perl language. Various
-releases of Perl are shepherded by a ``pumpking'', a porter
-responsible for gathering patches, deciding on a patch-by-patch
+releases of Perl are shepherded by a "pumpking", a porter
+responsible for gathering patches, deciding on a patch-by-patch,
feature-by-feature basis what will and will not go into the release.
For instance, Gurusamy Sarathy was the pumpking for the 5.6 release of
Perl, and Jarkko Hietaniemi was the pumpking for the 5.8 release, and
-Hugo van der Sanden and Rafael Garcia-Suarez share the pumpking for
-the 5.10 release.
+Rafael Garcia-Suarez holds the pumpking crown for the 5.10 release.
In addition, various people are pumpkings for different things. For
instance, Andy Dougherty and Jarkko Hietaniemi did a grand job as the
@@ -130,7 +129,7 @@ Is this something that only the submitter wants added to the language,
or would it be broadly useful? Sometimes, instead of adding a feature
with a tight focus, the porters might decide to wait until someone
implements the more generalized feature. For instance, instead of
-implementing a ``delayed evaluation'' feature, the porters are waiting
+implementing a "delayed evaluation" feature, the porters are waiting
for a macro system that would permit delayed evaluation and much more.
=item Does it potentially introduce new bugs?
@@ -179,8 +178,8 @@ always a good idea.
=item Is there another way to do it?
-Larry said ``Although the Perl Slogan is I<There's More Than One Way
-to Do It>, I hesitate to make 10 ways to do something''. This is a
+Larry said "Although the Perl Slogan is I<There's More Than One Way
+to Do It>, I hesitate to make 10 ways to do something". This is a
tricky heuristic to navigate, though--one man's essential addition is
another man's pointless cruft.
@@ -194,16 +193,16 @@ authors, ... Perl is supposed to be easy.
Working code is always preferred to pie-in-the-sky ideas. A patch to
add a feature stands a much higher chance of making it to the language
than does a random feature request, no matter how fervently argued the
-request might be. This ties into ``Will it be useful?'', as the fact
+request might be. This ties into "Will it be useful?", as the fact
that someone took the time to make the patch demonstrates a strong
desire for the feature.
=back
-If you're on the list, you might hear the word ``core'' bandied
-around. It refers to the standard distribution. ``Hacking on the
-core'' means you're changing the C source code to the Perl
-interpreter. ``A core module'' is one that ships with Perl.
+If you're on the list, you might hear the word "core" bandied
+around. It refers to the standard distribution. "Hacking on the
+core" means you're changing the C source code to the Perl
+interpreter. "A core module" is one that ships with Perl.
=head2 Keeping in sync
@@ -217,8 +216,8 @@ changed. The current state of the main trunk of repository, and patches
that describe the individual changes that have happened since the last
public release are available at this location:
- http://public.activestate.com/gsar/APC/
- ftp://ftp.linux.activestate.com/pub/staff/gsar/APC/
+ http://public.activestate.com/pub/apc/
+ ftp://public.activestate.com/pub/apc/
If you're looking for a particular change, or a change that affected
a particular set of files, you may find the B<Perl Repository Browser>
@@ -254,10 +253,10 @@ to doing so:
=item rsync'ing the source tree
Presuming you are in the directory where your perl source resides
-and you have rsync installed and available, you can `upgrade' to
+and you have rsync installed and available, you can "upgrade" to
the bleadperl using:
- # rsync -avz rsync://ftp.linux.activestate.com/perl-current/ .
+ # rsync -avz rsync://public.activestate.com/perl-current/ .
This takes care of updating every single item in the source tree to
the latest applied patch level, creating files that are new (to your
@@ -268,7 +267,7 @@ Note that this will not delete any files that were in '.' before
the rsync. Once you are sure that the rsync is running correctly,
run it with the --delete and the --dry-run options like this:
- # rsync -avz --delete --dry-run rsync://ftp.linux.activestate.com/perl-current/ .
+ # rsync -avz --delete --dry-run rsync://public.activestate.com/perl-current/ .
This will I<simulate> an rsync run that also deletes files not
present in the bleadperl master copy. Observe the results from
@@ -355,7 +354,7 @@ yourself to the source files.
Presuming you are in a directory where your patches reside, you can
get them in sync with
- # rsync -avz rsync://ftp.linux.activestate.com/perl-current-diffs/ .
+ # rsync -avz rsync://public.activestate.com/perl-current-diffs/ .
This makes sure the latest available patch is downloaded to your
patch directory.
@@ -363,7 +362,7 @@ patch directory.
It's then up to you to apply these patches, using something like
# last=`ls -t *.gz | sed q`
- # rsync -avz rsync://ftp.linux.activestate.com/perl-current-diffs/ .
+ # rsync -avz rsync://public.activestate.com/perl-current-diffs/ .
# find . -name '*.gz' -newer $last -exec gzcat {} \; >blead.patch
# cd ../perl-current
# patch -p1 -N <../perl-current-diffs/blead.patch
@@ -805,7 +804,7 @@ there's three things going on here.
C<yyparse>, the parser, lives in F<perly.c>, although you're better off
reading the original YACC input in F<perly.y>. (Yes, Virginia, there
B<is> a YACC grammar for Perl!) The job of the parser is to take your
-code and `understand' it, splitting it into sentences, deciding which
+code and "understand" it, splitting it into sentences, deciding which
operands go with which operators and so on.
The parser is nobly assisted by the lexer, which chunks up your input
@@ -859,13 +858,164 @@ The C<PERL_ASYNC_CHECK> makes sure that things like signals interrupt
execution if required.
The actual functions called are known as PP code, and they're spread
-between four files: F<pp_hot.c> contains the `hot' code, which is most
+between four files: F<pp_hot.c> contains the "hot" code, which is most
often used and highly optimized, F<pp_sys.c> contains all the
system-specific functions, F<pp_ctl.c> contains the functions which
implement control structures (C<if>, C<while> and the like) and F<pp.c>
contains everything else. These are, if you like, the C code for Perl's
built-in functions and operators.
+Note that each C<pp_> function is expected to return a pointer to the next
+op. Calls to perl subs (and eval blocks) are handled within the same
+runops loop, and do not consume extra space on the C stack. For example,
+C<pp_entersub> and C<pp_entertry> just push a C<CxSUB> or C<CxEVAL> block
+struct onto the context stack which contain the address of the op
+following the sub call or eval. They then return the first op of that sub
+or eval block, and so execution continues of that sub or block. Later, a
+C<pp_leavesub> or C<pp_leavetry> op pops the C<CxSUB> or C<CxEVAL>,
+retrieves the return op from it, and returns it.
+
+=item Exception handing
+
+Perl's exception handing (i.e. C<die> etc) is built on top of the low-level
+C<setjmp()>/C<longjmp()> C-library functions. These basically provide a
+way to capture the current PC and SP registers and later restore them; i.e.
+a C<longjmp()> continues at the point in code where a previous C<setjmp()>
+was done, with anything further up on the C stack being lost. This is why
+code should always save values using C<SAVE_FOO> rather than in auto
+variables.
+
+The perl core wraps C<setjmp()> etc in the macros C<JMPENV_PUSH> and
+C<JMPENV_JUMP>. The basic rule of perl exceptions is that C<exit>, and
+C<die> (in the absence of C<eval>) perform a C<JMPENV_JUMP(2)>, while
+C<die> within C<eval> does a C<JMPENV_JUMP(3)>.
+
+At entry points to perl, such as C<perl_parse()>, C<perl_run()> and
+C<call_sv(cv, G_EVAL)> each does a C<JMPENV_PUSH>, then enter a runops
+loop or whatever, and handle possible exception returns. For a 2 return,
+final cleanup is performed, such as popping stacks and calling C<CHECK> or
+C<END> blocks. Amongst other things, this is how scope cleanup still
+occurs during an C<exit>.
+
+If a C<die> can find a C<CxEVAL> block on the context stack, then the
+stack is popped to that level and the return op in that block is assigned
+to C<PL_restartop>; then a C<JMPENV_JUMP(3)> is performed. This normally
+passes control back to the guard. In the case of C<perl_run> and
+C<call_sv>, a non-null C<PL_restartop> triggers re-entry to the runops
+loop. The is the normal way that C<die> or C<croak> is handled within an
+C<eval>.
+
+Sometimes ops are executed within an inner runops loop, such as tie, sort
+or overload code. In this case, something like
+
+ sub FETCH { eval { die } }
+
+would cause a longjmp right back to the guard in C<perl_run>, popping both
+runops loops, which is clearly incorrect. One way to avoid this is for the
+tie code to do a C<JMPENV_PUSH> before executing C<FETCH> in the inner
+runops loop, but for efficiency reasons, perl in fact just sets a flag,
+using C<CATCH_SET(TRUE)>. The C<pp_require>, C<pp_entereval> and
+C<pp_entertry> ops check this flag, and if true, they call C<docatch>,
+which does a C<JMPENV_PUSH> and starts a new runops level to execute the
+code, rather than doing it on the current loop.
+
+As a further optimisation, on exit from the eval block in the C<FETCH>,
+execution of the code following the block is still carried on in the inner
+loop. When an exception is raised, C<docatch> compares the C<JMPENV>
+level of the C<CxEVAL> with C<PL_top_env> and if they differ, just
+re-throws the exception. In this way any inner loops get popped.
+
+Here's an example.
+
+ 1: eval { tie @a, 'A' };
+ 2: sub A::TIEARRAY {
+ 3: eval { die };
+ 4: die;
+ 5: }
+
+To run this code, C<perl_run> is called, which does a C<JMPENV_PUSH> then
+enters a runops loop. This loop executes the eval and tie ops on line 1,
+with the eval pushing a C<CxEVAL> onto the context stack.
+
+The C<pp_tie> does a C<CATCH_SET(TRUE)>, then starts a second runops loop
+to execute the body of C<TIEARRAY>. When it executes the entertry op on
+line 3, C<CATCH_GET> is true, so C<pp_entertry> calls C<docatch> which
+does a C<JMPENV_PUSH> and starts a third runops loop, which then executes
+the die op. At this point the C call stack looks like this:
+
+ Perl_pp_die
+ Perl_runops # third loop
+ S_docatch_body
+ S_docatch
+ Perl_pp_entertry
+ Perl_runops # second loop
+ S_call_body
+ Perl_call_sv
+ Perl_pp_tie
+ Perl_runops # first loop
+ S_run_body
+ perl_run
+ main
+
+and the context and data stacks, as shown by C<-Dstv>, look like:
+
+ STACK 0: MAIN
+ CX 0: BLOCK =>
+ CX 1: EVAL => AV() PV("A"\0)
+ retop=leave
+ STACK 1: MAGIC
+ CX 0: SUB =>
+ retop=(null)
+ CX 1: EVAL => *
+ retop=nextstate
+
+The die pops the first C<CxEVAL> off the context stack, sets
+C<PL_restartop> from it, does a C<JMPENV_JUMP(3)>, and control returns to
+the top C<docatch>. This then starts another third-level runops level,
+which executes the nextstate, pushmark and die ops on line 4. At the point
+that the second C<pp_die> is called, the C call stack looks exactly like
+that above, even though we are no longer within an inner eval; this is
+because of the optimization mentioned earlier. However, the context stack
+now looks like this, ie with the top CxEVAL popped:
+
+ STACK 0: MAIN
+ CX 0: BLOCK =>
+ CX 1: EVAL => AV() PV("A"\0)
+ retop=leave
+ STACK 1: MAGIC
+ CX 0: SUB =>
+ retop=(null)
+
+The die on line 4 pops the context stack back down to the CxEVAL, leaving
+it as:
+
+ STACK 0: MAIN
+ CX 0: BLOCK =>
+
+As usual, C<PL_restartop> is extracted from the C<CxEVAL>, and a
+C<JMPENV_JUMP(3)> done, which pops the C stack back to the docatch:
+
+ S_docatch
+ Perl_pp_entertry
+ Perl_runops # second loop
+ S_call_body
+ Perl_call_sv
+ Perl_pp_tie
+ Perl_runops # first loop
+ S_run_body
+ perl_run
+ main
+
+In this case, because the C<JMPENV> level recorded in the C<CxEVAL>
+differs from the current one, C<docatch> just does a C<JMPENV_JUMP(3)>
+and the C stack unwinds to:
+
+ perl_run
+ main
+
+Because C<PL_restartop> is non-null, C<run_body> starts a new runops loop
+and execution continues.
+
=back
=head2 Internal Variable Types
@@ -1103,10 +1253,10 @@ If you're not used to reading BNF grammars, this is how it works: You're
fed certain things by the tokeniser, which generally end up in upper
case. Here, C<ADDOP>, is provided when the tokeniser sees C<+> in your
code. C<ASSIGNOP> is provided when C<=> is used for assigning. These are
-`terminal symbols', because you can't get any simpler than them.
+"terminal symbols", because you can't get any simpler than them.
The grammar, lines one and three of the snippet above, tells you how to
-build up more complex forms. These complex forms, `non-terminal symbols'
+build up more complex forms. These complex forms, "non-terminal symbols"
are generally placed in lower case. C<term> here is a non-terminal
symbol, representing a single expression.
@@ -1135,8 +1285,8 @@ call C<newBINOP> to create a new binary operator. The first parameter to
C<newBINOP>, a function in F<op.c>, is the op type. It's an addition
operator, so we want the type to be C<ADDOP>. We could specify this
directly, but it's right there as the second token in the input, so we
-use C<$2>. The second parameter is the op's flags: 0 means `nothing
-special'. Then the things to add: the left and right hand side of our
+use C<$2>. The second parameter is the op's flags: 0 means "nothing
+special". Then the things to add: the left and right hand side of our
expression, in scalar context.
=head2 Stacks
@@ -1184,14 +1334,14 @@ description of the macros used in stack manipulation.
=item Mark stack
-I say `your portion of the stack' above because PP code doesn't
+I say "your portion of the stack" above because PP code doesn't
necessarily get the whole stack to itself: if your function calls
another function, you'll only want to expose the arguments aimed for the
called function, and not (necessarily) let it get at your own data. The
-way we do this is to have a `virtual' bottom-of-stack, exposed to each
+way we do this is to have a "virtual" bottom-of-stack, exposed to each
function. The mark stack keeps bookmarks to locations in the argument
stack usable by each function. For instance, when dealing with a tied
-variable, (internally, something with `P' magic) Perl has to call
+variable, (internally, something with "P" magic) Perl has to call
methods for accesses to the tied variables. However, we need to separate
the arguments exposed to the method to the argument exposed to the
original function - the store or fetch or whatever it may be. Here's how
@@ -1708,6 +1858,9 @@ the module maintainer (with a copy to p5p). This will help the module
maintainer keep the CPAN version in sync with the core version without
constantly scanning p5p.
+The list of maintainers of core modules is usefully documented in
+F<Porting/Maintainers.pl>.
+
=head2 Adding a new function to the core
If, as part of a patch to fix a bug, or just because you have an
@@ -1876,9 +2029,10 @@ also use the full suite of core modules in the tests.
=back
When you say "make test" Perl uses the F<t/TEST> program to run the
-test suite. All tests are run from the F<t/> directory, B<not> the
-directory which contains the test. This causes some problems with the
-tests in F<lib/>, so here's some opportunity for some patching.
+test suite (except under Win32 where it uses F<t/harness> instead.)
+All tests are run from the F<t/> directory, B<not> the directory
+which contains the test. This causes some problems with the tests
+in F<lib/>, so here's some opportunity for some patching.
You must be triply conscious of cross-platform concerns. This usually
boils down to using File::Spec and avoiding things like C<fork()> and
@@ -1889,7 +2043,8 @@ C<system()> unless absolutely necessary.
There are various special make targets that can be used to test Perl
slightly differently than the standard "test" target. Not all them
are expected to give a 100% success rate. Many of them have several
-aliases.
+aliases, and many of them are not available on certain operating
+systems.
=over 4
@@ -1897,15 +2052,21 @@ aliases.
Run F<perl> on all core tests (F<t/*> and F<lib/[a-z]*> pragma tests).
+(Not available on Win32)
+
=item test.deparse
Run all the tests through B::Deparse. Not all tests will succeed.
+(Not available on Win32)
+
=item test.taintwarn
Run all tests with the B<-t> command-line switch. Not all tests
are expected to succeed (until they're specifically fixed, of course).
+(Not available on Win32)
+
=item minitest
Run F<miniperl> on F<t/base>, F<t/comp>, F<t/cmd>, F<t/run>, F<t/io>,
@@ -1921,7 +2082,7 @@ F<testname.valgrind>.
(Only in Tru64) Run all the tests using the memory leak + naughty
memory access tool "Third Degree". The log files will be named
-F<perl3.log.testname>.
+F<perl.3log.testname>.
=item test.torture torturetest
@@ -1935,6 +2096,8 @@ C<-torture> argument to F<t/harness>.
Run all the tests with -Mutf8. Not all tests will succeed.
+(Not available on Win32)
+
=item minitest.utf16 test.utf16
Runs the tests with UTF-16 encoded scripts, encoded with different
@@ -1943,6 +2106,8 @@ versions of this encoding.
C<make utest.utf16> runs the test suite with a combination of C<-utf8> and
C<-utf16> arguments to F<t/TEST>.
+(Not available on Win32)
+
=item test_harness
Run the test suite with the F<t/harness> controlling program, instead of
@@ -1952,6 +2117,20 @@ mostly works. The main advantage for our purposes is that it prints a
detailed summary of failed tests at the end. Also, unlike F<t/TEST>, it
doesn't redirect stderr to stdout.
+Note that under Win32 F<t/harness> is always used instead of F<t/TEST>, so
+there is no special "test_harness" target.
+
+Under Win32's "test" target you may use the TEST_SWITCHES and TEST_FILES
+environment variables to control the behaviour of F<t/harness>. This means
+you can say
+
+ nmake test TEST_FILES="op/*.t"
+ nmake test TEST_SWITCHES="-torture" TEST_FILES="op/*.t"
+
+=item test-notty test_notty
+
+Sets PERL_SKIP_TTY_TEST to true before running normal test.
+
=back
=head2 Running tests by hand
@@ -1967,6 +2146,45 @@ or
(if you don't specify test scripts, the whole test suite will be run.)
+=head3 Using t/harness for testing
+
+If you use C<harness> for testing you have several command line options
+available to you. The arguments are as follows, and are in the order
+that they must appear if used together.
+
+ harness -v -torture -re=pattern LIST OF FILES TO TEST
+ harness -v -torture -re LIST OF PATTERNS TO MATCH
+
+If C<LIST OF FILES TO TEST> is omitted the file list is obtained from
+the manifest. The file list may include shell wildcards which will be
+expanded out.
+
+=over 4
+
+=item -v
+
+Run the tests under verbose mode so you can see what tests were run,
+and debug outbut.
+
+=item -torture
+
+Run the torture tests as well as the normal set.
+
+=item -re=PATTERN
+
+Filter the file list so that all the test files run match PATTERN.
+Note that this form is distinct from the B<-re LIST OF PATTERNS> form below
+in that it allows the file list to be provided as well.
+
+=item -re LIST OF PATTERNS
+
+Filter the file list so that all the test files run match
+/(LIST|OF|PATTERNS)/. Note that with this form the patterns
+are joined by '|' and you cannot supply a list of files, instead
+the test files are obtained from the MANIFEST.
+
+=back
+
You can run an individual test by a command similar to
./perl -I../lib patho/to/foo.t
diff --git a/gnu/usr.bin/perl/pod/perllexwarn.pod b/gnu/usr.bin/perl/pod/perllexwarn.pod
index 911de2b72ed..57df049e5ec 100644
--- a/gnu/usr.bin/perl/pod/perllexwarn.pod
+++ b/gnu/usr.bin/perl/pod/perllexwarn.pod
@@ -1,4 +1,5 @@
=head1 NAME
+X<warning, lexical> X<warnings> X<warning>
perllexwarn - Perl Lexical Warnings
@@ -19,21 +20,21 @@ doesn't attempt to control the warnings will work unchanged.
All warnings are enabled in a block by either of these:
- use warnings ;
- use warnings 'all' ;
+ use warnings;
+ use warnings 'all';
Similarly all warnings are disabled in a block by either of these:
- no warnings ;
- no warnings 'all' ;
+ no warnings;
+ no warnings 'all';
For example, consider the code below:
- use warnings ;
- my @a ;
+ use warnings;
+ my @a;
{
- no warnings ;
- my $b = @a[0] ;
+ no warnings;
+ my $b = @a[0];
}
my $c = @a[0];
@@ -62,7 +63,7 @@ example, in the code below, an C<"isn't numeric"> warning will only
be reported for the C<$a> variable.
my $a = "2:" + 3;
- no warnings ;
+ no warnings;
my $b = "2:" + 3;
Note that neither the B<-w> flag or the C<$^W> can be used to
@@ -82,9 +83,9 @@ fundamentally flawed. For a start, say you want to disable warnings in
a block of code. You might expect this to be enough to do the trick:
{
- local ($^W) = 0 ;
- my $a =+ 2 ;
- my $b ; chop $b ;
+ local ($^W) = 0;
+ my $a =+ 2;
+ my $b; chop $b;
}
When this code is run with the B<-w> flag, a warning will be produced
@@ -95,8 +96,8 @@ disable compile-time warnings you need to rewrite the code like this:
{
BEGIN { $^W = 0 }
- my $a =+ 2 ;
- my $b ; chop $b ;
+ my $a =+ 2;
+ my $b; chop $b;
}
The other big problem with C<$^W> is the way you can inadvertently
@@ -107,13 +108,13 @@ the first will not.
sub doit
{
- my $b ; chop $b ;
+ my $b; chop $b;
}
- doit() ;
+ doit();
{
- local ($^W) = 1 ;
+ local ($^W) = 1;
doit()
}
@@ -130,6 +131,7 @@ warnings are (or aren't) produced:
=over 5
=item B<-w>
+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
@@ -137,6 +139,7 @@ will enable warnings everywhere. See L<Backward Compatibility> for
details of how this flag interacts with lexical warnings.
=item B<-W>
+X<-W>
If the B<-W> flag is used on the command line, it will enable all warnings
throughout the program regardless of whether warnings were disabled
@@ -145,6 +148,7 @@ included via C<use>, C<require> or C<do>.
Think of it as the Perl equivalent of the "lint" command.
=item B<-X>
+X<-X>
Does the exact opposite to the B<-W> flag, i.e. it disables all warnings.
@@ -199,6 +203,7 @@ the C<warnings> pragma to control the warning behavior of $^W-type
code (using a C<local $^W=0>) if it really wants to, but not vice-versa.
=head2 Category Hierarchy
+X<warning, categories>
A hierarchy of "categories" have been defined to allow groups of warnings
to be enabled/disabled in isolation.
@@ -301,17 +306,17 @@ The current hierarchy is:
Just like the "strict" pragma any of these categories can be combined
- use warnings qw(void redefine) ;
- no warnings qw(io syntax untie) ;
+ use warnings qw(void redefine);
+ no warnings qw(io syntax untie);
Also like the "strict" pragma, if there is more than one instance of the
C<warnings> pragma in a given scope the cumulative effect is additive.
- use warnings qw(void) ; # only "void" warnings enabled
+ use warnings qw(void); # only "void" warnings enabled
...
- use warnings qw(io) ; # only "void" & "io" warnings enabled
+ use warnings qw(io); # only "void" & "io" warnings enabled
...
- no warnings qw(void) ; # only "io" warnings enabled
+ no warnings qw(void); # only "io" warnings enabled
To determine which category a specific warning has been assigned to see
L<perldiag>.
@@ -322,6 +327,7 @@ in its own right.
=head2 Fatal Warnings
+X<warning, fatal>
The presence of the word "FATAL" in the category list will escalate any
warnings detected from the categories specified in the lexical scope
@@ -329,18 +335,18 @@ into fatal errors. In the code below, the use of C<time>, C<length>
and C<join> can all produce a C<"Useless use of xxx in void context">
warning.
- use warnings ;
+ use warnings;
- time ;
+ time;
{
- use warnings FATAL => qw(void) ;
- length "abc" ;
+ use warnings FATAL => qw(void);
+ length "abc";
}
- join "", 1,2,3 ;
+ join "", 1,2,3;
- print "done\n" ;
+ print "done\n";
When run it produces this output
@@ -366,6 +372,7 @@ except for those in the "syntax" category.
use warnings FATAL => 'all', NONFATAL => 'syntax';
=head2 Reporting Warnings from a Module
+X<warning, reporting> X<warning, registering>
The C<warnings> pragma provides a number of functions that are useful for
module authors. These are used when you want to report a module-specific
@@ -379,7 +386,7 @@ Consider the module C<MyMod::Abc> below.
use warnings::register;
sub open {
- my $path = shift ;
+ my $path = shift;
if ($path !~ m#^/#) {
warnings::warn("changing relative path to /var/abc")
if warnings::enabled();
@@ -387,7 +394,7 @@ Consider the module C<MyMod::Abc> below.
}
}
- 1 ;
+ 1;
The call to C<warnings::register> will create a new warnings category
called "MyMod::abc", i.e. the new category name matches the current
@@ -409,13 +416,13 @@ this snippet of code:
sub open {
warnings::warnif("deprecated",
- "open is deprecated, use new instead") ;
- new(@_) ;
+ "open is deprecated, use new instead");
+ new(@_);
}
sub new
...
- 1 ;
+ 1;
The function C<open> has been deprecated, so code has been included to
display a warning message whenever the calling module has (at least) the
@@ -424,7 +431,7 @@ display a warning message whenever the calling module has (at least) the
use warnings 'deprecated';
use MyMod::Abc;
...
- MyMod::Abc::open($filename) ;
+ MyMod::Abc::open($filename);
Either the C<warnings::warn> or C<warnings::warnif> function should be
used to actually display the warnings message. This is because they can
@@ -446,21 +453,21 @@ of the object as the warnings category.
Consider this example:
- package Original ;
+ package Original;
- no warnings ;
- use warnings::register ;
+ no warnings;
+ use warnings::register;
sub new
{
- my $class = shift ;
- bless [], $class ;
+ my $class = shift;
+ bless [], $class;
}
sub check
{
- my $self = shift ;
- my $value = shift ;
+ my $self = shift;
+ my $value = shift;
if ($value % 2 && warnings::enabled($self))
{ warnings::warn($self, "Odd numbers are unsafe") }
@@ -468,38 +475,38 @@ Consider this example:
sub doit
{
- my $self = shift ;
- my $value = shift ;
- $self->check($value) ;
+ my $self = shift;
+ my $value = shift;
+ $self->check($value);
# ...
}
- 1 ;
+ 1;
- package Derived ;
+ package Derived;
- use warnings::register ;
- use Original ;
- our @ISA = qw( Original ) ;
+ use warnings::register;
+ use Original;
+ our @ISA = qw( Original );
sub new
{
- my $class = shift ;
- bless [], $class ;
+ my $class = shift;
+ bless [], $class;
}
- 1 ;
+ 1;
The code below makes use of both modules, but it only enables warnings from
C<Derived>.
- use Original ;
- use Derived ;
+ use Original;
+ use Derived;
use warnings 'Derived';
- my $a = new Original ;
- $a->doit(1) ;
- my $b = new Derived ;
- $a->doit(1) ;
+ my $a = new Original;
+ $a->doit(1);
+ my $b = new Derived;
+ $a->doit(1);
When this code is run only the C<Derived> object, C<$b>, will generate
a warning.
diff --git a/gnu/usr.bin/perl/pod/perlmodlib.PL b/gnu/usr.bin/perl/pod/perlmodlib.PL
index d87785f5067..969dde92f75 100644
--- a/gnu/usr.bin/perl/pod/perlmodlib.PL
+++ b/gnu/usr.bin/perl/pod/perlmodlib.PL
@@ -2,7 +2,7 @@
$ENV{LC_ALL} = 'C';
-open (OUT, ">perlmodlib.tmp") or die $!;
+open (OUT, ">perlmodlib.pod") or die $!;
my (@pragma, @mod, @MANIFEST);
open (MANIFEST, "../MANIFEST") or die $!;
@@ -1461,5 +1461,5 @@ you're redefining the world and willing to take the consequences.
EOF
close MANIFEST or warn "$0: failed to close MANIFEST (../MANIFEST): $!";
-close OUT or warn "$0: failed to close OUT (perlmodlib.tmp): $!";
+close OUT or warn "$0: failed to close OUT (perlmodlib.pod): $!";
diff --git a/gnu/usr.bin/perl/pod/perlopentut.pod b/gnu/usr.bin/perl/pod/perlopentut.pod
index 3116f785c17..f023434ed39 100644
--- a/gnu/usr.bin/perl/pod/perlopentut.pod
+++ b/gnu/usr.bin/perl/pod/perlopentut.pod
@@ -67,7 +67,7 @@ examples would effectively mean
which is definitely not what you want.
The other important thing to notice is that, just as in the shell,
-any white space before or after the filename is ignored. This is good,
+any whitespace before or after the filename is ignored. This is good,
because you wouldn't want these to do different things:
open INFO, "<datafile"
@@ -82,7 +82,7 @@ in from a different file, and forget to trim it before opening:
This is not a bug, but a feature. Because C<open> mimics the shell in
its style of using redirection arrows to specify how to open the file, it
-also does so with respect to extra white space around the filename itself
+also does so with respect to extra whitespace around the filename itself
as well. For accessing files with naughty names, see
L<"Dispelling the Dweomer">.
@@ -332,7 +332,7 @@ C<sysopen> takes 3 (or 4) arguments.
The HANDLE argument is a filehandle just as with C<open>. The PATH is
a literal path, one that doesn't pay attention to any greater-thans or
-less-thans or pipes or minuses, nor ignore white space. If it's there,
+less-thans or pipes or minuses, nor ignore whitespace. If it's there,
it's part of the path. The FLAGS argument contains one or more values
derived from the Fcntl module that have been or'd together using the
bitwise "|" operator. The final argument, the MASK, is optional; if
@@ -364,7 +364,7 @@ added to the sysopen() flags because large files are the default.)
Here's how to use C<sysopen> to emulate the simple C<open> calls we had
before. We'll omit the C<|| die $!> checks for clarity, but make sure
you always check the return values in real code. These aren't quite
-the same, since C<open> will trim leading and trailing white space,
+the same, since C<open> will trim leading and trailing whitespace,
but you'll get the idea.
To open a file for reading:
@@ -521,7 +521,7 @@ working directory, slash the directory separator, and disallows ASCII
NULs within a valid filename. Most systems follow these conventions,
including all POSIX systems as well as proprietary Microsoft systems.
The only vaguely popular system that doesn't work this way is the
-proprietary Macintosh system, which uses a colon where the rest of us
+"Classic" Macintosh system, which uses a colon where the rest of us
use a slash. Maybe C<sysopen> isn't such a bad idea after all.
If you want to use C<< <ARGV> >> processing in a totally boring
diff --git a/gnu/usr.bin/perl/pod/perlpodspec.pod b/gnu/usr.bin/perl/pod/perlpodspec.pod
index 1e08c2b69a3..0b60dfd967c 100644
--- a/gnu/usr.bin/perl/pod/perlpodspec.pod
+++ b/gnu/usr.bin/perl/pod/perlpodspec.pod
@@ -522,7 +522,7 @@ a "-". This was so that this:
would parse as equivalent to this:
- C<$foo-E<lt>bar>
+ C<$foo-E<gt>bar>
instead of as equivalent to a "C" formatting code containing
only "$foo-", and then a "bar>" outside the "C" formatting code. This
diff --git a/gnu/usr.bin/perl/pod/perlport.pod b/gnu/usr.bin/perl/pod/perlport.pod
index 5f32fdd7adf..65d7d15bd18 100644
--- a/gnu/usr.bin/perl/pod/perlport.pod
+++ b/gnu/usr.bin/perl/pod/perlport.pod
@@ -67,9 +67,9 @@ The important thing is to decide where the code will run and to be
deliberate in your decision.
The material below is separated into three main sections: main issues of
-portability (L<"ISSUES">, platform-specific issues (L<"PLATFORMS">, and
+portability (L<"ISSUES">), platform-specific issues (L<"PLATFORMS">), and
built-in perl functions that behave differently on various ports
-(L<"FUNCTION IMPLEMENTATIONS">.
+(L<"FUNCTION IMPLEMENTATIONS">).
This information should not be considered complete; it includes possibly
transient information about idiosyncrasies of some of the ports, almost
@@ -107,8 +107,8 @@ newlines:
You can get away with this on Unix and Mac OS (they have a single
character end-of-line), but the same program will break under DOSish
perls because you're only chop()ing half the end-of-line. Instead,
-chomp() should be used to trim newlines. The Dunce::Files module can
-help audit your code for misuses of chop().
+chomp() should be used to trim newlines. The L<Dunce::Files> module
+can help audit your code for misuses of chop().
When dealing with binary files (or text files in binary mode) be sure
to explicitly set $/ to the appropriate value for your file format
@@ -224,6 +224,10 @@ them in big-endian mode. To avoid this problem in network (socket)
connections use the C<pack> and C<unpack> formats C<n> and C<N>, the
"network" orders. These are guaranteed to be portable.
+As of perl 5.8.5, you can also use the C<E<gt>> and C<E<lt>> modifiers
+to force big- or little-endian byte-order. This is useful if you want
+to store signed integers or 64-bit integers, for example.
+
You can explore the endianness of your platform by unpacking a
data structure packed in native format such as:
@@ -476,12 +480,14 @@ file name.
To convert $^X to a file pathname, taking account of the requirements
of the various operating system possibilities, say:
+
use Config;
$thisperl = $^X;
if ($^O ne 'VMS')
{$thisperl .= $Config{_exe} unless $thisperl =~ m/$Config{_exe}$/i;}
To convert $Config{perlpath} to a file pathname, say:
+
use Config;
$thisperl = $Config{perlpath};
if ($^O ne 'VMS')
@@ -513,7 +519,7 @@ Don't assume that you can ping hosts and get replies.
Don't assume that any particular port (service) will respond.
-Don't assume that Sys::Hostname() (or any other API or command)
+Don't assume that Sys::Hostname (or any other API or command)
returns either a fully qualified hostname or a non-qualified hostname:
it all depends on how the system had been configured. Also remember
things like DHCP and NAT-- the hostname you get back might not be very
@@ -652,9 +658,9 @@ Do not assume that the alphabetic characters are encoded contiguously
Do not assume anything about the ordering of the characters.
The lowercase letters may come before or after the uppercase letters;
-the lowercase and uppercase may be interlaced so that both `a' and `A'
-come before `b'; the accented and other international characters may
-be interlaced so that E<auml> comes before `b'.
+the lowercase and uppercase may be interlaced so that both "a" and "A"
+come before "b"; the accented and other international characters may
+be interlaced so that E<auml> comes before "b".
=head2 Internationalisation
@@ -766,11 +772,17 @@ problems in their code that crop up because of lack of testing on other
platforms; two, to provide users with information about whether
a given module works on a given platform.
+Also see:
+
=over 4
-=item Mailing list: cpan-testers@perl.org
+=item *
+
+Mailing list: cpan-testers@perl.org
+
+=item *
-=item Testing results: http://testers.cpan.org/
+Testing results: http://testers.cpan.org/
=back
@@ -893,10 +905,11 @@ DOSish perls are as follows:
Windows NT MSWin32 MSWin32-x86 2 4 xx
Windows NT MSWin32 MSWin32-ALPHA 2 4 xx
Windows NT MSWin32 MSWin32-ppc 2 4 xx
- Windows 2000 MSWin32 MSWin32-x86 2 5 xx
- Windows XP MSWin32 MSWin32-x86 2 ?
+ Windows 2000 MSWin32 MSWin32-x86 2 5 00
+ Windows XP MSWin32 MSWin32-x86 2 5 01
+ Windows 2003 MSWin32 MSWin32-x86 2 5 02
Windows CE MSWin32 ? 3
- Cygwin cygwin ?
+ Cygwin cygwin cygwin
The various MSWin32 Perl's can distinguish the OS they are running on
via the value of the fifth element of the list returned from
@@ -1035,6 +1048,10 @@ The MacPerl Pages, http://www.macperl.com/ .
The MacPerl mailing lists, http://lists.perl.org/ .
+=item *
+
+MPW, ftp://ftp.apple.com/developer/Tool_Chest/Core_Mac_OS_Tools/
+
=back
=head2 VMS
@@ -1304,8 +1321,6 @@ Also see:
=item *
-*
-
L<perlos390>, F<README.os390>, F<perlbs2000>, F<README.vmesa>,
L<perlebcdic>.
@@ -1315,7 +1330,7 @@ The perl-mvs@perl.org list is for discussion of porting issues as well as
general usage issues for all EBCDIC Perls. Send a message body of
"subscribe perl-mvs" to majordomo@perl.org.
-=item *
+=item *
AS/400 Perl information at
http://as400.rochester.ibm.com/
@@ -1503,10 +1518,6 @@ L<Config> for a full description of available variables.
=over 8
-=item -X FILEHANDLE
-
-=item -X EXPR
-
=item -X
C<-r>, C<-w>, and C<-x> have a limited meaning only; directories
@@ -1545,7 +1556,29 @@ suffixes. C<-S> is meaningless. (Win32)
C<-x> (or C<-X>) determine if a file has an executable file type.
(S<RISC OS>)
-=item binmode FILEHANDLE
+=item atan2 Y,X
+
+Due to issues with various CPUs, math libraries, compilers, and standards,
+results for C<atan2()> may vary depending on any combination of the above.
+Perl attempts to conform to the Open Group/IEEE standards for the results
+returned from C<atan2()>, but cannot force the issue if the system Perl is
+run on does not allow it. (Tru64, HP-UX 10.20)
+
+The current version of the standards for C<atan2()> is available at
+L<http://www.opengroup.org/onlinepubs/009695399/functions/atan2.html>.
+
+=item atan2
+
+Due to issues with various CPUs, math libraries, compilers, and standards,
+results for C<atan2()> may vary depending on any combination of the above.
+Perl attempts to conform to the Open Group/IEEE standards for the results
+returned from C<atan2()>, but cannot force the issue if the system Perl is
+run on does not allow it. (Tru64, HP-UX 10.20)
+
+The current version of the standards for C<atan2()> is available at
+L<http://www.opengroup.org/onlinepubs/009695399/functions/atan2.html>.
+
+=item binmode
Meaningless. (S<Mac OS>, S<RISC OS>)
@@ -1556,7 +1589,7 @@ filehandle may be closed, or pointer may be in a different position.
The value returned by C<tell> may be affected after the call, and
the filehandle may be flushed. (Win32)
-=item chmod LIST
+=item chmod
Only limited meaning. Disabling/enabling write permission is mapped to
locking/unlocking the file. (S<Mac OS>)
@@ -1571,34 +1604,32 @@ Access permissions are mapped onto VOS access-control list changes. (VOS)
The actual permissions set depend on the value of the C<CYGWIN>
in the SYSTEM environment settings. (Cygwin)
-=item chown LIST
+=item chown
Not implemented. (S<Mac OS>, Win32, S<Plan 9>, S<RISC OS>, VOS)
Does nothing, but won't fail. (Win32)
-=item chroot FILENAME
-
=item chroot
Not implemented. (S<Mac OS>, Win32, VMS, S<Plan 9>, S<RISC OS>, VOS, VM/ESA)
-=item crypt PLAINTEXT,SALT
+=item crypt
May not be available if library or source was not provided when building
perl. (Win32)
Not implemented. (VOS)
-=item dbmclose HASH
+=item dbmclose
Not implemented. (VMS, S<Plan 9>, VOS)
-=item dbmopen HASH,DBNAME,MODE
+=item dbmopen
Not implemented. (VMS, S<Plan 9>, VOS)
-=item dump LABEL
+=item dump
Not useful. (S<Mac OS>, S<RISC OS>)
@@ -1606,7 +1637,7 @@ Not implemented. (Win32)
Invokes VMS debugger. (VMS)
-=item exec LIST
+=item exec
Not implemented. (S<Mac OS>)
@@ -1615,8 +1646,6 @@ Implemented via Spawn. (VM/ESA)
Does not automatically flush output handles on some platforms.
(SunOS, Solaris, HP-UX)
-=item exit EXPR
-
=item exit
Emulates UNIX exit() (which considers C<exit 1> to indicate an error) by
@@ -1626,11 +1655,11 @@ function, C<exit 0> is also mapped to an exit status of SS$_NORMAL
(C<1>); this mapping cannot be overridden. Any other argument to exit()
is used directly as Perl's exit status. (VMS)
-=item fcntl FILEHANDLE,FUNCTION,SCALAR
+=item fcntl
Not implemented. (Win32, VMS)
-=item flock FILEHANDLE,OPERATION
+=item flock
Not implemented (S<Mac OS>, VMS, S<RISC OS>, VOS).
@@ -1649,7 +1678,7 @@ Does not automatically flush output handles on some platforms.
Not implemented. (S<Mac OS>, S<RISC OS>)
-=item getpgrp PID
+=item getpgrp
Not implemented. (S<Mac OS>, Win32, VMS, S<RISC OS>, VOS)
@@ -1657,43 +1686,43 @@ Not implemented. (S<Mac OS>, Win32, VMS, S<RISC OS>, VOS)
Not implemented. (S<Mac OS>, Win32, S<RISC OS>)
-=item getpriority WHICH,WHO
+=item getpriority
Not implemented. (S<Mac OS>, Win32, VMS, S<RISC OS>, VOS, VM/ESA)
-=item getpwnam NAME
+=item getpwnam
Not implemented. (S<Mac OS>, Win32)
Not useful. (S<RISC OS>)
-=item getgrnam NAME
+=item getgrnam
Not implemented. (S<Mac OS>, Win32, VMS, S<RISC OS>)
-=item getnetbyname NAME
+=item getnetbyname
Not implemented. (S<Mac OS>, Win32, S<Plan 9>)
-=item getpwuid UID
+=item getpwuid
Not implemented. (S<Mac OS>, Win32)
Not useful. (S<RISC OS>)
-=item getgrgid GID
+=item getgrgid
Not implemented. (S<Mac OS>, Win32, VMS, S<RISC OS>)
-=item getnetbyaddr ADDR,ADDRTYPE
+=item getnetbyaddr
Not implemented. (S<Mac OS>, Win32, S<Plan 9>)
-=item getprotobynumber NUMBER
+=item getprotobynumber
Not implemented. (S<Mac OS>)
-=item getservbyport PORT,PROTO
+=item getservbyport
Not implemented. (S<Mac OS>)
@@ -1726,19 +1755,19 @@ Not implemented. (S<Mac OS>, Win32, S<Plan 9>)
Not implemented. (Win32, S<Plan 9>)
-=item sethostent STAYOPEN
+=item sethostent
Not implemented. (S<Mac OS>, Win32, S<Plan 9>, S<RISC OS>)
-=item setnetent STAYOPEN
+=item setnetent
Not implemented. (S<Mac OS>, Win32, S<Plan 9>, S<RISC OS>)
-=item setprotoent STAYOPEN
+=item setprotoent
Not implemented. (S<Mac OS>, Win32, S<Plan 9>, S<RISC OS>)
-=item setservent STAYOPEN
+=item setservent
Not implemented. (S<Plan 9>, Win32, S<RISC OS>)
@@ -1770,13 +1799,15 @@ Not implemented. (S<Plan 9>, Win32)
Not implemented. (S<Plan 9>)
-=item glob EXPR
-
=item glob
This operator is implemented via the File::Glob extension on most
platforms. See L<File::Glob> for portability information.
+=item gmtime
+
+Same portability caveats as L<localtime>.
+
=item ioctl FILEHANDLE,FUNCTION,SCALAR
Not implemented. (VMS)
@@ -1786,7 +1817,7 @@ in the Winsock API does. (Win32)
Available only for socket handles. (S<RISC OS>)
-=item kill SIGNAL, LIST
+=item kill
C<kill(0, LIST)> is implemented for the sake of taint checking;
use with other signals is unimplemented. (S<Mac OS>)
@@ -1800,7 +1831,7 @@ and makes it exit immediately with exit status $sig. As in Unix, if
$sig is 0 and the specified process exists, it returns true without
actually terminating it. (Win32)
-=item link OLDFILE,NEWFILE
+=item link
Not implemented. (S<Mac OS>, MPE/iX, VMS, S<RISC OS>)
@@ -1810,9 +1841,12 @@ Link count not updated because hard links are not quite that hard
Hard links are implemented on Win32 (Windows NT and Windows 2000)
under NTFS only.
-=item lstat FILEHANDLE
+=item localtime
-=item lstat EXPR
+Because Perl currently relies on the native standard C localtime()
+function, it is only safe to use times between 0 and (2**31)-1. Times
+outside this range may result in unexpected behavior depending on your
+operating system's implementation of localtime().
=item lstat
@@ -1820,19 +1854,17 @@ Not implemented. (VMS, S<RISC OS>)
Return values (especially for device and inode) may be bogus. (Win32)
-=item msgctl ID,CMD,ARG
+=item msgctl
-=item msgget KEY,FLAGS
+=item msgget
-=item msgsnd ID,MSG,FLAGS
+=item msgsnd
-=item msgrcv ID,VAR,SIZE,TYPE,FLAGS
+=item msgrcv
Not implemented. (S<Mac OS>, Win32, VMS, S<Plan 9>, S<RISC OS>, VOS)
-=item open FILEHANDLE,EXPR
-
-=item open FILEHANDLE
+=item open
The C<|> variants are supported only if ToolServer is installed.
(S<Mac OS>)
@@ -1842,17 +1874,19 @@ open to C<|-> and C<-|> are unsupported. (S<Mac OS>, Win32, S<RISC OS>)
Opening a process does not automatically flush output handles on some
platforms. (SunOS, Solaris, HP-UX)
-=item pipe READHANDLE,WRITEHANDLE
+=item pipe
Very limited functionality. (MiNT)
-=item readlink EXPR
-
=item readlink
Not implemented. (Win32, VMS, S<RISC OS>)
-=item select RBITS,WBITS,EBITS,TIMEOUT
+=item rename
+
+Can't move directories between directories on different logical volumes. (Win32)
+
+=item select
Only implemented on sockets. (Win32, VMS)
@@ -1860,11 +1894,11 @@ Only reliable on sockets. (S<RISC OS>)
Note that the C<select FILEHANDLE> form is generally portable.
-=item semctl ID,SEMNUM,CMD,ARG
+=item semctl
-=item semget KEY,NSEMS,FLAGS
+=item semget
-=item semop KEY,OPSTRING
+=item semop
Not implemented. (S<Mac OS>, Win32, VMS, S<RISC OS>, VOS)
@@ -1872,11 +1906,11 @@ Not implemented. (S<Mac OS>, Win32, VMS, S<RISC OS>, VOS)
Not implemented. (S<Mac OS>, MPE/iX, VMS, Win32, S<RISC OS>)
-=item setpgrp PID,PGRP
+=item setpgrp
Not implemented. (S<Mac OS>, Win32, VMS, S<RISC OS>, VOS)
-=item setpriority WHICH,WHO,PRIORITY
+=item setpriority
Not implemented. (S<Mac OS>, Win32, VMS, S<RISC OS>, VOS)
@@ -1884,33 +1918,29 @@ Not implemented. (S<Mac OS>, Win32, VMS, S<RISC OS>, VOS)
Not implemented. (S<Mac OS>, MPE/iX, Win32, S<RISC OS>)
-=item setsockopt SOCKET,LEVEL,OPTNAME,OPTVAL
+=item setsockopt
Not implemented. (S<Plan 9>)
-=item shmctl ID,CMD,ARG
+=item shmctl
-=item shmget KEY,SIZE,FLAGS
+=item shmget
-=item shmread ID,VAR,POS,SIZE
+=item shmread
-=item shmwrite ID,STRING,POS,SIZE
+=item shmwrite
Not implemented. (S<Mac OS>, Win32, VMS, S<RISC OS>, VOS)
-=item sockatmark SOCKET
+=item sockatmark
A relatively recent addition to socket functions, may not
be implemented even in UNIX platforms.
-=item socketpair SOCKET1,SOCKET2,DOMAIN,TYPE,PROTOCOL
+=item socketpair
Not implemented. (Win32, VMS, S<RISC OS>, VOS, VM/ESA)
-=item stat FILEHANDLE
-
-=item stat EXPR
-
=item stat
Platforms that do not have rdev, blksize, or blocks will return these
@@ -1937,22 +1967,22 @@ meaningful and will differ between stat calls on the same file. (os2)
some versions of cygwin when doing a stat("foo") and if not finding it
may then attempt to stat("foo.exe") (Cygwin)
-=item symlink OLDFILE,NEWFILE
+=item symlink
Not implemented. (Win32, VMS, S<RISC OS>)
-=item syscall LIST
+=item syscall
Not implemented. (S<Mac OS>, Win32, VMS, S<RISC OS>, VOS, VM/ESA)
-=item sysopen FILEHANDLE,FILENAME,MODE,PERMS
+=item sysopen
The traditional "0", "1", and "2" MODEs are implemented with different
numeric values on some systems. The flags exported by C<Fcntl>
(O_RDONLY, O_WRONLY, O_RDWR) should work everywhere though. (S<Mac
OS>, OS/390, VM/ESA)
-=item system LIST
+=item system
In general, do not assume the UNIX/POSIX semantics that you can shift
C<$?> right by eight to get the exit value, or that C<$? & 127>
@@ -2009,9 +2039,7 @@ library. (Win32)
Not useful. (S<RISC OS>)
-=item truncate FILEHANDLE,LENGTH
-
-=item truncate EXPR,LENGTH
+=item truncate
Not implemented. (Older versions of VMS)
@@ -2022,8 +2050,6 @@ mode (i.e., use C<<< open(FH, '>>filename') >>>
or C<sysopen(FH,...,O_APPEND|O_RDWR)>. If a filename is supplied, it
should not be held open elsewhere. (Win32)
-=item umask EXPR
-
=item umask
Returns undef where unavailable, as of version 5.005.
@@ -2031,7 +2057,7 @@ Returns undef where unavailable, as of version 5.005.
C<umask> works but the correct permissions are set only when the file
is finally closed. (AmigaOS)
-=item utime LIST
+=item utime
Only the modification time is updated. (S<BeOS>, S<Mac OS>, VMS, S<RISC OS>)
@@ -2043,7 +2069,7 @@ two seconds. (Win32)
=item wait
-=item waitpid PID,FLAGS
+=item waitpid
Not implemented. (S<Mac OS>, VOS)
@@ -2054,94 +2080,6 @@ Not useful. (S<RISC OS>)
=back
-=head1 CHANGES
-
-=over 4
-
-=item v1.48, 02 February 2001
-
-Various updates from perl5-porters over the past year, supported
-platforms update from Jarkko Hietaniemi.
-
-=item v1.47, 22 March 2000
-
-Various cleanups from Tom Christiansen, including migration of
-long platform listings from L<perl>.
-
-=item v1.46, 12 February 2000
-
-Updates for VOS and MPE/iX. (Peter Prymmer) Other small changes.
-
-=item v1.45, 20 December 1999
-
-Small changes from 5.005_63 distribution, more changes to EBCDIC info.
-
-=item v1.44, 19 July 1999
-
-A bunch of updates from Peter Prymmer for C<$^O> values,
-endianness, File::Spec, VMS, BS2000, OS/400.
-
-=item v1.43, 24 May 1999
-
-Added a lot of cleaning up from Tom Christiansen.
-
-=item v1.42, 22 May 1999
-
-Added notes about tests, sprintf/printf, and epoch offsets.
-
-=item v1.41, 19 May 1999
-
-Lots more little changes to formatting and content.
-
-Added a bunch of C<$^O> and related values
-for various platforms; fixed mail and web addresses, and added
-and changed miscellaneous notes. (Peter Prymmer)
-
-=item v1.40, 11 April 1999
-
-Miscellaneous changes.
-
-=item v1.39, 11 February 1999
-
-Changes from Jarkko and EMX URL fixes Michael Schwern. Additional
-note about newlines added.
-
-=item v1.38, 31 December 1998
-
-More changes from Jarkko.
-
-=item v1.37, 19 December 1998
-
-More minor changes. Merge two separate version 1.35 documents.
-
-=item v1.36, 9 September 1998
-
-Updated for Stratus VOS. Also known as version 1.35.
-
-=item v1.35, 13 August 1998
-
-Integrate more minor changes, plus addition of new sections under
-L<"ISSUES">: L<"Numbers endianness and Width">,
-L<"Character sets and character encoding">,
-L<"Internationalisation">.
-
-=item v1.33, 06 August 1998
-
-Integrate more minor changes.
-
-=item v1.32, 05 August 1998
-
-Integrate more minor changes.
-
-=item v1.30, 03 August 1998
-
-Major update for RISC OS, other minor changes.
-
-=item v1.23, 10 July 1998
-
-First public release with perl5.005.
-
-=back
=head1 Supported Platforms
diff --git a/gnu/usr.bin/perl/pod/perlreftut.pod b/gnu/usr.bin/perl/pod/perlreftut.pod
index bbcc179cca8..82ad80e3a6a 100644
--- a/gnu/usr.bin/perl/pod/perlreftut.pod
+++ b/gnu/usr.bin/perl/pod/perlreftut.pod
@@ -1,4 +1,3 @@
-
=head1 NAME
perlreftut - Mark's very short tutorial about references
@@ -21,7 +20,7 @@ Fortunately, you only need to know 10% of what's in the main page to get
One problem that came up all the time in Perl 4 was how to represent a
hash whose values were lists. Perl 4 had hashes, of course, but the
-values had to be scalars; they couldn't be lists.
+values had to be scalars; they couldn't be lists.
Why would you want a hash of lists? Let's take a simple example: You
have a file of city and country names, like this:
@@ -102,6 +101,7 @@ reference to that variable.
$aref = \@array; # $aref now holds a reference to @array
$href = \%hash; # $href now holds a reference to %hash
+ $sref = \$scalar; # $sref now holds a reference to $scalar
Once the reference is stored in a variable like $aref or $href, you
can copy it or store it just the same as any other scalar value:
@@ -123,10 +123,10 @@ C<[ ITEMS ]> makes a new, anonymous array, and returns a reference to
that array. C<{ ITEMS }> makes a new, anonymous hash, and returns a
reference to that hash.
- $aref = [ 1, "foo", undef, 13 ];
+ $aref = [ 1, "foo", undef, 13 ];
# $aref now holds a reference to an array
- $href = { APR => 4, AUG => 8 };
+ $href = { APR => 4, AUG => 8 };
# $href now holds a reference to a hash
@@ -215,7 +215,7 @@ And then replace the hash name with the reference:
=head3 B<Use Rule 2>
-B<Use Rule 1> is all you really need, because it tells you how to to
+B<Use Rule 1> is all you really need, because it tells you how to do
absolutely everything you ever need to do with references. But the
most common thing to do with an array or a hash is to extract a single
element, and the B<Use Rule 1> notation is cumbersome. So there is an
@@ -268,7 +268,7 @@ two-dimensional array; you can write C<< $a[ROW]->[COLUMN] >> to get
or set the element in any row and any column of the array.
The notation still looks a little cumbersome, so there's one more
-abbreviation:
+abbreviation:
=head2 Arrow Rule
@@ -315,7 +315,7 @@ structure will look like this:
%table
- +-------+---+
+ +-------+---+
| | | +-----------+--------+
|Germany| *---->| Frankfurt | Berlin |
| | | +-----------+--------+
@@ -382,7 +382,7 @@ C<{$table{$country}}>. The C<push> adds a city name to the end of the
referred-to array.
There's one fine point I skipped. Line 5 is unnecessary, and we can
-get rid of it.
+get rid of it.
2 while (<>) {
3 chomp;
@@ -437,11 +437,11 @@ the habit of always including the curly brackets.
This doesn't copy the underlying array:
- $aref2 = $aref1;
+ $aref2 = $aref1;
-You get two references to the same array. If you modify
+You get two references to the same array. If you modify
C<< $aref1->[23] >> and then look at
-C<< $aref2->[23] >> you'll see the change.
+C<< $aref2->[23] >> you'll see the change.
To copy the array, use
@@ -455,14 +455,14 @@ Similarly, to copy an anonymous hash, you can use
$href2 = {%{$href1}};
-=item *
+=item *
To see if a variable contains a reference, use the C<ref> function. It
returns true if its argument is a reference. Actually it's a little
better than that: It returns C<HASH> for hash references and C<ARRAY>
for array references.
-=item *
+=item *
If you try to use a reference like a string, you get strings like
@@ -504,7 +504,7 @@ to do with references.
Author: Mark Jason Dominus, Plover Systems (C<mjd-perl-ref+@plover.com>)
This article originally appeared in I<The Perl Journal>
-( http://www.tpj.com/ ) volume 3, #2. Reprinted with permission.
+( http://www.tpj.com/ ) volume 3, #2. Reprinted with permission.
The original title was I<Understand References Today>.
diff --git a/gnu/usr.bin/perl/pod/perlreref.pod b/gnu/usr.bin/perl/pod/perlreref.pod
index 700814140d7..8a793c89b69 100644
--- a/gnu/usr.bin/perl/pod/perlreref.pod
+++ b/gnu/usr.bin/perl/pod/perlreref.pod
@@ -78,7 +78,7 @@ These work as in normal strings.
\n Newline
\r Carriage return
\t Tab
- \038 Any octal ASCII value
+ \037 Any octal ASCII value
\x7f Any hexadecimal ASCII value
\x{263a} A wide hexadecimal value
\cx Control-x
diff --git a/gnu/usr.bin/perl/pod/perltodo.pod b/gnu/usr.bin/perl/pod/perltodo.pod
index 219e92ba028..a8a6d797cc6 100644
--- a/gnu/usr.bin/perl/pod/perltodo.pod
+++ b/gnu/usr.bin/perl/pod/perltodo.pod
@@ -4,71 +4,457 @@ perltodo - Perl TO-DO List
=head1 DESCRIPTION
-This is a list of wishes for Perl. Send updates to
-I<perl5-porters@perl.org>. If you want to work on any of these
-projects, be sure to check the perl5-porters archives for past ideas,
-flames, and propaganda. This will save you time and also prevent you
-from implementing something that Larry has already vetoed. One set
-of archives may be found at:
+This is a list of wishes for Perl. The tasks we think are smaller or easier
+are listed first. Anyone is welcome to work on any of these, but it's a good
+idea to first contact I<perl5-porters@perl.org> to avoid duplication of
+effort. By all means contact a pumpking privately first if you prefer.
+
+Whilst patches to make the list shorter are most welcome, ideas to add to
+the list are also encouraged. Check the perl5-porters archives for past
+ideas, and any discussion about them. One set of archives may be found at:
http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/
-=head1 assertions
+What can we offer you in return? Fame, fortune, and everlasting glory? Maybe
+not, but if your patch is incorporated, then we'll add your name to the
+F<AUTHORS> file, which ships in the official distribution. How many other
+programming languages offer you 1 line of immortality?
-Clean up and finish support for assertions. See L<assertions>.
+=head1 The roadmap to 5.10
-=head1 iCOW
+The roadmap to 5.10 envisages feature based releases, as various items in this
+TODO are completed.
-Sarathy and Arthur have a proposal for an improved Copy On Write which
-specifically will be able to COW new ithreads. If this can be implemented
-it would be a good thing.
+=head2 Needed for a 5.9.4 release
-=head1 (?{...}) closures in regexps
+=over
-Fix (or rewrite) the implementation of the C</(?{...})/> closures.
+=item *
-=head1 A re-entrant regexp engine
+Review assertions. Review syntax to combine assertions. Assertions could take
+advantage of the lexical pragmas work. L</What hooks would assertions need?>
-This will allow the use of a regex from inside (?{ }), (??{ }) and
-(?(?{ })|) constructs.
+=back
-=head1 pragmata
+=head2 Needed for a 5.9.5 release
-=head2 lexical pragmas
+=over
-Reimplement the mechanism of lexical pragmas to be more extensible. Fix
-current pragmas that don't work well (or at all) with lexical scopes or in
-run-time eval(STRING) (C<sort>, C<re>, C<encoding> for example). MJD has a
-preliminary patch that implements this.
+=item *
+Implement L</_ prototype character>
-=head2 use less 'memory'
+=item *
+Implement L</state variables>
-Investigate trade offs to switch out perl's choices on memory usage.
-Particularly perl should be able to give memory back.
+=back
-=head1 prototypes and functions
+=head2 Needed for a 5.9.6 release
-=head2 _ prototype character
+Stabilisation. If all goes well, this will be the equivalent of a 5.10-beta.
-Study the possibility of adding a new prototype character, C<_>, meaning
-"this argument defaults to $_".
+=head1 Tasks that only need Perl knowledge
+
+=head2 common test code for timed bail out
+
+Write portable self destruct code for tests to stop them burning CPU in
+infinite loops. This needs to avoid using alarm, as some of the tests are
+testing alarm/sleep or timers.
+
+=head2 POD -> HTML conversion in the core still sucks
+
+Which is crazy given just how simple POD purports to be, and how simple HTML
+can be. It's not actually I<as> simple as it sounds, particularly with the
+flexibility POD allows for C<=item>, but it would be good to improve the
+visual appeal of the HTML generated, and to avoid it having any validation
+errors. See also L</make HTML install work>, as the layout of installation tree
+is needed to improve the cross-linking.
+
+The addition of C<Pod::Simple> and its related modules may make this task
+easier to complete.
+
+=head2 Parallel testing
+
+The core regression test suite is getting ever more comprehensive, which has
+the side effect that it takes longer to run. This isn't so good. Investigate
+whether it would be feasible to give the harness script the B<option> of
+running sets of tests in parallel. This would be useful for tests in
+F<t/op/*.t> and F<t/uni/*.t> and maybe some sets of tests in F<lib/>.
+
+Questions to answer
+
+=over 4
+
+=item 1
+
+How does screen layout work when you're running more than one test?
+
+=item 2
+
+How does the caller of test specify how many tests to run in parallel?
+
+=item 3
+
+How do setup/teardown tests identify themselves?
+
+=back
+
+Pugs already does parallel testing - can their approach be re-used?
+
+=head2 Make Schwern poorer
+
+We should have for everything. When all the core's modules are tested,
+Schwern has promised to donate to $500 to TPF. We may need volunteers to
+hold him upside down and shake vigorously in order to actually extract the
+cash.
+
+See F<t/lib/1_compile.t> for the 3 remaining modules that need tests.
+
+=head2 Improve the coverage of the core tests
+
+Use Devel::Cover to ascertain the core's test coverage, then add tests that
+are currently missing.
+
+=head2 test B
+
+A full test suite for the B module would be nice.
+
+=head2 A decent benchmark
+
+C<perlbench> seems impervious to any recent changes made to the perl core. It
+would be useful to have a reasonable general benchmarking suite that roughly
+represented what current perl programs do, and measurably reported whether
+tweaks to the core improve, degrade or don't really affect performance, to
+guide people attempting to optimise the guts of perl. Gisle would welcome
+new tests for perlbench.
+
+=head2 fix tainting bugs
+
+Fix the bugs revealed by running the test suite with the C<-t> switch (via
+C<make test.taintwarn>).
+
+=head2 Dual life everything
+
+As part of the "dists" plan, anything that doesn't belong in the smallest perl
+distribution needs to be dual lifed. Anything else can be too. Figure out what
+changes would be needed to package that module and its tests up for CPAN, and
+do so. Test it with older perl releases, and fix the problems you find.
+
+=head2 Improving C<threads::shared>
+
+Investigate whether C<threads::shared> could share aggregates properly with
+only Perl level changes to shared.pm
+
+=head2 POSIX memory footprint
+
+Ilya observed that use POSIX; eats memory like there's no tomorrow, and at
+various times worked to cut it down. There is probably still fat to cut out -
+for example POSIX passes Exporter some very memory hungry data structures.
+
+
+
+
+
+
+
+=head1 Tasks that need a little sysadmin-type knowledge
+
+Or if you prefer, tasks that you would learn from, and broaden your skills
+base...
+
+=head2 Relocatable perl
+
+The C level patches needed to create a relocatable perl binary are done, as
+is the work on F<Config.pm>. All that's left to do is the C<Configure> tweaking
+to let people specify how they want to do the install.
+
+=head2 make HTML install work
+
+There is an C<installhtml> target in the Makefile. It's marked as
+"experimental". It would be good to get this tested, make it work reliably, and
+remove the "experimental" tag. This would include
+
+=over 4
+
+=item 1
+
+Checking that cross linking between various parts of the documentation works.
+In particular that links work between the modules (files with POD in F<lib/>)
+and the core documentation (files in F<pod/>)
+
+=item 2
+
+Work out how to split C<perlfunc> into chunks, preferably one per function
+group, preferably with general case code that could be used elsewhere.
+Challenges here are correctly identifying the groups of functions that go
+together, and making the right named external cross-links point to the right
+page. Things to be aware of are C<-X>, groups such as C<getpwnam> to
+C<endservent>, two or more C<=items> giving the different parameter lists, such
+as
+
+ =item substr EXPR,OFFSET,LENGTH,REPLACEMENT
+
+ =item substr EXPR,OFFSET,LENGTH
+
+ =item substr EXPR,OFFSET
+
+and different parameter lists having different meanings. (eg C<select>)
+
+=back
+
+=head2 compressed man pages
+
+Be able to install them. This would probably need a configure test to see how
+the system does compressed man pages (same directory/different directory?
+same filename/different filename), as well as tweaking the F<installman> script
+to compress as necessary.
+
+=head2 Add a code coverage target to the Makefile
+
+Make it easy for anyone to run Devel::Cover on the core's tests. The steps
+to do this manually are roughly
+
+=over 4
+
+=item *
+
+do a normal C<Configure>, but include Devel::Cover as a module to install
+(see F<INSTALL> for how to do this)
+
+=item *
+
+ make perl
+
+=item *
+
+ cd t; HARNESS_PERL_SWITCHES=-MDevel::Cover ./perl -I../lib harness
+
+=item *
+
+Process the resulting Devel::Cover database
+
+=back
+
+This just give you the coverage of the F<.pm>s. To also get the C level
+coverage you need to
+
+=over 4
+
+=item *
+
+Additionally tell C<Configure> to use the appropriate C compiler flags for
+C<gcov>
+
+=item *
+
+ make perl.gcov
+
+(instead of C<make perl>)
+
+=item *
+
+After running the tests run C<gcov> to generate all the F<.gcov> files.
+(Including down in the subdirectories of F<ext/>
+
+=item *
+
+(From the top level perl directory) run C<gcov2perl> on all the C<.gcov> files
+to get their stats into the cover_db directory.
+
+=item *
+
+Then process the Devel::Cover database
+
+=back
+
+It would be good to add a single switch to C<Configure> to specify that you
+wanted to perform perl level coverage, and another to specify C level
+coverage, and have C<Configure> and the F<Makefile> do all the right things
+automatically.
+
+=head2 Make Config.pm cope with differences between build and installed perl
+
+Quite often vendors ship a perl binary compiled with their (pay-for)
+compilers. People install a free compiler, such as gcc. To work out how to
+build extensions, Perl interrogates C<%Config>, so in this situation
+C<%Config> describes compilers that aren't there, and extension building
+fails. This forces people into choosing between re-compiling perl themselves
+using the compiler they have, or only using modules that the vendor ships.
+
+It would be good to find a way teach C<Config.pm> about the installation setup,
+possibly involving probing at install time or later, so that the C<%Config> in
+a binary distribution better describes the installed machine, when the
+installed machine differs from the build machine in some significant way.
+
+=head2 make parallel builds work
+
+Currently parallel builds (such as C<make -j3>) don't work reliably. We believe
+that this is due to incomplete dependency specification in the F<Makefile>.
+It would be good if someone were able to track down the causes of these
+problems, so that parallel builds worked properly.
+
+=head2 linker specification files
+
+Some platforms mandate that you provide a list of a shared library's external
+symbols to the linker, so the core already has the infrastructure in place to
+do this for generating shared perl libraries. My understanding is that the
+GNU toolchain can accept an optional linker specification file, and restrict
+visibility just to symbols declared in that file. It would be good to extend
+F<makedef.pl> to support this format, and to provide a means within
+C<Configure> to enable it. This would allow Unix users to test that the
+export list is correct, and to build a perl that does not pollute the global
+namespace with private symbols.
+
+
+
+
+=head1 Tasks that need a little C knowledge
+
+These tasks would need a little C knowledge, but don't need any specific
+background or experience with XS, or how the Perl interpreter works
+
+=head2 Make it clear from -v if this is the exact official release
+
+Currently perl from C<p4>/C<rsync> ships with a F<patchlevel.h> file that
+usually defines one local patch, of the form "MAINT12345" or "RC1". The output
+of perl -v doesn't report that a perl isn't an official release, and this
+information can get lost in bugs reports. Because of this, the minor version
+isn't bumped up until RC time, to minimise the possibility of versions of perl
+escaping that believe themselves to be newer than they actually are.
+
+It would be useful to find an elegant way to have the "this is an interim
+maintenance release" or "this is a release candidate" in the terse -v output,
+and have it so that it's easy for the pumpking to remove this just as the
+release tarball is rolled up. This way the version pulled out of rsync would
+always say "I'm a development release" and it would be safe to bump the
+reported minor version as soon as a release ships, which would aid perl
+developers.
+
+This task is really about thinking of an elegant way to arrange the C source
+such that it's trivial for the Pumpking to flag "this is an official release"
+when making a tarball, yet leave the default source saying "I'm not the
+official release".
+
+=head2 Tidy up global variables
+
+There's a note in F<intrpvar.h>
+
+ /* These two variables are needed to preserve 5.8.x bincompat because
+ we can't change function prototypes of two exported functions.
+ Probably should be taken out of blead soon, and relevant prototypes
+ changed. */
+
+So doing this, and removing any of the unused variables still present would
+be good.
+
+=head2 Ordering of "global" variables.
+
+F<thrdvar.h> and F<intrpvarh> define the "global" variables that need to be
+per-thread under ithreads, where the variables are actually elements in a
+structure. As C dictates, the variables must be laid out in order of
+declaration. There is a comment
+C</* Important ones in the first cache line (if alignment is done right) */>
+which implies that at some point in the past the ordering was carefully chosen
+(at least in part). However, it's clear that the ordering is less than perfect,
+as currently there are things such as 7 C<bool>s in a row, then something
+typically requiring 4 byte alignment, and then an odd C<bool> later on.
+(C<bool>s are typically defined as C<char>s). So it would be good for someone
+to review the ordering of the variables, to see how much alignment padding can
+be removed.
+
+=head2 bincompat functions
+
+There are lots of functions which are retained for binary compatibility.
+Clean these up. Move them to mathom.c, and don't compile for blead?
+
+=head2 am I hot or not?
+
+The idea of F<pp_hot.c> is that it contains the I<hot> ops, the ops that are
+most commonly used. The idea is that by grouping them, their object code will
+be adjacent in the executable, so they have a greater chance of already being
+in the CPU cache (or swapped in) due to being near another op already in use.
-=head2 inlining autoloaded constants
+Except that it's not clear if these really are the most commonly used ops. So
+anyone feeling like exercising their skill with coverage and profiling tools
+might want to determine what ops I<really> are the most commonly used. And in
+turn suggest evictions and promotions to achieve a better F<pp_hot.c>.
-Currently the optimiser can inline constants when expressed as subroutines
-with prototype ($) that return a constant. Likewise, many packages wrapping
-C libraries export lots of constants as subroutines which are AUTOLOADed on
-demand. However, these have no prototypes, so can't be seen as constants by
-the optimiser. Some way of cheaply (low syntax, low memory overhead) to the
-perl compiler that a name is a constant would be great, so that it knows to
-call the AUTOLOAD routine at compile time, and then inline the constant.
+=head2 emulate the per-thread memory pool on Unix
-=head2 Finish off lvalue functions
+For Windows, ithreads allocates memory for each thread from a separate pool,
+which it discards at thread exit. It also checks that memory is free()d to
+the correct pool. Neither check is done on Unix, so code developed there won't
+be subject to such strictures, so can harbour bugs that only show up when the
+code reaches Windows.
-The old perltodo notes "They don't work in the debugger, and they don't work for
-list or hash slices."
+It would be good to be able to optionally emulate the Window pool system on
+Unix, to let developers who only have access to Unix, or want to use
+Unix-specific debugging tools, check for these problems. To do this would
+involve figuring out how the C<PerlMem_*> macros wrap C<malloc()> access, and
+providing a layer that records/checks the identity of the thread making the
+call, and recording all the memory allocated by each thread via this API so
+that it can be summarily free()d at thread exit. One implementation idea
+would be to increase the size of allocation, and store the C<my_perl> pointer
+(to identify the thread) at the start, along with pointers to make a linked
+list of blocks for this thread. To avoid alignment problems it would be
+necessary to do something like
-=head1 Unicode and UTF8
+ union memory_header_padded {
+ struct memory_header {
+ void *thread_id; /* For my_perl */
+ void *next; /* Pointer to next block for this thread */
+ } data;
+ long double padding; /* whatever type has maximal alignment constraint */
+ };
+
+
+although C<long double> might not be the only type to add to the padding
+union.
+
+=head2 reduce duplication in sv_setsv_flags
+
+C<Perl_sv_setsv_flags> has a comment
+C</* There's a lot of redundancy below but we're going for speed here */>
+
+Whilst this was true 10 years ago, the growing disparity between RAM and CPU
+speeds mean that the trade offs have changed. In addition, the duplicate code
+adds to the maintenance burden. It would be good to see how much of the
+redundancy can be pruned, particular in the less common paths. (Profiling
+tools at the ready...). For example, why does the test for
+"Can't redefine active sort subroutine" need to occur in two places?
+
+
+
+
+=head1 Tasks that need a knowledge of XS
+
+These tasks would need C knowledge, and roughly the level of knowledge of
+the perl API that comes from writing modules that use XS to interface to
+C.
+
+=head2 IPv6
+
+Clean this up. Check everything in core works
+
+=head2 shrink C<GV>s, C<CV>s
+
+By removing unused elements and careful re-ordering, the structures for C<AV>s
+and C<HV>s have recently been shrunk considerably. It's probable that the same
+approach would find savings in C<GV>s and C<CV>s, if not all the other
+larger-than-C<PVMG> types.
+
+=head2 merge Perl_sv_2[inpu]v
+
+There's a lot of code shared between C<Perl_sv_2iv_flags>,
+C<Perl_sv_2uv_flags>, C<Perl_sv_2nv>, and C<Perl_sv_2pv_flags>. It would be
+interesting to see if some of it can be merged into common shared static
+functions. In particular, C<Perl_sv_2uv_flags> started out as a cut&paste
+from C<Perl_sv_2iv_flags> around 5.005_50 time, and it may be possible to
+replace both with a single function that returns a value or union which is
+split out by the macros in F<sv.h>
+
+=head2 UTF8 caching code
+
+The string position/offset cache is not optional. It should be.
=head2 Implicit Latin 1 => Unicode translation
@@ -79,9 +465,13 @@ the C locale by default, upgrading a string to UTF-8 may change the
meaning of its contents regarding character classes, case mapping, etc.
This should probably emit a warning (at least).
-=head2 UTF8 caching code
+This task is incremental - even a little bit of work on it will help.
-The string position/offset cache is not optional. It should be.
+=head2 autovivification
+
+Make all autovivification consistent w.r.t LVALUE/RVALUE and strict/no strict;
+
+This task is incremental - even a little bit of work on it will help.
=head2 Unicode in Filenames
@@ -110,196 +500,168 @@ L<perlrun>.)
Currently the %ENV entries are always byte strings.
-=head1 Regexps
-
-=head2 regexp optimiser optional
-
-The regexp optimiser is not optional. It should configurable to be, to allow
-its performance to be measured, and its bugs to be easily demonstrated.
-
-=head2 common suffices/prefices in regexps (trie optimization)
-
-Currently, the user has to optimize C<foo|far> and C<foo|goo> into
-C<f(?:oo|ar)> and C<[fg]oo> by hand; this could be done automatically.
-
-=head1 POD
-
-=head2 POD -> HTML conversion still sucks
-
-Which is crazy given just how simple POD purports to be, and how simple HTML
-can be.
-
-=head1 Misc medium sized projects
-
-=head2 UNITCHECK
+=head2 use less 'memory'
-Introduce a new special block, UNITCHECK, which is run at the end of a
-compilation unit (module, file, eval(STRING) block). This will correspond to
-the Perl 6 CHECK. Perl 5's CHECK cannot be changed or removed because the
-O.pm/B.pm backend framework depends on it.
+Investigate trade offs to switch out perl's choices on memory usage.
+Particularly perl should be able to give memory back.
-=head2 optional optimizer
+This task is incremental - even a little bit of work on it will help.
-Make the peephole optimizer optional.
+=head2 Re-implement C<:unique> in a way that is actually thread-safe
-=head2 You WANT *how* many
+The old implementation made bad assumptions on several levels. A good 90%
+solution might be just to make C<:unique> work to share the string buffer
+of SvPVs. That way large constant strings can be shared between ithreads,
+such as the configuration information in F<Config>.
-Currently contexts are void, scalar and list. split has a special mechanism in
-place to pass in the number of return values wanted. It would be useful to
-have a general mechanism for this, backwards compatible and little speed hit.
-This would allow proposals such as short circuiting sort to be implemented
-as a module on CPAN.
+=head2 Make tainting consistent
-=head2 lexical aliases
+Tainting would be easier to use if it didn't take documented shortcuts and
+allow taint to "leak" everywhere within an expression.
-Allow lexical aliases (maybe via the syntax C<my \$alias = \$foo>.
+=head2 readpipe(LIST)
-=head2 no 6
+system() accepts a LIST syntax (and a PROGRAM LIST syntax) to avoid
+running a shell. readpipe() (the function behind qx//) could be similarly
+extended.
-Make C<no 6> and C<no v6> work (opposite of C<use 5.005>, etc.).
-=head2 IPv6
-Clean this up. Check everything in core works
-=head2 entersub XS vs Perl
-At the moment pp_entersub is huge, and has code to deal with entering both
-perl and and XS subroutines. Subroutine implementations rarely change between
-perl and XS at run time, so investigate using 2 ops to enter subs (one for
-XS, one for perl) and swap between if a sub is redefined.
+=head1 Tasks that need a knowledge of the interpreter
-=head2 @INC source filter to Filter::Simple
+These tasks would need C knowledge, and knowledge of how the interpreter works,
+or a willingness to learn.
-The second return value from a sub in @INC can be a source filter. This isn't
-documented. It should be changed to use Filter::Simple, tested and documented.
-
-=head2 bincompat functions
+=head2 lexical pragmas
-There are lots of functions which are retained for binary compatibility.
-Clean these up. Move them to mathom.c, and don't compile for blead?
+Document the new support for lexical pragmas in 5.9.3 and how %^H works.
+Maybe C<re>, C<encoding>, maybe other pragmas could be made lexical.
-=head2 Use fchown/fchmod internally
+=head2 Attach/detach debugger from running program
-The old perltodo notes "This has been done in places, but needs a thorough
-code review. Also fchdir is available in some platforms."
+The old perltodo notes "With C<gdb>, you can attach the debugger to a running
+program if you pass the process ID. It would be good to do this with the Perl
+debugger on a running Perl program, although I'm not sure how it would be
+done." ssh and screen do this with named pipes in /tmp. Maybe we can too.
-=head1 Tests
+=head2 Constant folding
-=head2 Make Schwern poorer
+The peephole optimiser should trap errors during constant folding, and give
+up on the folding, rather than bailing out at compile time. It is quite
+possible that the unfoldable constant is in unreachable code, eg something
+akin to C<$a = 0/0 if 0;>
-Tests for everything, At which point Schwern coughs up $500 to TPF.
+=head2 LVALUE functions for lists
-=head2 test B
+The old perltodo notes that lvalue functions don't work for list or hash
+slices. This would be good to fix.
-A test suite for the B module would be nice.
+=head2 LVALUE functions in the debugger
-=head2 Improve tests for Config.pm
+The old perltodo notes that lvalue functions don't work in the debugger. This
+would be good to fix.
-Config.pm doesn't appear to be well tested.
+=head2 _ prototype character
-=head2 common test code for timed bailout
+Study the possibility of adding a new prototype character, C<_>, meaning
+"this argument defaults to $_".
-Write portable self destruct code for tests to stop them burning CPU in
-infinite loops. Needs to avoid using alarm, as some of the tests are testing
-alarm/sleep or timers.
+=head2 state variables
-=head1 Installation
+C<my $foo if 0;> is deprecated, and should be replaced with
+C<state $x = "initial value\n";> the syntax from Perl 6.
-=head2 compressed man pages
+=head2 @INC source filter to Filter::Simple
-Be able to install them
+The second return value from a sub in @INC can be a source filter. This isn't
+documented. It should be changed to use Filter::Simple, tested and documented.
-=head2 Make Config.pm cope with differences between build and installed perl
+=head2 regexp optimiser optional
-=head2 Relocatable perl
+The regexp optimiser is not optional. It should configurable to be, to allow
+its performance to be measured, and its bugs to be easily demonstrated.
-Make it possible to create a relocatable perl binary. Will need some collusion
-with Config.pm. We could use a syntax of ... for location of current binary?
+=head2 UNITCHECK
-=head2 make HTML install work
+Introduce a new special block, UNITCHECK, which is run at the end of a
+compilation unit (module, file, eval(STRING) block). This will correspond to
+the Perl 6 CHECK. Perl 5's CHECK cannot be changed or removed because the
+O.pm/B.pm backend framework depends on it.
-=head2 put patchlevel in -v
+=head2 optional optimizer
-Currently perl from p4/rsync ships with a patchlevel.h file that usually
-defines one local patch, of the form "MAINT12345" or "RC1". The output of
-perl -v doesn't report that a perl isn't an official release, and this
-information can get lost in bugs reports. Because of this, the minor version
-isn't bumped up until RC time, to minimise the possibility of versions of perl
-escaping that believe themselves to be newer than they actually are.
+Make the peephole optimizer optional. Currently it performs two tasks as
+it walks the optree - genuine peephole optimisations, and necessary fixups of
+ops. It would be good to find an efficient way to switch out the
+optimisations whilst keeping the fixups.
-It would be useful to find an elegant way to have the "this is an interim
-maintenance release" or "this is a release candidate" in the terse -v output,
-and have it so that it's easy for the pumpking to remove this just as the
-release tarball is rolled up. This way the version pulled out of rsync would
-always say "I'm a development release" and it would be safe to bump the
-reported minor version as soon as a release ships, which would aid perl
-developers.
+=head2 You WANT *how* many
-=head1 Incremental things
+Currently contexts are void, scalar and list. split has a special mechanism in
+place to pass in the number of return values wanted. It would be useful to
+have a general mechanism for this, backwards compatible and little speed hit.
+This would allow proposals such as short circuiting sort to be implemented
+as a module on CPAN.
-Some tasks that don't need to get done in one big hit.
+=head2 lexical aliases
-=head2 autovivification
+Allow lexical aliases (maybe via the syntax C<my \$alias = \$foo>.
-Make all autovivification consistent w.r.t LVALUE/RVALUE and strict/no strict;
+=head2 entersub XS vs Perl
-=head2 fix tainting bugs
+At the moment pp_entersub is huge, and has code to deal with entering both
+perl and XS subroutines. Subroutine implementations rarely change between
+perl and XS at run time, so investigate using 2 ops to enter subs (one for
+XS, one for perl) and swap between if a sub is redefined.
-Fix the bugs revealed by running the test suite with the C<-t> switch (via
-C<make test.taintwarn>).
+=head2 Self ties
-=head2 Make tainting consistent
+self ties are currently illegal because they caused too many segfaults. Maybe
+the causes of these could be tracked down and self-ties on all types re-
+instated.
-Tainting would be easier to use if it didn't take documented shortcuts and allow
-taint to "leak" everywhere within an expression.
+=head2 Optimize away @_
-=head2 Dual life everything
+The old perltodo notes "Look at the "reification" code in C<av.c>".
-As part of the "dists" plan, anything that doesn't belong in the smallest perl
-distribution needs to be dual lifed. Anything else can be too.
+=head2 What hooks would assertions need?
-=head1 Vague things
+Assertions are in the core, and work. However, assertions needed to be added
+as a core patch, rather than an XS module in ext, or a CPAN module, because
+the core has no hooks in the necessary places. It would be useful to
+investigate what hooks would need to be added to make it possible to provide
+the full assertion support from a CPAN module, so that we aren't constraining
+the imagination of future CPAN authors.
-Some more nebulous ideas
-=head2 threads
-Make threads more robust.
-=head2 POSIX memory footprint
-Ilya observed that use POSIX; eats memory like there's no tomorrow, and at
-various times worked to cut it down. There is probably still fat to cut out -
-for example POSIX passes Exporter some very memory hungry data structures.
+=head1 Big projects
-=head2 Optimize away @_
+Tasks that will get your name mentioned in the description of the "Highlights
+of 5.10"
-The old perltodo notes "Look at the "reification" code in C<av.c>".
+=head2 make ithreads more robust
-=head2 switch ops
+Generally make ithreads more robust. See also L</iCOW>
-The old perltodo notes "Although we have C<Switch.pm> in core, Larry points to
-the dormant C<nswitch> and C<cswitch> ops in F<pp.c>; using these opcodes would
-be much faster."
+This task is incremental - even a little bit of work on it will help, and
+will be greatly appreciated.
-=head2 Attach/detach debugger from running program
+=head2 iCOW
-The old perltodo notes "With C<gdb>, you can attach the debugger to a running
-program if you pass the process ID. It would be good to do this with the Perl
-debugger on a running Perl program, although I'm not sure how it would be done."
-ssh and screen do this with named pipes in tmp. Maybe we can too.
+Sarathy and Arthur have a proposal for an improved Copy On Write which
+specifically will be able to COW new ithreads. If this can be implemented
+it would be a good thing.
-=head2 A decent benchmark
+=head2 (?{...}) closures in regexps
-perlbench seems impervious to any recent changes made to the perl core. It would
-be useful to have a reasonable general benchmarking suite that roughly
-represented what current perl programs do, and measurably reported whether
-tweaks to the core improve, degrade or don't really affect performance, to
-guide people attempting to optimise the guts of perl.
+Fix (or rewrite) the implementation of the C</(?{...})/> closures.
-=head2 readpipe(LIST)
+=head2 A re-entrant regexp engine
-system() accepts a LIST syntax (and a PROGRAM LIST syntax) to avoid
-running a shell. readpipe() (the function behind qx//) could be similarly
-extended.
+This will allow the use of a regex from inside (?{ }), (??{ }) and
+(?(?{ })|) constructs.
diff --git a/gnu/usr.bin/perl/pod/perltooc.pod b/gnu/usr.bin/perl/pod/perltooc.pod
index 6737105011e..06f697cdef1 100644
--- a/gnu/usr.bin/perl/pod/perltooc.pod
+++ b/gnu/usr.bin/perl/pod/perltooc.pod
@@ -1089,7 +1089,10 @@ for a significant performance improvement:
if (my $coderef = $self->can($parent . "::CData1")) {
$self->$coderef($newvalue);
}
- }
+ }
+
+If you override C<UNIVERSAL::can> in your own classes, be sure to return the
+reference appropriately.
=head2 Locking the Door and Throwing Away the Key
diff --git a/gnu/usr.bin/perl/pod/perlunicode.pod b/gnu/usr.bin/perl/pod/perlunicode.pod
index 23bee6eacf3..c0eb1a65bda 100644
--- a/gnu/usr.bin/perl/pod/perlunicode.pod
+++ b/gnu/usr.bin/perl/pod/perlunicode.pod
@@ -1150,7 +1150,7 @@ portable concept. Similarly for the qx and system: how well will the
=item *
-chmod, chmod, chown, chroot, exec, link, lstat, mkdir,
+chdir, chmod, chown, chroot, exec, link, lstat, mkdir,
rename, rmdir, stat, symlink, truncate, unlink, utime, -X
=item *
diff --git a/gnu/usr.bin/perl/pp.sym b/gnu/usr.bin/perl/pp.sym
index 909e95ee15d..f0d383a1867 100644
--- a/gnu/usr.bin/perl/pp.sym
+++ b/gnu/usr.bin/perl/pp.sym
@@ -1,3 +1,4 @@
+# -*- buffer-read-only: t -*-
#
# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
# This file is built by opcode.pl from its data. Any changes made here
@@ -390,3 +391,5 @@ Perl_pp_lock
Perl_pp_threadsv
Perl_pp_setstate
Perl_pp_method_named
+
+# ex: set ro:
diff --git a/gnu/usr.bin/perl/pp_pack.c b/gnu/usr.bin/perl/pp_pack.c
index 945f6b24ab5..d31d715136f 100644
--- a/gnu/usr.bin/perl/pp_pack.c
+++ b/gnu/usr.bin/perl/pp_pack.c
@@ -1,7 +1,7 @@
/* pp_pack.c
*
* Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
- * 2000, 2001, 2002, 2003, 2004, by Larry Wall and others
+ * 2000, 2001, 2002, 2003, 2004, 2005, 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.
@@ -31,6 +31,11 @@
#define PERL_IN_PP_PACK_C
#include "perl.h"
+#if PERL_VERSION >= 9
+#define PERL_PACK_CAN_BYTEORDER
+#define PERL_PACK_CAN_SHRIEKSIGN
+#endif
+
/*
* Offset for integer pack/unpack.
*
@@ -55,16 +60,12 @@
/* CROSSCOMPILE and MULTIARCH are going to affect pp_pack() and pp_unpack().
--jhi Feb 1999 */
-#if SHORTSIZE != SIZE16 || LONGSIZE != SIZE32
-# define PERL_NATINT_PACK
-#endif
-
-#if LONGSIZE > 4 && defined(_CRAY)
-# if BYTEORDER == 0x12345678
+#if U16SIZE > SIZE16 || U32SIZE > SIZE32
+# if BYTEORDER == 0x1234 || BYTEORDER == 0x12345678 /* little-endian */
# define OFF16(p) (char*)(p)
# define OFF32(p) (char*)(p)
# else
-# if BYTEORDER == 0x87654321
+# if BYTEORDER == 0x4321 || BYTEORDER == 0x87654321 /* big-endian */
# define OFF16(p) ((char*)(p) + (sizeof(U16) - SIZE16))
# define OFF32(p) ((char*)(p) + (sizeof(U32) - SIZE32))
# else
@@ -87,7 +88,7 @@
/* Avoid stack overflow due to pathological templates. 100 should be plenty. */
#define MAX_SUB_TEMPLATE_LEVEL 100
-/* flags */
+/* flags (note that type modifiers can also be used as flags!) */
#define FLAG_UNPACK_ONLY_ONE 0x10
#define FLAG_UNPACK_DO_UTF8 0x08
#define FLAG_SLASH 0x04
@@ -134,7 +135,362 @@ S_mul128(pTHX_ SV *sv, U8 m)
#define ISUUCHAR(ch) (memchr(PL_uuemap, (ch), sizeof(PL_uuemap)-1) || (ch) == ' ')
#endif
+/* type modifiers */
#define TYPE_IS_SHRIEKING 0x100
+#define TYPE_IS_BIG_ENDIAN 0x200
+#define TYPE_IS_LITTLE_ENDIAN 0x400
+#define TYPE_ENDIANNESS_MASK (TYPE_IS_BIG_ENDIAN|TYPE_IS_LITTLE_ENDIAN)
+#define TYPE_MODIFIERS(t) ((t) & ~0xFF)
+#define TYPE_NO_MODIFIERS(t) ((t) & 0xFF)
+
+#ifdef PERL_PACK_CAN_SHRIEKSIGN
+#define SHRIEKING_ALLOWED_TYPES "sSiIlLxXnNvV"
+#else
+#define SHRIEKING_ALLOWED_TYPES "sSiIlLxX"
+#endif
+
+#ifndef PERL_PACK_CAN_BYTEORDER
+/* Put "can't" first because it is shorter */
+# define TYPE_ENDIANNESS(t) 0
+# define TYPE_NO_ENDIANNESS(t) (t)
+
+# define ENDIANNESS_ALLOWED_TYPES ""
+
+# define DO_BO_UNPACK(var, type)
+# define DO_BO_PACK(var, type)
+# define DO_BO_UNPACK_PTR(var, type, pre_cast, post_cast)
+# define DO_BO_PACK_PTR(var, type, pre_cast, post_cast)
+# define DO_BO_UNPACK_N(var, type)
+# define DO_BO_PACK_N(var, type)
+# define DO_BO_UNPACK_P(var)
+# define DO_BO_PACK_P(var)
+# define DO_BO_UNPACK_PC(var)
+# define DO_BO_PACK_PC(var)
+
+#else
+
+# define TYPE_ENDIANNESS(t) ((t) & TYPE_ENDIANNESS_MASK)
+# define TYPE_NO_ENDIANNESS(t) ((t) & ~TYPE_ENDIANNESS_MASK)
+
+# define ENDIANNESS_ALLOWED_TYPES "sSiIlLqQjJfFdDpP("
+
+# define DO_BO_UNPACK(var, type) \
+ STMT_START { \
+ switch (TYPE_ENDIANNESS(datumtype)) { \
+ case TYPE_IS_BIG_ENDIAN: var = my_betoh ## type (var); break; \
+ case TYPE_IS_LITTLE_ENDIAN: var = my_letoh ## type (var); break; \
+ default: break; \
+ } \
+ } STMT_END
+
+# define DO_BO_PACK(var, type) \
+ STMT_START { \
+ switch (TYPE_ENDIANNESS(datumtype)) { \
+ case TYPE_IS_BIG_ENDIAN: var = my_htobe ## type (var); break; \
+ case TYPE_IS_LITTLE_ENDIAN: var = my_htole ## type (var); break; \
+ default: break; \
+ } \
+ } STMT_END
+
+# define DO_BO_UNPACK_PTR(var, type, pre_cast, post_cast) \
+ STMT_START { \
+ switch (TYPE_ENDIANNESS(datumtype)) { \
+ case TYPE_IS_BIG_ENDIAN: \
+ var = (post_cast*) my_betoh ## type ((pre_cast) var); \
+ break; \
+ case TYPE_IS_LITTLE_ENDIAN: \
+ var = (post_cast *) my_letoh ## type ((pre_cast) var); \
+ break; \
+ default: \
+ break; \
+ } \
+ } STMT_END
+
+# define DO_BO_PACK_PTR(var, type, pre_cast, post_cast) \
+ STMT_START { \
+ switch (TYPE_ENDIANNESS(datumtype)) { \
+ case TYPE_IS_BIG_ENDIAN: \
+ var = (post_cast *) my_htobe ## type ((pre_cast) var); \
+ break; \
+ case TYPE_IS_LITTLE_ENDIAN: \
+ var = (post_cast *) my_htole ## type ((pre_cast) var); \
+ break; \
+ default: \
+ break; \
+ } \
+ } STMT_END
+
+# define BO_CANT_DOIT(action, type) \
+ STMT_START { \
+ switch (TYPE_ENDIANNESS(datumtype)) { \
+ case TYPE_IS_BIG_ENDIAN: \
+ Perl_croak(aTHX_ "Can't %s big-endian %ss on this " \
+ "platform", #action, #type); \
+ break; \
+ case TYPE_IS_LITTLE_ENDIAN: \
+ Perl_croak(aTHX_ "Can't %s little-endian %ss on this " \
+ "platform", #action, #type); \
+ break; \
+ default: \
+ break; \
+ } \
+ } STMT_END
+
+# if PTRSIZE == INTSIZE
+# define DO_BO_UNPACK_P(var) DO_BO_UNPACK_PTR(var, i, int, void)
+# define DO_BO_PACK_P(var) DO_BO_PACK_PTR(var, i, int, void)
+# define DO_BO_UNPACK_PC(var) DO_BO_UNPACK_PTR(var, i, int, char)
+# define DO_BO_PACK_PC(var) DO_BO_PACK_PTR(var, i, int, char)
+# elif PTRSIZE == LONGSIZE
+# define DO_BO_UNPACK_P(var) DO_BO_UNPACK_PTR(var, l, long, void)
+# define DO_BO_PACK_P(var) DO_BO_PACK_PTR(var, l, long, void)
+# define DO_BO_UNPACK_PC(var) DO_BO_UNPACK_PTR(var, l, long, char)
+# define DO_BO_PACK_PC(var) DO_BO_PACK_PTR(var, l, long, char)
+# else
+# define DO_BO_UNPACK_P(var) BO_CANT_DOIT(unpack, pointer)
+# define DO_BO_PACK_P(var) BO_CANT_DOIT(pack, pointer)
+# define DO_BO_UNPACK_PC(var) BO_CANT_DOIT(unpack, pointer)
+# define DO_BO_PACK_PC(var) BO_CANT_DOIT(pack, pointer)
+# endif
+
+# if defined(my_htolen) && defined(my_letohn) && \
+ defined(my_htoben) && defined(my_betohn)
+# define DO_BO_UNPACK_N(var, type) \
+ STMT_START { \
+ switch (TYPE_ENDIANNESS(datumtype)) { \
+ case TYPE_IS_BIG_ENDIAN: my_betohn(&var, sizeof(type)); break;\
+ case TYPE_IS_LITTLE_ENDIAN: my_letohn(&var, sizeof(type)); break;\
+ default: break; \
+ } \
+ } STMT_END
+
+# define DO_BO_PACK_N(var, type) \
+ STMT_START { \
+ switch (TYPE_ENDIANNESS(datumtype)) { \
+ case TYPE_IS_BIG_ENDIAN: my_htoben(&var, sizeof(type)); break;\
+ case TYPE_IS_LITTLE_ENDIAN: my_htolen(&var, sizeof(type)); break;\
+ default: break; \
+ } \
+ } STMT_END
+# else
+# define DO_BO_UNPACK_N(var, type) BO_CANT_DOIT(unpack, type)
+# define DO_BO_PACK_N(var, type) BO_CANT_DOIT(pack, type)
+# endif
+
+#endif
+
+#define PACK_SIZE_CANNOT_CSUM 0x80
+#define PACK_SIZE_SPARE 0x40
+#define PACK_SIZE_MASK 0x3F
+
+
+struct packsize_t {
+ const unsigned char *array;
+ int first;
+ int size;
+};
+
+#define PACK_SIZE_NORMAL 0
+#define PACK_SIZE_SHRIEKING 1
+
+/* These tables are regenerated by genpacksizetables.pl (and then hand pasted
+ in). You're unlikely ever to need to regenerate them. */
+#if 'J'-'I' == 1
+/* ASCII */
+unsigned char size_normal[53] = {
+ /* C */ sizeof(unsigned char),
+#if defined(HAS_LONG_DOUBLE) && defined(USE_LONG_DOUBLE)
+ /* D */ LONG_DOUBLESIZE,
+#else
+ 0,
+#endif
+ 0,
+ /* F */ NVSIZE,
+ 0, 0,
+ /* I */ sizeof(unsigned int),
+ /* J */ UVSIZE,
+ 0,
+ /* L */ SIZE32,
+ 0,
+ /* N */ SIZE32,
+ 0, 0,
+#if defined(HAS_QUAD)
+ /* Q */ sizeof(Uquad_t),
+#else
+ 0,
+#endif
+ 0,
+ /* S */ SIZE16,
+ 0,
+ /* U */ sizeof(char),
+ /* V */ SIZE32,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ /* c */ sizeof(char),
+ /* d */ sizeof(double),
+ 0,
+ /* f */ sizeof(float),
+ 0, 0,
+ /* i */ sizeof(int),
+ /* j */ IVSIZE,
+ 0,
+ /* l */ SIZE32,
+ 0,
+ /* n */ SIZE16,
+ 0,
+ /* p */ sizeof(char *) | PACK_SIZE_CANNOT_CSUM,
+#if defined(HAS_QUAD)
+ /* q */ sizeof(Quad_t),
+#else
+ 0,
+#endif
+ 0,
+ /* s */ SIZE16,
+ 0, 0,
+ /* v */ SIZE16,
+ /* w */ sizeof(char) | PACK_SIZE_CANNOT_CSUM,
+};
+unsigned char size_shrieking[46] = {
+ /* I */ sizeof(unsigned int),
+ 0, 0,
+ /* L */ sizeof(unsigned long),
+ 0,
+#if defined(PERL_PACK_CAN_SHRIEKSIGN)
+ /* N */ SIZE32,
+#else
+ 0,
+#endif
+ 0, 0, 0, 0,
+ /* S */ sizeof(unsigned short),
+ 0, 0,
+#if defined(PERL_PACK_CAN_SHRIEKSIGN)
+ /* V */ SIZE32,
+#else
+ 0,
+#endif
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ /* i */ sizeof(int),
+ 0, 0,
+ /* l */ sizeof(long),
+ 0,
+#if defined(PERL_PACK_CAN_SHRIEKSIGN)
+ /* n */ SIZE16,
+#else
+ 0,
+#endif
+ 0, 0, 0, 0,
+ /* s */ sizeof(short),
+ 0, 0,
+#if defined(PERL_PACK_CAN_SHRIEKSIGN)
+ /* v */ SIZE16
+#else
+ 0
+#endif
+};
+struct packsize_t packsize[2] = {
+ {size_normal, 67, 53},
+ {size_shrieking, 73, 46}
+};
+#else
+/* EBCDIC (or bust) */
+unsigned char size_normal[99] = {
+ /* c */ sizeof(char),
+ /* d */ sizeof(double),
+ 0,
+ /* f */ sizeof(float),
+ 0, 0,
+ /* i */ sizeof(int),
+ 0, 0, 0, 0, 0, 0, 0,
+ /* j */ IVSIZE,
+ 0,
+ /* l */ SIZE32,
+ 0,
+ /* n */ SIZE16,
+ 0,
+ /* p */ sizeof(char *) | PACK_SIZE_CANNOT_CSUM,
+#if defined(HAS_QUAD)
+ /* q */ sizeof(Quad_t),
+#else
+ 0,
+#endif
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ /* s */ SIZE16,
+ 0, 0,
+ /* v */ SIZE16,
+ /* w */ sizeof(char) | PACK_SIZE_CANNOT_CSUM,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,
+ /* C */ sizeof(unsigned char),
+#if defined(HAS_LONG_DOUBLE) && defined(USE_LONG_DOUBLE)
+ /* D */ LONG_DOUBLESIZE,
+#else
+ 0,
+#endif
+ 0,
+ /* F */ NVSIZE,
+ 0, 0,
+ /* I */ sizeof(unsigned int),
+ 0, 0, 0, 0, 0, 0, 0,
+ /* J */ UVSIZE,
+ 0,
+ /* L */ SIZE32,
+ 0,
+ /* N */ SIZE32,
+ 0, 0,
+#if defined(HAS_QUAD)
+ /* Q */ sizeof(Uquad_t),
+#else
+ 0,
+#endif
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ /* S */ SIZE16,
+ 0,
+ /* U */ sizeof(char),
+ /* V */ SIZE32,
+};
+unsigned char size_shrieking[93] = {
+ /* i */ sizeof(int),
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ /* l */ sizeof(long),
+ 0,
+#if defined(PERL_PACK_CAN_SHRIEKSIGN)
+ /* n */ SIZE16,
+#else
+ 0,
+#endif
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ /* s */ sizeof(short),
+ 0, 0,
+#if defined(PERL_PACK_CAN_SHRIEKSIGN)
+ /* v */ SIZE16,
+#else
+ 0,
+#endif
+ 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,
+ /* I */ sizeof(unsigned int),
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ /* L */ sizeof(unsigned long),
+ 0,
+#if defined(PERL_PACK_CAN_SHRIEKSIGN)
+ /* N */ SIZE32,
+#else
+ 0,
+#endif
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ /* S */ sizeof(unsigned short),
+ 0, 0,
+#if defined(PERL_PACK_CAN_SHRIEKSIGN)
+ /* V */ SIZE32
+#else
+ 0
+#endif
+};
+struct packsize_t packsize[2] = {
+ {size_normal, 131, 99},
+ {size_shrieking, 137, 93}
+};
+#endif
+
/* Returns the sizeof() struct described by pat */
STATIC I32
@@ -147,6 +503,10 @@ S_measure_struct(pTHX_ register tempsym_t* symptr)
register int size;
while (next_symbol(symptr)) {
+ int which = (symptr->code & TYPE_IS_SHRIEKING)
+ ? PACK_SIZE_SHRIEKING : PACK_SIZE_NORMAL;
+ int offset
+ = TYPE_NO_MODIFIERS(symptr->code) - packsize[which].first;
switch( symptr->howlen ){
case e_no_len:
@@ -159,160 +519,88 @@ S_measure_struct(pTHX_ register tempsym_t* symptr)
break;
}
- switch(symptr->code) {
- default:
- Perl_croak(aTHX_ "Invalid type '%c' in %s",
- (int)symptr->code,
- symptr->flags & FLAG_PACK ? "pack" : "unpack" );
- case '@':
- case '/':
- case 'U': /* XXXX Is it correct? */
- case 'w':
- case 'u':
- Perl_croak(aTHX_ "Within []-length '%c' not allowed in %s",
- (int)symptr->code,
- symptr->flags & FLAG_PACK ? "pack" : "unpack" );
- case '%':
+ if ((offset >= 0) && (offset < packsize[which].size))
+ size = packsize[which].array[offset] & PACK_SIZE_MASK;
+ else
size = 0;
- break;
- case '(':
- {
- tempsym_t savsym = *symptr;
- symptr->patptr = savsym.grpbeg;
- symptr->patend = savsym.grpend;
- /* XXXX Theoretically, we need to measure many times at different
- positions, since the subexpression may contain
- alignment commands, but be not of aligned length.
- Need to detect this and croak(). */
- size = measure_struct(symptr);
- *symptr = savsym;
- break;
- }
- case 'X' | TYPE_IS_SHRIEKING:
- /* XXXX Is this useful? Then need to treat MEASURE_BACKWARDS. */
- if (!len) /* Avoid division by 0 */
- len = 1;
- len = total % len; /* Assumed: the start is aligned. */
- /* FALL THROUGH */
- case 'X':
- size = -1;
- if (total < len)
- Perl_croak(aTHX_ "'X' outside of string in %s",
- symptr->flags & FLAG_PACK ? "pack" : "unpack" );
- break;
- case 'x' | TYPE_IS_SHRIEKING:
- if (!len) /* Avoid division by 0 */
- len = 1;
- star = total % len; /* Assumed: the start is aligned. */
- if (star) /* Other portable ways? */
- len = len - star;
- else
- len = 0;
- /* FALL THROUGH */
- case 'x':
- case 'A':
- case 'Z':
- case 'a':
- case 'c':
- case 'C':
- size = 1;
- break;
- case 'B':
- case 'b':
- len = (len + 7)/8;
- size = 1;
- break;
- case 'H':
- case 'h':
- len = (len + 1)/2;
- size = 1;
- break;
- case 's' | TYPE_IS_SHRIEKING:
-#if SHORTSIZE != SIZE16
- size = sizeof(short);
- break;
-#else
- /* FALL THROUGH */
-#endif
- case 's':
- size = SIZE16;
- break;
- case 'S' | TYPE_IS_SHRIEKING:
-#if SHORTSIZE != SIZE16
- size = sizeof(unsigned short);
- break;
-#else
- /* FALL THROUGH */
-#endif
- case 'v':
- case 'n':
- case 'S':
- size = SIZE16;
- break;
- case 'i' | TYPE_IS_SHRIEKING:
- case 'i':
- size = sizeof(int);
- break;
- case 'I' | TYPE_IS_SHRIEKING:
- case 'I':
- size = sizeof(unsigned int);
- break;
- case 'j':
- size = IVSIZE;
- break;
- case 'J':
- size = UVSIZE;
- break;
- case 'l' | TYPE_IS_SHRIEKING:
-#if LONGSIZE != SIZE32
- size = sizeof(long);
- break;
-#else
- /* FALL THROUGH */
-#endif
- case 'l':
- size = SIZE32;
- break;
- case 'L' | TYPE_IS_SHRIEKING:
-#if LONGSIZE != SIZE32
- size = sizeof(unsigned long);
- break;
-#else
- /* FALL THROUGH */
-#endif
- case 'V':
- case 'N':
- case 'L':
- size = SIZE32;
- break;
- case 'P':
- len = 1;
- /* FALL THROUGH */
- case 'p':
- size = sizeof(char*);
- break;
-#ifdef HAS_QUAD
- case 'q':
- size = sizeof(Quad_t);
- break;
- case 'Q':
- size = sizeof(Uquad_t);
- break;
-#endif
- case 'f':
- size = sizeof(float);
- break;
- case 'd':
- size = sizeof(double);
- break;
- case 'F':
- size = NVSIZE;
- break;
-#if defined(HAS_LONG_DOUBLE) && defined(USE_LONG_DOUBLE)
- case 'D':
- size = LONG_DOUBLESIZE;
- break;
-#endif
+
+ if (!size) {
+ /* endianness doesn't influence the size of a type */
+ switch(TYPE_NO_ENDIANNESS(symptr->code)) {
+ default:
+ Perl_croak(aTHX_ "Invalid type '%c' in %s",
+ (int)TYPE_NO_MODIFIERS(symptr->code),
+ symptr->flags & FLAG_PACK ? "pack" : "unpack" );
+ case '@':
+ case '/':
+ case 'U': /* XXXX Is it correct? */
+ case 'w':
+ case 'u':
+ Perl_croak(aTHX_ "Within []-length '%c' not allowed in %s",
+ (int)symptr->code,
+ symptr->flags & FLAG_PACK ? "pack" : "unpack" );
+ case '%':
+ size = 0;
+ break;
+ case '(':
+ {
+ tempsym_t savsym = *symptr;
+ symptr->patptr = savsym.grpbeg;
+ symptr->patend = savsym.grpend;
+ /* XXXX Theoretically, we need to measure many times at
+ different positions, since the subexpression may contain
+ alignment commands, but be not of aligned length.
+ Need to detect this and croak(). */
+ size = measure_struct(symptr);
+ *symptr = savsym;
+ break;
+ }
+ case 'X' | TYPE_IS_SHRIEKING:
+ /* XXXX Is this useful? Then need to treat MEASURE_BACKWARDS.
+ */
+ if (!len) /* Avoid division by 0 */
+ len = 1;
+ len = total % len; /* Assumed: the start is aligned. */
+ /* FALL THROUGH */
+ case 'X':
+ size = -1;
+ if (total < len)
+ Perl_croak(aTHX_ "'X' outside of string in %s",
+ symptr->flags & FLAG_PACK ? "pack" : "unpack" );
+ break;
+ case 'x' | TYPE_IS_SHRIEKING:
+ if (!len) /* Avoid division by 0 */
+ len = 1;
+ star = total % len; /* Assumed: the start is aligned. */
+ if (star) /* Other portable ways? */
+ len = len - star;
+ else
+ len = 0;
+ /* FALL THROUGH */
+ case 'x':
+ case 'A':
+ case 'Z':
+ case 'a':
+ case 'c':
+ case 'C':
+ size = 1;
+ break;
+ case 'B':
+ case 'b':
+ len = (len + 7)/8;
+ size = 1;
+ break;
+ case 'H':
+ case 'h':
+ len = (len + 1)/2;
+ size = 1;
+ break;
+
+ case 'P':
+ len = 1;
+ size = sizeof(char*);
+ break;
+ }
}
total += len * size;
}
@@ -323,8 +611,8 @@ S_measure_struct(pTHX_ register tempsym_t* symptr)
/* locate matching closing parenthesis or bracket
* returns char pointer to char after match, or NULL
*/
-STATIC char *
-S_group_end(pTHX_ register char *patptr, register char *patend, char ender)
+STATIC const char *
+S_group_end(pTHX_ register const char *patptr, register const char *patend, char ender)
{
while (patptr < patend) {
char c = *patptr++;
@@ -352,8 +640,8 @@ S_group_end(pTHX_ register char *patptr, register char *patend, char ender)
* Expects a pointer to the first digit and address of length variable
* Advances char pointer to 1st non-digit char and returns number
*/
-STATIC char *
-S_get_num(pTHX_ register char *patptr, I32 *lenptr )
+STATIC const char *
+S_get_num(pTHX_ register const char *patptr, I32 *lenptr )
{
I32 len = *patptr++ - '0';
while (isDIGIT(*patptr)) {
@@ -371,8 +659,8 @@ S_get_num(pTHX_ register char *patptr, I32 *lenptr )
STATIC bool
S_next_symbol(pTHX_ register tempsym_t* symptr )
{
- register char* patptr = symptr->patptr;
- register char* patend = symptr->patend;
+ const char* patptr = symptr->patptr;
+ const char* patend = symptr->patend;
symptr->flags &= ~FLAG_SLASH;
@@ -388,6 +676,7 @@ S_next_symbol(pTHX_ register tempsym_t* symptr )
} else {
/* We should have found a template code */
I32 code = *patptr++ & 0xFF;
+ U32 inherited_modifiers = 0;
if (code == ','){ /* grandfather in commas but with a warning */
if (((symptr->flags & FLAG_COMMA) == 0) && ckWARN(WARN_UNPACK)){
@@ -404,24 +693,76 @@ S_next_symbol(pTHX_ register tempsym_t* symptr )
if( isDIGIT(*patptr) || *patptr == '*' || *patptr == '[' )
Perl_croak(aTHX_ "()-group starts with a count in %s",
symptr->flags & FLAG_PACK ? "pack" : "unpack" );
- symptr->grpbeg = patptr;
- patptr = 1 + ( symptr->grpend = group_end(patptr, patend, ')') );
+ symptr->grpbeg = (char *) patptr;
+ patptr
+ = 1 + ( symptr->grpend = (char *)group_end(patptr, patend, ')') );
if( symptr->level >= MAX_SUB_TEMPLATE_LEVEL )
Perl_croak(aTHX_ "Too deeply nested ()-groups in %s",
symptr->flags & FLAG_PACK ? "pack" : "unpack" );
}
- /* test for '!' modifier */
- if (patptr < patend && *patptr == '!') {
- static const char natstr[] = "sSiIlLxX";
- patptr++;
- if (strchr(natstr, code))
- code |= TYPE_IS_SHRIEKING;
- else
- Perl_croak(aTHX_ "'!' allowed only after types %s in %s",
- natstr, symptr->flags & FLAG_PACK ? "pack" : "unpack" );
+ /* look for group modifiers to inherit */
+ if (TYPE_ENDIANNESS(symptr->flags)) {
+ if (strchr(ENDIANNESS_ALLOWED_TYPES, TYPE_NO_MODIFIERS(code)))
+ inherited_modifiers |= TYPE_ENDIANNESS(symptr->flags);
}
+ /* look for modifiers */
+ while (patptr < patend) {
+ const char *allowed;
+ I32 modifier;
+ switch (*patptr) {
+ case '!':
+ modifier = TYPE_IS_SHRIEKING;
+ allowed = SHRIEKING_ALLOWED_TYPES;
+ break;
+#ifdef PERL_PACK_CAN_BYTEORDER
+ case '>':
+ modifier = TYPE_IS_BIG_ENDIAN;
+ allowed = ENDIANNESS_ALLOWED_TYPES;
+ break;
+ case '<':
+ modifier = TYPE_IS_LITTLE_ENDIAN;
+ allowed = ENDIANNESS_ALLOWED_TYPES;
+ break;
+#endif
+ default:
+ allowed = "";
+ modifier = 0;
+ break;
+ }
+
+ if (modifier == 0)
+ break;
+
+ if (!strchr(allowed, TYPE_NO_MODIFIERS(code)))
+ Perl_croak(aTHX_ "'%c' allowed only after types %s in %s", *patptr,
+ allowed, symptr->flags & FLAG_PACK ? "pack" : "unpack" );
+
+ if (TYPE_ENDIANNESS(code | modifier) == TYPE_ENDIANNESS_MASK)
+ Perl_croak(aTHX_ "Can't use both '<' and '>' after type '%c' in %s",
+ (int) TYPE_NO_MODIFIERS(code),
+ symptr->flags & FLAG_PACK ? "pack" : "unpack" );
+ else if (TYPE_ENDIANNESS(code | modifier | inherited_modifiers) ==
+ TYPE_ENDIANNESS_MASK)
+ Perl_croak(aTHX_ "Can't use '%c' in a group with different byte-order in %s",
+ *patptr, symptr->flags & FLAG_PACK ? "pack" : "unpack" );
+
+ if (ckWARN(WARN_UNPACK)) {
+ if (code & modifier)
+ Perl_warner(aTHX_ packWARN(WARN_UNPACK),
+ "Duplicate modifier '%c' after '%c' in %s",
+ *patptr, (int) TYPE_NO_MODIFIERS(code),
+ symptr->flags & FLAG_PACK ? "pack" : "unpack" );
+ }
+
+ code |= modifier;
+ patptr++;
+ }
+
+ /* inherit modifiers */
+ code |= inherited_modifiers;
+
/* look for count and/or / */
if (patptr < patend) {
if (isDIGIT(*patptr)) {
@@ -433,7 +774,7 @@ S_next_symbol(pTHX_ register tempsym_t* symptr )
symptr->howlen = e_star;
} else if (*patptr == '[') {
- char* lenptr = ++patptr;
+ const char* lenptr = ++patptr;
symptr->howlen = e_number;
patptr = group_end( patptr, patend, ']' ) + 1;
/* what kind of [] is it? */
@@ -444,8 +785,8 @@ S_next_symbol(pTHX_ register tempsym_t* symptr )
symptr->flags & FLAG_PACK ? "pack" : "unpack");
} else {
tempsym_t savsym = *symptr;
- symptr->patend = patptr-1;
- symptr->patptr = lenptr;
+ symptr->patend = (char *) patptr-1;
+ symptr->patptr = (char *) lenptr;
savsym.length = measure_struct(symptr);
*symptr = savsym;
}
@@ -465,11 +806,11 @@ S_next_symbol(pTHX_ register tempsym_t* symptr )
if (patptr < patend)
patptr++;
} else {
- if( *patptr == '/' ){
+ if (*patptr == '/') {
symptr->flags |= FLAG_SLASH;
patptr++;
- if( patptr < patend &&
- (isDIGIT(*patptr) || *patptr == '*' || *patptr == '[') )
+ if (patptr < patend &&
+ (isDIGIT(*patptr) || *patptr == '*' || *patptr == '['))
Perl_croak(aTHX_ "'/' does not take a repeat count in %s",
symptr->flags & FLAG_PACK ? "pack" : "unpack" );
}
@@ -483,11 +824,11 @@ S_next_symbol(pTHX_ register tempsym_t* symptr )
}
symptr->code = code;
- symptr->patptr = patptr;
+ symptr->patptr = (char *) patptr;
return TRUE;
}
}
- symptr->patptr = patptr;
+ symptr->patptr = (char *) patptr;
return FALSE;
}
@@ -544,36 +885,43 @@ S_unpack_rec(pTHX_ register tempsym_t* symptr, register char *s, char *strbeg, c
howlen_t howlen;
/* These must not be in registers: */
- short ashort;
- int aint;
- long along;
+ I16 ai16;
+ U16 au16;
+ I32 ai32;
+ U32 au32;
#ifdef HAS_QUAD
Quad_t aquad;
+ Uquad_t auquad;
+#endif
+#if SHORTSIZE != SIZE16
+ short ashort;
+ unsigned short aushort;
#endif
- U16 aushort;
+ int aint;
unsigned int auint;
- U32 aulong;
-#ifdef HAS_QUAD
- Uquad_t auquad;
+ long along;
+#if LONGSIZE != SIZE32
+ unsigned long aulong;
#endif
char *aptr;
float afloat;
double adouble;
+#if defined(HAS_LONG_DOUBLE) && defined(USE_LONG_DOUBLE)
+ long double aldouble;
+#endif
+ IV aiv;
+ UV auv;
+ NV anv;
+
I32 checksum = 0;
UV cuv = 0;
NV cdouble = 0.0;
const int bits_in_uv = 8 * sizeof(cuv);
char* strrelbeg = s;
bool beyond = FALSE;
+ bool explicit_length;
bool unpack_only_one = (symptr->flags & FLAG_UNPACK_ONLY_ONE) != 0;
- IV aiv;
- UV auv;
- NV anv;
-#if defined(HAS_LONG_DOUBLE) && defined(USE_LONG_DOUBLE)
- long double aldouble;
-#endif
-
while (next_symbol(symptr)) {
datumtype = symptr->code;
/* do first one only unless in list context
@@ -594,11 +942,47 @@ S_unpack_rec(pTHX_ register tempsym_t* symptr, register char *s, char *strbeg, c
break;
}
+ explicit_length = TRUE;
redo_switch:
beyond = s >= strend;
- switch(datumtype) {
+ {
+ int which = (symptr->code & TYPE_IS_SHRIEKING)
+ ? PACK_SIZE_SHRIEKING : PACK_SIZE_NORMAL;
+ const int rawtype = TYPE_NO_MODIFIERS(datumtype);
+ int offset = rawtype - packsize[which].first;
+
+ if (offset >= 0 && offset < packsize[which].size) {
+ /* Data about this template letter */
+ unsigned char data = packsize[which].array[offset];
+
+ if (data) {
+ /* data nonzero means we can process this letter. */
+ long size = data & PACK_SIZE_MASK;
+ long howmany = (strend - s) / size;
+ if (len > howmany)
+ len = howmany;
+
+ /* In the old code, 'p' was the only type without shortcut
+ code to curtail unpacking to only one. As far as I can
+ see the only point of retaining this anomaly is to make
+ code such as $_ = unpack "p2", pack "pI", "Hi", 2
+ continue to segfault. ie, it probably should be
+ construed as a bug.
+ */
+
+ if (!checksum || (data & PACK_SIZE_CANNOT_CSUM)) {
+ if (len && unpack_only_one &&
+ rawtype != 'p')
+ len = 1;
+ EXTEND(SP, len);
+ EXTEND_MORTAL(len);
+ }
+ }
+ }
+ }
+ switch(TYPE_NO_ENDIANNESS(datumtype)) {
default:
- Perl_croak(aTHX_ "Invalid type '%c' in unpack", (int)datumtype );
+ Perl_croak(aTHX_ "Invalid type '%c' in unpack", (int)TYPE_NO_MODIFIERS(datumtype) );
case '%':
if (howlen == e_no_len)
@@ -612,17 +996,24 @@ S_unpack_rec(pTHX_ register tempsym_t* symptr, register char *s, char *strbeg, c
{
char *ss = s; /* Move from register */
tempsym_t savsym = *symptr;
+ U32 group_modifiers = TYPE_MODIFIERS(datumtype & ~symptr->flags);
+ symptr->flags |= group_modifiers;
symptr->patend = savsym.grpend;
symptr->level++;
PUTBACK;
while (len--) {
symptr->patptr = savsym.grpbeg;
unpack_rec(symptr, ss, strbeg, strend, &ss );
+ if (savsym.flags & FLAG_UNPACK_DO_UTF8)
+ symptr->flags |= FLAG_UNPACK_DO_UTF8;
+ else
+ symptr->flags &= ~FLAG_UNPACK_DO_UTF8;
if (ss == strend && savsym.howlen == e_star)
break; /* No way to continue */
}
SPAGAIN;
s = ss;
+ symptr->flags &= ~group_modifiers;
savsym.flags = symptr->flags;
*symptr = savsym;
break;
@@ -666,8 +1057,7 @@ S_unpack_rec(pTHX_ register tempsym_t* symptr, register char *s, char *strbeg, c
len = strend - s;
if (checksum)
goto uchar_checksum;
- sv = NEWSV(35, len);
- sv_setpvn(sv, s, len);
+ sv = newSVpvn(s, len);
if (len > 0 && (datumtype == 'A' || datumtype == 'Z')) {
aptr = s; /* borrow register */
if (datumtype == 'Z') { /* 'Z' strips stuff after first null */
@@ -695,7 +1085,7 @@ S_unpack_rec(pTHX_ register tempsym_t* symptr, register char *s, char *strbeg, c
len = (strend - s) * 8;
if (checksum) {
if (!PL_bitcount) {
- Newz(601, PL_bitcount, 256, char);
+ Newxz(PL_bitcount, 256, char);
for (bits = 1; bits < 256; bits++) {
if (bits & 1) PL_bitcount[bits]++;
if (bits & 2) PL_bitcount[bits]++;
@@ -712,7 +1102,7 @@ S_unpack_rec(pTHX_ register tempsym_t* symptr, register char *s, char *strbeg, c
len -= 8;
}
if (len) {
- bits = *s;
+ bits = *s++;
if (datumtype == 'b') {
while (len-- > 0) {
if (bits & 1) cuv++;
@@ -787,200 +1177,114 @@ S_unpack_rec(pTHX_ register tempsym_t* symptr, register char *s, char *strbeg, c
XPUSHs(sv_2mortal(sv));
break;
case 'c':
- if (len > strend - s)
- len = strend - s;
- if (checksum) {
- while (len-- > 0) {
- aint = *s++;
- if (aint >= 128) /* fake up signed chars */
- aint -= 256;
- if (checksum > bits_in_uv)
- cdouble += (NV)aint;
- else
- cuv += aint;
- }
- }
- else {
- if (len && unpack_only_one)
- len = 1;
- EXTEND(SP, len);
- EXTEND_MORTAL(len);
- while (len-- > 0) {
- aint = *s++;
- if (aint >= 128) /* fake up signed chars */
- aint -= 256;
- sv = NEWSV(36, 0);
- sv_setiv(sv, (IV)aint);
- PUSHs(sv_2mortal(sv));
- }
+ while (len-- > 0) {
+ aint = *s++;
+ if (aint >= 128) /* fake up signed chars */
+ aint -= 256;
+ if (!checksum) {
+ PUSHs(sv_2mortal(newSViv((IV)aint)));
+ }
+ else if (checksum > bits_in_uv)
+ cdouble += (NV)aint;
+ else
+ cuv += aint;
}
break;
case 'C':
unpack_C: /* unpack U will jump here if not UTF-8 */
if (len == 0) {
- symptr->flags &= ~FLAG_UNPACK_DO_UTF8;
+ if (explicit_length)
+ symptr->flags &= ~FLAG_UNPACK_DO_UTF8;
break;
}
- if (len > strend - s)
- len = strend - s;
if (checksum) {
uchar_checksum:
while (len-- > 0) {
auint = *s++ & 255;
- cuv += auint;
+ if (checksum > bits_in_uv)
+ cdouble += (NV)auint;
+ else
+ cuv += auint;
}
}
else {
- if (len && unpack_only_one)
- len = 1;
- EXTEND(SP, len);
- EXTEND_MORTAL(len);
while (len-- > 0) {
auint = *s++ & 255;
- sv = NEWSV(37, 0);
- sv_setiv(sv, (IV)auint);
- PUSHs(sv_2mortal(sv));
+ PUSHs(sv_2mortal(newSViv((IV)auint)));
}
}
break;
case 'U':
if (len == 0) {
- symptr->flags |= FLAG_UNPACK_DO_UTF8;
+ if (explicit_length)
+ symptr->flags |= FLAG_UNPACK_DO_UTF8;
break;
}
if ((symptr->flags & FLAG_UNPACK_DO_UTF8) == 0)
goto unpack_C;
- if (len > strend - s)
- len = strend - s;
- if (checksum) {
- while (len-- > 0 && s < strend) {
- STRLEN alen;
- auint = NATIVE_TO_UNI(utf8n_to_uvchr((U8*)s, strend - s, &alen, ckWARN(WARN_UTF8) ? 0 : UTF8_ALLOW_ANYUV));
- along = alen;
- s += along;
- if (checksum > bits_in_uv)
- cdouble += (NV)auint;
- else
- cuv += auint;
- }
- }
- else {
- if (len && unpack_only_one)
- len = 1;
- EXTEND(SP, len);
- EXTEND_MORTAL(len);
- while (len-- > 0 && s < strend) {
- STRLEN alen;
- auint = NATIVE_TO_UNI(utf8n_to_uvchr((U8*)s, strend - s, &alen, ckWARN(WARN_UTF8) ? 0 : UTF8_ALLOW_ANYUV));
- along = alen;
- s += along;
- sv = NEWSV(37, 0);
- sv_setuv(sv, (UV)auint);
- PUSHs(sv_2mortal(sv));
- }
+ while (len-- > 0 && s < strend) {
+ STRLEN alen;
+ auint = NATIVE_TO_UNI(utf8n_to_uvchr((U8*)s, strend - s, &alen, ckWARN(WARN_UTF8) ? 0 : UTF8_ALLOW_ANYUV));
+ along = alen;
+ s += along;
+ if (!checksum) {
+ PUSHs(sv_2mortal(newSVuv((UV)auint)));
+ }
+ else if (checksum > bits_in_uv)
+ cdouble += (NV)auint;
+ else
+ cuv += auint;
}
break;
case 's' | TYPE_IS_SHRIEKING:
#if SHORTSIZE != SIZE16
- along = (strend - s) / sizeof(short);
- if (len > along)
- len = along;
- if (checksum) {
- short ashort;
- while (len-- > 0) {
- COPYNN(s, &ashort, sizeof(short));
- s += sizeof(short);
- if (checksum > bits_in_uv)
- cdouble += (NV)ashort;
- else
- cuv += ashort;
-
- }
- }
- else {
- short ashort;
- if (len && unpack_only_one)
- len = 1;
- EXTEND(SP, len);
- EXTEND_MORTAL(len);
- while (len-- > 0) {
- COPYNN(s, &ashort, sizeof(short));
- s += sizeof(short);
- sv = NEWSV(38, 0);
- sv_setiv(sv, (IV)ashort);
- PUSHs(sv_2mortal(sv));
- }
+ while (len-- > 0) {
+ COPYNN(s, &ashort, sizeof(short));
+ DO_BO_UNPACK(ashort, s);
+ s += sizeof(short);
+ if (!checksum) {
+ PUSHs(sv_2mortal(newSViv((IV)ashort)));
+ }
+ else if (checksum > bits_in_uv)
+ cdouble += (NV)ashort;
+ else
+ cuv += ashort;
}
break;
#else
/* Fallthrough! */
#endif
case 's':
- along = (strend - s) / SIZE16;
- if (len > along)
- len = along;
- if (checksum) {
- while (len-- > 0) {
- COPY16(s, &ashort);
-#if SHORTSIZE > SIZE16
- if (ashort > 32767)
- ashort -= 65536;
+ while (len-- > 0) {
+ COPY16(s, &ai16);
+ DO_BO_UNPACK(ai16, 16);
+#if U16SIZE > SIZE16
+ if (ai16 > 32767)
+ ai16 -= 65536;
#endif
- s += SIZE16;
- if (checksum > bits_in_uv)
- cdouble += (NV)ashort;
- else
- cuv += ashort;
- }
- }
- else {
- if (len && unpack_only_one)
- len = 1;
- EXTEND(SP, len);
- EXTEND_MORTAL(len);
-
- while (len-- > 0) {
- COPY16(s, &ashort);
-#if SHORTSIZE > SIZE16
- if (ashort > 32767)
- ashort -= 65536;
-#endif
- s += SIZE16;
- sv = NEWSV(38, 0);
- sv_setiv(sv, (IV)ashort);
- PUSHs(sv_2mortal(sv));
+ s += SIZE16;
+ if (!checksum) {
+ PUSHs(sv_2mortal(newSViv((IV)ai16)));
}
+ else if (checksum > bits_in_uv)
+ cdouble += (NV)ai16;
+ else
+ cuv += ai16;
}
break;
case 'S' | TYPE_IS_SHRIEKING:
#if SHORTSIZE != SIZE16
- along = (strend - s) / sizeof(unsigned short);
- if (len > along)
- len = along;
- if (checksum) {
- unsigned short aushort;
- while (len-- > 0) {
- COPYNN(s, &aushort, sizeof(unsigned short));
- s += sizeof(unsigned short);
- if (checksum > bits_in_uv)
- cdouble += (NV)aushort;
- else
- cuv += aushort;
- }
- }
- else {
- if (len && unpack_only_one)
- len = 1;
- EXTEND(SP, len);
- EXTEND_MORTAL(len);
- while (len-- > 0) {
- unsigned short aushort;
- COPYNN(s, &aushort, sizeof(unsigned short));
- s += sizeof(unsigned short);
- sv = NEWSV(39, 0);
- sv_setiv(sv, (UV)aushort);
- PUSHs(sv_2mortal(sv));
- }
+ while (len-- > 0) {
+ COPYNN(s, &aushort, sizeof(unsigned short));
+ DO_BO_UNPACK(aushort, s);
+ s += sizeof(unsigned short);
+ if (!checksum) {
+ PUSHs(sv_2mortal(newSViv((UV)aushort)));
+ }
+ else if (checksum > bits_in_uv)
+ cdouble += (NV)aushort;
+ else
+ cuv += aushort;
}
break;
#else
@@ -989,298 +1293,170 @@ S_unpack_rec(pTHX_ register tempsym_t* symptr, register char *s, char *strbeg, c
case 'v':
case 'n':
case 'S':
- along = (strend - s) / SIZE16;
- if (len > along)
- len = along;
- if (checksum) {
- while (len-- > 0) {
- COPY16(s, &aushort);
- s += SIZE16;
+ while (len-- > 0) {
+ COPY16(s, &au16);
+ DO_BO_UNPACK(au16, 16);
+ s += SIZE16;
#ifdef HAS_NTOHS
- if (datumtype == 'n')
- aushort = PerlSock_ntohs(aushort);
+ if (datumtype == 'n')
+ au16 = PerlSock_ntohs(au16);
#endif
#ifdef HAS_VTOHS
- if (datumtype == 'v')
- aushort = vtohs(aushort);
+ if (datumtype == 'v')
+ au16 = vtohs(au16);
#endif
- if (checksum > bits_in_uv)
- cdouble += (NV)aushort;
- else
- cuv += aushort;
+ if (!checksum) {
+ PUSHs(sv_2mortal(newSViv((UV)au16)));
}
+ else if (checksum > bits_in_uv)
+ cdouble += (NV)au16;
+ else
+ cuv += au16;
}
- else {
- if (len && unpack_only_one)
- len = 1;
- EXTEND(SP, len);
- EXTEND_MORTAL(len);
- while (len-- > 0) {
- COPY16(s, &aushort);
- s += SIZE16;
- sv = NEWSV(39, 0);
+ break;
+#ifdef PERL_PACK_CAN_SHRIEKSIGN
+ case 'v' | TYPE_IS_SHRIEKING:
+ case 'n' | TYPE_IS_SHRIEKING:
+ while (len-- > 0) {
+ COPY16(s, &ai16);
+ s += SIZE16;
#ifdef HAS_NTOHS
- if (datumtype == 'n')
- aushort = PerlSock_ntohs(aushort);
+ if (datumtype == ('n' | TYPE_IS_SHRIEKING))
+ ai16 = (I16)PerlSock_ntohs((U16)ai16);
#endif
#ifdef HAS_VTOHS
- if (datumtype == 'v')
- aushort = vtohs(aushort);
+ if (datumtype == ('v' | TYPE_IS_SHRIEKING))
+ ai16 = (I16)vtohs((U16)ai16);
#endif
- sv_setiv(sv, (UV)aushort);
- PUSHs(sv_2mortal(sv));
+ if (!checksum) {
+ PUSHs(sv_2mortal(newSViv((IV)ai16)));
}
+ else if (checksum > bits_in_uv)
+ cdouble += (NV)ai16;
+ else
+ cuv += ai16;
}
break;
+#endif
case 'i':
case 'i' | TYPE_IS_SHRIEKING:
- along = (strend - s) / sizeof(int);
- if (len > along)
- len = along;
- if (checksum) {
- while (len-- > 0) {
- Copy(s, &aint, 1, int);
- s += sizeof(int);
- if (checksum > bits_in_uv)
- cdouble += (NV)aint;
- else
- cuv += aint;
- }
- }
- else {
- if (len && unpack_only_one)
- len = 1;
- EXTEND(SP, len);
- EXTEND_MORTAL(len);
- while (len-- > 0) {
- Copy(s, &aint, 1, int);
- s += sizeof(int);
- sv = NEWSV(40, 0);
-#ifdef __osf__
- /* Without the dummy below unpack("i", pack("i",-1))
- * return 0xFFffFFff instead of -1 for Digital Unix V4.0
- * cc with optimization turned on.
- *
- * The bug was detected in
- * DEC C V5.8-009 on Digital UNIX V4.0 (Rev. 1091) (V4.0E)
- * with optimization (-O4) turned on.
- * DEC C V5.2-040 on Digital UNIX V4.0 (Rev. 564) (V4.0B)
- * does not have this problem even with -O4.
- *
- * This bug was reported as DECC_BUGS 1431
- * and tracked internally as GEM_BUGS 7775.
- *
- * The bug is fixed in
- * Tru64 UNIX V5.0: Compaq C V6.1-006 or later
- * UNIX V4.0F support: DEC C V5.9-006 or later
- * UNIX V4.0E support: DEC C V5.8-011 or later
- * and also in DTK.
- *
- * See also few lines later for the same bug.
- */
- (aint) ?
- sv_setiv(sv, (IV)aint) :
-#endif
- sv_setiv(sv, (IV)aint);
- PUSHs(sv_2mortal(sv));
- }
+ while (len-- > 0) {
+ Copy(s, &aint, 1, int);
+ DO_BO_UNPACK(aint, i);
+ s += sizeof(int);
+ if (!checksum) {
+ PUSHs(sv_2mortal(newSViv((IV)aint)));
+ }
+ else if (checksum > bits_in_uv)
+ cdouble += (NV)aint;
+ else
+ cuv += aint;
}
break;
case 'I':
case 'I' | TYPE_IS_SHRIEKING:
- along = (strend - s) / sizeof(unsigned int);
- if (len > along)
- len = along;
- if (checksum) {
- while (len-- > 0) {
- Copy(s, &auint, 1, unsigned int);
- s += sizeof(unsigned int);
- if (checksum > bits_in_uv)
- cdouble += (NV)auint;
- else
- cuv += auint;
- }
- }
- else {
- if (len && unpack_only_one)
- len = 1;
- EXTEND(SP, len);
- EXTEND_MORTAL(len);
- while (len-- > 0) {
- Copy(s, &auint, 1, unsigned int);
- s += sizeof(unsigned int);
- sv = NEWSV(41, 0);
-#ifdef __osf__
- /* Without the dummy below unpack("I", pack("I",0xFFFFFFFF))
- * returns 1.84467440737096e+19 instead of 0xFFFFFFFF.
- * See details few lines earlier. */
- (auint) ?
- sv_setuv(sv, (UV)auint) :
-#endif
- sv_setuv(sv, (UV)auint);
- PUSHs(sv_2mortal(sv));
- }
+ while (len-- > 0) {
+ Copy(s, &auint, 1, unsigned int);
+ DO_BO_UNPACK(auint, i);
+ s += sizeof(unsigned int);
+ if (!checksum) {
+ PUSHs(sv_2mortal(newSVuv((UV)auint)));
+ }
+ else if (checksum > bits_in_uv)
+ cdouble += (NV)auint;
+ else
+ cuv += auint;
}
break;
case 'j':
- along = (strend - s) / IVSIZE;
- if (len > along)
- len = along;
- if (checksum) {
- while (len-- > 0) {
- Copy(s, &aiv, 1, IV);
- s += IVSIZE;
- if (checksum > bits_in_uv)
- cdouble += (NV)aiv;
- else
- cuv += aiv;
- }
- }
- else {
- if (len && unpack_only_one)
- len = 1;
- EXTEND(SP, len);
- EXTEND_MORTAL(len);
- while (len-- > 0) {
- Copy(s, &aiv, 1, IV);
- s += IVSIZE;
- sv = NEWSV(40, 0);
- sv_setiv(sv, aiv);
- PUSHs(sv_2mortal(sv));
+ while (len-- > 0) {
+ Copy(s, &aiv, 1, IV);
+#if IVSIZE == INTSIZE
+ DO_BO_UNPACK(aiv, i);
+#elif IVSIZE == LONGSIZE
+ DO_BO_UNPACK(aiv, l);
+#elif defined(HAS_QUAD) && IVSIZE == U64SIZE
+ DO_BO_UNPACK(aiv, 64);
+#endif
+ s += IVSIZE;
+ if (!checksum) {
+ PUSHs(sv_2mortal(newSViv(aiv)));
}
+ else if (checksum > bits_in_uv)
+ cdouble += (NV)aiv;
+ else
+ cuv += aiv;
}
break;
case 'J':
- along = (strend - s) / UVSIZE;
- if (len > along)
- len = along;
- if (checksum) {
- while (len-- > 0) {
- Copy(s, &auv, 1, UV);
- s += UVSIZE;
- if (checksum > bits_in_uv)
- cdouble += (NV)auv;
- else
- cuv += auv;
- }
- }
- else {
- if (len && unpack_only_one)
- len = 1;
- EXTEND(SP, len);
- EXTEND_MORTAL(len);
- while (len-- > 0) {
- Copy(s, &auv, 1, UV);
- s += UVSIZE;
- sv = NEWSV(41, 0);
- sv_setuv(sv, auv);
- PUSHs(sv_2mortal(sv));
+ while (len-- > 0) {
+ Copy(s, &auv, 1, UV);
+#if UVSIZE == INTSIZE
+ DO_BO_UNPACK(auv, i);
+#elif UVSIZE == LONGSIZE
+ DO_BO_UNPACK(auv, l);
+#elif defined(HAS_QUAD) && UVSIZE == U64SIZE
+ DO_BO_UNPACK(auv, 64);
+#endif
+ s += UVSIZE;
+ if (!checksum) {
+ PUSHs(sv_2mortal(newSVuv(auv)));
}
+ else if (checksum > bits_in_uv)
+ cdouble += (NV)auv;
+ else
+ cuv += auv;
}
break;
case 'l' | TYPE_IS_SHRIEKING:
#if LONGSIZE != SIZE32
- along = (strend - s) / sizeof(long);
- if (len > along)
- len = along;
- if (checksum) {
- while (len-- > 0) {
- COPYNN(s, &along, sizeof(long));
- s += sizeof(long);
- if (checksum > bits_in_uv)
- cdouble += (NV)along;
- else
- cuv += along;
- }
- }
- else {
- if (len && unpack_only_one)
- len = 1;
- EXTEND(SP, len);
- EXTEND_MORTAL(len);
- while (len-- > 0) {
- COPYNN(s, &along, sizeof(long));
- s += sizeof(long);
- sv = NEWSV(42, 0);
- sv_setiv(sv, (IV)along);
- PUSHs(sv_2mortal(sv));
- }
+ while (len-- > 0) {
+ COPYNN(s, &along, sizeof(long));
+ DO_BO_UNPACK(along, l);
+ s += sizeof(long);
+ if (!checksum) {
+ PUSHs(sv_2mortal(newSViv((IV)along)));
+ }
+ else if (checksum > bits_in_uv)
+ cdouble += (NV)along;
+ else
+ cuv += along;
}
break;
#else
/* Fallthrough! */
#endif
case 'l':
- along = (strend - s) / SIZE32;
- if (len > along)
- len = along;
- if (checksum) {
- while (len-- > 0) {
-#if LONGSIZE > SIZE32 && INTSIZE == SIZE32
- I32 along;
-#endif
- COPY32(s, &along);
-#if LONGSIZE > SIZE32
- if (along > 2147483647)
- along -= 4294967296;
+ while (len-- > 0) {
+ COPY32(s, &ai32);
+ DO_BO_UNPACK(ai32, 32);
+#if U32SIZE > SIZE32
+ if (ai32 > 2147483647)
+ ai32 -= 4294967296;
#endif
- s += SIZE32;
- if (checksum > bits_in_uv)
- cdouble += (NV)along;
- else
- cuv += along;
- }
- }
- else {
- if (len && unpack_only_one)
- len = 1;
- EXTEND(SP, len);
- EXTEND_MORTAL(len);
- while (len-- > 0) {
-#if LONGSIZE > SIZE32 && INTSIZE == SIZE32
- I32 along;
-#endif
- COPY32(s, &along);
-#if LONGSIZE > SIZE32
- if (along > 2147483647)
- along -= 4294967296;
-#endif
- s += SIZE32;
- sv = NEWSV(42, 0);
- sv_setiv(sv, (IV)along);
- PUSHs(sv_2mortal(sv));
+ s += SIZE32;
+ if (!checksum) {
+ PUSHs(sv_2mortal(newSViv((IV)ai32)));
}
+ else if (checksum > bits_in_uv)
+ cdouble += (NV)ai32;
+ else
+ cuv += ai32;
}
break;
case 'L' | TYPE_IS_SHRIEKING:
#if LONGSIZE != SIZE32
- along = (strend - s) / sizeof(unsigned long);
- if (len > along)
- len = along;
- if (checksum) {
- while (len-- > 0) {
- unsigned long aulong;
- COPYNN(s, &aulong, sizeof(unsigned long));
- s += sizeof(unsigned long);
- if (checksum > bits_in_uv)
- cdouble += (NV)aulong;
- else
- cuv += aulong;
- }
- }
- else {
- if (len && unpack_only_one)
- len = 1;
- EXTEND(SP, len);
- EXTEND_MORTAL(len);
- while (len-- > 0) {
- unsigned long aulong;
- COPYNN(s, &aulong, sizeof(unsigned long));
- s += sizeof(unsigned long);
- sv = NEWSV(43, 0);
- sv_setuv(sv, (UV)aulong);
- PUSHs(sv_2mortal(sv));
- }
+ while (len-- > 0) {
+ COPYNN(s, &aulong, sizeof(unsigned long));
+ DO_BO_UNPACK(aulong, l);
+ s += sizeof(unsigned long);
+ if (!checksum) {
+ PUSHs(sv_2mortal(newSVuv((UV)aulong)));
+ }
+ else if (checksum > bits_in_uv)
+ cdouble += (NV)aulong;
+ else
+ cuv += aulong;
}
break;
#else
@@ -1289,73 +1465,62 @@ S_unpack_rec(pTHX_ register tempsym_t* symptr, register char *s, char *strbeg, c
case 'V':
case 'N':
case 'L':
- along = (strend - s) / SIZE32;
- if (len > along)
- len = along;
- if (checksum) {
- while (len-- > 0) {
- COPY32(s, &aulong);
- s += SIZE32;
+ while (len-- > 0) {
+ COPY32(s, &au32);
+ DO_BO_UNPACK(au32, 32);
+ s += SIZE32;
#ifdef HAS_NTOHL
- if (datumtype == 'N')
- aulong = PerlSock_ntohl(aulong);
+ if (datumtype == 'N')
+ au32 = PerlSock_ntohl(au32);
#endif
#ifdef HAS_VTOHL
- if (datumtype == 'V')
- aulong = vtohl(aulong);
+ if (datumtype == 'V')
+ au32 = vtohl(au32);
#endif
- if (checksum > bits_in_uv)
- cdouble += (NV)aulong;
- else
- cuv += aulong;
- }
- }
- else {
- if (len && unpack_only_one)
- len = 1;
- EXTEND(SP, len);
- EXTEND_MORTAL(len);
- while (len-- > 0) {
- COPY32(s, &aulong);
- s += SIZE32;
+ if (!checksum) {
+ PUSHs(sv_2mortal(newSVuv((UV)au32)));
+ }
+ else if (checksum > bits_in_uv)
+ cdouble += (NV)au32;
+ else
+ cuv += au32;
+ }
+ break;
+#ifdef PERL_PACK_CAN_SHRIEKSIGN
+ case 'V' | TYPE_IS_SHRIEKING:
+ case 'N' | TYPE_IS_SHRIEKING:
+ while (len-- > 0) {
+ COPY32(s, &ai32);
+ s += SIZE32;
#ifdef HAS_NTOHL
- if (datumtype == 'N')
- aulong = PerlSock_ntohl(aulong);
+ if (datumtype == ('N' | TYPE_IS_SHRIEKING))
+ ai32 = (I32)PerlSock_ntohl((U32)ai32);
#endif
#ifdef HAS_VTOHL
- if (datumtype == 'V')
- aulong = vtohl(aulong);
+ if (datumtype == ('V' | TYPE_IS_SHRIEKING))
+ ai32 = (I32)vtohl((U32)ai32);
#endif
- sv = NEWSV(43, 0);
- sv_setuv(sv, (UV)aulong);
- PUSHs(sv_2mortal(sv));
+ if (!checksum) {
+ PUSHs(sv_2mortal(newSViv((IV)ai32)));
}
+ else if (checksum > bits_in_uv)
+ cdouble += (NV)ai32;
+ else
+ cuv += ai32;
}
break;
+#endif
case 'p':
- along = (strend - s) / sizeof(char*);
- if (len > along)
- len = along;
- EXTEND(SP, len);
- EXTEND_MORTAL(len);
while (len-- > 0) {
- if (sizeof(char*) > strend - s)
- break;
- else {
- Copy(s, &aptr, 1, char*);
- s += sizeof(char*);
- }
- sv = NEWSV(44, 0);
- if (aptr)
- sv_setpv(sv, aptr);
- PUSHs(sv_2mortal(sv));
+ assert (sizeof(char*) <= strend - s);
+ Copy(s, &aptr, 1, char*);
+ DO_BO_UNPACK_PC(aptr);
+ s += sizeof(char*);
+ /* newSVpv generates undef if aptr is NULL */
+ PUSHs(sv_2mortal(newSVpv(aptr, 0)));
}
break;
case 'w':
- if (len && unpack_only_one)
- len = 1;
- EXTEND(SP, len);
- EXTEND_MORTAL(len);
{
UV auv = 0;
U32 bytes = 0;
@@ -1365,15 +1530,12 @@ S_unpack_rec(pTHX_ register tempsym_t* symptr, register char *s, char *strbeg, c
/* UTF8_IS_XXXXX not right here - using constant 0x80 */
if ((U8)(*s++) < 0x80) {
bytes = 0;
- sv = NEWSV(40, 0);
- sv_setuv(sv, auv);
- PUSHs(sv_2mortal(sv));
+ PUSHs(sv_2mortal(newSVuv(auv)));
len--;
auv = 0;
}
else if (++bytes >= sizeof(UV)) { /* promote to string */
- char *t;
- STRLEN n_a;
+ const char *t;
sv = Perl_newSVpvf(aTHX_ "%.*"UVf, (int)TYPE_DIGITS(UV), auv);
while (s < strend) {
@@ -1383,10 +1545,10 @@ S_unpack_rec(pTHX_ register tempsym_t* symptr, register char *s, char *strbeg, c
break;
}
}
- t = SvPV(sv, n_a);
+ t = SvPV_nolen_const(sv);
while (*t == '0')
t++;
- sv_chop(sv, t);
+ sv_chop(sv, (char *)t);
PUSHs(sv_2mortal(sv));
len--;
auv = 0;
@@ -1404,184 +1566,96 @@ S_unpack_rec(pTHX_ register tempsym_t* symptr, register char *s, char *strbeg, c
break;
else {
Copy(s, &aptr, 1, char*);
+ DO_BO_UNPACK_PC(aptr);
s += sizeof(char*);
}
- sv = NEWSV(44, 0);
- if (aptr)
- sv_setpvn(sv, aptr, len);
- PUSHs(sv_2mortal(sv));
+ /* newSVpvn generates undef if aptr is NULL */
+ PUSHs(sv_2mortal(newSVpvn(aptr, len)));
break;
#ifdef HAS_QUAD
case 'q':
- along = (strend - s) / sizeof(Quad_t);
- if (len > along)
- len = along;
- if (checksum) {
- while (len-- > 0) {
- Copy(s, &aquad, 1, Quad_t);
- s += sizeof(Quad_t);
- if (checksum > bits_in_uv)
- cdouble += (NV)aquad;
- else
- cuv += aquad;
- }
- }
- else {
- if (len && unpack_only_one)
- len = 1;
- EXTEND(SP, len);
- EXTEND_MORTAL(len);
- while (len-- > 0) {
- if (s + sizeof(Quad_t) > strend)
- aquad = 0;
- else {
- Copy(s, &aquad, 1, Quad_t);
- s += sizeof(Quad_t);
- }
- sv = NEWSV(42, 0);
- if (aquad >= IV_MIN && aquad <= IV_MAX)
- sv_setiv(sv, (IV)aquad);
- else
- sv_setnv(sv, (NV)aquad);
- PUSHs(sv_2mortal(sv));
+ while (len-- > 0) {
+ assert (s + sizeof(Quad_t) <= strend);
+ Copy(s, &aquad, 1, Quad_t);
+ DO_BO_UNPACK(aquad, 64);
+ s += sizeof(Quad_t);
+ if (!checksum) {
+ PUSHs(sv_2mortal((aquad >= IV_MIN && aquad <= IV_MAX) ?
+ newSViv((IV)aquad) : newSVnv((NV)aquad)));
}
- }
+ else if (checksum > bits_in_uv)
+ cdouble += (NV)aquad;
+ else
+ cuv += aquad;
+ }
break;
case 'Q':
- along = (strend - s) / sizeof(Uquad_t);
- if (len > along)
- len = along;
- if (checksum) {
- while (len-- > 0) {
- Copy(s, &auquad, 1, Uquad_t);
- s += sizeof(Uquad_t);
- if (checksum > bits_in_uv)
- cdouble += (NV)auquad;
- else
- cuv += auquad;
- }
+ while (len-- > 0) {
+ assert (s + sizeof(Uquad_t) <= strend);
+ Copy(s, &auquad, 1, Uquad_t);
+ DO_BO_UNPACK(auquad, 64);
+ s += sizeof(Uquad_t);
+ if (!checksum) {
+ PUSHs(sv_2mortal((auquad <= UV_MAX) ?
+ newSVuv((UV)auquad) : newSVnv((NV)auquad)));
+ }
+ else if (checksum > bits_in_uv)
+ cdouble += (NV)auquad;
+ else
+ cuv += auquad;
}
- else {
- if (len && unpack_only_one)
- len = 1;
- EXTEND(SP, len);
- EXTEND_MORTAL(len);
- while (len-- > 0) {
- if (s + sizeof(Uquad_t) > strend)
- auquad = 0;
- else {
- Copy(s, &auquad, 1, Uquad_t);
- s += sizeof(Uquad_t);
- }
- sv = NEWSV(43, 0);
- if (auquad <= UV_MAX)
- sv_setuv(sv, (UV)auquad);
- else
- sv_setnv(sv, (NV)auquad);
- PUSHs(sv_2mortal(sv));
- }
- }
break;
#endif
/* float and double added gnb@melba.bby.oz.au 22/11/89 */
case 'f':
- along = (strend - s) / sizeof(float);
- if (len > along)
- len = along;
- if (checksum) {
- while (len-- > 0) {
- Copy(s, &afloat, 1, float);
- s += sizeof(float);
- cdouble += afloat;
+ while (len-- > 0) {
+ Copy(s, &afloat, 1, float);
+ DO_BO_UNPACK_N(afloat, float);
+ s += sizeof(float);
+ if (!checksum) {
+ PUSHs(sv_2mortal(newSVnv((NV)afloat)));
}
- }
- else {
- if (len && unpack_only_one)
- len = 1;
- EXTEND(SP, len);
- EXTEND_MORTAL(len);
- while (len-- > 0) {
- Copy(s, &afloat, 1, float);
- s += sizeof(float);
- sv = NEWSV(47, 0);
- sv_setnv(sv, (NV)afloat);
- PUSHs(sv_2mortal(sv));
+ else {
+ cdouble += afloat;
}
}
break;
case 'd':
- along = (strend - s) / sizeof(double);
- if (len > along)
- len = along;
- if (checksum) {
- while (len-- > 0) {
- Copy(s, &adouble, 1, double);
- s += sizeof(double);
- cdouble += adouble;
+ while (len-- > 0) {
+ Copy(s, &adouble, 1, double);
+ DO_BO_UNPACK_N(adouble, double);
+ s += sizeof(double);
+ if (!checksum) {
+ PUSHs(sv_2mortal(newSVnv((NV)adouble)));
}
- }
- else {
- if (len && unpack_only_one)
- len = 1;
- EXTEND(SP, len);
- EXTEND_MORTAL(len);
- while (len-- > 0) {
- Copy(s, &adouble, 1, double);
- s += sizeof(double);
- sv = NEWSV(48, 0);
- sv_setnv(sv, (NV)adouble);
- PUSHs(sv_2mortal(sv));
+ else {
+ cdouble += adouble;
}
}
break;
case 'F':
- along = (strend - s) / NVSIZE;
- if (len > along)
- len = along;
- if (checksum) {
- while (len-- > 0) {
- Copy(s, &anv, 1, NV);
- s += NVSIZE;
- cdouble += anv;
+ while (len-- > 0) {
+ Copy(s, &anv, 1, NV);
+ DO_BO_UNPACK_N(anv, NV);
+ s += NVSIZE;
+ if (!checksum) {
+ PUSHs(sv_2mortal(newSVnv(anv)));
}
- }
- else {
- if (len && unpack_only_one)
- len = 1;
- EXTEND(SP, len);
- EXTEND_MORTAL(len);
- while (len-- > 0) {
- Copy(s, &anv, 1, NV);
- s += NVSIZE;
- sv = NEWSV(48, 0);
- sv_setnv(sv, anv);
- PUSHs(sv_2mortal(sv));
+ else {
+ cdouble += anv;
}
}
break;
#if defined(HAS_LONG_DOUBLE) && defined(USE_LONG_DOUBLE)
case 'D':
- along = (strend - s) / LONG_DOUBLESIZE;
- if (len > along)
- len = along;
- if (checksum) {
- while (len-- > 0) {
- Copy(s, &aldouble, 1, long double);
- s += LONG_DOUBLESIZE;
- cdouble += aldouble;
+ while (len-- > 0) {
+ Copy(s, &aldouble, 1, long double);
+ DO_BO_UNPACK_N(aldouble, long double);
+ s += LONG_DOUBLESIZE;
+ if (!checksum) {
+ PUSHs(sv_2mortal(newSVnv((NV)aldouble)));
}
- }
- else {
- if (len && unpack_only_one)
- len = 1;
- EXTEND(SP, len);
- EXTEND_MORTAL(len);
- while (len-- > 0) {
- Copy(s, &aldouble, 1, long double);
- s += LONG_DOUBLESIZE;
- sv = NEWSV(48, 0);
- sv_setnv(sv, (NV)aldouble);
- PUSHs(sv_2mortal(sv));
+ else {cdouble += aldouble;
}
}
break;
@@ -1648,10 +1722,9 @@ S_unpack_rec(pTHX_ register tempsym_t* symptr, register char *s, char *strbeg, c
}
if (checksum) {
- sv = NEWSV(42, 0);
- if (strchr("fFdD", datumtype) ||
+ if (strchr("fFdD", TYPE_NO_MODIFIERS(datumtype)) ||
(checksum > bits_in_uv &&
- strchr("csSiIlLnNUvVqQjJ", datumtype&0xFF)) ) {
+ strchr("cCsSiIlLnNUvVqQjJ", TYPE_NO_MODIFIERS(datumtype))) ) {
NV trouble;
adouble = (NV) (1 << (checksum & 15));
@@ -1662,14 +1735,14 @@ S_unpack_rec(pTHX_ register tempsym_t* symptr, register char *s, char *strbeg, c
while (cdouble < 0.0)
cdouble += adouble;
cdouble = Perl_modf(cdouble / adouble, &trouble) * adouble;
- sv_setnv(sv, cdouble);
+ sv = newSVnv(cdouble);
}
else {
if (checksum < bits_in_uv) {
UV mask = ((UV)1 << checksum) - 1;
cuv &= mask;
}
- sv_setuv(sv, cuv);
+ sv = newSVuv(cuv);
}
XPUSHs(sv_2mortal(sv));
checksum = 0;
@@ -1694,6 +1767,7 @@ S_unpack_rec(pTHX_ register tempsym_t* symptr, register char *s, char *strbeg, c
Perl_croak(aTHX_ "Code missing after '/' in unpack" );
}
datumtype = symptr->code;
+ explicit_length = FALSE;
goto redo_switch;
}
}
@@ -1711,21 +1785,21 @@ PP(pp_unpack)
I32 gimme = GIMME_V;
STRLEN llen;
STRLEN rlen;
- register char *pat = SvPV(left, llen);
+ const char *pat = SvPV_const(left, llen);
#ifdef PACKED_IS_OCTETS
/* Packed side is assumed to be octets - so force downgrade if it
has been UTF-8 encoded by accident
*/
register char *s = SvPVbyte(right, rlen);
#else
- register char *s = SvPV(right, rlen);
+ const char *s = SvPV_const(right, rlen);
#endif
- char *strend = s + rlen;
- register char *patend = pat + llen;
+ const char *strend = s + rlen;
+ const char *patend = pat + llen;
register I32 cnt;
PUTBACK;
- cnt = unpackstring(pat, patend, s, strend,
+ cnt = unpackstring((char *)pat, (char *)patend, (char *)s, (char *)strend,
((gimme == G_SCALAR) ? FLAG_UNPACK_ONLY_ONE : 0)
| (DO_UTF8(right) ? FLAG_UNPACK_DO_UTF8 : 0));
@@ -1764,11 +1838,10 @@ S_doencodes(pTHX_ register SV *sv, register char *s, register I32 len)
}
STATIC SV *
-S_is_an_int(pTHX_ char *s, STRLEN l)
+S_is_an_int(pTHX_ const char *s, STRLEN l)
{
- STRLEN n_a;
SV *result = newSVpvn(s, l);
- char *result_c = SvPV(result, n_a); /* convenience */
+ char *result_c = SvPV_nolen(result); /* convenience */
char *out = result_c;
bool skip = 1;
bool ignore = 0;
@@ -1897,24 +1970,34 @@ S_pack_rec(pTHX_ SV *cat, register tempsym_t* symptr, register SV **beglist, SV
/* These must not be in registers: */
char achar;
- I16 ashort;
- int aint;
- unsigned int auint;
- I32 along;
- U32 aulong;
- IV aiv;
- UV auv;
- NV anv;
-#if defined(HAS_LONG_DOUBLE) && defined(USE_LONG_DOUBLE)
- long double aldouble;
-#endif
+ I16 ai16;
+ U16 au16;
+ I32 ai32;
+ U32 au32;
#ifdef HAS_QUAD
Quad_t aquad;
Uquad_t auquad;
#endif
+#if SHORTSIZE != SIZE16
+ short ashort;
+ unsigned short aushort;
+#endif
+ int aint;
+ unsigned int auint;
+#if LONGSIZE != SIZE32
+ long along;
+ unsigned long aulong;
+#endif
char *aptr;
float afloat;
double adouble;
+#if defined(HAS_LONG_DOUBLE) && defined(USE_LONG_DOUBLE)
+ long double aldouble;
+#endif
+ IV aiv;
+ UV auv;
+ NV anv;
+
int strrelbeg = SvCUR(cat);
tempsym_t lookahead;
@@ -1940,7 +2023,7 @@ S_pack_rec(pTHX_ SV *cat, register tempsym_t* symptr, register SV **beglist, SV
len = symptr->length;
break;
case e_star:
- len = strchr("@Xxu", datumtype) ? 0 : items;
+ len = strchr("@Xxu", TYPE_NO_MODIFIERS(datumtype)) ? 0 : items;
break;
}
@@ -1960,9 +2043,9 @@ S_pack_rec(pTHX_ SV *cat, register tempsym_t* symptr, register SV **beglist, SV
}
}
- switch(datumtype) {
+ switch(TYPE_NO_ENDIANNESS(datumtype)) {
default:
- Perl_croak(aTHX_ "Invalid type '%c' in pack", (int)datumtype);
+ Perl_croak(aTHX_ "Invalid type '%c' in pack", (int)TYPE_NO_MODIFIERS(datumtype));
case '%':
Perl_croak(aTHX_ "'%%' may not be used in pack");
case '@':
@@ -1976,6 +2059,8 @@ S_pack_rec(pTHX_ SV *cat, register tempsym_t* symptr, register SV **beglist, SV
case '(':
{
tempsym_t savsym = *symptr;
+ U32 group_modifiers = TYPE_MODIFIERS(datumtype & ~symptr->flags);
+ symptr->flags |= group_modifiers;
symptr->patend = savsym.grpend;
symptr->level++;
while (len--) {
@@ -1984,6 +2069,7 @@ S_pack_rec(pTHX_ SV *cat, register tempsym_t* symptr, register SV **beglist, SV
if (savsym.howlen == e_star && beglist == endlist)
break; /* No way to continue */
}
+ symptr->flags &= ~group_modifiers;
lookahead.flags = symptr->flags;
*symptr = savsym;
break;
@@ -2022,7 +2108,7 @@ S_pack_rec(pTHX_ SV *cat, register tempsym_t* symptr, register SV **beglist, SV
case 'Z':
case 'a':
fromstr = NEXTFROM;
- aptr = SvPV(fromstr, fromlen);
+ aptr = (char *) SvPV_const(fromstr, fromlen);
if (howlen == e_star) {
len = fromlen;
if (datumtype == 'Z')
@@ -2030,7 +2116,7 @@ S_pack_rec(pTHX_ SV *cat, register tempsym_t* symptr, register SV **beglist, SV
}
if ((I32)fromlen >= len) {
sv_catpvn(cat, aptr, len);
- if (datumtype == 'Z')
+ if (datumtype == 'Z' && len > 0)
*(SvEND(cat)-1) = '\0';
}
else {
@@ -2168,7 +2254,7 @@ S_pack_rec(pTHX_ SV *cat, register tempsym_t* symptr, register SV **beglist, SV
case 'c':
while (len-- > 0) {
fromstr = NEXTFROM;
- switch (datumtype) {
+ switch (TYPE_NO_MODIFIERS(datumtype)) {
case 'C':
aint = SvIV(fromstr);
if ((aint < 0 || aint > 255) &&
@@ -2194,7 +2280,7 @@ S_pack_rec(pTHX_ SV *cat, register tempsym_t* symptr, register SV **beglist, SV
while (len-- > 0) {
fromstr = NEXTFROM;
auint = UNI_TO_NATIVE(SvUV(fromstr));
- SvGROW(cat, SvCUR(cat) + UTF8_MAXLEN + 1);
+ SvGROW(cat, SvCUR(cat) + UTF8_MAXBYTES + 1);
SvCUR_set(cat,
(char*)uvchr_to_utf8_flags((U8*)SvEND(cat),
auint,
@@ -2234,6 +2320,7 @@ S_pack_rec(pTHX_ SV *cat, register tempsym_t* symptr, register SV **beglist, SV
afloat = (float)SvNV(fromstr);
# endif
#endif
+ DO_BO_PACK_N(afloat, float);
sv_catpvn(cat, (char *)&afloat, sizeof (float));
}
break;
@@ -2266,53 +2353,64 @@ S_pack_rec(pTHX_ SV *cat, register tempsym_t* symptr, register SV **beglist, SV
adouble = (double)SvNV(fromstr);
# endif
#endif
+ DO_BO_PACK_N(adouble, double);
sv_catpvn(cat, (char *)&adouble, sizeof (double));
}
break;
case 'F':
+ Zero(&anv, 1, NV); /* can be long double with unused bits */
while (len-- > 0) {
fromstr = NEXTFROM;
anv = SvNV(fromstr);
+ DO_BO_PACK_N(anv, NV);
sv_catpvn(cat, (char *)&anv, NVSIZE);
}
break;
#if defined(HAS_LONG_DOUBLE) && defined(USE_LONG_DOUBLE)
case 'D':
+ /* long doubles can have unused bits, which may be nonzero */
+ Zero(&aldouble, 1, long double);
while (len-- > 0) {
fromstr = NEXTFROM;
aldouble = (long double)SvNV(fromstr);
+ DO_BO_PACK_N(aldouble, long double);
sv_catpvn(cat, (char *)&aldouble, LONG_DOUBLESIZE);
}
break;
#endif
+#ifdef PERL_PACK_CAN_SHRIEKSIGN
+ case 'n' | TYPE_IS_SHRIEKING:
+#endif
case 'n':
while (len-- > 0) {
fromstr = NEXTFROM;
- ashort = (I16)SvIV(fromstr);
+ ai16 = (I16)SvIV(fromstr);
#ifdef HAS_HTONS
- ashort = PerlSock_htons(ashort);
+ ai16 = PerlSock_htons(ai16);
#endif
- CAT16(cat, &ashort);
+ CAT16(cat, &ai16);
}
break;
+#ifdef PERL_PACK_CAN_SHRIEKSIGN
+ case 'v' | TYPE_IS_SHRIEKING:
+#endif
case 'v':
while (len-- > 0) {
fromstr = NEXTFROM;
- ashort = (I16)SvIV(fromstr);
+ ai16 = (I16)SvIV(fromstr);
#ifdef HAS_HTOVS
- ashort = htovs(ashort);
+ ai16 = htovs(ai16);
#endif
- CAT16(cat, &ashort);
+ CAT16(cat, &ai16);
}
break;
case 'S' | TYPE_IS_SHRIEKING:
#if SHORTSIZE != SIZE16
{
- unsigned short aushort;
-
while (len-- > 0) {
fromstr = NEXTFROM;
aushort = SvUV(fromstr);
+ DO_BO_PACK(aushort, s);
sv_catpvn(cat, (char *)&aushort, sizeof(unsigned short));
}
}
@@ -2322,12 +2420,11 @@ S_pack_rec(pTHX_ SV *cat, register tempsym_t* symptr, register SV **beglist, SV
#endif
case 'S':
{
- U16 aushort;
-
while (len-- > 0) {
fromstr = NEXTFROM;
- aushort = (U16)SvUV(fromstr);
- CAT16(cat, &aushort);
+ au16 = (U16)SvUV(fromstr);
+ DO_BO_PACK(au16, 16);
+ CAT16(cat, &au16);
}
}
@@ -2335,11 +2432,10 @@ S_pack_rec(pTHX_ SV *cat, register tempsym_t* symptr, register SV **beglist, SV
case 's' | TYPE_IS_SHRIEKING:
#if SHORTSIZE != SIZE16
{
- short ashort;
-
while (len-- > 0) {
fromstr = NEXTFROM;
ashort = SvIV(fromstr);
+ DO_BO_PACK(ashort, s);
sv_catpvn(cat, (char *)&ashort, sizeof(short));
}
}
@@ -2350,8 +2446,9 @@ S_pack_rec(pTHX_ SV *cat, register tempsym_t* symptr, register SV **beglist, SV
case 's':
while (len-- > 0) {
fromstr = NEXTFROM;
- ashort = (I16)SvIV(fromstr);
- CAT16(cat, &ashort);
+ ai16 = (I16)SvIV(fromstr);
+ DO_BO_PACK(ai16, 16);
+ CAT16(cat, &ai16);
}
break;
case 'I':
@@ -2359,6 +2456,7 @@ S_pack_rec(pTHX_ SV *cat, register tempsym_t* symptr, register SV **beglist, SV
while (len-- > 0) {
fromstr = NEXTFROM;
auint = SvUV(fromstr);
+ DO_BO_PACK(auint, i);
sv_catpvn(cat, (char*)&auint, sizeof(unsigned int));
}
break;
@@ -2366,6 +2464,13 @@ S_pack_rec(pTHX_ SV *cat, register tempsym_t* symptr, register SV **beglist, SV
while (len-- > 0) {
fromstr = NEXTFROM;
aiv = SvIV(fromstr);
+#if IVSIZE == INTSIZE
+ DO_BO_PACK(aiv, i);
+#elif IVSIZE == LONGSIZE
+ DO_BO_PACK(aiv, l);
+#elif defined(HAS_QUAD) && IVSIZE == U64SIZE
+ DO_BO_PACK(aiv, 64);
+#endif
sv_catpvn(cat, (char*)&aiv, IVSIZE);
}
break;
@@ -2373,6 +2478,13 @@ S_pack_rec(pTHX_ SV *cat, register tempsym_t* symptr, register SV **beglist, SV
while (len-- > 0) {
fromstr = NEXTFROM;
auv = SvUV(fromstr);
+#if UVSIZE == INTSIZE
+ DO_BO_PACK(auv, i);
+#elif UVSIZE == LONGSIZE
+ DO_BO_PACK(auv, l);
+#elif defined(HAS_QUAD) && UVSIZE == U64SIZE
+ DO_BO_PACK(auv, 64);
+#endif
sv_catpvn(cat, (char*)&auv, UVSIZE);
}
break;
@@ -2455,17 +2567,18 @@ S_pack_rec(pTHX_ SV *cat, register tempsym_t* symptr, register SV **beglist, SV
sv_catpvn(cat, in, (buf + sizeof(buf)) - in);
}
else {
- char *from, *result, *in;
+ const char *from;
+ char *result, *in;
SV *norm;
STRLEN len;
bool done;
/* Copy string and check for compliance */
- from = SvPV(fromstr, len);
+ from = SvPV_const(fromstr, len);
if ((norm = is_an_int(from, len)) == NULL)
Perl_croak(aTHX_ "Can only compress unsigned integers in pack");
- New('w', result, len, char);
+ Newx(result, len, char);
in = result + len;
done = FALSE;
while (!done)
@@ -2482,37 +2595,43 @@ S_pack_rec(pTHX_ SV *cat, register tempsym_t* symptr, register SV **beglist, SV
while (len-- > 0) {
fromstr = NEXTFROM;
aint = SvIV(fromstr);
+ DO_BO_PACK(aint, i);
sv_catpvn(cat, (char*)&aint, sizeof(int));
}
break;
+#ifdef PERL_PACK_CAN_SHRIEKSIGN
+ case 'N' | TYPE_IS_SHRIEKING:
+#endif
case 'N':
while (len-- > 0) {
fromstr = NEXTFROM;
- aulong = SvUV(fromstr);
+ au32 = SvUV(fromstr);
#ifdef HAS_HTONL
- aulong = PerlSock_htonl(aulong);
+ au32 = PerlSock_htonl(au32);
#endif
- CAT32(cat, &aulong);
+ CAT32(cat, &au32);
}
break;
+#ifdef PERL_PACK_CAN_SHRIEKSIGN
+ case 'V' | TYPE_IS_SHRIEKING:
+#endif
case 'V':
while (len-- > 0) {
fromstr = NEXTFROM;
- aulong = SvUV(fromstr);
+ au32 = SvUV(fromstr);
#ifdef HAS_HTOVL
- aulong = htovl(aulong);
+ au32 = htovl(au32);
#endif
- CAT32(cat, &aulong);
+ CAT32(cat, &au32);
}
break;
case 'L' | TYPE_IS_SHRIEKING:
#if LONGSIZE != SIZE32
{
- unsigned long aulong;
-
while (len-- > 0) {
fromstr = NEXTFROM;
aulong = SvUV(fromstr);
+ DO_BO_PACK(aulong, l);
sv_catpvn(cat, (char *)&aulong, sizeof(unsigned long));
}
}
@@ -2524,19 +2643,19 @@ S_pack_rec(pTHX_ SV *cat, register tempsym_t* symptr, register SV **beglist, SV
{
while (len-- > 0) {
fromstr = NEXTFROM;
- aulong = SvUV(fromstr);
- CAT32(cat, &aulong);
+ au32 = SvUV(fromstr);
+ DO_BO_PACK(au32, 32);
+ CAT32(cat, &au32);
}
}
break;
case 'l' | TYPE_IS_SHRIEKING:
#if LONGSIZE != SIZE32
{
- long along;
-
while (len-- > 0) {
fromstr = NEXTFROM;
along = SvIV(fromstr);
+ DO_BO_PACK(along, l);
sv_catpvn(cat, (char *)&along, sizeof(long));
}
}
@@ -2547,8 +2666,9 @@ S_pack_rec(pTHX_ SV *cat, register tempsym_t* symptr, register SV **beglist, SV
case 'l':
while (len-- > 0) {
fromstr = NEXTFROM;
- along = SvIV(fromstr);
- CAT32(cat, &along);
+ ai32 = SvIV(fromstr);
+ DO_BO_PACK(ai32, 32);
+ CAT32(cat, &ai32);
}
break;
#ifdef HAS_QUAD
@@ -2556,6 +2676,7 @@ S_pack_rec(pTHX_ SV *cat, register tempsym_t* symptr, register SV **beglist, SV
while (len-- > 0) {
fromstr = NEXTFROM;
auquad = (Uquad_t)SvUV(fromstr);
+ DO_BO_PACK(auquad, 64);
sv_catpvn(cat, (char*)&auquad, sizeof(Uquad_t));
}
break;
@@ -2563,6 +2684,7 @@ S_pack_rec(pTHX_ SV *cat, register tempsym_t* symptr, register SV **beglist, SV
while (len-- > 0) {
fromstr = NEXTFROM;
aquad = (Quad_t)SvIV(fromstr);
+ DO_BO_PACK(aquad, 64);
sv_catpvn(cat, (char*)&aquad, sizeof(Quad_t));
}
break;
@@ -2573,8 +2695,8 @@ S_pack_rec(pTHX_ SV *cat, register tempsym_t* symptr, register SV **beglist, SV
case 'p':
while (len-- > 0) {
fromstr = NEXTFROM;
- if (fromstr == &PL_sv_undef)
- aptr = NULL;
+ SvGETMAGIC(fromstr);
+ if (!SvOK(fromstr)) aptr = NULL;
else {
STRLEN n_a;
/* XXX better yet, could spirit away the string to
@@ -2590,16 +2712,17 @@ S_pack_rec(pTHX_ SV *cat, register tempsym_t* symptr, register SV **beglist, SV
"Attempt to pack pointer to temporary value");
}
if (SvPOK(fromstr) || SvNIOK(fromstr))
- aptr = SvPV(fromstr,n_a);
+ aptr = (char *) SvPV_nomg_const(fromstr, n_a);
else
- aptr = SvPV_force(fromstr,n_a);
+ aptr = SvPV_force_flags(fromstr, n_a, 0);
}
+ DO_BO_PACK_PC(aptr);
sv_catpvn(cat, (char*)&aptr, sizeof(char*));
}
break;
case 'u':
fromstr = NEXTFROM;
- aptr = SvPV(fromstr, fromlen);
+ aptr = (char *) SvPV_const(fromstr, fromlen);
SvGROW(cat, fromlen * 4 / 3);
if (len <= 2)
len = 45;
@@ -2630,13 +2753,14 @@ PP(pp_pack)
dSP; dMARK; dORIGMARK; dTARGET;
register SV *cat = TARG;
STRLEN fromlen;
- register char *pat = SvPVx(*++MARK, fromlen);
- register char *patend = pat + fromlen;
+ SV *pat_sv = *++MARK;
+ register const char *pat = SvPV_const(pat_sv, fromlen);
+ register const char *patend = pat + fromlen;
MARK++;
sv_setpvn(cat, "", 0);
- packlist(cat, pat, patend, MARK, SP + 1);
+ packlist(cat, (char *) pat, (char *) patend, MARK, SP + 1);
SvSETMAGIC(cat);
SP = ORIGMARK;
@@ -2644,3 +2768,12 @@ PP(pp_pack)
RETURN;
}
+/*
+ * Local variables:
+ * c-indentation-style: bsd
+ * c-basic-offset: 4
+ * indent-tabs-mode: t
+ * End:
+ *
+ * ex: set ts=8 sts=4 sw=4 noet:
+ */
diff --git a/gnu/usr.bin/perl/pp_proto.h b/gnu/usr.bin/perl/pp_proto.h
index 566074e0f21..e0fabeb2bf0 100644
--- a/gnu/usr.bin/perl/pp_proto.h
+++ b/gnu/usr.bin/perl/pp_proto.h
@@ -1,4 +1,5 @@
-/* !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+/* -*- buffer-read-only: t -*-
+ !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
This file is built by opcode.pl from its data. Any changes made here
will be lost!
*/
@@ -391,3 +392,5 @@ PERL_PPDEF(Perl_pp_lock)
PERL_PPDEF(Perl_pp_threadsv)
PERL_PPDEF(Perl_pp_setstate)
PERL_PPDEF(Perl_pp_method_named)
+
+/* ex: set ro: */
diff --git a/gnu/usr.bin/perl/pp_sort.c b/gnu/usr.bin/perl/pp_sort.c
index 028ddf5981e..05b3ec09a44 100644
--- a/gnu/usr.bin/perl/pp_sort.c
+++ b/gnu/usr.bin/perl/pp_sort.c
@@ -1,7 +1,7 @@
/* pp_sort.c
*
* Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
- * 2000, 2001, 2002, 2003, 2004, by Larry Wall and others
+ * 2000, 2001, 2002, 2003, 2004, 2005, 2006, 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.
@@ -46,9 +46,8 @@ static I32 amagic_cmp_locale(pTHX_ SV *a, SV *b);
#define sv_cmp_static Perl_sv_cmp
#define sv_cmp_locale_static Perl_sv_cmp_locale
-#define SORTHINTS(hintsv) \
- (((hintsv) = GvSV(gv_fetchpv("sort::hints", GV_ADDMULTI, SVt_IV))), \
- (SvIOK(hintsv) ? ((I32)SvIV(hintsv)) : 0))
+#define dSORTHINTS SV *hintsv = GvSV(gv_fetchpv("sort::hints", GV_ADDMULTI, SVt_IV))
+#define SORTHINTS (SvIOK(hintsv) ? ((I32)SvIV(hintsv)) : 0)
#ifndef SMALLSORT
#define SMALLSORT (200)
@@ -147,17 +146,17 @@ typedef SV * gptr; /* pointers in our lists */
**
** Unless otherwise specified, pair pointers address the first of two elements.
**
-** b and b+1 are a pair that compare with sense ``sense''.
-** b is the ``bottom'' of adjacent pairs that might form a longer run.
+** b and b+1 are a pair that compare with sense "sense".
+** b is the "bottom" of adjacent pairs that might form a longer run.
**
** p2 parallels b in the list2 array, where runs are defined by
** a pointer chain.
**
-** t represents the ``top'' of the adjacent pairs that might extend
+** t represents the "top" of the adjacent pairs that might extend
** the run beginning at b. Usually, t addresses a pair
** that compares with opposite sense from (b,b+1).
** However, it may also address a singleton element at the end of list1,
-** or it may be equal to ``last'', the first element beyond list1.
+** or it may be equal to "last", the first element beyond list1.
**
** r addresses the Nth pair following b. If this would be beyond t,
** we back it off to t. Only when r is less than t do we consider the
@@ -270,7 +269,7 @@ dynprep(pTHX_ gptr *list1, gptr *list2, size_t nmemb, SVCOMPARE_t cmp)
* problem is subdivided into smaller and smaller parts, the parts
* fit into smaller (and faster) caches. So it doesn't matter how
* many levels of cache exist, quicksort will "find" them, and,
- * as long as smaller is faster, take advanatge of them.
+ * as long as smaller is faster, take advantage of them.
*
* By contrast, consider how the original mergesort algorithm worked.
* Suppose we have five runs (each typically of length 2 after dynprep).
@@ -356,16 +355,16 @@ cmp_desc(pTHX_ gptr a, gptr b)
STATIC void
S_mergesortsv(pTHX_ gptr *base, size_t nmemb, SVCOMPARE_t cmp, U32 flags)
{
- IV i, run, runs, offset;
+ IV i, run, offset;
I32 sense, level;
+ register gptr *f1, *f2, *t, *b, *p;
int iwhich;
- register gptr *f1, *f2, *t, *b, *p, *tp2, *l1, *l2, *q;
- gptr *aux, *list1, *list2;
+ gptr *aux;
gptr *p1;
gptr small[SMALLSORT];
gptr *which[3];
off_runs stack[60], *stackp;
- SVCOMPARE_t savecmp;
+ SVCOMPARE_t savecmp = 0;
if (nmemb <= 1) return; /* sorted trivially */
@@ -376,7 +375,7 @@ S_mergesortsv(pTHX_ gptr *base, size_t nmemb, SVCOMPARE_t cmp, U32 flags)
}
if (nmemb <= SMALLSORT) aux = small; /* use stack for aux array */
- else { New(799,aux,nmemb,gptr); } /* allocate auxilliary array */
+ else { Newx(aux,nmemb,gptr); } /* allocate auxilliary array */
level = 0;
stackp = stack;
stackp->runs = dynprep(aTHX_ base, aux, nmemb, cmp);
@@ -389,11 +388,14 @@ S_mergesortsv(pTHX_ gptr *base, size_t nmemb, SVCOMPARE_t cmp, U32 flags)
* is needed at the next level up. Hop up a level, and,
* as long as stackp->runs is 0, keep merging.
*/
- if ((runs = stackp->runs) == 0) {
+ 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 {
+ register gptr *l1, *l2, *tp2;
offset = stackp->offset;
f1 = p1 = list1 + offset; /* start of first run */
p = tp2 = list2 + offset; /* where merged run will go */
@@ -412,7 +414,7 @@ S_mergesortsv(pTHX_ gptr *base, size_t nmemb, SVCOMPARE_t cmp, U32 flags)
** 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'',
+ ** if "q is strictly less than the other",
** we can't just do
** cmp(q, other) < 0
** because stability demands that we treat equality
@@ -423,7 +425,7 @@ S_mergesortsv(pTHX_ gptr *base, size_t nmemb, SVCOMPARE_t cmp, U32 flags)
** and -1 when equality should look high.
*/
-
+ register gptr *q;
if (cmp(aTHX_ *f1, *f2) <= 0) {
q = f2; b = f1; t = l1;
sense = -1;
@@ -784,10 +786,10 @@ S_qsortsvu(pTHX_ SV ** array, size_t num_elts, SVCOMPARE_t compare)
/* Innoculate large partitions against quadratic behavior */
if (num_elts > QSORT_PLAY_SAFE) {
- register size_t n, j;
- register SV **q;
- for (n = num_elts, q = array; n > 1; ) {
- j = (size_t)(n-- * Drand01());
+ register size_t n;
+ register SV ** const q = array;
+ for (n = num_elts; n > 1; ) {
+ register const size_t j = (size_t)(n-- * Drand01());
temp = q[j];
q[j] = q[n];
q[n] = temp;
@@ -1143,7 +1145,7 @@ S_qsortsvu(pTHX_ SV ** array, size_t num_elts, SVCOMPARE_t compare)
qsort_break_even *= 2;
#endif
#if QSORT_ORDER_GUESS == 3
- int prev_break = qsort_break_even;
+ const int prev_break = qsort_break_even;
qsort_break_even *= qsort_break_even;
if (qsort_break_even < prev_break) {
qsort_break_even = (part_right - part_left) + 1;
@@ -1321,8 +1323,8 @@ static I32
cmpindir(pTHX_ gptr a, gptr b)
{
I32 sense;
- gptr *ap = (gptr *)a;
- gptr *bp = (gptr *)b;
+ gptr * const ap = (gptr *)a;
+ gptr * const bp = (gptr *)b;
if ((sense = PL_sort_RealCmp(aTHX_ *ap, *bp)) == 0)
sense = (ap > bp) ? 1 : ((ap < bp) ? -1 : 0);
@@ -1333,8 +1335,8 @@ static I32
cmpindir_desc(pTHX_ gptr a, gptr b)
{
I32 sense;
- gptr *ap = (gptr *)a;
- gptr *bp = (gptr *)b;
+ gptr * const ap = (gptr *)a;
+ gptr * const bp = (gptr *)b;
/* Reverse the default */
if ((sense = PL_sort_RealCmp(aTHX_ *ap, *bp)))
@@ -1347,9 +1349,10 @@ cmpindir_desc(pTHX_ gptr a, gptr b)
STATIC void
S_qsortsv(pTHX_ gptr *list1, size_t nmemb, SVCOMPARE_t cmp, U32 flags)
{
- SV *hintsv;
- if (SORTHINTS(hintsv) & HINT_SORT_STABLE) {
+ dSORTHINTS;
+
+ if (SORTHINTS & HINT_SORT_STABLE) {
register gptr **pp, *q;
register size_t n, j, i;
gptr *small[SMALLSORT], **indir, tmp;
@@ -1358,7 +1361,7 @@ S_qsortsv(pTHX_ gptr *list1, size_t nmemb, SVCOMPARE_t cmp, U32 flags)
/* Small arrays can use the stack, big ones must be allocated */
if (nmemb <= SMALLSORT) indir = small;
- else { New(1799, indir, nmemb, gptr *); }
+ else { Newx(indir, nmemb, gptr *); }
/* Copy pointers to original array elements into indirect array */
for (n = nmemb, pp = indir, q = list1; n--; ) *pp++ = q++;
@@ -1442,15 +1445,8 @@ Perl_sortsv(pTHX_ SV **array, size_t nmemb, SVCOMPARE_t cmp)
{
void (*sortsvp)(pTHX_ SV **array, size_t nmemb, SVCOMPARE_t cmp, U32 flags)
= S_mergesortsv;
- SV *hintsv;
- I32 hints;
-
- /* Sun's Compiler (cc: WorkShop Compilers 4.2 30 Oct 1996 C 4.2) used
- to miscompile this function under optimization -O. If you get test
- errors related to picking the correct sort() function, try recompiling
- this file without optimiziation. -- A.D. 4/2002.
- */
- hints = SORTHINTS(hintsv);
+ dSORTHINTS;
+ const I32 hints = SORTHINTS;
if (hints & HINT_SORT_QUICKSORT) {
sortsvp = S_qsortsv;
}
@@ -1463,20 +1459,13 @@ Perl_sortsv(pTHX_ SV **array, size_t nmemb, SVCOMPARE_t cmp)
}
-void
+static void
S_sortsv_desc(pTHX_ SV **array, size_t nmemb, SVCOMPARE_t cmp)
{
void (*sortsvp)(pTHX_ SV **array, size_t nmemb, SVCOMPARE_t cmp, U32 flags)
= S_mergesortsv;
- SV *hintsv;
- I32 hints;
-
- /* Sun's Compiler (cc: WorkShop Compilers 4.2 30 Oct 1996 C 4.2) used
- to miscompile this function under optimization -O. If you get test
- errors related to picking the correct sort() function, try recompiling
- this file without optimiziation. -- A.D. 4/2002.
- */
- hints = SORTHINTS(hintsv);
+ dSORTHINTS;
+ const I32 hints = SORTHINTS;
if (hints & HINT_SORT_QUICKSORT) {
sortsvp = S_qsortsv;
}
@@ -1488,6 +1477,10 @@ S_sortsv_desc(pTHX_ SV **array, size_t nmemb, SVCOMPARE_t cmp)
sortsvp(aTHX_ array, nmemb, cmp, 1);
}
+#define SvNSIOK(sv) ((SvFLAGS(sv) & SVf_NOK) || ((SvFLAGS(sv) & (SVf_IOK|SVf_IVisUV)) == SVf_IOK))
+#define SvSIOK(sv) ((SvFLAGS(sv) & (SVf_IOK|SVf_IVisUV)) == SVf_IOK)
+#define SvNSIV(sv) ( SvNOK(sv) ? SvNVX(sv) : ( SvSIOK(sv) ? SvIVX(sv) : sv_2nv(sv) ) )
+
PP(pp_sort)
{
dSP; dMARK; dORIGMARK;
@@ -1503,13 +1496,15 @@ PP(pp_sort)
bool hasargs = FALSE;
I32 is_xsub = 0;
I32 sorting_av = 0;
- U8 private = PL_op->op_private;
- U8 flags = PL_op->op_flags;
+ const U8 priv = PL_op->op_private;
+ const U8 flags = PL_op->op_flags;
void (*sortsvp)(pTHX_ SV **array, size_t nmemb, SVCOMPARE_t cmp)
= Perl_sortsv;
+ I32 all_SIVs = 1;
if (gimme != G_ARRAY) {
SP = MARK;
+ EXTEND(SP,1);
RETPUSHUNDEF;
}
@@ -1526,8 +1521,7 @@ PP(pp_sort)
else {
cv = sv_2cv(*++MARK, &stash, &gv, 0);
if (cv && SvPOK(cv)) {
- STRLEN n_a;
- char *proto = SvPV((SV*)cv, n_a);
+ const char *proto = SvPV_nolen_const((SV*)cv);
if (proto && strEQ(proto, "$$")) {
hasargs = TRUE;
}
@@ -1554,7 +1548,8 @@ PP(pp_sort)
SAVEVPTR(CvROOT(cv)->op_ppaddr);
CvROOT(cv)->op_ppaddr = PL_ppaddr[OP_NULL];
- PAD_SET_CUR(CvPADLIST(cv), 1);
+ SAVECOMPPAD();
+ PAD_SET_CUR_NOSAVE(CvPADLIST(cv), 1);
}
}
}
@@ -1566,7 +1561,7 @@ PP(pp_sort)
/* optimiser converts "@a = sort @a" to "sort \@a";
* in case of tied @a, pessimise: push (@a) onto stack, then assign
* result back to @a at the end of this function */
- if (private & OPpSORT_INPLACE) {
+ if (priv & OPpSORT_INPLACE) {
assert( MARK+1 == SP && *SP && SvTYPE(*SP) == SVt_PVAV);
(void)POPMARK; /* remove mark associated with ex-OP_AASSIGN */
av = (AV*)(*SP);
@@ -1574,7 +1569,7 @@ PP(pp_sort)
if (SvMAGICAL(av)) {
MEXTEND(SP, max);
p2 = SP;
- for (i=0; i < (U32)max; i++) {
+ for (i=0; i < max; i++) {
SV **svp = av_fetch(av, i, FALSE);
*SP++ = (svp) ? *svp : Nullsv;
}
@@ -1589,21 +1584,46 @@ PP(pp_sort)
max = SP - MARK;
}
- if (private & OPpSORT_DESCEND) {
+ if (priv & OPpSORT_DESCEND) {
sortsvp = S_sortsv_desc;
}
- /* shuffle stack down, removing optional initial cv (p1!=p2), plus any
- * nulls; also stringify any args */
+ /* shuffle stack down, removing optional initial cv (p1!=p2), plus
+ * any nulls; also stringify or converting to integer or number as
+ * required any args */
for (i=max; i > 0 ; i--) {
if ((*p1 = *p2++)) { /* Weed out nulls. */
SvTEMP_off(*p1);
- if (!PL_sortcop && !SvPOK(*p1)) {
- STRLEN n_a;
- if (SvAMAGIC(*p1))
- overloading = 1;
- else
- (void)sv_2pv(*p1, &n_a);
+ if (!PL_sortcop) {
+ if (priv & OPpSORT_NUMERIC) {
+ if (priv & OPpSORT_INTEGER) {
+ if (!SvIOK(*p1)) {
+ if (SvAMAGIC(*p1))
+ overloading = 1;
+ else
+ (void)sv_2iv(*p1);
+ }
+ }
+ else {
+ if (!SvNSIOK(*p1)) {
+ if (SvAMAGIC(*p1))
+ overloading = 1;
+ else
+ (void)sv_2nv(*p1);
+ }
+ if (all_SIVs && !SvSIOK(*p1))
+ all_SIVs = 0;
+ }
+ }
+ else {
+ if (!SvPOK(*p1)) {
+ if (SvAMAGIC(*p1))
+ overloading = 1;
+ else
+ (void)sv_2pv_flags(*p1, 0,
+ SV_GMAGIC|SV_CONST_RETURN);
+ }
+ }
}
p1++;
}
@@ -1618,7 +1638,7 @@ PP(pp_sort)
if (PL_sortcop) {
PERL_CONTEXT *cx;
SV** newsp;
- bool oldcatch = CATCH_GET;
+ const bool oldcatch = CATCH_GET;
SAVETMPS;
SAVEOP();
@@ -1674,17 +1694,17 @@ PP(pp_sort)
MEXTEND(SP, 20); /* Can't afford stack realloc on signal. */
start = sorting_av ? AvARRAY(av) : ORIGMARK+1;
sortsvp(aTHX_ start, max,
- (private & OPpSORT_NUMERIC)
- ? ( (private & OPpSORT_INTEGER)
+ (priv & OPpSORT_NUMERIC)
+ ? ( ( ( priv & OPpSORT_INTEGER) || all_SIVs)
? ( overloading ? amagic_i_ncmp : sv_i_ncmp)
- : ( overloading ? amagic_ncmp : sv_ncmp))
+ : ( overloading ? amagic_ncmp : sv_ncmp ) )
: ( IN_LOCALE_RUNTIME
? ( overloading
? amagic_cmp_locale
: sv_cmp_locale_static)
: ( overloading ? amagic_cmp : sv_cmp_static)));
}
- if (private & OPpSORT_REVERSE) {
+ if (priv & OPpSORT_REVERSE) {
SV **q = start+max-1;
while (start < q) {
SV *tmp = *start;
@@ -1695,18 +1715,15 @@ PP(pp_sort)
}
if (av && !sorting_av) {
/* simulate pp_aassign of tied AV */
- SV *sv;
- SV** base, **didstore;
- for (base = ORIGMARK+1, i=0; i < max; i++) {
- sv = NEWSV(28,0);
- sv_setsv(sv, base[i]);
- base[i] = sv;
+ SV** const base = ORIGMARK+1;
+ for (i=0; i < max; i++) {
+ base[i] = newSVsv(base[i]);
}
av_clear(av);
av_extend(av, max);
for (i=0; i < max; i++) {
- sv = base[i];
- didstore = av_store(av, i, sv);
+ SV * const sv = base[i];
+ SV ** const didstore = av_store(av, i, sv);
if (SvSMAGICAL(sv))
mg_set(sv);
if (!didstore)
@@ -1721,8 +1738,8 @@ PP(pp_sort)
static I32
sortcv(pTHX_ SV *a, SV *b)
{
- I32 oldsaveix = PL_savestack_ix;
- I32 oldscopeix = PL_scopestack_ix;
+ const I32 oldsaveix = PL_savestack_ix;
+ const I32 oldscopeix = PL_scopestack_ix;
I32 result;
GvSV(PL_firstgv) = a;
GvSV(PL_secondgv) = b;
@@ -1744,27 +1761,25 @@ sortcv(pTHX_ SV *a, SV *b)
static I32
sortcv_stacked(pTHX_ SV *a, SV *b)
{
- I32 oldsaveix = PL_savestack_ix;
- I32 oldscopeix = PL_scopestack_ix;
+ const I32 oldsaveix = PL_savestack_ix;
+ const I32 oldscopeix = PL_scopestack_ix;
I32 result;
- AV *av;
-
#ifdef USE_5005THREADS
- av = (AV*)PAD_SVl(0);
+ AV * const av = (AV*)PAD_SVl(0);
#else
- av = GvAV(PL_defgv);
+ AV * const av = GvAV(PL_defgv);
#endif
if (AvMAX(av) < 1) {
SV** ary = AvALLOC(av);
if (AvARRAY(av) != ary) {
AvMAX(av) += AvARRAY(av) - AvALLOC(av);
- SvPVX(av) = (char*)ary;
+ SvPV_set(av, (char*)ary);
}
if (AvMAX(av) < 1) {
AvMAX(av) = 1;
Renew(ary,2,SV*);
- SvPVX(av) = (char*)ary;
+ SvPV_set(av, (char*)ary);
}
}
AvFILLp(av) = 1;
@@ -1790,10 +1805,10 @@ static I32
sortcv_xsub(pTHX_ SV *a, SV *b)
{
dSP;
- I32 oldsaveix = PL_savestack_ix;
- I32 oldscopeix = PL_scopestack_ix;
+ const I32 oldsaveix = PL_savestack_ix;
+ const I32 oldscopeix = PL_scopestack_ix;
+ CV * const cv=(CV*)PL_sortcop;
I32 result;
- CV *cv=(CV*)PL_sortcop;
SP = PL_stack_base;
PUSHMARK(SP);
@@ -1818,47 +1833,41 @@ sortcv_xsub(pTHX_ SV *a, SV *b)
static I32
sv_ncmp(pTHX_ SV *a, SV *b)
{
- NV nv1 = SvNV(a);
- NV nv2 = SvNV(b);
+ const NV nv1 = SvNSIV(a);
+ const NV nv2 = SvNSIV(b);
return nv1 < nv2 ? -1 : nv1 > nv2 ? 1 : 0;
}
static I32
sv_i_ncmp(pTHX_ SV *a, SV *b)
{
- IV iv1 = SvIV(a);
- IV iv2 = SvIV(b);
+ const IV iv1 = SvIV(a);
+ const IV iv2 = SvIV(b);
return iv1 < iv2 ? -1 : iv1 > iv2 ? 1 : 0;
}
-#define tryCALL_AMAGICbin(left,right,meth,svp) STMT_START { \
- *svp = Nullsv; \
- if (PL_amagic_generation) { \
- if (SvAMAGIC(left)||SvAMAGIC(right))\
- *svp = amagic_call(left, \
- right, \
- CAT2(meth,_amg), \
- 0); \
- } \
- } STMT_END
+
+#define tryCALL_AMAGICbin(left,right,meth) \
+ (PL_amagic_generation && (SvAMAGIC(left)||SvAMAGIC(right))) \
+ ? amagic_call(left, right, CAT2(meth,_amg), 0) \
+ : Nullsv;
static I32
amagic_ncmp(pTHX_ register SV *a, register SV *b)
{
- SV *tmpsv;
- tryCALL_AMAGICbin(a,b,ncmp,&tmpsv);
+ SV * const tmpsv = tryCALL_AMAGICbin(a,b,ncmp);
if (tmpsv) {
- NV d;
-
if (SvIOK(tmpsv)) {
- I32 i = SvIVX(tmpsv);
+ const I32 i = SvIVX(tmpsv);
if (i > 0)
return 1;
return i? -1 : 0;
}
- d = SvNV(tmpsv);
- if (d > 0)
- return 1;
- return d? -1 : 0;
+ else {
+ const NV d = SvNV(tmpsv);
+ if (d > 0)
+ return 1;
+ return d ? -1 : 0;
+ }
}
return sv_ncmp(aTHX_ a, b);
}
@@ -1866,21 +1875,20 @@ amagic_ncmp(pTHX_ register SV *a, register SV *b)
static I32
amagic_i_ncmp(pTHX_ register SV *a, register SV *b)
{
- SV *tmpsv;
- tryCALL_AMAGICbin(a,b,ncmp,&tmpsv);
+ SV * const tmpsv = tryCALL_AMAGICbin(a,b,ncmp);
if (tmpsv) {
- NV d;
-
if (SvIOK(tmpsv)) {
- I32 i = SvIVX(tmpsv);
+ const I32 i = SvIVX(tmpsv);
if (i > 0)
return 1;
return i? -1 : 0;
}
- d = SvNV(tmpsv);
- if (d > 0)
- return 1;
- return d? -1 : 0;
+ else {
+ const NV d = SvNV(tmpsv);
+ if (d > 0)
+ return 1;
+ return d ? -1 : 0;
+ }
}
return sv_i_ncmp(aTHX_ a, b);
}
@@ -1888,21 +1896,20 @@ amagic_i_ncmp(pTHX_ register SV *a, register SV *b)
static I32
amagic_cmp(pTHX_ register SV *str1, register SV *str2)
{
- SV *tmpsv;
- tryCALL_AMAGICbin(str1,str2,scmp,&tmpsv);
+ SV * const tmpsv = tryCALL_AMAGICbin(str1,str2,scmp);
if (tmpsv) {
- NV d;
-
if (SvIOK(tmpsv)) {
- I32 i = SvIVX(tmpsv);
+ const I32 i = SvIVX(tmpsv);
if (i > 0)
return 1;
return i? -1 : 0;
}
- d = SvNV(tmpsv);
- if (d > 0)
- return 1;
- return d? -1 : 0;
+ else {
+ const NV d = SvNV(tmpsv);
+ if (d > 0)
+ return 1;
+ return d? -1 : 0;
+ }
}
return sv_cmp(str1, str2);
}
@@ -1910,21 +1917,30 @@ amagic_cmp(pTHX_ register SV *str1, register SV *str2)
static I32
amagic_cmp_locale(pTHX_ register SV *str1, register SV *str2)
{
- SV *tmpsv;
- tryCALL_AMAGICbin(str1,str2,scmp,&tmpsv);
+ SV * const tmpsv = tryCALL_AMAGICbin(str1,str2,scmp);
if (tmpsv) {
- NV d;
-
if (SvIOK(tmpsv)) {
- I32 i = SvIVX(tmpsv);
+ const I32 i = SvIVX(tmpsv);
if (i > 0)
return 1;
return i? -1 : 0;
}
- d = SvNV(tmpsv);
- if (d > 0)
- return 1;
- return d? -1 : 0;
+ else {
+ const NV d = SvNV(tmpsv);
+ if (d > 0)
+ return 1;
+ return d? -1 : 0;
+ }
}
return sv_cmp_locale(str1, str2);
}
+
+/*
+ * Local variables:
+ * c-indentation-style: bsd
+ * c-basic-offset: 4
+ * indent-tabs-mode: t
+ * End:
+ *
+ * ex: set ts=8 sts=4 sw=4 noet:
+ */
diff --git a/gnu/usr.bin/perl/reentr.c b/gnu/usr.bin/perl/reentr.c
index 7770e0b81f1..95d8521da67 100644
--- a/gnu/usr.bin/perl/reentr.c
+++ b/gnu/usr.bin/perl/reentr.c
@@ -1,7 +1,8 @@
-/*
+/* -*- buffer-read-only: t -*-
+ *
* reentr.c
*
- * Copyright (C) 2002, 2003, by Larry Wall and others
+ * Copyright (C) 2002, 2003, 2005 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.
@@ -146,10 +147,10 @@ Perl_reentrant_size(pTHX) {
void
Perl_reentrant_init(pTHX) {
#ifdef USE_REENTRANT_API
- New(31337, PL_reentrant_buffer, 1, REENTR);
+ Newx(PL_reentrant_buffer, 1, REENTR);
Perl_reentrant_size(aTHX);
#ifdef HAS_ASCTIME_R
- New(31338, PL_reentrant_buffer->_asctime_buffer, PL_reentrant_buffer->_asctime_size, char);
+ 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
@@ -157,7 +158,7 @@ Perl_reentrant_init(pTHX) {
#endif
#endif /* HAS_CRYPT_R */
#ifdef HAS_CTIME_R
- New(31338, PL_reentrant_buffer->_ctime_buffer, PL_reentrant_buffer->_ctime_size, char);
+ Newx(PL_reentrant_buffer->_ctime_buffer, PL_reentrant_buffer->_ctime_size, char);
#endif /* HAS_CTIME_R */
#ifdef HAS_DRAND48_R
#endif /* HAS_DRAND48_R */
@@ -165,42 +166,42 @@ Perl_reentrant_init(pTHX) {
# ifdef USE_GRENT_FPTR
PL_reentrant_buffer->_grent_fptr = NULL;
# endif
- New(31338, PL_reentrant_buffer->_grent_buffer, PL_reentrant_buffer->_grent_size, char);
+ 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)
- New(31338, PL_reentrant_buffer->_hostent_buffer, PL_reentrant_buffer->_hostent_size, char);
+ Newx(PL_reentrant_buffer->_hostent_buffer, PL_reentrant_buffer->_hostent_size, char);
#endif
#endif /* HAS_GETHOSTBYNAME_R */
#ifdef HAS_GETLOGIN_R
- New(31338, PL_reentrant_buffer->_getlogin_buffer, PL_reentrant_buffer->_getlogin_size, char);
+ 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)
- New(31338, PL_reentrant_buffer->_netent_buffer, PL_reentrant_buffer->_netent_size, char);
+ 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)
- New(31338, PL_reentrant_buffer->_protoent_buffer, PL_reentrant_buffer->_protoent_size, char);
+ Newx(PL_reentrant_buffer->_protoent_buffer, PL_reentrant_buffer->_protoent_size, char);
#endif
#endif /* HAS_GETPROTOBYNAME_R */
#ifdef HAS_GETPWNAM_R
# ifdef USE_PWENT_FPTR
PL_reentrant_buffer->_pwent_fptr = NULL;
# endif
- New(31338, PL_reentrant_buffer->_pwent_buffer, PL_reentrant_buffer->_pwent_size, char);
+ 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)
- New(31338, PL_reentrant_buffer->_servent_buffer, PL_reentrant_buffer->_servent_size, char);
+ Newx(PL_reentrant_buffer->_servent_buffer, PL_reentrant_buffer->_servent_size, char);
#endif
#endif /* HAS_GETSERVBYNAME_R */
#ifdef HAS_GETSPNAM_R
# ifdef USE_SPENT_FPTR
PL_reentrant_buffer->_spent_fptr = NULL;
# endif
- New(31338, PL_reentrant_buffer->_spent_buffer, PL_reentrant_buffer->_spent_size, char);
+ Newx(PL_reentrant_buffer->_spent_buffer, PL_reentrant_buffer->_spent_size, char);
#endif /* HAS_GETSPNAM_R */
#ifdef HAS_GMTIME_R
#endif /* HAS_GMTIME_R */
@@ -215,13 +216,13 @@ Perl_reentrant_init(pTHX) {
PL_reentrant_buffer->_readdir64_struct = (struct dirent64*)safemalloc(PL_reentrant_buffer->_readdir64_size);
#endif /* HAS_READDIR64_R */
#ifdef HAS_SETLOCALE_R
- New(31338, PL_reentrant_buffer->_setlocale_buffer, PL_reentrant_buffer->_setlocale_size, char);
+ Newx(PL_reentrant_buffer->_setlocale_buffer, PL_reentrant_buffer->_setlocale_size, char);
#endif /* HAS_SETLOCALE_R */
#ifdef HAS_STRERROR_R
- New(31338, PL_reentrant_buffer->_strerror_buffer, PL_reentrant_buffer->_strerror_size, char);
+ Newx(PL_reentrant_buffer->_strerror_buffer, PL_reentrant_buffer->_strerror_size, char);
#endif /* HAS_STRERROR_R */
#ifdef HAS_TTYNAME_R
- New(31338, PL_reentrant_buffer->_ttyname_buffer, PL_reentrant_buffer->_ttyname_size, char);
+ Newx(PL_reentrant_buffer->_ttyname_buffer, PL_reentrant_buffer->_ttyname_size, char);
#endif /* HAS_TTYNAME_R */
#endif /* USE_REENTRANT_API */
@@ -345,7 +346,7 @@ Perl_reentrant_retry(const char *f, ...)
retptr = gethostbyaddr(p0, asize, anint); break;
case OP_GHBYNAME:
p0 = va_arg(ap, void *);
- retptr = gethostbyname(p0); break;
+ retptr = gethostbyname((char *)p0); break;
case OP_GHOSTENT:
retptr = gethostent(); break;
default:
@@ -373,7 +374,7 @@ Perl_reentrant_retry(const char *f, ...)
switch (PL_op->op_type) {
case OP_GGRNAM:
p0 = va_arg(ap, void *);
- retptr = getgrnam(p0); break;
+ retptr = getgrnam((char *)p0); break;
case OP_GGRGID:
#if Gid_t_size < INTSIZE
gid = (Gid_t)va_arg(ap, int);
@@ -412,7 +413,7 @@ Perl_reentrant_retry(const char *f, ...)
retptr = getnetbyaddr(net, anint); break;
case OP_GNBYNAME:
p0 = va_arg(ap, void *);
- retptr = getnetbyname(p0); break;
+ retptr = getnetbyname((char *)p0); break;
case OP_GNETENT:
retptr = getnetent(); break;
default:
@@ -440,7 +441,7 @@ Perl_reentrant_retry(const char *f, ...)
switch (PL_op->op_type) {
case OP_GPWNAM:
p0 = va_arg(ap, void *);
- retptr = getpwnam(p0); break;
+ retptr = getpwnam((char *)p0); break;
case OP_GPWUID:
#if Uid_t_size < INTSIZE
uid = (Uid_t)va_arg(ap, int);
@@ -474,7 +475,7 @@ Perl_reentrant_retry(const char *f, ...)
switch (PL_op->op_type) {
case OP_GPBYNAME:
p0 = va_arg(ap, void *);
- retptr = getprotobyname(p0); break;
+ retptr = getprotobyname((char *)p0); break;
case OP_GPBYNUMBER:
anint = va_arg(ap, int);
retptr = getprotobynumber(anint); break;
@@ -505,11 +506,11 @@ Perl_reentrant_retry(const char *f, ...)
case OP_GSBYNAME:
p0 = va_arg(ap, void *);
p1 = va_arg(ap, void *);
- retptr = getservbyname(p0, p1); break;
+ retptr = getservbyname((char *)p0, (char *)p1); break;
case OP_GSBYPORT:
anint = va_arg(ap, int);
p0 = va_arg(ap, void *);
- retptr = getservbyport(anint, p0); break;
+ retptr = getservbyport(anint, (char *)p0); break;
case OP_GSERVENT:
retptr = getservent(); break;
default:
@@ -530,3 +531,4 @@ Perl_reentrant_retry(const char *f, ...)
return retptr;
}
+/* ex: set ro: */
diff --git a/gnu/usr.bin/perl/reentr.h b/gnu/usr.bin/perl/reentr.h
index c58a9ef323b..7b13f3e77b7 100644
--- a/gnu/usr.bin/perl/reentr.h
+++ b/gnu/usr.bin/perl/reentr.h
@@ -1,7 +1,8 @@
-/*
+/* -*- buffer-read-only: t -*-
+ *
* reentr.h
*
- * Copyright (C) 2002, 2003, by Larry Wall and others
+ * Copyright (C) 2002, 2003, 2005 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.
@@ -11,7 +12,7 @@
*/
#ifndef REENTR_H
-#define REENTR_H
+#define REENTR_H
#ifdef USE_REENTRANT_API
diff --git a/gnu/usr.bin/perl/reentr.pl b/gnu/usr.bin/perl/reentr.pl
index fa8b98e9e5f..46ff921c70e 100644
--- a/gnu/usr.bin/perl/reentr.pl
+++ b/gnu/usr.bin/perl/reentr.pl
@@ -5,6 +5,11 @@
# and optionally also the relevant metaconfig units (-U option).
#
+BEGIN {
+ # Get function prototypes
+ require 'regen_lib.pl';
+}
+
use strict;
use Getopt::Std;
my %opts;
@@ -35,13 +40,16 @@ my %map = (
# Example #3: S_CBI means type func_r(const char*, char*, int)
+safer_unlink 'reentr.h';
die "reentr.h: $!" unless open(H, ">reentr.h");
+binmode H;
select H;
print <<EOF;
-/*
+/* -*- buffer-read-only: t -*-
+ *
* reentr.h
*
- * Copyright (C) 2002, 2003, by Larry Wall and others
+ * Copyright (C) 2002, 2003, 2005, 2006 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.
@@ -51,7 +59,7 @@ print <<EOF;
*/
#ifndef REENTR_H
-#define REENTR_H
+#define REENTR_H
#ifdef USE_REENTRANT_API
@@ -173,6 +181,7 @@ while (<DATA>) { # Read in the protypes.
# If given the -U option open up the metaconfig unit for this function.
if ($opts{U} && open(U, ">d_${func}_r.U")) {
+ binmode U;
select U;
}
@@ -337,7 +346,7 @@ sub pushssif {
sub pushinitfree {
my $func = shift;
push @init, <<EOF;
- New(31338, PL_reentrant_buffer->_${func}_buffer, PL_reentrant_buffer->_${func}_size, char);
+ Newx(PL_reentrant_buffer->_${func}_buffer, PL_reentrant_buffer->_${func}_size, char);
EOF
push @free, <<EOF;
Safefree(PL_reentrant_buffer->_${func}_buffer);
@@ -582,7 +591,7 @@ EOF
EOF
push @init, <<EOF;
#if !($D)
- New(31338, PL_reentrant_buffer->_${genfunc}_buffer, PL_reentrant_buffer->_${genfunc}_size, char);
+ Newx(PL_reentrant_buffer->_${genfunc}_buffer, PL_reentrant_buffer->_${genfunc}_size, char);
#endif
EOF
push @free, <<EOF;
@@ -684,6 +693,13 @@ EOF
$w = ", $w" if length $v;
}
my $call = "${func}_r($v$w)";
+
+ # Must make OpenBSD happy
+ my $memzero = '';
+ if($p =~ /D$/ &&
+ ($genfunc eq 'protoent' || $genfunc eq 'servent')) {
+ $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
EOF
@@ -698,25 +714,27 @@ EOF
$call = qq[((PL_REENTRANT_RETINT = $call)$test ? $true : (((PL_REENTRANT_RETINT == ERANGE) || (errno == ERANGE)) ? ($seenm{$func}{$seenr{$func}})Perl_reentrant_retry("$func"$rv) : 0))];
my $arg = join(", ", map { $seenm{$func}{substr($a,$_,1)}." ".$v[$_] } 0..$seenu{$func}-1);
my $ret = $seenr{$func} eq 'V' ? "" : "return ";
+ my $memzero_ = $memzero ? "$memzero, " : "";
push @wrap, <<EOF;
# ifdef PERL_CORE
-# define $func($v) $call
+# define $func($v) ($memzero_$call)
# else
# if defined(__GNUC__) && !defined(__STRICT_ANSI__) && !defined(PERL_GCC_PEDANTIC)
-# define $func($v) ({int PL_REENTRANT_RETINT; $call;})
+# define $func($v) ({int PL_REENTRANT_RETINT; $memzero; $call;})
# else
# define $func($v) Perl_reentr_$func($v)
static $seenm{$func}{$seenr{$func}} Perl_reentr_$func($arg) {
dTHX;
int PL_REENTRANT_RETINT;
- $ret$call;
+ $memzero;
+ $ret$call;
}
# endif
# endif
EOF
} else {
push @wrap, <<EOF;
-# define $func($v) ($call$test ? $true : ((errno == ERANGE) ? Perl_reentrant_retry("$func"$rv) : 0))
+# define $func($v) ($call$test ? $true : ((errno == ERANGE) ? ($seent{$func} *) Perl_reentrant_retry("$func"$rv) : 0))
EOF
}
} else {
@@ -813,6 +831,17 @@ print <<EOF;
#ifdef USE_REENTRANT_API
+/*
+ * 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__)
+# define REENTR_MEMZERO(a,b) memzero(a,b)
+#else
+# define REENTR_MEMZERO(a,b) 0
+#endif
+
/* The reentrant wrappers. */
@wrap
@@ -821,19 +850,23 @@ print <<EOF;
#endif
+/* ex: set ro: */
EOF
close(H);
# Prepare to write the reentr.c.
+safer_unlink 'reentr.c';
die "reentr.c: $!" unless open(C, ">reentr.c");
+binmode C;
select C;
print <<EOF;
-/*
+/* -*- buffer-read-only: t -*-
+ *
* reentr.c
*
- * Copyright (C) 2002, 2003, by Larry Wall and others
+ * Copyright (C) 2002, 2003, 2005, 2006 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.
@@ -869,7 +902,7 @@ Perl_reentrant_size(pTHX) {
void
Perl_reentrant_init(pTHX) {
#ifdef USE_REENTRANT_API
- New(31337, PL_reentrant_buffer, 1, REENTR);
+ Newx(PL_reentrant_buffer, 1, REENTR);
Perl_reentrant_size(aTHX);
@init
#endif /* USE_REENTRANT_API */
@@ -927,7 +960,7 @@ Perl_reentrant_retry(const char *f, ...)
retptr = gethostbyaddr(p0, asize, anint); break;
case OP_GHBYNAME:
p0 = va_arg(ap, void *);
- retptr = gethostbyname(p0); break;
+ retptr = gethostbyname((char *)p0); break;
case OP_GHOSTENT:
retptr = gethostent(); break;
default:
@@ -955,7 +988,7 @@ Perl_reentrant_retry(const char *f, ...)
switch (PL_op->op_type) {
case OP_GGRNAM:
p0 = va_arg(ap, void *);
- retptr = getgrnam(p0); break;
+ retptr = getgrnam((char *)p0); break;
case OP_GGRGID:
#if Gid_t_size < INTSIZE
gid = (Gid_t)va_arg(ap, int);
@@ -994,7 +1027,7 @@ Perl_reentrant_retry(const char *f, ...)
retptr = getnetbyaddr(net, anint); break;
case OP_GNBYNAME:
p0 = va_arg(ap, void *);
- retptr = getnetbyname(p0); break;
+ retptr = getnetbyname((char *)p0); break;
case OP_GNETENT:
retptr = getnetent(); break;
default:
@@ -1022,7 +1055,7 @@ Perl_reentrant_retry(const char *f, ...)
switch (PL_op->op_type) {
case OP_GPWNAM:
p0 = va_arg(ap, void *);
- retptr = getpwnam(p0); break;
+ retptr = getpwnam((char *)p0); break;
case OP_GPWUID:
#if Uid_t_size < INTSIZE
uid = (Uid_t)va_arg(ap, int);
@@ -1056,7 +1089,7 @@ Perl_reentrant_retry(const char *f, ...)
switch (PL_op->op_type) {
case OP_GPBYNAME:
p0 = va_arg(ap, void *);
- retptr = getprotobyname(p0); break;
+ retptr = getprotobyname((char *)p0); break;
case OP_GPBYNUMBER:
anint = va_arg(ap, int);
retptr = getprotobynumber(anint); break;
@@ -1087,11 +1120,11 @@ Perl_reentrant_retry(const char *f, ...)
case OP_GSBYNAME:
p0 = va_arg(ap, void *);
p1 = va_arg(ap, void *);
- retptr = getservbyname(p0, p1); break;
+ retptr = getservbyname((char *)p0, (char *)p1); break;
case OP_GSBYPORT:
anint = va_arg(ap, int);
p0 = va_arg(ap, void *);
- retptr = getservbyport(anint, p0); break;
+ retptr = getservbyport(anint, (char *)p0); break;
case OP_GSERVENT:
retptr = getservent(); break;
default:
@@ -1112,6 +1145,7 @@ Perl_reentrant_retry(const char *f, ...)
return retptr;
}
+/* ex: set ro: */
EOF
__DATA__
@@ -1132,7 +1166,7 @@ getgrnam S_C |grp |struct group |I_CSBWR|I_CSBIR|S_CBI|I_CSBI|S_CSBI
gethostbyaddr S_CWI |netdb |struct hostent |I_CWISBWRE|S_CWISBWIE|S_CWISBIE|S_TWISBIE|S_CIISBIE|S_CSBIE|S_TSBIE|I_CWISD|I_CIISD|I_CII|I_TsISBWRE|D=struct hostent_data*|T=const void*|s=socklen_t
gethostbyname S_C |netdb |struct hostent |I_CSBWRE|S_CSBIE|I_CSD|D=struct hostent_data*
gethostent S_V |netdb |struct hostent |I_SBWRE|I_SBIE|S_SBIE|S_SBI|I_SBI|I_SD|D=struct hostent_data*
-getlogin B_V |unistd | |I_BW|I_BI|B_BW|B_BI
+getlogin B_V |unistd |char |I_BW|I_BI|B_BW|B_BI
getnetbyaddr S_LI |netdb |struct netent |I_UISBWRE|I_LISBI|S_TISBI|S_LISBI|I_TISD|I_LISD|I_IISD|I_uISBWRE|D=struct netent_data*|T=in_addr_t|U=unsigned long|u=uint32_t
getnetbyname S_C |netdb |struct netent |I_CSBWRE|I_CSBI|S_CSBI|I_CSD|D=struct netent_data*
getnetent S_V |netdb |struct netent |I_SBWRE|I_SBIE|S_SBIE|S_SBI|I_SBI|I_SD|D=struct netent_data*
diff --git a/gnu/usr.bin/perl/regcomp.pl b/gnu/usr.bin/perl/regcomp.pl
index 1809da3b255..e7a9d0588c3 100644
--- a/gnu/usr.bin/perl/regcomp.pl
+++ b/gnu/usr.bin/perl/regcomp.pl
@@ -22,9 +22,11 @@ $tmp_h = 'tmp_reg.h';
unlink $tmp_h if -f $tmp_h;
open OUT, ">$tmp_h";
+binmode OUT;
print OUT <<EOP;
-/* !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+/* -*- buffer-read-only: t -*-
+ !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
This file is built by regcomp.pl from regcomp.sym.
Any changes made here will be lost!
*/
@@ -114,6 +116,7 @@ static const int reg_num = $tot;
#endif /* DEBUGGING */
#endif /* REG_COMP_C */
+/* ex: set ro: */
EOP
close OUT or die "close $tmp_h: $!";
diff --git a/gnu/usr.bin/perl/regen.pl b/gnu/usr.bin/perl/regen.pl
index 5d4c1df2b38..55bd4dc3bba 100644
--- a/gnu/usr.bin/perl/regen.pl
+++ b/gnu/usr.bin/perl/regen.pl
@@ -26,7 +26,8 @@ my %gen = (
'keywords.pl' => [qw[keywords.h]],
'opcode.pl' => [qw[opcode.h opnames.h pp_proto.h pp.sym]],
'regcomp.pl' => [qw[regnodes.h]],
- 'warnings.pl' => [qw[warnings.h lib/warnings.pm]]
+ 'warnings.pl' => [qw[warnings.h lib/warnings.pm]],
+ 'reentr.pl' => [qw[reentr.c reentr.h]],
);
sub do_cksum {
@@ -46,7 +47,7 @@ sub do_cksum {
}
foreach my $pl (qw (keywords.pl opcode.pl embed.pl bytecode.pl
- regcomp.pl warnings.pl autodoc.pl)) {
+ regcomp.pl warnings.pl autodoc.pl reentr.pl)) {
print "$^X $pl\n";
my %cksum0;
%cksum0 = do_cksum($pl) unless $pl eq 'warnings.pl'; # the files were removed
diff --git a/gnu/usr.bin/perl/regnodes.h b/gnu/usr.bin/perl/regnodes.h
index d9dbabe0ad9..dd491fee281 100644
--- a/gnu/usr.bin/perl/regnodes.h
+++ b/gnu/usr.bin/perl/regnodes.h
@@ -1,4 +1,5 @@
-/* !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+/* -*- buffer-read-only: t -*-
+ !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
This file is built by regcomp.pl from regcomp.sym.
Any changes made here will be lost!
*/
@@ -338,3 +339,4 @@ static const int reg_num = 62;
#endif /* DEBUGGING */
#endif /* REG_COMP_C */
+/* ex: set ro: */
diff --git a/gnu/usr.bin/perl/t/comp/parser.t b/gnu/usr.bin/perl/t/comp/parser.t
index cd00b749c50..74d4544df51 100644
--- a/gnu/usr.bin/perl/t/comp/parser.t
+++ b/gnu/usr.bin/perl/t/comp/parser.t
@@ -9,7 +9,7 @@ BEGIN {
}
require "./test.pl";
-plan( tests => 46 );
+plan( tests => 53 );
eval '%@x=0;';
like( $@, qr/^Can't modify hash dereference in repeat \(x\)/, '%@x=0' );
@@ -162,3 +162,25 @@ EOF
eval q{ sub _ __FILE__ {} };
like($@, qr/Illegal declaration of subroutine main::_/, "__FILE__ as prototype");
}
+
+# [perl #36313] perl -e "1for$[=0" crash
+{
+ my $x;
+ $x = 1 for ($[) = 0;
+ pass('optimized assignment to $[ used to segfault in list context');
+ if ($[ = 0) { $x = 1 }
+ pass('optimized assignment to $[ used to segfault in scalar context');
+ $x = ($[=2.4);
+ is($x, 2, 'scalar assignment to $[ behaves like other variables');
+ $x = (($[) = 0);
+ is($x, 1, 'list assignment to $[ behaves like other variables');
+ $x = eval q{ ($[, $x) = (0) };
+ like($@, qr/That use of \$\[ is unsupported/,
+ 'cannot assign to $[ in a list');
+ eval q{ ($[) = (0, 1) };
+ like($@, qr/That use of \$\[ is unsupported/,
+ 'cannot assign list of >1 elements to $[');
+ eval q{ ($[) = () };
+ like($@, qr/That use of \$\[ is unsupported/,
+ 'cannot assign list of <1 elements to $[');
+}
diff --git a/gnu/usr.bin/perl/t/io/binmode.t b/gnu/usr.bin/perl/t/io/binmode.t
index be198ae645c..41eff4a24f4 100644
--- a/gnu/usr.bin/perl/t/io/binmode.t
+++ b/gnu/usr.bin/perl/t/io/binmode.t
@@ -35,7 +35,7 @@ SKIP: {
skip "minitest", 1 if $ENV{PERL_CORE_MINITEST};
skip "no EBADF", 1 if (!exists &Errno::EBADF);
- no warnings 'io';
+ no warnings 'io', 'once';
$! = 0;
binmode(B);
ok($! == &Errno::EBADF);
diff --git a/gnu/usr.bin/perl/t/io/crlf.t b/gnu/usr.bin/perl/t/io/crlf.t
index be514003a5c..c3c23e04ac3 100644
--- a/gnu/usr.bin/perl/t/io/crlf.t
+++ b/gnu/usr.bin/perl/t/io/crlf.t
@@ -15,72 +15,72 @@ END {
}
if (find PerlIO::Layer 'perlio') {
- plan(tests => 16);
- ok(open(FOO,">:crlf",$file));
- ok(print FOO 'a'.((('a' x 14).qq{\n}) x 2000) || close(FOO));
- ok(open(FOO,"<:crlf",$file));
+ plan(tests => 16);
+ ok(open(FOO,">:crlf",$file));
+ ok(print FOO 'a'.((('a' x 14).qq{\n}) x 2000) || close(FOO));
+ ok(open(FOO,"<:crlf",$file));
- my $text;
- { local $/; $text = <FOO> }
- is(count_chars($text, "\015\012"), 0);
- is(count_chars($text, "\n"), 2000);
+ my $text;
+ { local $/; $text = <FOO> }
+ is(count_chars($text, "\015\012"), 0);
+ is(count_chars($text, "\n"), 2000);
- binmode(FOO);
- seek(FOO,0,0);
- { local $/; $text = <FOO> }
- is(count_chars($text, "\015\012"), 2000);
+ binmode(FOO);
+ seek(FOO,0,0);
+ { local $/; $text = <FOO> }
+ is(count_chars($text, "\015\012"), 2000);
- SKIP:
- {
- skip("miniperl can't rely on loading PerlIO::scalar")
- if $ENV{PERL_CORE_MINITEST};
- skip("no PerlIO::scalar") unless $Config{extensions} =~ m!\bPerlIO/scalar\b!;
- require PerlIO::scalar;
- my $fcontents = join "", map {"$_\015\012"} "a".."zzz";
- open my $fh, "<:crlf", \$fcontents;
- local $/ = "xxx";
- local $_ = <$fh>;
- my $pos = tell $fh; # pos must be behind "xxx", before "\nyyy\n"
- seek $fh, $pos, 0;
- $/ = "\n";
- $s = <$fh>.<$fh>;
- ok($s eq "\nxxy\n");
- }
+ SKIP:
+ {
+ skip("miniperl can't rely on loading PerlIO::scalar")
+ if $ENV{PERL_CORE_MINITEST};
+ skip("no PerlIO::scalar") unless $Config{extensions} =~ m!\bPerlIO/scalar\b!;
+ require PerlIO::scalar;
+ my $fcontents = join "", map {"$_\015\012"} "a".."zzz";
+ open my $fh, "<:crlf", \$fcontents;
+ local $/ = "xxx";
+ local $_ = <$fh>;
+ my $pos = tell $fh; # pos must be behind "xxx", before "\nxxy\n"
+ seek $fh, $pos, 0;
+ $/ = "\n";
+ $s = <$fh>.<$fh>;
+ ok($s eq "\nxxy\n");
+ }
- ok(close(FOO));
+ ok(close(FOO));
- # binmode :crlf should not cumulate.
- # Try it first once and then twice so that even UNIXy boxes
- # get to exercise this, for DOSish boxes even once is enough.
- # Try also pushing :utf8 first so that there are other layers
- # in between (this should not matter: CRLF layers still should
- # not accumulate).
- for my $utf8 ('', ':utf8') {
- for my $binmode (1..2) {
- open(FOO, ">$file");
- # require PerlIO; print PerlIO::get_layers(FOO), "\n";
- binmode(FOO, "$utf8:crlf") for 1..$binmode;
- # require PerlIO; print PerlIO::get_layers(FOO), "\n";
- print FOO "Hello\n";
- close FOO;
- open(FOO, "<$file");
- binmode(FOO);
- my $foo = scalar <FOO>;
- close FOO;
- print join(" ", "#", map { sprintf("%02x", $_) } unpack("C*", $foo)),
- "\n";
- ok($foo =~ /\x0d\x0a$/);
- ok($foo !~ /\x0d\x0d/);
- }
- }
+ # binmode :crlf should not cumulate.
+ # Try it first once and then twice so that even UNIXy boxes
+ # get to exercise this, for DOSish boxes even once is enough.
+ # Try also pushing :utf8 first so that there are other layers
+ # in between (this should not matter: CRLF layers still should
+ # not accumulate).
+ for my $utf8 ('', ':utf8') {
+ for my $binmode (1..2) {
+ open(FOO, ">$file");
+ # require PerlIO; print PerlIO::get_layers(FOO), "\n";
+ binmode(FOO, "$utf8:crlf") for 1..$binmode;
+ # require PerlIO; print PerlIO::get_layers(FOO), "\n";
+ print FOO "Hello\n";
+ close FOO;
+ open(FOO, "<$file");
+ binmode(FOO);
+ my $foo = scalar <FOO>;
+ close FOO;
+ print join(" ", "#", map { sprintf("%02x", $_) } unpack("C*", $foo)),
+ "\n";
+ ok($foo =~ /\x0d\x0a$/);
+ ok($foo !~ /\x0d\x0d/);
+ }
+ }
}
else {
- skip_all("No perlio, so no :crlf");
+ skip_all("No perlio, so no :crlf");
}
sub count_chars {
- my($text, $chars) = @_;
- my $seen = 0;
- $seen++ while $text =~ /$chars/g;
- return $seen;
+ my($text, $chars) = @_;
+ my $seen = 0;
+ $seen++ while $text =~ /$chars/g;
+ return $seen;
}
diff --git a/gnu/usr.bin/perl/t/io/crlf_through.t b/gnu/usr.bin/perl/t/io/crlf_through.t
new file mode 100755
index 00000000000..c08099598ef
--- /dev/null
+++ b/gnu/usr.bin/perl/t/io/crlf_through.t
@@ -0,0 +1,10 @@
+#!./perl
+
+BEGIN {
+ chdir 't' if -d 't';
+ @INC = '../lib';
+}
+
+no warnings 'once';
+$main::use_crlf = 1;
+do './io/through.t' or die "no kid script";
diff --git a/gnu/usr.bin/perl/t/io/layers.t b/gnu/usr.bin/perl/t/io/layers.t
index e2c63a957c3..62f77e864a0 100644
--- a/gnu/usr.bin/perl/t/io/layers.t
+++ b/gnu/usr.bin/perl/t/io/layers.t
@@ -31,18 +31,33 @@ my $DOSISH = $^O =~ /^(?:MSWin32|os2|dos|NetWare|mint)$/ ? 1 : 0;
$DOSISH = 1 if !$DOSISH and $^O =~ /^uwin/;
my $NONSTDIO = exists $ENV{PERLIO} && $ENV{PERLIO} ne 'stdio' ? 1 : 0;
my $FASTSTDIO = $Config{d_faststdio} && $Config{usefaststdio} ? 1 : 0;
-
-my $NTEST = 43 - (($DOSISH || !$FASTSTDIO) ? 7 : 0) - ($DOSISH ? 5 : 0);
+my $UNICODE_STDIN;
+if (${^UNICODE} & 1) {
+ if (${^UNICODE} & 64) {
+ # Conditional on the locale
+ $UNICODE_STDIN = ${^UTF8LOCALE};
+ } else {
+ # Unconditional
+ $UNICODE_STDIN = 1;
+ }
+} else {
+ $UNICODE_STDIN = 0;
+}
+my $NTEST = 44 - (($DOSISH || !$FASTSTDIO) ? 7 : 0) - ($DOSISH ? 5 : 0)
+ + $UNICODE_STDIN;
sub PerlIO::F_UTF8 () { 0x00008000 } # from perliol.h
plan tests => $NTEST;
print <<__EOH__;
-# PERLIO = $PERLIO
-# DOSISH = $DOSISH
-# NONSTDIO = $NONSTDIO
-# FASTSTDIO = $FASTSTDIO
+# PERLIO = $PERLIO
+# DOSISH = $DOSISH
+# NONSTDIO = $NONSTDIO
+# FASTSTDIO = $FASTSTDIO
+# UNICODE = ${^UNICODE}
+# UTF8LOCALE = ${^UTF8LOCALE}
+# UNICODE_STDIN = $UNICODE_STDIN
__EOH__
SKIP: {
@@ -93,7 +108,7 @@ SKIP: {
@$expected = grep { $_ ne 'crlf' } @$expected;
}
my $n = scalar @$expected;
- is($n, scalar @$expected, "$id - layers == $n");
+ is(scalar @$result, $n, "$id - layers == $n");
for (my $i = 0; $i < $n; $i++) {
my $j = $expected->[$i];
if (ref $j eq 'CODE') {
@@ -107,7 +122,7 @@ SKIP: {
}
check([ PerlIO::get_layers(STDIN) ],
- [ "stdio" ],
+ $UNICODE_STDIN ? [ "stdio", "utf8" ] : [ "stdio" ],
"STDIN");
open(F, ">:crlf", "afile");
@@ -199,5 +214,12 @@ SKIP: {
close G;
}
+ # Check that PL_sigwarn's reference count is correct, and that
+ # &PerlIO::Layer::NoWarnings isn't prematurely freed.
+ fresh_perl_like (<<'EOT', qr/^CODE/);
+open(UTF, "<:raw:encoding(utf8)", "afile") or die $!;
+print ref *PerlIO::Layer::NoWarnings{CODE};
+EOT
+
1 while unlink "afile";
}
diff --git a/gnu/usr.bin/perl/t/io/openpid.t b/gnu/usr.bin/perl/t/io/openpid.t
index c6ed8402258..23d75ef074d 100644
--- a/gnu/usr.bin/perl/t/io/openpid.t
+++ b/gnu/usr.bin/perl/t/io/openpid.t
@@ -23,6 +23,7 @@ plan tests => 10;
use Config;
$| = 1;
$SIG{PIPE} = 'IGNORE';
+$SIG{HUP} = 'IGNORE' if $^O eq 'interix';
my $perl = which_perl();
$perl .= qq[ "-I../lib"];
diff --git a/gnu/usr.bin/perl/t/io/through.t b/gnu/usr.bin/perl/t/io/through.t
new file mode 100755
index 00000000000..60c75c99217
--- /dev/null
+++ b/gnu/usr.bin/perl/t/io/through.t
@@ -0,0 +1,148 @@
+#!./perl
+
+BEGIN {
+ if ($^O eq 'VMS') {
+ print "1..0 # Skip on VMS -- too picky about line endings for record-oriented pipes\n";
+ exit;
+ }
+ chdir 't' if -d 't';
+ @INC = '../lib';
+}
+
+use strict;
+require './test.pl';
+
+my $Perl = which_perl();
+
+my $data = <<'EOD';
+x
+ yy
+z
+EOD
+
+(my $data2 = $data) =~ s/\n/\n\n/g;
+
+my $t1 = { data => $data, write_c => [1,2,length $data], read_c => [1,2,3,length $data]};
+my $t2 = { data => $data2, write_c => [1,2,length $data2], read_c => [1,2,3,length $data2]};
+
+$_->{write_c} = [1..length($_->{data})],
+ $_->{read_c} = [1..length($_->{data})+1, 0xe000] # Need <0xffff for REx
+ for (); # $t1, $t2;
+
+my $c; # len write tests, for each: one _all test, and 3 each len+2
+$c += @{$_->{write_c}} * (1 + 3*@{$_->{read_c}}) for $t1, $t2;
+$c *= 3*2*2; # $how_w, file/pipe, 2 reports
+
+$c += 6; # Tests with sleep()...
+
+print "1..$c\n";
+
+my $set_out = '';
+$set_out = "binmode STDOUT, ':crlf'"
+ if defined $main::use_crlf && $main::use_crlf == 1;
+
+sub testread ($$$$$$$) {
+ my ($fh, $str, $read_c, $how_r, $write_c, $how_w, $why) = @_;
+ my $buf = '';
+ if ($how_r eq 'readline_all') {
+ $buf .= $_ while <$fh>;
+ } elsif ($how_r eq 'readline') {
+ $/ = \$read_c;
+ $buf .= $_ while <$fh>;
+ } elsif ($how_r eq 'read') {
+ my($in, $c);
+ $buf .= $in while $c = read($fh, $in, $read_c);
+ } elsif ($how_r eq 'sysread') {
+ my($in, $c);
+ $buf .= $in while $c = sysread($fh, $in, $read_c);
+ } else {
+ die "Unrecognized read: '$how_r'";
+ }
+ close $fh or die "close: $!";
+ # The only contamination allowed is with sysread/prints
+ $buf =~ s/\r\n/\n/g if $how_r eq 'sysread' and $how_w =~ /print/;
+ is(length $buf, length $str, "length with wrc=$write_c, rdc=$read_c, $how_w, $how_r, $why");
+ is($buf, $str, "content with wrc=$write_c, rdc=$read_c, $how_w, $how_r, $why");
+}
+
+sub testpipe ($$$$$$) {
+ my ($str, $write_c, $read_c, $how_w, $how_r, $why) = @_;
+ (my $quoted = $str) =~ s/\n/\\n/g;;
+ my $fh;
+ if ($how_w eq 'print') { # AUTOFLUSH???
+ # Should be shell-neutral:
+ open $fh, '-|', qq[$Perl -we "$set_out;print for grep length, split /(.{1,$write_c})/s, qq($quoted)"] or die "open: $!";
+ } elsif ($how_w eq 'print/flush') {
+ # shell-neutral and miniperl-enabled autoflush? qq(\x24\x7c) eq '$|'
+ open $fh, '-|', qq[$Perl -we "$set_out;eval qq(\\x24\\x7c = 1) or die;print for grep length, split /(.{1,$write_c})/s, qq($quoted)"] or die "open: $!";
+ } elsif ($how_w eq 'syswrite') {
+ ### How to protect \$_
+ open $fh, '-|', qq[$Perl -we "$set_out;eval qq(sub w {syswrite STDOUT, \\x24_} 1) or die; w() for grep length, split /(.{1,$write_c})/s, qq($quoted)"] or die "open: $!";
+ } else {
+ die "Unrecognized write: '$how_w'";
+ }
+ binmode $fh, ':crlf'
+ if defined $main::use_crlf && $main::use_crlf == 1;
+ testread($fh, $str, $read_c, $how_r, $write_c, $how_w, "pipe$why");
+}
+
+sub testfile ($$$$$$) {
+ my ($str, $write_c, $read_c, $how_w, $how_r, $why) = @_;
+ my @data = grep length, split /(.{1,$write_c})/s, $str;
+
+ open my $fh, '>', 'io_io.tmp' or die;
+ select $fh;
+ binmode $fh, ':crlf'
+ if defined $main::use_crlf && $main::use_crlf == 1;
+ if ($how_w eq 'print') { # AUTOFLUSH???
+ $| = 0;
+ print $fh $_ for @data;
+ } elsif ($how_w eq 'print/flush') {
+ $| = 1;
+ print $fh $_ for @data;
+ } elsif ($how_w eq 'syswrite') {
+ syswrite $fh, $_ for @data;
+ } else {
+ die "Unrecognized write: '$how_w'";
+ }
+ close $fh or die "close: $!";
+ open $fh, '<', 'io_io.tmp' or die;
+ binmode $fh, ':crlf'
+ if defined $main::use_crlf && $main::use_crlf == 1;
+ testread($fh, $str, $read_c, $how_r, $write_c, $how_w, "file$why");
+}
+
+# shell-neutral and miniperl-enabled autoflush? qq(\x24\x7c) eq '$|'
+open my $fh, '-|', qq[$Perl -we "eval qq(\\x24\\x7c = 1) or die; binmode STDOUT; sleep 1, print for split //, qq(a\nb\n\nc\n\n\n)"] or die "open: $!";
+ok(1, 'open pipe');
+binmode $fh, q(:crlf);
+ok(1, 'binmode');
+$c = undef;
+my @c;
+push @c, ord $c while $c = getc $fh;
+ok(1, 'got chars');
+is(scalar @c, 9, 'got 9 chars');
+is("@c", '97 10 98 10 10 99 10 10 10', 'got expected chars');
+ok(close($fh), 'close');
+
+for my $s (1..2) {
+ my $t = ($t1, $t2)[$s-1];
+ my $str = $t->{data};
+ my $r = $t->{read_c};
+ my $w = $t->{write_c};
+ for my $read_c (@$r) {
+ for my $write_c (@$w) {
+ for my $how_r (qw(readline_all readline read sysread)) {
+ next if $how_r eq 'readline_all' and $read_c != 1;
+ for my $how_w (qw(print print/flush syswrite)) {
+ testfile($str, $write_c, $read_c, $how_w, $how_r, $s);
+ testpipe($str, $write_c, $read_c, $how_w, $how_r, $s);
+ }
+ }
+ }
+ }
+}
+
+unlink 'io_io.tmp';
+
+1;
diff --git a/gnu/usr.bin/perl/t/io/utf8.t b/gnu/usr.bin/perl/t/io/utf8.t
index 721d7dbd1f7..532ea7fb5ee 100644
--- a/gnu/usr.bin/perl/t/io/utf8.t
+++ b/gnu/usr.bin/perl/t/io/utf8.t
@@ -13,42 +13,42 @@ no utf8; # needed for use utf8 not griping about the raw octets
require "./test.pl";
-plan(tests => 53);
+plan(tests => 55);
$| = 1;
open(F,"+>:utf8",'a');
print F chr(0x100).'£';
-ok( tell(F) == 4, tell(F) );
+cmp_ok( tell(F), '==', 4, tell(F) );
print F "\n";
-ok( tell(F) >= 5, tell(F) );
+cmp_ok( tell(F), '>=', 5, tell(F) );
seek(F,0,0);
-ok( getc(F) eq chr(0x100) );
-ok( getc(F) eq "£" );
-ok( getc(F) eq "\n" );
+is( getc(F), chr(0x100) );
+is( getc(F), "£" );
+is( getc(F), "\n" );
seek(F,0,0);
binmode(F,":bytes");
my $chr = chr(0xc4);
if (ord('A') == 193) { $chr = chr(0x8c); } # EBCDIC
-ok( getc(F) eq $chr );
+is( getc(F), $chr );
$chr = chr(0x80);
if (ord('A') == 193) { $chr = chr(0x41); } # EBCDIC
-ok( getc(F) eq $chr );
+is( getc(F), $chr );
$chr = chr(0xc2);
if (ord('A') == 193) { $chr = chr(0x80); } # EBCDIC
-ok( getc(F) eq $chr );
+is( getc(F), $chr );
$chr = chr(0xa3);
if (ord('A') == 193) { $chr = chr(0x44); } # EBCDIC
-ok( getc(F) eq $chr );
-ok( getc(F) eq "\n" );
+is( getc(F), $chr );
+is( getc(F), "\n" );
seek(F,0,0);
binmode(F,":utf8");
-ok( scalar(<F>) eq "\x{100}£\n" );
+is( scalar(<F>), "\x{100}£\n" );
seek(F,0,0);
$buf = chr(0x200);
$count = read(F,$buf,2,1);
-ok( $count == 2 );
-ok( $buf eq "\x{200}\x{100}£" );
+cmp_ok( $count, '==', 2 );
+is( $buf, "\x{200}\x{100}£" );
close(F);
{
@@ -62,7 +62,7 @@ close(F);
open F, "<:utf8", 'a' or die $!;
$x = <F>;
chomp($x);
- ok( $x eq chr(300) );
+ is( $x, chr(300) );
open F, "a" or die $!; # Not UTF
binmode(F, ":bytes");
@@ -70,7 +70,7 @@ close(F);
chomp($x);
$chr = chr(196).chr(172);
if (ord('A') == 193) { $chr = chr(141).chr(83); } # EBCDIC
- ok( $x eq $chr );
+ is( $x, $chr );
close F;
open F, ">:utf8", 'a' or die $!;
@@ -80,25 +80,25 @@ close(F);
my $y;
{ my $x = tell(F);
{ use bytes; $y = length($a);}
- ok( $x == $y );
+ cmp_ok( $x, '==', $y );
}
{ # Check byte length of $b
use bytes; my $y = length($b);
- ok( $y == 1 );
+ cmp_ok( $y, '==', 1 );
}
print F $b,"\n"; # Don't upgrades $b
{ # Check byte length of $b
use bytes; my $y = length($b);
- ok( $y == 1 );
+ cmp_ok( $y, '==', 1 );
}
{
my $x = tell(F);
{ use bytes; if (ord('A')==193){$y += 2;}else{$y += 3;}} # EBCDIC ASCII
- ok( $x == $y );
+ cmp_ok( $x, '==', $y );
}
close F;
@@ -109,13 +109,13 @@ close(F);
chomp($x);
$chr = v196.172.194.130;
if (ord('A') == 193) { $chr = v141.83.130; } # EBCDIC
- ok( $x eq $chr, sprintf('(%vd)', $x) );
+ is( $x, $chr, sprintf('(%vd)', $x) );
open F, "<:utf8", "a" or die $!;
$x = <F>;
chomp($x);
close F;
- ok( $x eq chr(300).chr(130), sprintf('(%vd)', $x) );
+ is( $x, chr(300).chr(130), sprintf('(%vd)', $x) );
open F, ">", "a" or die $!;
if (${^OPEN} =~ /:utf8/) {
@@ -128,7 +128,8 @@ close(F);
use warnings 'utf8';
local $SIG{__WARN__} = sub { $w = $_[0] };
print F $a;
- ok( !($@ || $w !~ /Wide character in print/i) );
+ ok( (!$@));
+ like($w, qr/Wide character in print/i );
}
}
@@ -144,30 +145,39 @@ binmode(F, ":bytes");
$x = <F>; chomp $x;
$chr = v196.172.130;
if (ord('A') == 193) { $chr = v141.83.130; } # EBCDIC
-ok( $x eq $chr );
+is( $x, $chr );
# Right.
open F, ">:utf8", "a" or die $!;
print F $a;
close F;
open F, ">>", "a" or die $!;
+binmode(F, ":bytes");
print F chr(130)."\n";
close F;
open F, "<", "a" or die $!;
+binmode(F, ":bytes");
$x = <F>; chomp $x;
-ok( $x eq $chr );
+SKIP: {
+ skip("Defaulting to UTF-8 output means that we can't generate a mangled file")
+ if $UTF8_OUTPUT;
+ is( $x, $chr );
+}
# Now we have a deformed file.
SKIP: {
if (ord('A') == 193) {
- skip( "EBCDIC doesn't complain" );
+ skip("EBCDIC doesn't complain", 2);
} else {
+ my @warnings;
open F, "<:utf8", "a" or die $!;
$x = <F>; chomp $x;
- local $SIG{__WARN__} = sub { ok( 1 ) };
+ local $SIG{__WARN__} = sub { push @warnings, $_[0]; };
eval { sprintf "%vd\n", $x };
+ is (scalar @warnings, 1);
+ like ($warnings[0], qr/Malformed UTF-8 character \(unexpected continuation byte 0x82, with no preceding start byte/);
}
}
@@ -185,6 +195,7 @@ my $c;
# read() should work on characters, not bytes
open F, "<:utf8", "a";
$a = 0;
+my $failed;
for (@a) {
unless (($c = read(F, $b, 1) == 1) &&
length($b) == 1 &&
@@ -197,12 +208,12 @@ for (@a) {
print '# tell(F) == ', tell(F), "\n";
print '# $a == ', $a, "\n";
print '# $c == ', $c, "\n";
- print "not ";
+ $failed++;
last;
}
}
close F;
-ok( 1 );
+is($failed, undef);
{
# Check that warnings are on on I/O, and that they can be muffled.
@@ -258,7 +269,7 @@ ok( 1 );
open F, "<:bytes", "a";
my $b = chr 0x100;
$b .= <F>;
- ok( $b eq chr(0x100).chr(0xde), "21395 '.= <>' utf8 vs. bytes" );
+ is( $b, chr(0x100).chr(0xde), "21395 '.= <>' utf8 vs. bytes" );
close F;
}
@@ -268,7 +279,7 @@ ok( 1 );
open F, "<:utf8", "a";
my $b = "\xde";
$b .= <F>;
- ok( $b eq chr(0xde).chr(0x100), "21395 '.= <>' bytes vs. utf8" );
+ is( $b, chr(0xde).chr(0x100), "21395 '.= <>' bytes vs. utf8" );
close F;
}
@@ -293,7 +304,7 @@ ok( 1 );
utf8::upgrade($s) if $v->[1] eq "utf8";
$s .= <F>;
- ok( $s eq chr($v->[0]) . chr($u->[0]), 'rcatline utf8' );
+ is( $s, chr($v->[0]) . chr($u->[0]), 'rcatline utf8' );
close F;
$t++;
}
diff --git a/gnu/usr.bin/perl/t/japh/abigail.t b/gnu/usr.bin/perl/t/japh/abigail.t
index 98a26de960d..99815026087 100644
--- a/gnu/usr.bin/perl/t/japh/abigail.t
+++ b/gnu/usr.bin/perl/t/japh/abigail.t
@@ -235,11 +235,11 @@ truncate$0,-1+-s$0;exec$0;}}//rekcaH_lreP_rehtona_tsuJ
--
chomp @programs;
- if ($^O eq 'VMS') {
+ if ($^O eq 'VMS' or $^O eq 'MSWin32') {
# VMS needs extensions for files to be executable,
# but the Japhs above rely on $0 being exactly the
# filename of the program.
- skip "VMS", 2 * @programs;
+ skip $^O, 2 * @programs;
last
}
@@ -418,7 +418,7 @@ EXPECT: 6
SWITCHES
-Mstrict='}); print "Just another Perl Hacker"; ({'
-l
-SKIP_OS: VMS
+SKIP: No longer works in 5.8.2 and beyond.
MSWin32
NetWare
@@ -481,6 +481,7 @@ SKIP: Abuses a fixed bug.
####### Prototype fun 3
sub _ "Just another Perl Hacker"; print prototype \&_
+SKIP: Abuses a fixed bug.
####### Split 1
split // => '"';
diff --git a/gnu/usr.bin/perl/t/lib/1_compile.t b/gnu/usr.bin/perl/t/lib/1_compile.t
index 9c378301661..ee65b558101 100644
--- a/gnu/usr.bin/perl/t/lib/1_compile.t
+++ b/gnu/usr.bin/perl/t/lib/1_compile.t
@@ -40,6 +40,10 @@ if (@Core_Modules) {
} else {
print $message;
}
+print <<'EOREWARD';
+# http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2001-04/msg01223.html
+# 20010421230349.P2946@blackrider.blackstar.co.uk
+EOREWARD
my $test_num = 2;
diff --git a/gnu/usr.bin/perl/t/lib/MakeMaker/Test/Setup/BFD.pm b/gnu/usr.bin/perl/t/lib/MakeMaker/Test/Setup/BFD.pm
new file mode 100644
index 00000000000..c540708529f
--- /dev/null
+++ b/gnu/usr.bin/perl/t/lib/MakeMaker/Test/Setup/BFD.pm
@@ -0,0 +1,127 @@
+package MakeMaker::Test::Setup::BFD;
+
+@ISA = qw(Exporter);
+require Exporter;
+@EXPORT = qw(setup_recurs teardown_recurs);
+
+use strict;
+use File::Path;
+use File::Basename;
+use MakeMaker::Test::Utils;
+
+my $Is_VMS = $^O eq 'VMS';
+
+my %Files = (
+ 'Big-Dummy/lib/Big/Dummy.pm' => <<'END',
+package Big::Dummy;
+
+$VERSION = 0.01;
+
+=head1 NAME
+
+Big::Dummy - Try "our" hot dog's
+
+=cut
+
+1;
+END
+
+ 'Big-Dummy/Makefile.PL' => <<'END',
+use ExtUtils::MakeMaker;
+
+# This will interfere with the PREREQ_PRINT tests.
+printf "Current package is: %s\n", __PACKAGE__ unless "@ARGV" =~ /PREREQ/;
+
+WriteMakefile(
+ NAME => 'Big::Dummy',
+ VERSION_FROM => 'lib/Big/Dummy.pm',
+ EXE_FILES => [qw(bin/program)],
+ PREREQ_PM => { strict => 0 },
+ ABSTRACT_FROM => 'lib/Big/Dummy.pm',
+ AUTHOR => 'Michael G Schwern <schwern@pobox.com>',
+);
+END
+
+ 'Big-Dummy/bin/program' => <<'END',
+#!/usr/bin/perl -w
+
+=head1 NAME
+
+program - this is a program
+
+=cut
+
+1;
+END
+
+ 'Big-Dummy/t/compile.t' => <<'END',
+print "1..2\n";
+
+print eval "use Big::Dummy; 1;" ? "ok 1\n" : "not ok 1\n";
+print "ok 2 - TEST_VERBOSE\n";
+END
+
+ 'Big-Dummy/Liar/t/sanity.t' => <<'END',
+print "1..3\n";
+
+print eval "use Big::Dummy; 1;" ? "ok 1\n" : "not ok 1\n";
+print eval "use Big::Liar; 1;" ? "ok 2\n" : "not ok 2\n";
+print "ok 3 - TEST_VERBOSE\n";
+END
+
+ 'Big-Dummy/Liar/lib/Big/Liar.pm' => <<'END',
+package Big::Liar;
+
+$VERSION = 0.01;
+
+1;
+END
+
+ 'Big-Dummy/Liar/Makefile.PL' => <<'END',
+use ExtUtils::MakeMaker;
+
+my $mm = WriteMakefile(
+ NAME => 'Big::Liar',
+ VERSION_FROM => 'lib/Big/Liar.pm',
+ _KEEP_AFTER_FLUSH => 1
+ );
+
+print "Big::Liar's vars\n";
+foreach my $key (qw(INST_LIB INST_ARCHLIB)) {
+ print "$key = $mm->{$key}\n";
+}
+END
+
+ );
+
+
+sub setup_recurs {
+ setup_mm_test_root();
+ chdir 'MM_TEST_ROOT:[t]' if $Is_VMS;
+
+ while(my($file, $text) = each %Files) {
+ # Convert to a relative, native file path.
+ $file = File::Spec->catfile(File::Spec->curdir, split m{\/}, $file);
+
+ my $dir = dirname($file);
+ mkpath $dir;
+ open(FILE, ">$file") || die "Can't create $file: $!";
+ print FILE $text;
+ close FILE;
+ }
+
+ return 1;
+}
+
+sub teardown_recurs {
+ foreach my $file (keys %Files) {
+ my $dir = dirname($file);
+ if( -e $dir ) {
+ rmtree($dir) || return;
+ }
+ }
+ return 1;
+}
+
+
+1;
diff --git a/gnu/usr.bin/perl/t/lib/MakeMaker/Test/Setup/PL_FILES.pm b/gnu/usr.bin/perl/t/lib/MakeMaker/Test/Setup/PL_FILES.pm
new file mode 100644
index 00000000000..98cbebdf642
--- /dev/null
+++ b/gnu/usr.bin/perl/t/lib/MakeMaker/Test/Setup/PL_FILES.pm
@@ -0,0 +1,116 @@
+package MakeMaker::Test::Setup::PL_FILES;
+
+@ISA = qw(Exporter);
+require Exporter;
+@EXPORT = qw(setup teardown);
+
+use strict;
+use File::Path;
+use File::Basename;
+use File::Spec;
+use MakeMaker::Test::Utils;
+
+my %Files = (
+ 'PL_FILES-Module/Makefile.PL' => <<'END',
+use ExtUtils::MakeMaker;
+
+# A module for testing PL_FILES
+WriteMakefile(
+ NAME => 'PL_FILES::Module',
+ PL_FILES => { 'single.PL' => 'single.out',
+ 'multi.PL' => [qw(1.out 2.out)],
+ 'Bar_pm.PL' => '$(INST_LIB)/PL/Bar.pm',
+ }
+);
+END
+
+ 'PL_FILES-Module/single.PL' => _gen_pl_files(),
+ 'PL_FILES-Module/multi.PL' => _gen_pl_files(),
+ 'PL_FILES-Module/Bar_pm.PL' => _gen_pm_files(),
+ 'PL_FILES-Module/lib/PL/Foo.pm' => <<'END',
+# Module to load to ensure PL_FILES have blib in @INC.
+package PL::Foo;
+sub bar { 42 }
+1;
+END
+
+);
+
+
+sub _gen_pl_files {
+ my $test = <<'END';
+#!/usr/bin/perl -w
+
+# Ensure we have blib in @INC
+use PL::Foo;
+die unless PL::Foo::bar() == 42;
+
+# 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;
+
+my $file = $ARGV[0];
+open OUT, ">$file" or die $!;
+
+print OUT "Testing\n";
+close OUT
+END
+
+ $test =~ s/^\n//;
+
+ return $test;
+}
+
+
+sub _gen_pm_files {
+ my $test = <<'END';
+#!/usr/bin/perl -w
+
+# Ensure we do NOT have blib in @INC when building a module
+eval { require PL::Foo; };
+#die $@ unless $@ =~ m{^Can't locate PL/Foo.pm in \@INC };
+
+# 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;
+
+my $file = $ARGV[0];
+open OUT, ">$file" or die $!;
+
+print OUT "Testing\n";
+close OUT
+END
+
+ $test =~ s/^\n//;
+
+ return $test;
+}
+
+
+sub setup {
+ setup_mm_test_root();
+ chdir 'MM_TEST_ROOT:[t]' if $^O eq 'VMS';
+
+ while(my($file, $text) = each %Files) {
+ # Convert to a relative, native file path.
+ $file = File::Spec->catfile(File::Spec->curdir, split m{\/}, $file);
+
+ my $dir = dirname($file);
+ mkpath $dir;
+ open(FILE, ">$file") || die "Can't create $file: $!";
+ print FILE $text;
+ close FILE;
+ }
+
+ return 1;
+}
+
+sub teardown {
+ foreach my $file (keys %Files) {
+ my $dir = dirname($file);
+ if( -e $dir ) {
+ rmtree($dir) || return;
+ }
+ }
+ return 1;
+}
diff --git a/gnu/usr.bin/perl/t/lib/MakeMaker/Test/Setup/Problem.pm b/gnu/usr.bin/perl/t/lib/MakeMaker/Test/Setup/Problem.pm
new file mode 100644
index 00000000000..4cb14b59ac8
--- /dev/null
+++ b/gnu/usr.bin/perl/t/lib/MakeMaker/Test/Setup/Problem.pm
@@ -0,0 +1,56 @@
+package MakeMaker::Test::Setup::Problem;
+
+@ISA = qw(Exporter);
+require Exporter;
+@EXPORT = qw(setup_recurs teardown_recurs);
+
+use strict;
+use File::Path;
+use File::Basename;
+
+my %Files = (
+ 'Problem-Module/Makefile.PL' => <<'END',
+use ExtUtils::MakeMaker;
+
+WriteMakefile(
+ NAME => 'Problem::Module',
+);
+END
+
+ 'Problem-Module/subdir/Makefile.PL' => <<'END',
+printf "\@INC %s .\n", (grep { $_ eq '.' } @INC) ? "has" : "doesn't have";
+
+warn "I think I'm going to be sick\n";
+die "YYYAaaaakkk\n";
+END
+
+);
+
+
+sub setup_recurs {
+ while(my($file, $text) = each %Files) {
+ # Convert to a relative, native file path.
+ $file = File::Spec->catfile(File::Spec->curdir, split m{\/}, $file);
+
+ my $dir = dirname($file);
+ mkpath $dir;
+ open(FILE, ">$file") || die "Can't create $file: $!";
+ print FILE $text;
+ close FILE;
+ }
+
+ return 1;
+}
+
+sub teardown_recurs {
+ foreach my $file (keys %Files) {
+ my $dir = dirname($file);
+ if( -e $dir ) {
+ rmtree($dir) || return;
+ }
+ }
+ return 1;
+}
+
+
+1;
diff --git a/gnu/usr.bin/perl/t/lib/NoExporter.pm b/gnu/usr.bin/perl/t/lib/NoExporter.pm
new file mode 100644
index 00000000000..1ab5b8f9f42
--- /dev/null
+++ b/gnu/usr.bin/perl/t/lib/NoExporter.pm
@@ -0,0 +1,10 @@
+package NoExporter;
+
+$VERSION = 1.02;
+sub import {
+ shift;
+ die "NoExporter exports nothing. You asked for: @_" if @_;
+}
+
+1;
+
diff --git a/gnu/usr.bin/perl/t/lib/Test/Simple/sample_tests/exit.plx b/gnu/usr.bin/perl/t/lib/Test/Simple/sample_tests/exit.plx
new file mode 100644
index 00000000000..7f8ff73f752
--- /dev/null
+++ b/gnu/usr.bin/perl/t/lib/Test/Simple/sample_tests/exit.plx
@@ -0,0 +1,3 @@
+require Test::Builder;
+
+exit 1;
diff --git a/gnu/usr.bin/perl/t/lib/Test/Simple/sample_tests/too_few_fail.plx b/gnu/usr.bin/perl/t/lib/Test/Simple/sample_tests/too_few_fail.plx
new file mode 100644
index 00000000000..5910e132a29
--- /dev/null
+++ b/gnu/usr.bin/perl/t/lib/Test/Simple/sample_tests/too_few_fail.plx
@@ -0,0 +1,12 @@
+require Test::Simple;
+
+push @INC, 't/lib';
+require Test::Simple::Catch;
+my($out, $err) = Test::Simple::Catch::caught();
+
+Test::Simple->import(tests => 5);
+
+
+ok(0);
+ok(1);
+ok(0); \ No newline at end of file
diff --git a/gnu/usr.bin/perl/t/lib/contains_pod.xr b/gnu/usr.bin/perl/t/lib/contains_pod.xr
new file mode 100644
index 00000000000..7ea408de46a
--- /dev/null
+++ b/gnu/usr.bin/perl/t/lib/contains_pod.xr
@@ -0,0 +1,5 @@
+=head1 foo
+
+bar baz.
+
+=cut
diff --git a/gnu/usr.bin/perl/t/lib/cygwin.t b/gnu/usr.bin/perl/t/lib/cygwin.t
new file mode 100755
index 00000000000..01485461439
--- /dev/null
+++ b/gnu/usr.bin/perl/t/lib/cygwin.t
@@ -0,0 +1,31 @@
+#!perl
+
+BEGIN {
+ chdir 't' if -d 't';
+ @INC = ('../lib');
+ unless ($^O eq "cygwin") {
+ print "1..0 # skipped: cygwin specific test\n";
+ exit 0;
+ }
+}
+
+use Test::More tests => 4;
+
+is(Cygwin::winpid_to_pid(Cygwin::pid_to_winpid($$)), $$,
+ "perl pid translates to itself");
+
+my $parent = getppid;
+SKIP: {
+ skip "test not run from cygwin process", 1 if $parent <= 1;
+ is(Cygwin::winpid_to_pid(Cygwin::pid_to_winpid($parent)), $parent,
+ "parent pid translates to itself");
+}
+
+my $catpid = open my $cat, "|cat" or die "Couldn't cat: $!";
+open my $ps, "ps|" or die "Couldn't do ps: $!";
+my ($catwinpid) = map /^.\s+$catpid\s+\d+\s+\d+\s+(\d+)/, <$ps>;
+close($ps);
+
+is(Cygwin::winpid_to_pid($catwinpid), $catpid, "winpid to pid");
+is(Cygwin::pid_to_winpid($catpid), $catwinpid, "pid to winpid");
+close($cat);
diff --git a/gnu/usr.bin/perl/t/lib/h2ph.h b/gnu/usr.bin/perl/t/lib/h2ph.h
index f13b69c6d69..495789a206d 100644
--- a/gnu/usr.bin/perl/t/lib/h2ph.h
+++ b/gnu/usr.bin/perl/t/lib/h2ph.h
@@ -56,6 +56,11 @@
# define WHATEVER 1000
#endif
+/* Test passing through the alien constructs (perlbug #34493) */
+#ifdef __LANGUAGE_PASCAL__
+function Tru64_Pascal(n: Integer): Integer;
+#endif
+
/*
* Test #include, #import and #include_next
* #include_next is difficult to test, it really depends on the actual
diff --git a/gnu/usr.bin/perl/t/lib/h2ph.pht b/gnu/usr.bin/perl/t/lib/h2ph.pht
index e03cbb95ebd..7b29896a58f 100644
--- a/gnu/usr.bin/perl/t/lib/h2ph.pht
+++ b/gnu/usr.bin/perl/t/lib/h2ph.pht
@@ -4,13 +4,13 @@ no warnings 'redefine';
unless(defined(&SQUARE)) {
sub SQUARE {
- local($x) = @_;
+ my($x) = @_;
eval q((($x)*($x)));
}
}
unless(defined(&ERROR)) {
eval 'sub ERROR {
- local($x) = @_;
+ my($x) = @_;
eval q( &fprintf( &stderr, \\"%s\\\\n\\", $x->[2][3][0]));
}' unless defined(&ERROR);
}
@@ -19,12 +19,12 @@ unless(defined(&_H2PH_H_)) {
# "$Revision h2ph.h,v 1.0 98/05/04 20:42:14 billy $"
undef(&MAX) if defined(&MAX);
eval 'sub MAX {
- local($a,$b) = @_;
+ my($a,$b) = @_;
eval q((($a) > ($b) ? ($a) : ($b)));
}' unless defined(&MAX);
if(defined(&__SOME_UNIMPORTANT_PROPERTY)) {
eval 'sub MIN {
- local($a,$b) = @_;
+ my($a,$b) = @_;
eval q((($a) < ($b) ? ($a) : ($b)));
}' unless defined(&MIN);
}
diff --git a/gnu/usr.bin/perl/t/lib/sample-tests/bignum_many b/gnu/usr.bin/perl/t/lib/sample-tests/bignum_many
new file mode 100644
index 00000000000..1e30b2f1dd2
--- /dev/null
+++ b/gnu/usr.bin/perl/t/lib/sample-tests/bignum_many
@@ -0,0 +1,14 @@
+print <<DUMMY;
+1..2
+ok 1
+ok 2
+ok 99997
+ok 99998
+ok 99999
+ok 100000
+ok 100001
+ok 100002
+ok 100003
+ok 100004
+ok 100005
+DUMMY
diff --git a/gnu/usr.bin/perl/t/lib/warnings/2use b/gnu/usr.bin/perl/t/lib/warnings/2use
index b700ef70dc0..d8ef72f4d9c 100644
--- a/gnu/usr.bin/perl/t/lib/warnings/2use
+++ b/gnu/usr.bin/perl/t/lib/warnings/2use
@@ -72,6 +72,12 @@ my $a =+ 1 ;
EXPECT
Reversed += operator at - line 3.
########
+-w
+no warnings 'reserved' ;
+foo.bar;
+EXPECT
+Useless use of concatenation (.) or string in void context at - line 3.
+########
--FILE-- abc
my $a =+ 1 ;
diff --git a/gnu/usr.bin/perl/t/lib/warnings/perlio b/gnu/usr.bin/perl/t/lib/warnings/perlio
index e84e3de6062..0ccc5a884f4 100644
--- a/gnu/usr.bin/perl/t/lib/warnings/perlio
+++ b/gnu/usr.bin/perl/t/lib/warnings/perlio
@@ -44,7 +44,7 @@ EXPECT
Argument list not closed for PerlIO layer "aa(" at - line 6.
########
---FILE-- PerlIO/xyz.pm
+--FILE-- PerlIO_test_dir/xyz.pm
1;
--FILE--
# perlio [PerlIO_parse_layers]
diff --git a/gnu/usr.bin/perl/t/lib/warnings/pp_sys b/gnu/usr.bin/perl/t/lib/warnings/pp_sys
index 881e81e624c..d84ff75feaa 100644
--- a/gnu/usr.bin/perl/t/lib/warnings/pp_sys
+++ b/gnu/usr.bin/perl/t/lib/warnings/pp_sys
@@ -103,6 +103,8 @@
getc() on closed filehandle [pp_getc]
+ Non-string passed as bitmask [pp_sselect]
+
__END__
# pp_sys.c [pp_untie]
use warnings 'untie' ;
@@ -446,3 +448,12 @@ EXPECT
getc() on unopened filehandle FOO at - line 3.
getc() on closed filehandle STDIN at - line 5.
getc() on closed filehandle FH2 at - line 12.
+########
+# pp_sys.c [pp_sselect]
+use warnings 'misc';
+$x = 1;
+select $x, undef, undef, undef;
+no warnings 'misc';
+select $x, undef, undef, undef;
+EXPECT
+Non-string passed as bitmask at - line 4.
diff --git a/gnu/usr.bin/perl/t/op/alarm.t b/gnu/usr.bin/perl/t/op/alarm.t
index 8fb92964a3a..8be24db9960 100644
--- a/gnu/usr.bin/perl/t/op/alarm.t
+++ b/gnu/usr.bin/perl/t/op/alarm.t
@@ -13,7 +13,7 @@ BEGIN {
}
}
-plan tests => 4;
+plan tests => 5;
my $Perl = which_perl();
my $start_time = time;
@@ -49,3 +49,11 @@ is( $@, "ALARM!\n", 'alarm w/$SIG{ALRM} vs system()' );
if $^O eq 'VMS' || $^O eq'MacOS' || $^O eq 'dos';
ok( abs($diff - 3) <= 1, " right time (waited $diff secs for 3-sec alarm)" );
}
+
+
+{
+ local $SIG{"ALRM"} = sub { die };
+ eval { alarm(1); my $x = qx($Perl -e "sleep 3") };
+ chomp (my $foo = "foo\n");
+ ok($foo eq "foo", '[perl #33928] chomp() fails after alarm(), `sleep`');
+}
diff --git a/gnu/usr.bin/perl/t/op/attrs.t b/gnu/usr.bin/perl/t/op/attrs.t
index 25abeb21b53..10e2c2493c0 100644
--- a/gnu/usr.bin/perl/t/op/attrs.t
+++ b/gnu/usr.bin/perl/t/op/attrs.t
@@ -8,13 +8,13 @@ BEGIN {
require './test.pl';
}
-plan tests => 47;
+plan 'no_plan';
$SIG{__WARN__} = sub { die @_ };
-sub eval_ok ($) {
- eval $_[0];
- is( $@, '' );
+sub eval_ok ($;$) {
+ eval shift;
+ is( $@, '', @_);
}
eval_ok 'sub t1 ($) : locked { $_[0]++ }';
@@ -106,6 +106,11 @@ is ref($thunk), "Z";
@attrs = eval 'attributes::get $thunk';
is "@attrs", "locked method Z";
+# Test attributes on predeclared subroutines:
+eval 'package A; sub PS : lvalue';
+@attrs = eval 'attributes::get \&A::PS';
+is "@attrs", "lvalue";
+
# Test ability to modify existing sub's (or XSUB's) attributes.
eval 'package A; sub X { $_[0] } sub X : lvalue';
@attrs = eval 'attributes::get \&A::X';
@@ -145,3 +150,33 @@ eval 'our ${""} : foo = 1';
like $@, qr/Can't declare scalar dereference in our/;
eval 'my $$foo : bar = 1';
like $@, qr/Can't declare scalar dereference in my/;
+
+
+my @code = qw(lvalue locked method);
+unshift @code, 'assertion' if $] >= 5.009;
+my @other = qw(shared unique);
+my %valid;
+$valid{CODE} = {map {$_ => 1} @code};
+$valid{SCALAR} = {map {$_ => 1} @other};
+$valid{ARRAY} = $valid{HASH} = $valid{SCALAR};
+
+our ($scalar, @array, %hash);
+foreach my $value (\&foo, \$scalar, \@array, \%hash) {
+ my $type = ref $value;
+ foreach my $negate ('', '-') {
+ foreach my $attr (@code, @other) {
+ my $attribute = $negate . $attr;
+ eval "use attributes __PACKAGE__, \$value, '$attribute'";
+ if ($valid{$type}{$attr}) {
+ if ($attribute eq '-shared') {
+ like $@, qr/^A variable may not be unshared/;
+ } else {
+ is( $@, '', "$type attribute $attribute");
+ }
+ } else {
+ like $@, qr/^Invalid $type attribute: $attribute/,
+ "Bogus $type attribute $attribute should fail";
+ }
+ }
+ }
+}
diff --git a/gnu/usr.bin/perl/t/op/bless.t b/gnu/usr.bin/perl/t/op/bless.t
index 3aaceb8ce73..6aea7ba7e0b 100644
--- a/gnu/usr.bin/perl/t/op/bless.t
+++ b/gnu/usr.bin/perl/t/op/bless.t
@@ -1,51 +1,51 @@
#!./perl
-print "1..31\n";
-
BEGIN {
chdir 't' if -d 't';
@INC = '../lib';
+ require './test.pl';
}
+plan (106);
+
sub expected {
my($object, $package, $type) = @_;
- return "" if (
- ref($object) eq $package
- && "$object" =~ /^\Q$package\E=(\w+)\(0x([0-9a-f]+)\)$/
- && $1 eq $type
- # in 64-bit platforms hex warns for 32+ -bit values
- && do { no warnings 'portable'; hex($2) == $object }
- );
print "# $object $package $type\n";
- return "not ";
+ is(ref($object), $package);
+ my $r = qr/^\Q$package\E=(\w+)\(0x([0-9a-f]+)\)$/;
+ like("$object", $r);
+ "$object" =~ $r;
+ is($1, $type);
+ # in 64-bit platforms hex warns for 32+ -bit values
+ cmp_ok(do {no warnings 'portable'; hex($2)}, '==', $object);
}
# test blessing simple types
$a1 = bless {}, "A";
-print expected($a1, "A", "HASH"), "ok 1\n";
+expected($a1, "A", "HASH");
$b1 = bless [], "B";
-print expected($b1, "B", "ARRAY"), "ok 2\n";
+expected($b1, "B", "ARRAY");
$c1 = bless \(map "$_", "test"), "C";
-print expected($c1, "C", "SCALAR"), "ok 3\n";
+expected($c1, "C", "SCALAR");
our $test = "foo"; $d1 = bless \*test, "D";
-print expected($d1, "D", "GLOB"), "ok 4\n";
+expected($d1, "D", "GLOB");
$e1 = bless sub { 1 }, "E";
-print expected($e1, "E", "CODE"), "ok 5\n";
+expected($e1, "E", "CODE");
$f1 = bless \[], "F";
-print expected($f1, "F", "REF"), "ok 6\n";
+expected($f1, "F", "REF");
$g1 = bless \substr("test", 1, 2), "G";
-print expected($g1, "G", "LVALUE"), "ok 7\n";
+expected($g1, "G", "LVALUE");
# blessing ref to object doesn't modify object
-print expected(bless(\$a1, "F"), "F", "REF"), "ok 8\n";
-print expected($a1, "A", "HASH"), "ok 9\n";
+expected(bless(\$a1, "F"), "F", "REF");
+expected($a1, "A", "HASH");
# reblessing does modify object
bless $a1, "A2";
-print expected($a1, "A2", "HASH"), "ok 10\n";
+expected($a1, "A2", "HASH");
# local and my
{
@@ -53,37 +53,36 @@ print expected($a1, "A2", "HASH"), "ok 10\n";
local $b1 = bless [], "B3";
my $c1 = bless $c1, "C3"; # should rebless outer $c1
our $test2 = ""; my $d1 = bless \*test2, "D3";
- print expected($a1, "A3", "HASH"), "ok 11\n";
- print expected($b1, "B3", "ARRAY"), "ok 12\n";
- print expected($c1, "C3", "SCALAR"), "ok 13\n";
- print expected($d1, "D3", "GLOB"), "ok 14\n";
+ expected($a1, "A3", "HASH");
+ expected($b1, "B3", "ARRAY");
+ expected($c1, "C3", "SCALAR");
+ expected($d1, "D3", "GLOB");
}
-print expected($a1, "A3", "HASH"), "ok 15\n";
-print expected($b1, "B", "ARRAY"), "ok 16\n";
-print expected($c1, "C3", "SCALAR"), "ok 17\n";
-print expected($d1, "D", "GLOB"), "ok 18\n";
+expected($a1, "A3", "HASH");
+expected($b1, "B", "ARRAY");
+expected($c1, "C3", "SCALAR");
+expected($d1, "D", "GLOB");
# class is magic
"E" =~ /(.)/;
-print expected(bless({}, $1), "E", "HASH"), "ok 19\n";
+expected(bless({}, $1), "E", "HASH");
{
local $! = 1;
my $string = "$!";
$! = 2; # attempt to avoid cached string
$! = 1;
- print expected(bless({}, $!), $string, "HASH"), "ok 20\n";
+ expected(bless({}, $!), $string, "HASH");
# ref is ref to magic
{
{
package F;
- sub test { ${$_[0]} eq $string or print "not " }
+ sub test { main::is(${$_[0]}, $string) }
}
$! = 2;
$f1 = bless \$!, "F";
$! = 1;
$f1->test;
- print "ok 21\n";
}
}
@@ -91,30 +90,30 @@ print expected(bless({}, $1), "E", "HASH"), "ok 19\n";
### example of magic variable that is a reference??
# no class, or empty string (with a warning), or undef (with two)
-print expected(bless([]), 'main', "ARRAY"), "ok 22\n";
+expected(bless([]), 'main', "ARRAY");
{
local $SIG{__WARN__} = sub { push @w, join '', @_ };
use warnings;
$m = bless [];
- print expected($m, 'main', "ARRAY"), "ok 23\n";
- print @w ? "not ok 24\t# @w\n" : "ok 24\n";
+ expected($m, 'main', "ARRAY");
+ is (scalar @w, 0);
@w = ();
$m = bless [], '';
- print expected($m, 'main', "ARRAY"), "ok 25\n";
- print @w != 1 ? "not ok 26\t# @w\n" : "ok 26\n";
+ expected($m, 'main', "ARRAY");
+ is (scalar @w, 1);
@w = ();
$m = bless [], undef;
- print expected($m, 'main', "ARRAY"), "ok 27\n";
- print @w != 2 ? "not ok 28\t# @w\n" : "ok 28\n";
+ expected($m, 'main', "ARRAY");
+ is (scalar @w, 2);
}
# class is a ref
$a1 = bless {}, "A4";
$b1 = eval { bless {}, $a1 };
-print $@ ? "ok 29\n" : "not ok 29\t# $b1\n";
+isnt ($@, '', "class is a ref");
# class is an overloaded ref
{
@@ -123,5 +122,5 @@ print $@ ? "ok 29\n" : "not ok 29\t# $b1\n";
}
$h1 = bless {}, "H4";
$c4 = eval { bless \$test, $h1 };
-print expected($c4, 'C4', "SCALAR"), "ok 30\n";
-print $@ ? "not ok 31\t# $@" : "ok 31\n";
+is ($@, '', "class is an overloaded ref");
+expected($c4, 'C4', "SCALAR");
diff --git a/gnu/usr.bin/perl/t/op/caller.t b/gnu/usr.bin/perl/t/op/caller.t
index 751a161de2a..4ddfb5c483d 100644
--- a/gnu/usr.bin/perl/t/op/caller.t
+++ b/gnu/usr.bin/perl/t/op/caller.t
@@ -5,10 +5,9 @@ BEGIN {
chdir 't' if -d 't';
@INC = '../lib';
require './test.pl';
+ plan( tests => 31 );
}
-plan( tests => 20 );
-
my @c;
print "# Tests with caller(0)\n";
@@ -63,3 +62,55 @@ my $fooref2 = delete $::{foo2};
$fooref2 -> ();
is( $c[3], "(unknown)", "unknown subroutine name" );
ok( $c[4], "hasargs true with unknown sub" );
+
+# See if caller() returns the correct warning mask
+
+sub testwarn {
+ my $w = shift;
+ is( (caller(0))[9], $w, "warnings");
+}
+
+# NB : extend the warning mask values below when new warnings are added
+{
+ no warnings;
+ BEGIN { is( ${^WARNING_BITS}, "\0" x 12, 'warning bits' ) }
+ testwarn("\0" x 12);
+ use warnings;
+ BEGIN { is( ${^WARNING_BITS}, "UUUUUUUUUUU\25", 'warning bits' ) }
+ BEGIN { testwarn("UUUUUUUUUUU\25"); }
+ # run-time :
+ # the warning mask has been extended by warnings::register
+ testwarn("UUUUUUUUUUUU");
+ use warnings::register;
+ BEGIN { is( ${^WARNING_BITS}, "UUUUUUUUUUUU", 'warning bits' ) }
+ testwarn("UUUUUUUUUUUU");
+}
+
+
+# The next two cases test for a bug where caller ignored evals if
+# the DB::sub glob existed but &DB::sub did not (for example, if
+# $^P had been set but no debugger has been loaded). The tests
+# thus assume that there is no &DB::sub: if there is one, they
+# should both pass no matter whether or not this bug has been
+# fixed.
+
+my $debugger_test = q<
+ my @stackinfo = caller(0);
+ return scalar @stackinfo;
+>;
+
+sub pb { return (caller(0))[3] }
+
+my $i = eval $debugger_test;
+is( $i, 10, "do not skip over eval (and caller returns 10 elements)" );
+
+is( eval 'pb()', 'main::pb', "actually return the right function name" );
+
+my $saved_perldb = $^P;
+$^P = 16;
+$^P = $saved_perldb;
+
+$i = eval $debugger_test;
+is( $i, 10, 'do not skip over eval even if $^P had been on at some point' );
+is( eval 'pb()', 'main::pb', 'actually return the right function name even if $^P had been on at some point' );
+
diff --git a/gnu/usr.bin/perl/t/op/chdir.t b/gnu/usr.bin/perl/t/op/chdir.t
index 8929069f008..3a00df25ae8 100644
--- a/gnu/usr.bin/perl/t/op/chdir.t
+++ b/gnu/usr.bin/perl/t/op/chdir.t
@@ -9,7 +9,7 @@ BEGIN {
use Config;
require "test.pl";
-plan(tests => 31);
+plan(tests => 38);
my $IsVMS = $^O eq 'VMS';
my $IsMacOS = $^O eq 'MacOS';
@@ -42,6 +42,30 @@ SKIP: {
$Cwd = abs_path;
+SKIP: {
+ skip("no fchdir", 6) unless ($Config{d_fchdir} || "") eq "define";
+ ok(opendir(my $dh, "."), "opendir .");
+ ok(open(my $fh, "<", "op"), "open op");
+ ok(chdir($fh), "fchdir op");
+ ok(-f "chdir.t", "verify that we are in op");
+ if (($Config{d_dirfd} || "") eq "define") {
+ ok(chdir($dh), "fchdir back");
+ }
+ else {
+ eval { chdir($dh); };
+ like($@, qr/^The dirfd function is unimplemented at/, "dirfd is unimplemented");
+ chdir "..";
+ }
+ ok(-d "op", "verify that we are back");
+}
+
+SKIP: {
+ skip("has fchdir", 1) if ($Config{d_fchdir} || "") eq "define";
+ opendir(my $dh, "op");
+ eval { chdir($dh); };
+ like($@, qr/^The fchdir function is unimplemented at/, "fchdir is unimplemented");
+}
+
# The environment variables chdir() pays attention to.
my @magic_envs = qw(HOME LOGDIR SYS$LOGIN);
diff --git a/gnu/usr.bin/perl/t/op/chr.t b/gnu/usr.bin/perl/t/op/chr.t
new file mode 100755
index 00000000000..94450ec1cc0
--- /dev/null
+++ b/gnu/usr.bin/perl/t/op/chr.t
@@ -0,0 +1,50 @@
+#!./perl
+
+BEGIN {
+ chdir 't' if -d 't';
+ @INC = qw(. ../lib); # ../lib needed for test.deparse
+ require "test.pl";
+}
+
+plan tests => 26;
+
+# Note that t/op/ord.t already tests for chr() <-> ord() rountripping.
+
+# Don't assume ASCII.
+
+is(chr(ord("A")), "A");
+
+is(chr( 0), "\x00");
+is(chr(127), "\x7F");
+is(chr(128), "\x80");
+is(chr(255), "\xFF");
+
+# is(chr(-1), undef); # Shouldn't it be?
+
+# Check UTF-8.
+
+sub hexes { join(" ",map{sprintf"%02x",$_}unpack("C*",chr($_[0]))) }
+
+# The following code points are some interesting steps in UTF-8.
+is(hexes( 0x100), "c4 80");
+is(hexes( 0x7FF), "df bf");
+is(hexes( 0x800), "e0 a0 80");
+is(hexes( 0xFFF), "e0 bf bf");
+is(hexes( 0x1000), "e1 80 80");
+is(hexes( 0xCFFF), "ec bf bf");
+is(hexes( 0xD000), "ed 80 80");
+is(hexes( 0xD7FF), "ed 9f bf");
+is(hexes( 0xD800), "ed a0 80"); # not strict utf-8 (surrogate area begin)
+is(hexes( 0xDFFF), "ed bf bf"); # not strict utf-8 (surrogate area end)
+is(hexes( 0xE000), "ee 80 80");
+is(hexes( 0xFFFF), "ef bf bf");
+is(hexes( 0x10000), "f0 90 80 80");
+is(hexes( 0x3FFFF), "f0 bf bf bf");
+is(hexes( 0x40000), "f1 80 80 80");
+is(hexes( 0xFFFFF), "f3 bf bf bf");
+is(hexes(0x100000), "f4 80 80 80");
+is(hexes(0x10FFFF), "f4 8f bf bf"); # Unicode (4.1) last code point
+is(hexes(0x110000), "f4 90 80 80");
+is(hexes(0x1FFFFF), "f7 bf bf bf"); # last four byte encoding
+is(hexes(0x200000), "f8 88 80 80 80");
+
diff --git a/gnu/usr.bin/perl/t/op/concat.t b/gnu/usr.bin/perl/t/op/concat.t
index 5ef40dd8c17..ff163491b00 100644
--- a/gnu/usr.bin/perl/t/op/concat.t
+++ b/gnu/usr.bin/perl/t/op/concat.t
@@ -18,7 +18,7 @@ sub ok {
return $ok;
}
-print "1..28\n";
+print "1..29\n";
($a, $b, $c) = qw(foo bar);
@@ -146,3 +146,9 @@ sub beq { use bytes; $_[0] eq $_[1]; }
ok(($x1 eq $x2), "perl #26905, left, .= vs = . in chars");
ok(($y1 eq $y2), "perl #26905, right, .= vs = . in chars");
}
+
+{
+ # Concatenation needs to preserve UTF8ness of left oper.
+ my $x = eval"qr/\x{fff}/";
+ ok( ord chop($x .= "\303\277") == 191, "UTF8ness preserved" );
+}
diff --git a/gnu/usr.bin/perl/t/op/cproto.t b/gnu/usr.bin/perl/t/op/cproto.t
index 882eab902f1..34f3e4e66c7 100644
--- a/gnu/usr.bin/perl/t/op/cproto.t
+++ b/gnu/usr.bin/perl/t/op/cproto.t
@@ -197,7 +197,7 @@ send (*$$;$)
setgrent ()
sethostent ($)
setnetent ($)
-setpgrp undef
+setpgrp (;$$)
setpriority ($$$)
setprotoent ($)
setpwent ()
diff --git a/gnu/usr.bin/perl/t/op/die.t b/gnu/usr.bin/perl/t/op/die.t
index 6f62afb35f4..a51333f9ebf 100644
--- a/gnu/usr.bin/perl/t/op/die.t
+++ b/gnu/usr.bin/perl/t/op/die.t
@@ -1,6 +1,6 @@
#!./perl
-print "1..14\n";
+print "1..15\n";
$SIG{__DIE__} = sub { print ref($_[0]) ? ("ok ",$_[0]->[0]++,"\n") : @_ } ;
@@ -61,3 +61,14 @@ print "ok 10\n";
print "not " unless $@ =~ /Global symbol "\$\x{3b1}"/;
print "ok 14\n";
}
+
+# [perl #36470] got uninit warning if $@ was undef
+
+{
+ my $ok = 1;
+ local $SIG{__DIE__};
+ local $SIG{__WARN__} = sub { $ok = 0 };
+ eval { undef $@; die };
+ print "not " unless $ok;
+ print "ok 15\n";
+}
diff --git a/gnu/usr.bin/perl/t/op/getppid.t b/gnu/usr.bin/perl/t/op/getppid.t
new file mode 100755
index 00000000000..cb486888bec
--- /dev/null
+++ b/gnu/usr.bin/perl/t/op/getppid.t
@@ -0,0 +1,54 @@
+#!./perl
+
+# Test that getppid() follows UNIX semantics: when the parent process
+# dies, the child is reparented to the init process (pid 1).
+
+BEGIN {
+ chdir 't' if -d 't';
+ @INC = qw(../lib);
+}
+
+use strict;
+use Config;
+
+BEGIN {
+ for my $syscall (qw(pipe fork waitpid getppid)) {
+ if (!$Config{"d_$syscall"}) {
+ print "1..0 # Skip: no $syscall\n";
+ exit;
+ }
+ }
+ print "1..3\n";
+}
+
+pipe my ($r, $w) or die "pipe: $!\n";
+my $pid = fork; defined $pid or die "fork: $!\n";
+
+if ($pid) {
+ # parent
+ close $w;
+ waitpid($pid, 0) == $pid or die "waitpid: $!\n";
+ print <$r>;
+}
+else {
+ # child
+ close $r;
+ my $pid2 = fork; defined $pid2 or die "fork: $!\n";
+ if ($pid2) {
+ close $w;
+ sleep 1;
+ }
+ else {
+ # grandchild
+ my $ppid1 = getppid();
+ print $w "not " if $ppid1 <= 1;
+ print $w "ok 1 # ppid1=$ppid1\n";
+ sleep 2;
+ my $ppid2 = getppid();
+ print $w "not " if $ppid1 == $ppid2;
+ print $w "ok 2 # ppid2=$ppid2, ppid1!=ppid2\n";
+ print $w "not " if $ppid2 != 1;
+ print $w "ok 3 # ppid2=1\n";
+ }
+ exit 0;
+}
diff --git a/gnu/usr.bin/perl/t/op/lc.t b/gnu/usr.bin/perl/t/op/lc.t
index cee6661c9c9..460fed2619d 100644
--- a/gnu/usr.bin/perl/t/op/lc.t
+++ b/gnu/usr.bin/perl/t/op/lc.t
@@ -111,8 +111,8 @@ is("\u\x{587}" , "\x{535}\x{582}", "ligature titlecase");
is("\U\x{587}" , "\x{535}\x{552}", "ligature uppercase");
# mktables had problems where many-to-one case mappings didn't work right.
-# The lib/unifold.t should give the fourth folding, "casefolding", a good
-# workout.
+# The lib/uni/fold.t should give the fourth folding, "casefolding", a good
+# workout (one cannot directly get that from Perl).
# \x{01C4} is LATIN CAPITAL LETTER DZ WITH CARON
# \x{01C5} is LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON
# \x{01C6} is LATIN SMALL LETTER DZ WITH CARON
@@ -146,7 +146,7 @@ is($c , "\x{3c3}FOO.bAR", "Using s///e to change case.");
is($c , "\x{3a3}foo.Bar", "Using s///e to change case.");
# #18931: perl5.8.0 bug in \U..\E processing
-# Test case from Nick Clark.
+# Test case from Nicholas Clark.
for my $a (0,1) {
$_ = 'abcdefgh';
$_ .= chr 256;
@@ -161,6 +161,5 @@ for my $a (0,1) {
chop $a;
$a =~ s/^(\s*)(\w*)/$1\u$2/;
is($a, v10, "[perl #18857]");
- $test++;
}
}
diff --git a/gnu/usr.bin/perl/t/op/lex_assign.t b/gnu/usr.bin/perl/t/op/lex_assign.t
index fb9fe4e95c0..59d422e38f1 100644
--- a/gnu/usr.bin/perl/t/op/lex_assign.t
+++ b/gnu/usr.bin/perl/t/op/lex_assign.t
@@ -265,7 +265,7 @@ open BLAH, "<non-existent" # open
fileno STDERR # fileno
umask 0 # umask
select STDOUT # sselect
-select "","","",0 # select
+select undef,undef,undef,0 # select
getc OP # getc
'???' # read
'???' # sysread
diff --git a/gnu/usr.bin/perl/t/op/lfs.t b/gnu/usr.bin/perl/t/op/lfs.t
index f463b1b7b35..8f022b8aec9 100644
--- a/gnu/usr.bin/perl/t/op/lfs.t
+++ b/gnu/usr.bin/perl/t/op/lfs.t
@@ -67,7 +67,7 @@ if ($^O eq 'MSWin32' || $^O eq 'NetWare' || $^O eq 'VMS') {
# Known haves that have problems running this test
# (for example because they do not support sparse files, like UNICOS)
if ($^O eq 'unicos') {
- print "1..0 # Skip: no sparse files in $^0, unable to test large files\n";
+ print "1..0 # Skip: no sparse files in $^O, unable to test large files\n";
bye();
}
diff --git a/gnu/usr.bin/perl/t/op/loopctl.t b/gnu/usr.bin/perl/t/op/loopctl.t
index bc326c7b1a3..478c995351a 100644
--- a/gnu/usr.bin/perl/t/op/loopctl.t
+++ b/gnu/usr.bin/perl/t/op/loopctl.t
@@ -31,7 +31,7 @@
#
# -- .robin. <robin@kitsite.com> 2001-03-13
-print "1..43\n";
+print "1..44\n";
my $ok;
@@ -967,3 +967,16 @@ print ($ok ? "ok 41\n" : "not ok 41\n");
}
+
+{
+ # [perl #37725]
+
+ $a37725[3] = 1; # use package var
+ $i = 2;
+ for my $x (reverse @a37725) {
+ $x = $i++;
+ }
+ print "@a37725" == "5 4 3 2" ? "" : "not ",
+ "ok 44 - reverse with empty slots (@a37725)\n";
+}
+
diff --git a/gnu/usr.bin/perl/t/op/negate.t b/gnu/usr.bin/perl/t/op/negate.t
new file mode 100755
index 00000000000..fb8d4b49e85
--- /dev/null
+++ b/gnu/usr.bin/perl/t/op/negate.t
@@ -0,0 +1,31 @@
+#!./perl -w
+
+BEGIN {
+ chdir 't' if -d 't';
+ @INC = '../lib';
+ require './test.pl';
+}
+
+plan tests => 16;
+
+# Some of these will cause warnings if left on. Here we're checking the
+# functionality, not the warnings.
+no warnings "numeric";
+
+# test cases based on [perl #36675] -'-10' eq '+10'
+is(- 10, -10, "Simple numeric negation to negative");
+is(- -10, 10, "Simple numeric negation to positive");
+is(-"10", -10, "Negation of a positive string to negative");
+is(-"10.0", -10, "Negation of a positive decimal sting to negative");
+is(-"10foo", -10, "Negation of a numeric-lead string returns negation of numeric");
+is(-"-10", "+10", 'Negation of string starting with "-" returns a string starting with "+" - numeric');
+is(-"-10.0", "+10.0", 'Negation of string starting with "-" returns a string starting with "+" - decimal');
+is(-"-10foo", "+10foo", 'Negation of string starting with "-" returns a string starting with "+" - non-numeric');
+is(-"xyz", "-xyz", 'Negation of a negative string adds "-" to the front');
+is(-"-xyz", "+xyz", "Negation of a negative string to positive");
+is(-"+xyz", "-xyz", "Negation of a positive string to negative");
+is(-bareword, "-bareword", "Negation of bareword treated like a string");
+is(- -bareword, "+bareword", "Negation of -bareword returns string +bareword");
+is(-" -10", 10, "Negation of a whitespace-lead numeric string");
+is(-" -10.0", 10, "Negation of a whitespace-lead decimal string");
+is(-" -10foo", 10, "Negation of a whitespace-lead sting starting with a numeric")
diff --git a/gnu/usr.bin/perl/t/op/not.t b/gnu/usr.bin/perl/t/op/not.t
new file mode 100755
index 00000000000..3d07797daa8
--- /dev/null
+++ b/gnu/usr.bin/perl/t/op/not.t
@@ -0,0 +1,49 @@
+#!./perl -w
+
+BEGIN {
+ chdir 't' if -d 't';
+ @INC = '../lib';
+ require './test.pl';
+}
+
+plan tests => 16;
+
+# not() tests
+pass() if not();
+is(not(), 1);
+is(not(), not(0));
+
+# test not(..) and !
+is(! 1, not 1);
+is(! 0, not 0);
+is(! (0, 0), not(0, 0));
+
+# test the return of !
+{
+ my $not0 = ! 0;
+ my $not1 = ! 1;
+
+ no warnings;
+ ok($not1 == undef);
+ ok($not1 == ());
+
+ use warnings;
+ ok($not1 eq '');
+ ok($not1 == 0);
+ ok($not0 == 1);
+}
+
+# test the return of not
+{
+ my $not0 = not 0;
+ my $not1 = not 1;
+
+ no warnings;
+ ok($not1 == undef);
+ ok($not1 == ());
+
+ use warnings;
+ ok($not1 eq '');
+ ok($not1 == 0);
+ ok($not0 == 1);
+}
diff --git a/gnu/usr.bin/perl/t/op/sselect.t b/gnu/usr.bin/perl/t/op/sselect.t
new file mode 100755
index 00000000000..0f877b1eff4
--- /dev/null
+++ b/gnu/usr.bin/perl/t/op/sselect.t
@@ -0,0 +1,32 @@
+#!./perl
+
+BEGIN {
+ chdir 't' if -d 't';
+ @INC = ('.', '../lib');
+}
+
+require 'test.pl';
+
+plan (9);
+
+my $blank = "";
+eval {select undef, $blank, $blank, 0};
+is ($@, "");
+eval {select $blank, undef, $blank, 0};
+is ($@, "");
+eval {select $blank, $blank, undef, 0};
+is ($@, "");
+
+eval {select "", $blank, $blank, 0};
+is ($@, "");
+eval {select $blank, "", $blank, 0};
+is ($@, "");
+eval {select $blank, $blank, "", 0};
+is ($@, "");
+
+eval {select "a", $blank, $blank, 0};
+like ($@, qr/^Modification of a read-only value attempted/);
+eval {select $blank, "a", $blank, 0};
+like ($@, qr/^Modification of a read-only value attempted/);
+eval {select $blank, $blank, "a", 0};
+like ($@, qr/^Modification of a read-only value attempted/);
diff --git a/gnu/usr.bin/perl/t/op/sub_lval.t b/gnu/usr.bin/perl/t/op/sub_lval.t
index 003c1a0a50a..e286c27e8f7 100644
--- a/gnu/usr.bin/perl/t/op/sub_lval.t
+++ b/gnu/usr.bin/perl/t/op/sub_lval.t
@@ -1,4 +1,4 @@
-print "1..67\n";
+print "1..71\n";
BEGIN {
chdir 't' if -d 't';
@@ -530,8 +530,51 @@ sub lval2 : lvalue { $ary[1]; }
print "not " unless join(':', @ary) eq "1:2:6";
print "ok 64\n";
+# check that an element of a tied hash/array can be assigned to via lvalueness
+
+package Tie_Hash;
+
+our ($key, $val);
+sub TIEHASH { bless \my $v => __PACKAGE__ }
+sub STORE { ($key, $val) = @_[1,2] }
+
+package main;
+sub lval_tie_hash : lvalue {
+ tie my %t => 'Tie_Hash';
+ $t{key};
+}
+
+eval { lval_tie_hash() = "value"; };
+
+print "# element of tied hash: $@\nnot " if $@;
+print "ok 65\n";
+
+print "not " if "$Tie_Hash::key-$Tie_Hash::val" ne "key-value";
+print "ok 66\n";
+
+
+package Tie_Array;
+
+our @val;
+sub TIEARRAY { bless \my $v => __PACKAGE__ }
+sub STORE { $val[ $_[1] ] = $_[2] }
+
+package main;
+sub lval_tie_array : lvalue {
+ tie my @t => 'Tie_Array';
+ $t[0];
+}
+
+eval { lval_tie_array() = "value"; };
+
+print "# element of tied array: $@\nnot " if $@;
+print "ok 67\n";
+
+print "not " if $Tie_Array::val[0] ne "value";
+print "ok 68\n";
+
require './test.pl';
-curr_test(65);
+curr_test(69);
TODO: {
local $TODO = 'test explicit return of lval expr';
diff --git a/gnu/usr.bin/perl/t/op/threads.t b/gnu/usr.bin/perl/t/op/threads.t
new file mode 100755
index 00000000000..c89a7528fa8
--- /dev/null
+++ b/gnu/usr.bin/perl/t/op/threads.t
@@ -0,0 +1,62 @@
+#!./perl
+BEGIN {
+ chdir 't' if -d 't';
+ @INC = '../lib';
+ require './test.pl'; # for which_perl() etc
+ $| = 1;
+}
+
+use strict;
+use Config;
+
+BEGIN {
+ if (!$Config{useithreads}) {
+ print "1..0 # Skip: no ithreads\n";
+ exit 0;
+ }
+ if ($ENV{PERL_CORE_MINITEST}) {
+ print "1..0 # Skip: no dynamic loading on miniperl, no threads\n";
+ exit 0;
+ }
+ plan(3);
+}
+use threads;
+
+# test that we don't get:
+# Attempt to free unreferenced scalar: SV 0x40173f3c
+fresh_perl_is(<<'EOI', 'ok', { }, 'delete() under threads');
+use threads;
+threads->new(sub { my %h=(1,2); delete $h{1}})->join for 1..2;
+print "ok";
+EOI
+
+#PR24660
+# test that we don't get:
+# Attempt to free unreferenced scalar: SV 0x814e0dc.
+fresh_perl_is(<<'EOI', 'ok', { }, 'weaken ref under threads');
+use threads;
+use Scalar::Util;
+my $data = "a";
+my $obj = \$data;
+my $copy = $obj;
+Scalar::Util::weaken($copy);
+threads->new(sub { 1 })->join for (1..1);
+print "ok";
+EOI
+
+#PR24663
+# test that we don't get:
+# panic: magic_killbackrefs.
+# Scalars leaked: 3
+fresh_perl_is(<<'EOI', 'ok', { }, 'weaken ref #2 under threads');
+package Foo;
+sub new { bless {},shift }
+package main;
+use threads;
+use Scalar::Util qw(weaken);
+my $object = Foo->new;
+my $ref = $object;
+weaken $ref;
+threads->new(sub { $ref = $object } )->join; # $ref = $object causes problems
+print "ok";
+EOI
diff --git a/gnu/usr.bin/perl/t/op/tr.t b/gnu/usr.bin/perl/t/op/tr.t
index 3a4f610c02d..2a3d29ca1f6 100644
--- a/gnu/usr.bin/perl/t/op/tr.t
+++ b/gnu/usr.bin/perl/t/op/tr.t
@@ -6,7 +6,7 @@ BEGIN {
require './test.pl';
}
-plan tests => 99;
+plan tests => 100;
my $Is_EBCDIC = (ord('i') == 0x89 & ord('J') == 0xd1);
@@ -295,18 +295,15 @@ is($a, "X");
# (i-j, r-s, I-J, R-S), [\x89-\x91] [\xc9-\xd1] has to match them,
# from Karsten Sperling.
-# Not working in EBCDIC as of 12674.
$c = ($a = "\x89\x8a\x8b\x8c\x8d\x8f\x90\x91") =~ tr/\x89-\x91/X/;
is($c, 8);
is($a, "XXXXXXXX");
-
-# Not working in EBCDIC as of 12674.
+
$c = ($a = "\xc9\xca\xcb\xcc\xcd\xcf\xd0\xd1") =~ tr/\xc9-\xd1/X/;
is($c, 8);
is($a, "XXXXXXXX");
-
-SKIP: {
+SKIP: {
skip "not EBCDIC", 4 unless $Is_EBCDIC;
$c = ($a = "\x89\x8a\x8b\x8c\x8d\x8f\x90\x91") =~ tr/i-j/X/;
@@ -383,3 +380,7 @@ is( scalar keys %foo, 0, " doesn't extend the hash");
$x = \"foo";
is( $x =~ tr/A/A/, 2, 'non-modifying tr/// on a scalar ref' );
is( ref $x, 'SCALAR', " doesn't stringify its argument" );
+
+# rt.perl.org 36622. Perl didn't like a y/// at end of file. No trailing
+# newline allowed.
+fresh_perl_is(q[$_ = "foo"; y/A-Z/a-z/], '');
diff --git a/gnu/usr.bin/perl/t/pod/pod2usage2.t b/gnu/usr.bin/perl/t/pod/pod2usage2.t
new file mode 100755
index 00000000000..5f04594207a
--- /dev/null
+++ b/gnu/usr.bin/perl/t/pod/pod2usage2.t
@@ -0,0 +1,182 @@
+#!/usr/bin/perl -w
+
+use Test::More;
+
+BEGIN {
+ if ($^O eq 'MSWin32' || $^O eq 'VMS') {
+ plan skip_all => "Not portable on Win32 or VMS\n";
+ }
+ else {
+ plan tests => 15;
+ }
+ use_ok ("Pod::Usage");
+}
+
+sub getoutput
+{
+ my ($code) = @_;
+ my $pid = open(IN, "-|");
+ unless(defined $pid) {
+ die "Cannot fork: $!";
+ }
+ if($pid) {
+ # parent
+ my @out = <IN>;
+ close(IN);
+ my $exit = $?>>8;
+ s/^/#/ for @out;
+ local $" = "";
+ print "#EXIT=$exit OUTPUT=+++#@out#+++\n";
+ return($exit, join("",@out));
+ }
+ # child
+ open(STDERR, ">&STDOUT");
+ &$code;
+ print "--NORMAL-RETURN--\n";
+ exit 0;
+}
+
+sub compare
+{
+ my ($left,$right) = @_;
+ $left =~ s/^#\s+/#/gm;
+ $right =~ s/^#\s+/#/gm;
+ $left =~ s/\s+/ /gm;
+ $right =~ s/\s+/ /gm;
+ $left eq $right;
+}
+
+my ($exit, $text) = getoutput( sub { pod2usage() } );
+is ($exit, 2, "Exit status pod2usage ()");
+ok (compare ($text, <<'EOT'), "Output test pod2usage ()");
+#Usage:
+# frobnicate [ -r | --recursive ] [ -f | --force ] [ -n number ] file ...
+#
+EOT
+
+($exit, $text) = getoutput( sub { pod2usage(
+ -message => 'You naughty person, what did you say?',
+ -verbose => 1 ) });
+is ($exit, 1, "Exit status pod2usage (-message => '...', -verbose => 1)");
+ok (compare ($text, <<'EOT'), "Output test pod2usage (-message => '...', -verbose => 1)");
+#You naughty person, what did you say?
+# Usage:
+# frobnicate [ -r | --recursive ] [ -f | --force ] [ -n number ] file ...
+#
+# Options:
+# -r | --recursive
+# Run recursively.
+#
+# -f | --force
+# Just do it!
+#
+# -n number
+# Specify number of frobs, default is 42.
+#
+EOT
+
+($exit, $text) = getoutput( sub { pod2usage(
+ -verbose => 2, -exit => 42 ) } );
+is ($exit, 42, "Exit status pod2usage (-verbose => 2, -exit => 42)");
+ok (compare ($text, <<'EOT'), "Output test pod2usage (-verbose => 2, -exit => 42)");
+#NAME
+# frobnicate - do what I mean
+#
+# SYNOPSIS
+# frobnicate [ -r | --recursive ] [ -f | --force ] [ -n number ] file ...
+#
+# DESCRIPTION
+# frobnicate does foo and bar and what not.
+#
+# OPTIONS
+# -r | --recursive
+# Run recursively.
+#
+# -f | --force
+# Just do it!
+#
+# -n number
+# Specify number of frobs, default is 42.
+#
+EOT
+
+($exit, $text) = getoutput( sub { pod2usage(0) } );
+is ($exit, 0, "Exit status pod2usage (0)");
+ok (compare ($text, <<'EOT'), "Output test pod2usage (0)");
+#Usage:
+# frobnicate [ -r | --recursive ] [ -f | --force ] [ -n number ] file ...
+#
+# Options:
+# -r | --recursive
+# Run recursively.
+#
+# -f | --force
+# Just do it!
+#
+# -n number
+# Specify number of frobs, default is 42.
+#
+EOT
+
+($exit, $text) = getoutput( sub { pod2usage(42) } );
+is ($exit, 42, "Exit status pod2usage (42)");
+ok (compare ($text, <<'EOT'), "Output test pod2usage (42)");
+#Usage:
+# frobnicate [ -r | --recursive ] [ -f | --force ] [ -n number ] file ...
+#
+EOT
+
+($exit, $text) = getoutput( sub { pod2usage(-verbose => 0, -exit => 'NOEXIT') } );
+is ($exit, 0, "Exit status pod2usage (-verbose => 0, -exit => 'NOEXIT')");
+ok (compare ($text, <<'EOT'), "Output test pod2usage (-verbose => 0, -exit => 'NOEXIT')");
+#Usage:
+# frobnicate [ -r | --recursive ] [ -f | --force ] [ -n number ] file ...
+#
+# --NORMAL-RETURN--
+EOT
+
+($exit, $text) = getoutput( sub { pod2usage(-verbose => 99, -sections => 'DESCRIPTION') } );
+is ($exit, 1, "Exit status pod2usage (-verbose => 99, -sections => 'DESCRIPTION')");
+ok (compare ($text, <<'EOT'), "Output test pod2usage (-verbose => 99, -sections => 'DESCRIPTION')");
+#Description:
+# frobnicate does foo and bar and what not.
+#
+EOT
+
+
+
+__END__
+
+=head1 NAME
+
+frobnicate - do what I mean
+
+=head1 SYNOPSIS
+
+B<frobnicate> S<[ B<-r> | B<--recursive> ]> S<[ B<-f> | B<--force> ]>
+ S<[ B<-n> I<number> ]> I<file> ...
+
+=head1 DESCRIPTION
+
+B<frobnicate> does foo and bar and what not.
+
+=head1 OPTIONS
+
+=over 4
+
+=item B<-r> | B<--recursive>
+
+Run recursively.
+
+=item B<-f> | B<--force>
+
+Just do it!
+
+=item B<-n> I<number>
+
+Specify number of frobs, default is 42.
+
+=back
+
+=cut
+
diff --git a/gnu/usr.bin/perl/t/run/fresh_perl.t b/gnu/usr.bin/perl/t/run/fresh_perl.t
index 6f99451c519..2f71f249ad3 100644
--- a/gnu/usr.bin/perl/t/run/fresh_perl.t
+++ b/gnu/usr.bin/perl/t/run/fresh_perl.t
@@ -35,11 +35,13 @@ foreach my $prog (@prgs) {
my($raw_prog, $name) = @$prog;
my $switch;
- if ($raw_prog =~ s/^\s*(-\w.*)//){
+ if ($raw_prog =~ s/^\s*(-\w.*)\n//){
$switch = $1;
}
my($prog,$expected) = split(/\nEXPECT\n/, $raw_prog);
+ $prog .= "\n";
+ $expected = '' unless defined $expected;
if ($prog =~ /^\# SKIP: (.+)/m) {
if (eval $1) {
@@ -50,7 +52,7 @@ foreach my $prog (@prgs) {
$expected =~ s/\n+$//;
- fresh_perl_is($prog, $expected, { switches => [$switch] }, $name);
+ fresh_perl_is($prog, $expected, { switches => [$switch || ''] }, $name);
}
__END__
@@ -383,7 +385,7 @@ EXPECT
-w
sub testme { my $a = "test"; { local $a = "new test"; print $a }}
EXPECT
-Can't localize lexical variable $a at - line 2.
+Can't localize lexical variable $a at - line 1.
########
package X;
sub ascalar { my $r; bless \$r }
@@ -510,7 +512,7 @@ else {
if ($x == 0) { print "" } else { print $x }
}
EXPECT
-Use of uninitialized value in numeric eq (==) at - line 4.
+Use of uninitialized value in numeric eq (==) at - line 3.
########
$x = sub {};
foo();
@@ -651,8 +653,9 @@ new_pmop "abcdef"; reset;
close STDERR; die;
EXPECT
########
+# core dump in 20000716.007
-w
-"x" =~ /(\G?x)?/; # core dump in 20000716.007
+"x" =~ /(\G?x)?/;
########
# Bug 20010515.004
my @h = 1 .. 10;
@@ -857,7 +860,7 @@ EXPECT
./"TEST"
######## "Segfault using HTML::Entities", Richard Jolly <richardjolly@mac.com>, <A3C7D27E-C9F4-11D8-B294-003065AE00B6@mac.com> in perl-unicode@perl.org
-lw
-# SKIP: " $Config::Config{'extensions'} " !~ m[ Encode ] # Perl configured without Encode module
+# SKIP: use Config; $ENV{PERL_CORE_MINITEST} or " $Config::Config{'extensions'} " !~ m[ Encode ] # Perl configured without Encode module
BEGIN {
eval 'require Encode';
if ($@) { exit 0 } # running minitest?
@@ -871,4 +874,4 @@ $t =~ s/([^a])//ge;
$@ =~ s/ at .*/ at/;
print $@
EXPECT
-Malformed UTF-8 character (unexpected end of string) at
+Malformed UTF-8 character (unexpected end of string) in substitution (s///) at
diff --git a/gnu/usr.bin/perl/t/run/runenv.t b/gnu/usr.bin/perl/t/run/runenv.t
index df4a778b4d3..bbe231f9b43 100644
--- a/gnu/usr.bin/perl/t/run/runenv.t
+++ b/gnu/usr.bin/perl/t/run/runenv.t
@@ -20,7 +20,7 @@ plan tests => 17;
my $STDOUT = './results-0';
my $STDERR = './results-1';
-my $PERL = './perl';
+my $PERL = $ENV{PERL} || './perl';
my $FAILURE_CODE = 119;
delete $ENV{PERLLIB};
diff --git a/gnu/usr.bin/perl/t/run/switchF1.t b/gnu/usr.bin/perl/t/run/switchF1.t
new file mode 100755
index 00000000000..fc59645646f
--- /dev/null
+++ b/gnu/usr.bin/perl/t/run/switchF1.t
@@ -0,0 +1,31 @@
+#!perl -w
+print "1..5\n";
+
+my $file = "F-Pathological.pl";
+
+open F, ">$file" or die "Open $file: $!";
+
+my $prog = <<'EOT';
+#!./perl -anF[~#QQ\\xq']
+
+BEGIN {
+ *ARGV = *DATA;
+}
+print "@F";
+
+__DATA__
+okx1
+okq2
+ok\3
+ok'4
+EOT
+
+# 2 of the characters toke.c used to use to quote the split parameter:
+$prog =~ s/QQ/\x01\x80/;
+# These 2 plus ~ # and ' were enough to make perl choke
+print F $prog;
+close F or die "Close $file: $!";
+
+print system ($^X, $file) ? "not ok 5\n" : "ok 5\n";
+
+unlink $file or die "Unlink $file: $!";
diff --git a/gnu/usr.bin/perl/t/test.pl b/gnu/usr.bin/perl/t/test.pl
index a35eb83693b..95aa87fdba4 100644
--- a/gnu/usr.bin/perl/t/test.pl
+++ b/gnu/usr.bin/perl/t/test.pl
@@ -101,8 +101,8 @@ sub _q {
my $x = shift;
return 'undef' unless defined $x;
my $q = $x;
- $q =~ s/\\/\\\\/;
- $q =~ s/'/\\'/;
+ $q =~ s/\\/\\\\/g;
+ $q =~ s/'/\\'/g;
return "'$q'";
}
@@ -258,6 +258,7 @@ sub like_yn ($$$@) {
unshift(@mess, "# got '$got'\n",
"# expected /$expected/\n");
}
+ local $Level = 2;
_ok($pass, _where(), $name, @mess);
}
@@ -291,6 +292,18 @@ sub skip {
last SKIP;
}
+sub todo_skip {
+ my $why = shift;
+ my $n = @_ ? shift : 1;
+
+ for (1..$n) {
+ print STDOUT "not ok $test # TODO & SKIP: $why\n";
+ $test++;
+ }
+ local $^W = 0;
+ last TODO;
+}
+
sub eq_array {
my ($ra, $rb) = @_;
return 0 unless $#$ra == $#$rb;
@@ -378,6 +391,10 @@ sub _quote_args {
sub _create_runperl { # Create the string to qx in runperl().
my %args = @_;
my $runperl = $^X =~ m/\s/ ? qq{"$^X"} : $^X;
+ #- this allows, for example, to set PERL_RUNPERL_DEBUG=/usr/bin/valgrind
+ if ($ENV{PERL_RUNPERL_DEBUG}) {
+ $runperl = "$ENV{PERL_RUNPERL_DEBUG} $runperl";
+ }
unless ($args{nolib}) {
if ($is_macos) {
$runperl .= ' -I::lib';
@@ -412,6 +429,12 @@ sub _create_runperl { # Create the string to qx in runperl().
}
} elsif (defined $args{progfile}) {
$runperl .= qq( "$args{progfile}");
+ } else {
+ # You probaby didn't want to be sucking in from the upstream stdin
+ die "test.pl:runperl(): none of prog, progs, progfile, args, "
+ . " switches or stdin specified"
+ unless defined $args{args} or defined $args{switches}
+ or defined $args{stdin};
}
if (defined $args{stdin}) {
# so we don't try to put literal newlines and crs onto the
@@ -455,6 +478,8 @@ sub _create_runperl { # Create the string to qx in runperl().
}
sub runperl {
+ die "test.pl:runperl() does not take a hashref"
+ if ref $_[0] and ref $_[0] eq 'HASH';
my $runperl = &_create_runperl;
my $result = `$runperl`;
$result =~ s/\n\n/\n/ if $is_vms; # XXX pipes sometimes double these
@@ -555,7 +580,7 @@ sub _fresh_perl {
{if (-e _ and -f _)}
}
- print TEST $prog, "\n";
+ print TEST $prog;
close TEST or die "Cannot close $tmpfile: $!";
my $results = runperl(%$runperl_args);
@@ -625,4 +650,66 @@ sub fresh_perl_like {
$runperl_args, $name);
}
+sub can_ok ($@) {
+ my($proto, @methods) = @_;
+ my $class = ref $proto || $proto;
+
+ unless( @methods ) {
+ return _ok( 0, _where(), "$class->can(...)" );
+ }
+
+ my @nok = ();
+ foreach my $method (@methods) {
+ local($!, $@); # don't interfere with caller's $@
+ # eval sometimes resets $!
+ eval { $proto->can($method) } || push @nok, $method;
+ }
+
+ my $name;
+ $name = @methods == 1 ? "$class->can('$methods[0]')"
+ : "$class->can(...)";
+
+ _ok( !@nok, _where(), $name );
+}
+
+sub isa_ok ($$;$) {
+ my($object, $class, $obj_name) = @_;
+
+ my $diag;
+ $obj_name = 'The object' unless defined $obj_name;
+ my $name = "$obj_name isa $class";
+ if( !defined $object ) {
+ $diag = "$obj_name isn't defined";
+ }
+ elsif( !ref $object ) {
+ $diag = "$obj_name isn't a reference";
+ }
+ else {
+ # We can't use UNIVERSAL::isa because we want to honor isa() overrides
+ local($@, $!); # eval sometimes resets $!
+ my $rslt = eval { $object->isa($class) };
+ if( $@ ) {
+ if( $@ =~ /^Can't call method "isa" on unblessed reference/ ) {
+ if( !UNIVERSAL::isa($object, $class) ) {
+ my $ref = ref $object;
+ $diag = "$obj_name isn't a '$class' it's a '$ref'";
+ }
+ } else {
+ die <<WHOA;
+WHOA! I tried to call ->isa on your object and got some weird error.
+This should never happen. Please contact the author immediately.
+Here's the error.
+$@
+WHOA
+ }
+ }
+ elsif( !$rslt ) {
+ my $ref = ref $object;
+ $diag = "$obj_name isn't a '$class' it's a '$ref'";
+ }
+ }
+
+ _ok( !$diag, _where(), $name );
+}
+
1;
diff --git a/gnu/usr.bin/perl/t/uni/case.pl b/gnu/usr.bin/perl/t/uni/case.pl
index 0402be402f9..e86e8ef4821 100644
--- a/gnu/usr.bin/perl/t/uni/case.pl
+++ b/gnu/usr.bin/perl/t/uni/case.pl
@@ -7,7 +7,19 @@ sub unidump {
}
sub casetest {
- my ($base, $spec, $func) = @_;
+ my ($base, $spec, @funcs) = @_;
+ # For each provided function run it, and run a version with some extra
+ # characters afterwards. Use a recylcing symbol, as it doesn't change case.
+ my $ballast = chr (0x2672) x 3;
+ @funcs = map {my $f = $_;
+ ($f,
+ sub {my $r = $f->($_[0] . $ballast); # Add it before
+ $r =~ s/$ballast\z//so # Remove it afterwards
+ or die "'$_[0]' to '$r' mangled";
+ $r; # Result with $ballast removed.
+ },
+ )} @funcs;
+
my $file = File::Spec->catfile(File::Spec->catdir(File::Spec->updir,
"lib", "unicore", "To"),
"$base.pl");
@@ -45,9 +57,9 @@ sub casetest {
print "# ", scalar keys %none, " noncase mappings\n";
my $tests =
- (scalar keys %simple) +
- (scalar keys %$spec) +
- (scalar keys %none);
+ ((scalar keys %simple) +
+ (scalar keys %$spec) +
+ (scalar keys %none)) * @funcs;
print "1..$tests\n";
my $test = 1;
@@ -55,11 +67,13 @@ sub casetest {
for my $i (sort keys %simple) {
my $w = $simple{$i};
my $c = pack "U0U", hex $i;
- my $d = $func->($c);
- my $e = unidump($d);
- print $d eq pack("U0U", hex $simple{$i}) ?
- "ok $test # $i -> $w\n" : "not ok $test # $i -> $e ($w)\n";
- $test++;
+ foreach my $func (@funcs) {
+ my $d = $func->($c);
+ my $e = unidump($d);
+ print $d eq pack("U0U", hex $simple{$i}) ?
+ "ok $test # $i -> $w\n" : "not ok $test # $i -> $e ($w)\n";
+ $test++;
+ }
}
for my $i (sort keys %$spec) {
@@ -67,69 +81,73 @@ sub casetest {
my $u = unpack "U0U", $i;
my $h = sprintf "%04X", $u;
my $c = chr($u); $c .= chr(0x100); chop $c;
- my $d = $func->($c);
- my $e = unidump($d);
- if (ord "A" == 193) { # EBCDIC
- # We need to a little bit of remapping.
- #
- # For example, in titlecase (ucfirst) mapping
- # of U+0149 the Unicode mapping is U+02BC U+004E.
- # The 4E is N, which in EBCDIC is 2B--
- # and the ucfirst() does that right.
- # The problem is that our reference
- # data is in Unicode code points.
- #
- # The Right Way here would be to use, say,
- # Encode, to remap the less-than 0x100 code points,
- # but let's try to be Encode-independent here.
- #
- # These are the titlecase exceptions:
- #
- # Unicode Unicode+EBCDIC
- #
- # 0149 -> 02BC 004E (02BC 002B)
- # 01F0 -> 004A 030C (00A2 030C)
- # 1E96 -> 0048 0331 (00E7 0331)
- # 1E97 -> 0054 0308 (00E8 0308)
- # 1E98 -> 0057 030A (00EF 030A)
- # 1E99 -> 0059 030A (00DF 030A)
- # 1E9A -> 0041 02BE (00A0 02BE)
- #
- # The uppercase exceptions are identical.
- #
- # The lowercase has one more:
- #
- # Unicode Unicode+EBCDIC
- #
- # 0130 -> 0069 0307 (00D1 0307)
- #
- if ($i =~ /^(0130|0149|01F0|1E96|1E97|1E98|1E99|1E9A)$/) {
- $e =~ s/004E/002B/; # N
- $e =~ s/004A/00A2/; # J
- $e =~ s/0048/00E7/; # H
- $e =~ s/0054/00E8/; # T
- $e =~ s/0057/00EF/; # W
- $e =~ s/0059/00DF/; # Y
- $e =~ s/0041/00A0/; # A
- $e =~ s/0069/00D1/; # i
+ foreach my $func (@funcs) {
+ my $d = $func->($c);
+ my $e = unidump($d);
+ if (ord "A" == 193) { # EBCDIC
+ # We need to a little bit of remapping.
+ #
+ # For example, in titlecase (ucfirst) mapping
+ # of U+0149 the Unicode mapping is U+02BC U+004E.
+ # The 4E is N, which in EBCDIC is 2B--
+ # and the ucfirst() does that right.
+ # The problem is that our reference
+ # data is in Unicode code points.
+ #
+ # The Right Way here would be to use, say,
+ # Encode, to remap the less-than 0x100 code points,
+ # but let's try to be Encode-independent here.
+ #
+ # These are the titlecase exceptions:
+ #
+ # Unicode Unicode+EBCDIC
+ #
+ # 0149 -> 02BC 004E (02BC 002B)
+ # 01F0 -> 004A 030C (00A2 030C)
+ # 1E96 -> 0048 0331 (00E7 0331)
+ # 1E97 -> 0054 0308 (00E8 0308)
+ # 1E98 -> 0057 030A (00EF 030A)
+ # 1E99 -> 0059 030A (00DF 030A)
+ # 1E9A -> 0041 02BE (00A0 02BE)
+ #
+ # The uppercase exceptions are identical.
+ #
+ # The lowercase has one more:
+ #
+ # Unicode Unicode+EBCDIC
+ #
+ # 0130 -> 0069 0307 (00D1 0307)
+ #
+ if ($i =~ /^(0130|0149|01F0|1E96|1E97|1E98|1E99|1E9A)$/) {
+ $e =~ s/004E/002B/; # N
+ $e =~ s/004A/00A2/; # J
+ $e =~ s/0048/00E7/; # H
+ $e =~ s/0054/00E8/; # T
+ $e =~ s/0057/00EF/; # W
+ $e =~ s/0059/00DF/; # Y
+ $e =~ s/0041/00A0/; # A
+ $e =~ s/0069/00D1/; # i
+ }
+ # We have to map the output, not the input, because
+ # pack/unpack U has been EBCDICified, too, it would
+ # just undo our remapping.
}
- # We have to map the output, not the input, because
- # pack/unpack U has been EBCDICified, too, it would
- # just undo our remapping.
+ print $w eq $e ?
+ "ok $test # $i -> $w\n" : "not ok $test # $h -> $e ($w)\n";
+ $test++;
}
- print $w eq $e ?
- "ok $test # $i -> $w\n" : "not ok $test # $h -> $e ($w)\n";
- $test++;
}
for my $i (sort { $a <=> $b } keys %none) {
my $w = $i = sprintf "%04X", $i;
my $c = pack "U0U", hex $i;
- my $d = $func->($c);
- my $e = unidump($d);
- print $d eq $c ?
- "ok $test # $i -> $w\n" : "not ok $test # $i -> $e ($w)\n";
- $test++;
+ foreach my $func (@funcs) {
+ my $d = $func->($c);
+ my $e = unidump($d);
+ print $d eq $c ?
+ "ok $test # $i -> $w\n" : "not ok $test # $i -> $e ($w)\n";
+ $test++;
+ }
}
}
diff --git a/gnu/usr.bin/perl/t/uni/class.t b/gnu/usr.bin/perl/t/uni/class.t
index 66f3962c1bf..fa4cbf58aeb 100644
--- a/gnu/usr.bin/perl/t/uni/class.t
+++ b/gnu/usr.bin/perl/t/uni/class.t
@@ -4,7 +4,7 @@ BEGIN {
require "test.pl";
}
-plan tests => 4334;
+plan tests => 4670;
sub MyUniClass {
<<END;
@@ -25,6 +25,30 @@ sub A::B::Intersection {
END
}
+sub test_regexp ($$) {
+ # test that given string consists of N-1 chars matching $qr1, and 1
+ # char matching $qr2
+ my ($str, $blk) = @_;
+
+ # constructing these objects here makes the last test loop go much faster
+ my $qr1 = qr/(\p{$blk}+)/;
+ if ($str =~ $qr1) {
+ is($1, substr($str, 0, -1)); # all except last char
+ }
+ else {
+ fail('first N-1 chars did not match');
+ }
+
+ my $qr2 = qr/(\P{$blk}+)/;
+ if ($str =~ $qr2) {
+ is($1, substr($str, -1)); # only last char
+ }
+ else {
+ fail('last char did not match');
+ }
+}
+
+use strict;
my $str = join "", map chr($_), 0x20 .. 0x6F;
@@ -57,14 +81,16 @@ is(($str =~ /(\p{Script=InGreek}+)/)[0], "\x{038B}\x{038C}\x{038D}");
is(($str =~ /(\p{sc:InGreek}+)/)[0], "\x{038B}\x{038C}\x{038D}");
is(($str =~ /(\p{sc=InGreek}+)/)[0], "\x{038B}\x{038C}\x{038D}");
-
use File::Spec;
my $updir = File::Spec->updir;
-
# the %utf8::... hashes are already in existence
# because utf8_pva.pl was run by utf8_heavy.pl
+*utf8::PropertyAlias = *utf8::PropertyAlias; # thwart a warning
+
+no warnings 'utf8'; # we do not want warnings about surrogates etc
+
# non-General Category and non-Script
while (my ($abbrev, $files) = each %utf8::PVA_abbr_map) {
my $prop_name = $utf8::PropertyAlias{$abbrev};
@@ -77,7 +103,7 @@ while (my ($abbrev, $files) = each %utf8::PVA_abbr_map) {
);
next unless -e $filename;
- my ($h1, $h2) = map hex, split /\t/, (do $filename);
+ my ($h1, $h2) = map hex, (split(/\t/, (do $filename), 3))[0,1];
my $str = join "", map chr, $h1 .. (($h2 || $h1) + 1);
for my $p ($prop_name, $abbrev) {
@@ -97,15 +123,14 @@ for my $p ('gc', 'sc') {
);
next unless -e $filename;
- my ($h1, $h2) = map hex, split /\t/, (do $filename);
+ my ($h1, $h2) = map hex, (split(/\t/, (do $filename), 3))[0,1];
my $str = join "", map chr, $h1 .. (($h2 || $h1) + 1);
for my $x ($p, { gc => 'General Category', sc => 'Script' }->{$p}) {
for my $y ($abbr, $utf8::PropValueAlias{$p}{$abbr}, $utf8::PVA_abbr_map{gc_sc}{$abbr}) {
is($str =~ /(\p{$x: $y}+)/ && $1, substr($str, 0, -1));
is($str =~ /(\P{$x= $y}+)/ && $1, substr($str, -1));
- is($str =~ /(\p{$y}+)/ && $1, substr($str, 0, -1));
- is($str =~ /(\P{$y}+)/ && $1, substr($str, -1));
+ test_regexp ($str, $y);
}
}
}
@@ -114,7 +139,7 @@ for my $p ('gc', 'sc') {
# test extra properties (ASCII_Hex_Digit, Bidi_Control, etc.)
SKIP:
{
- skip "Can't reliably derive class names from file names", 544 if $^O eq 'VMS';
+ skip "Can't reliably derive class names from file names", 592 if $^O eq 'VMS';
# On case tolerant filesystems, Cf.pl will cause a -e test for cf.pl to
# return true. Try to work around this by reading the filenames explicitly
@@ -125,9 +150,9 @@ SKIP:
my %files;
- my $dirname = File::Spec->catdir($updir => lib => unicore => lib => gc_sc);
+ my $dirname = File::Spec->catdir($updir => lib => unicore => lib => 'gc_sc');
opendir D, $dirname or die $!;
- @files{readdir D} = ();
+ @files{readdir(D)} = ();
closedir D;
for (keys %utf8::PA_reverse) {
@@ -136,7 +161,7 @@ SKIP:
my $filename = File::Spec->catfile($dirname, $leafname);
- my ($h1, $h2) = map hex, split /\t/, (do $filename);
+ my ($h1, $h2) = map hex, (split(/\t/, (do $filename), 3))[0,1];
my $str = join "", map chr, $h1 .. (($h2 || $h1) + 1);
for my $x ('gc', 'General Category') {
@@ -144,8 +169,7 @@ SKIP:
for my $y ($_, $utf8::PA_reverse{$_}) {
is($str =~ /(\p{$x: $y}+)/ && $1, substr($str, 0, -1));
is($str =~ /(\P{$x= $y}+)/ && $1, substr($str, -1));
- is($str =~ /(\p{$y}+)/ && $1, substr($str, 0, -1));
- is($str =~ /(\P{$y}+)/ && $1, substr($str, -1));
+ test_regexp ($str, $y);
}
}
}
@@ -158,16 +182,16 @@ for (grep $utf8::Canonical{$_} =~ /^In/, keys %utf8::Canonical) {
);
next unless -e $filename;
- my ($h1, $h2) = map hex, split /\t/, (do $filename);
+
+ print "# In$_ $filename\n";
+
+ my ($h1, $h2) = map hex, (split(/\t/, (do $filename), 3))[0,1];
my $str = join "", map chr, $h1 .. (($h2 || $h1) + 1);
my $blk = $_;
- is($str =~ /(\p{$blk}+)/ && $1, substr($str, 0, -1));
- is($str =~ /(\P{$blk}+)/ && $1, substr($str, -1));
-
+ test_regexp ($str, $blk);
$blk =~ s/^In/Block:/;
-
- is($str =~ /(\p{$blk}+)/ && $1, substr($str, 0, -1));
- is($str =~ /(\P{$blk}+)/ && $1, substr($str, -1));
+ test_regexp ($str, $blk);
}
+
diff --git a/gnu/usr.bin/perl/t/uni/lower.t b/gnu/usr.bin/perl/t/uni/lower.t
index 4420d0b165d..76df6de09d0 100644
--- a/gnu/usr.bin/perl/t/uni/lower.t
+++ b/gnu/usr.bin/perl/t/uni/lower.t
@@ -4,5 +4,6 @@ BEGIN {
require "case.pl";
}
-casetest("Lower", \%utf8::ToSpecLower, sub { lc $_[0] });
-
+casetest("Lower", \%utf8::ToSpecLower,
+ sub { lc $_[0] }, sub { my $a = ""; lc ($_[0] . $a) },
+ sub { lcfirst $_[0] }, sub { my $a = ""; lcfirst ($_[0] . $a) });
diff --git a/gnu/usr.bin/perl/t/uni/sprintf.t b/gnu/usr.bin/perl/t/uni/sprintf.t
index 3c5f574b62c..08626498e2c 100644
--- a/gnu/usr.bin/perl/t/uni/sprintf.t
+++ b/gnu/usr.bin/perl/t/uni/sprintf.t
@@ -6,7 +6,7 @@ BEGIN {
require "test.pl";
}
-plan tests => 25;
+plan tests => 52;
$a = "B\x{fc}f";
$b = "G\x{100}r";
@@ -137,3 +137,19 @@ $c = 0x200;
$sprintf = sprintf "%s%s", $w, "$w\x{100}";
is(substr($sprintf,0,2), $w, "utf8 echo echo");
}
+
+my @values =(chr 110, chr 255, chr 256);
+
+foreach my $prefix (@values) {
+ foreach my $vector (map {$_ . $_} @values) {
+
+ my $format = "$prefix%*vd";
+
+ foreach my $dot (@values) {
+ my $result = sprintf $format, $dot, $vector;
+ is (length $result, 8)
+ or print "# ", join (',', map {ord $_} $prefix, $dot, $vector),
+ "\n";
+ }
+ }
+}
diff --git a/gnu/usr.bin/perl/t/uni/title.t b/gnu/usr.bin/perl/t/uni/title.t
index c0b7e3a0163..ae85f94fbb1 100644
--- a/gnu/usr.bin/perl/t/uni/title.t
+++ b/gnu/usr.bin/perl/t/uni/title.t
@@ -4,5 +4,5 @@ BEGIN {
require "case.pl";
}
-casetest("Title", \%utf8::ToSpecTitle, sub { ucfirst $_[0] });
-
+casetest("Title", \%utf8::ToSpecTitle, sub { ucfirst $_[0] },
+ sub { my $a = ""; ucfirst ($_[0] . $a) });
diff --git a/gnu/usr.bin/perl/t/uni/upper.t b/gnu/usr.bin/perl/t/uni/upper.t
index 5694c26f222..d9f1788c721 100644
--- a/gnu/usr.bin/perl/t/uni/upper.t
+++ b/gnu/usr.bin/perl/t/uni/upper.t
@@ -4,5 +4,5 @@ BEGIN {
require "case.pl";
}
-casetest("Upper", \%utf8::ToSpecUpper, sub { uc $_[0] });
-
+casetest("Upper", \%utf8::ToSpecUpper, sub { uc $_[0] },
+ sub { my $a = ""; uc ($_[0] . $a) });
diff --git a/gnu/usr.bin/perl/t/win32/system.t b/gnu/usr.bin/perl/t/win32/system.t
index b1906ce73ab..fb7a1d1429d 100644
--- a/gnu/usr.bin/perl/t/win32/system.t
+++ b/gnu/usr.bin/perl/t/win32/system.t
@@ -2,7 +2,9 @@
BEGIN {
chdir 't' if -d 't';
- @INC = '../lib';
+ # We need '../../lib' as well as '../lib' because parts of Config are
+ # delay-loaded, after we've chdir()'ed into $testdir.
+ @INC = ('../lib', '../../lib');
# XXX this could be further munged to enable some parts on other
# platforms
unless ($^O =~ /^MSWin/) {
diff --git a/gnu/usr.bin/perl/thread.h b/gnu/usr.bin/perl/thread.h
index e7baf723c79..532daf27229 100644
--- a/gnu/usr.bin/perl/thread.h
+++ b/gnu/usr.bin/perl/thread.h
@@ -1,6 +1,7 @@
/* thread.h
*
- * Copyright (C) 1999, 2000, 2001, 2002, 2004, by Larry Wall and others
+ * Copyright (C) 1999, 2000, 2001, 2002, 2004, 2005
+ * 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.
@@ -334,8 +335,7 @@
STMT_START { \
int _eC_; \
if ((_eC_ = pthread_key_create(&PL_thr_key, 0))) { \
- PerlIO_printf(PerlIO_stderr(), "panic: pthread_key_create (%d) [%s:%d]", \
- _eC_, __FILE__, __LINE__); \
+ write(2, "panic: pthread_key_create failed\n", 33); \
exit(1); \
} \
} STMT_END
diff --git a/gnu/usr.bin/perl/uconfig.h b/gnu/usr.bin/perl/uconfig.h
index a81a24055fd..4df45a8e981 100644
--- a/gnu/usr.bin/perl/uconfig.h
+++ b/gnu/usr.bin/perl/uconfig.h
@@ -869,47 +869,6 @@
*/
/*#define I_VFORK / **/
-/* 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 /**/
-
-/* 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 / **/
-
-/* 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_t /**/
-# define Uquad_t uint64_t /**/
-# define QUADKIND 4 /**/
-# define QUAD_IS_INT 1
-# define QUAD_IS_LONG 2
-# define QUAD_IS_LONG_LONG 3
-# define QUAD_IS_INT64_T 4
-#endif
-
/* HAS_ACCESSX:
* This symbol, if defined, indicates that the accessx routine is
* available to do extended access checks.
@@ -934,6 +893,40 @@
*/
/*#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 "unknown" /**/
+#define OSVERS "" /**/
+
+/* 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 "" /**/
+#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,
@@ -945,6 +938,69 @@
#define MEM_ALIGNBYTES 4
#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 . 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 "/usr/local/lib/perl5/5.9/unknown" / **/
+/*#define ARCHLIB_EXP "/usr/local/lib/perl5/5.9/unknown" / **/
+
+/* 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 "unknown" /**/
+
+/* 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 "/usr/local/bin" /**/
+#define BIN_EXP "" /**/
+
+/* 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...
@@ -988,505 +1044,6 @@
#define BYTEORDER 0x1234 /* large digits for MSB */
#endif /* NeXT */
-/* 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 /**/
-
-/* VOID_CLOSEDIR:
- * This symbol, if defined, indicates that the closedir() routine
- * does not return a value.
- */
-/*#define VOID_CLOSEDIR / **/
-
-/* HAS_FD_SET:
- * This symbol, when defined, indicates presence of the fd_set typedef
- * in <sys/types.h>
- */
-/*#define HAS_FD_SET / **/
-
-/* 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_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_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_ISASCII:
- * This manifest constant lets the C program know that isascii
- * is available.
- */
-/*#define HAS_ISASCII / **/
-
-/* 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_OPEN3:
- * This manifest constant lets the C program know that the three
- * argument form of open(2) is available.
- */
-/*#define HAS_OPEN3 / **/
-
-/* HAS_SAFE_BCOPY:
- * This symbol, if defined, indicates that the bcopy routine is available
- * to copy potentially overlapping memory blocks. Normally, you should
- * probably use memmove() or memcpy(). If neither is defined, roll your
- * own version.
- */
-/*#define HAS_SAFE_BCOPY / **/
-
-/* HAS_SAFE_MEMCPY:
- * This symbol, if defined, indicates that the memcpy routine is available
- * to copy potentially overlapping memory blocks. If you need to
- * copy overlapping memory blocks, you should check HAS_MEMMOVE and
- * use memmove() instead, if available.
- */
-/*#define HAS_SAFE_MEMCPY / **/
-
-/* HAS_SANE_MEMCMP:
- * This symbol, if defined, indicates that the memcmp routine is available
- * and can be used to compare relative magnitudes of chars with their high
- * bits set. If it is not defined, roll your own version.
- */
-/*#define HAS_SANE_MEMCMP / **/
-
-/* 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
-
-/* 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) ((fp)->_IO_read_ptr)
-/*#define STDIO_PTR_LVALUE / **/
-#define FILE_cnt(fp) ((fp)->_IO_read_end - (fp)->_IO_read_ptr)
-/*#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) ((fp)->_IO_read_base)
-#define FILE_bufsiz(fp) ((fp)->_IO_read_end - (fp)->_IO_read_base)
-#endif
-
-/* HAS_VPRINTF:
- * This symbol, if defined, indicates that the vprintf routine is available
- * to printf with a pointer to an argument list. If unavailable, you
- * may need to write your own, probably in terms of _doprnt().
- */
-/* USE_CHAR_VSPRINTF:
- * This symbol is defined if this system has vsprintf() returning type
- * (char*). The trend seems to be to declare it as "int vsprintf()". It
- * is up to the package author to declare vsprintf correctly based on the
- * symbol.
- */
-#define HAS_VPRINTF /**/
-/*#define USE_CHAR_VSPRINTF / **/
-
-/* DOUBLESIZE:
- * This symbol contains the size of a double, so that the C preprocessor
- * can make decisions based on it.
- */
-#define DOUBLESIZE 8 /**/
-
-/* 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 / **/
-
-/* 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
-#undef EOF_NONBLOCK
-
-/* 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() & 0x7FFF) / (double) ((unsigned long)1 << 15)) /**/
-#define Rand_seed_t int /**/
-#define seedDrand01(x) srand((Rand_seed_t)x) /**/
-#define RANDBITS 48 /**/
-
-/* 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 */
-
-/* EBCDIC:
- * This symbol, if defined, indicates that this system uses
- * EBCDIC encoding.
- */
-/*#define EBCDIC / **/
-
-/* ARCHLIB:
- * This variable, if defined, holds the name of the directory in
- * which the user wants to put architecture-dependent public
- * library files for . 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 "/usr/local/lib/perl5/5.9/unknown" / **/
-/*#define ARCHLIB_EXP "/usr/local/lib/perl5/5.9/unknown" / **/
-
-/* 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 "/usr/local/bin" /**/
-#define BIN_EXP "" /**/
-
-/* 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 NULL /**/
-
-/* 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_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 "" / **/
-
-/* INSTALL_PREFIX:
- * This symbol contains the "root" of installation tree for this package.
- * The program should be prepared to do ~ expansion.
- */
-/* INSTALL_PREFIX_EXP:
- * This symbol contains the "root" of installation tree for this package
- * to be used in programs that are not prepared to deal with ~ expansion
- * at run-time.
- */
-#define INSTALL_PREFIX "" /**/
-#define INSTALL_PREFIX_EXP "" /**/
-
-/* 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 "/usr/local/lib/perl5/5.9" /**/
-#define PRIVLIB_EXP "/usr/local/lib/perl5/5.9" /**/
-
-/* 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 "" /**/
-#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 "" /**/
-#define SITELIB_EXP "" /**/
-#define SITELIB_STEM "" /**/
-
-/* 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 "" / **/
-
-/* 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 "unknown" /**/
-#define OSVERS "" /**/
-
/* CAT2:
* This macro concatenates 2 tokens together.
*/
@@ -1541,6 +1098,12 @@
#define CPPRUN ""
#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.
@@ -1548,23 +1111,82 @@
*/
/*#define HAS_ACCESS / **/
-/* HASATTRIBUTE:
- * This symbol indicates the C compiler can check for function attributes,
- * such as printf formats. This is normally only supported by GNU cc.
+/* HAS_ASCTIME_R:
+ * This symbol, if defined, indicates that the asctime_r routine
+ * is available to asctime re-entrantly.
*/
-/*#define HASATTRIBUTE / **/
-#ifndef HASATTRIBUTE
-#ifdef __attribute__
-#undef __attribute__
-#endif
-#define __attribute__(_arg_)
-#endif
+/* 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 /**/
-/* HAS_CRYPT:
- * This symbol, if defined, indicates that the crypt routine is available
- * to encrypt passwords and the like.
+/* CASTI32:
+ * This symbol is defined if the C compiler can cast negative
+ * or large floating point numbers to 32-bit ints.
*/
-/*#define HAS_CRYPT / **/
+/*#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.
@@ -1577,25 +1199,47 @@
#define CSH "" /**/
#endif
-/* 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.
+/* HAS_CTIME_R:
+ * This symbol, if defined, indicates that the ctime_r routine
+ * is available to ctime re-entrantly.
*/
-/* 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.
+/* 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 SETUID_SCRIPTS_ARE_SECURE_NOW / **/
-/*#define DOSUID / **/
+/*#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
@@ -1603,6 +1247,19 @@
*/
/*#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.
@@ -1627,24 +1284,236 @@
*/
/*#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 / **/
+
+/* 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.
@@ -1692,6 +1561,45 @@
#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.
@@ -1710,6 +1618,21 @@
*/
/*#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.
@@ -1738,6 +1661,20 @@
/*#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.
@@ -1745,12 +1682,78 @@
*/
/*#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.
@@ -1762,6 +1765,34 @@
/*#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
@@ -1787,6 +1818,71 @@
/*#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_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.
@@ -1814,12 +1910,44 @@
#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_MEMCHR:
* This symbol, if defined, indicates that the memchr routine is available
* to locate characters within a C string.
*/
/*#define HAS_MEMCHR / **/
+/* 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
@@ -1827,6 +1955,13 @@
*/
/*#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.
@@ -1839,24 +1974,187 @@
/*#define HAS_MMAP / **/
#define Mmap_t /**/
+/* 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.
+ */
+/* HAS_MODFL_POW32_BUG:
+ * This symbol, if defined, indicates that the modfl routine is
+ * broken for long doubles >= pow(2, 32).
+ * For example from 4294967303.150000 one would get 4294967302.000000
+ * and 1.150000. The bug has been seen in certain versions of glibc,
+ * release 2.2.2 is known to be okay.
+ */
+/*#define HAS_MODFL / **/
+/*#define HAS_MODFL_PROTO / **/
+/*#define HAS_MODFL_POW32_BUG / **/
+
+/* 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 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_SAFE_BCOPY:
+ * This symbol, if defined, indicates that the bcopy routine is available
+ * to copy potentially overlapping memory blocks. Normally, you should
+ * probably use memmove() or memcpy(). If neither is defined, roll your
+ * own version.
+ */
+/*#define HAS_SAFE_BCOPY / **/
+
+/* HAS_SAFE_MEMCPY:
+ * This symbol, if defined, indicates that the memcpy routine is available
+ * to copy potentially overlapping memory blocks. If you need to
+ * copy overlapping memory blocks, you should check HAS_MEMMOVE and
+ * use memmove() instead, if available.
+ */
+/*#define HAS_SAFE_MEMCPY / **/
+
+/* HAS_SANE_MEMCMP:
+ * This symbol, if defined, indicates that the memcmp routine is available
+ * and can be used to compare relative magnitudes of chars with their high
+ * bits set. If it is not defined, roll your own version.
+ */
+/*#define HAS_SANE_MEMCMP / **/
+
+/* 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
@@ -1870,6 +2168,12 @@
*/
/*#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.
@@ -1894,12 +2198,31 @@
/*#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.
@@ -1913,25 +2236,60 @@
*/
/*#define HAS_SETVBUF / **/
+/* USE_SFIO:
+ * This symbol, if defined, indicates that sfio should
+ * be used.
+ */
+/*#define USE_SFIO / **/
+
/* HAS_SHM:
* This symbol, if defined, indicates that the entire shm*(2) library is
* supported.
*/
/*#define HAS_SHM / **/
-/* Shmat_t:
- * This symbol holds the return type of the shmat() system call.
- * Usually set to 'void *' or 'char *'.
+/* HAS_SIGACTION:
+ * This symbol, if defined, indicates that Vr4's sigaction() routine
+ * is available.
*/
-/* 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 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.
*/
-#define Shmat_t void * /**/
-/*#define HAS_SHMAT_PROTOTYPE / **/
+/* 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
+
+/* 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
@@ -1980,787 +2338,6 @@
/*#define HAS_MSG_PROXY / **/
/*#define HAS_SCM_RIGHTS / **/
-/* 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_STRERROR:
- * This symbol, if defined, indicates that the strerror routine is
- * available to translate error numbers to strings. See the writeup
- * of Strerror() in this file before you try to define your own.
- */
-/* 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.
- */
-/* Strerror:
- * This preprocessor symbol is defined as a macro if strerror() is
- * not available to translate error numbers to strings but sys_errlist[]
- * array is there.
- */
-/*#define HAS_STRERROR / **/
-/*#define HAS_SYS_ERRLIST / **/
-#define Strerror(e) strerror(e)
-
-/* 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_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_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 int /* Signal handler's return type */
-
-/* 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 int /* Type for 2nd arg to [sg]etgroups() */
-#endif
-
-/* 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_NDBM:
- * This symbol, if defined, indicates that <ndbm.h> exists and should
- * be included.
- */
-/*#define I_NDBM / **/
-
-/* I_NETDB:
- * This symbol, if defined, indicates that <netdb.h> exists and
- * should be included.
- */
-/*#define I_NETDB / **/
-
-/* 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_SYSUIO:
- * This symbol, if defined, indicates that <sys/uio.h> exists and
- * should be included.
- */
-/*#define I_SYSUIO / **/
-
-/* I_STDARG:
- * This symbol, if defined, indicates that <stdarg.h> exists and should
- * be included.
- */
-/* I_VARARGS:
- * This symbol, if defined, indicates to the C program that it should
- * include <varargs.h>.
- */
-#define I_STDARG /**/
-/*#define I_VARARGS / **/
-
-/* 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 int /**/
-
-/* MYMALLOC:
- * This symbol, if defined, indicates that we're using our own malloc.
- */
-/*#define MYMALLOC / **/
-
-/* PERL_MALLOC_WRAP:
- * This symbol, if defined, indicates that we'd like malloc wrap checks.
- */
-/*#define PERL_MALLOC_WRAP / **/
-
-/* CAN_PROTOTYPE:
- * If defined, this macro indicates that the C compiler can handle
- * function prototypes.
- */
-/* _:
- * This macro is used to declare function parameters for folks who want
- * to make declarations with prototypes using a different style than
- * the above macros. Use double parentheses. For example:
- *
- * int main _((int argc, char *argv[]));
- */
-/*#define CAN_PROTOTYPE / **/
-#ifdef CAN_PROTOTYPE
-#define _(args) args
-#else
-#define _(args) ()
-#endif
-
-/* 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 "" /**/
-
-/* 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 0 /**/
-#define SIG_NUM 0 /**/
-#define SIG_SIZE 1 /**/
-
-/* 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 /**/
-
-/* VOIDFLAGS:
- * This symbol indicates how much support of the void type is given by this
- * compiler. What various bits mean:
- *
- * 1 = supports declaration of void
- * 2 = supports arrays of pointers to functions returning void
- * 4 = supports comparisons between pointers to void functions and
- * addresses of void functions
- * 8 = suports declaration of generic void pointers
- *
- * The package designer should define VOIDUSED to indicate the requirements
- * of the package. This can be done either by #defining VOIDUSED before
- * including config.h, or by defining defvoidused in Myinit.U. If the
- * latter approach is taken, only those flags will be tested. If the
- * level of void support necessary is not present, defines void to int.
- */
-#ifndef VOIDUSED
-#define VOIDUSED 1
-#endif
-#define VOIDFLAGS 1
-#if (VOIDFLAGS & VOIDUSED) != VOIDUSED
-#define void int /* is void to be avoided? */
-#define M_VOID /* Xenix strikes again */
-#endif
-
-/* 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 "" /**/
-#endif
-
-/* 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 / **/
-
-/* 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_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_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 / **/
-
-/* HAS_STRUCT_CMSGHDR:
- * This symbol, if defined, indicates that the struct cmsghdr
- * is supported.
- */
-/*#define HAS_STRUCT_CMSGHDR / **/
-
-/* 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 / **/
-
-/* 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 / **/
-
-/* 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_FAST_STDIO:
- * This symbol, if defined, indicates that the "fast stdio"
- * is available to manipulate the stdio buffers directly.
- */
-/*#define HAS_FAST_STDIO / **/
-
-/* 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_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 / **/
-
-/* 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_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_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_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_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_GETITIMER:
- * This symbol, if defined, indicates that the getitimer routine is
- * available to return interval timers.
- */
-/*#define HAS_GETITIMER / **/
-
-/* 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_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_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_HASMNTOPT:
- * This symbol, if defined, indicates that the hasmntopt routine is
- * available to query the mount options of file systems.
- */
-/*#define HAS_HASMNTOPT / **/
-
-/* 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 / **/
-
-/* 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_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_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_MADVISE:
- * This symbol, if defined, indicates that the madvise system call is
- * available to map a file into memory.
- */
-/*#define HAS_MADVISE / **/
-
-/* 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_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_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.
- */
-/* HAS_MODFL_POW32_BUG:
- * This symbol, if defined, indicates that the modfl routine is
- * broken for long doubles >= pow(2, 32).
- * For example from 4294967303.150000 one would get 4294967302.000000
- * and 1.150000. The bug has been seen in certain versions of glibc,
- * release 2.2.2 is known to be okay.
- */
-/*#define HAS_MODFL / **/
-/*#define HAS_MODFL_PROTO / **/
-/*#define HAS_MODFL_POW32_BUG / **/
-
-/* 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_STRUCT_MSGHDR:
- * This symbol, if defined, indicates that the struct msghdr
- * is supported.
- */
-/*#define HAS_STRUCT_MSGHDR / **/
-
-/* 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_OFF64_T:
- * This symbol will be defined if the C compiler supports off64_t.
- */
-/*#define HAS_OFF64_T / **/
-
-/* 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_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_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_SENDMSG:
- * This symbol, if defined, indicates that the sendmsg routine is
- * available to send structured socket messages.
- */
-/*#define HAS_SENDMSG / **/
-
-/* HAS_SETITIMER:
- * This symbol, if defined, indicates that the setitimer routine is
- * available to set interval timers.
- */
-/*#define HAS_SETITIMER / **/
-
-/* HAS_SETPROCTITLE:
- * This symbol, if defined, indicates that the setproctitle routine is
- * available to set process title.
- */
-/*#define HAS_SETPROCTITLE / **/
-
-/* USE_SFIO:
- * This symbol, if defined, indicates that sfio should
- * be used.
- */
-/*#define USE_SFIO / **/
-
-/* 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_SOCKS5_INIT:
* This symbol, if defined, indicates that the socks5_init routine is
* available to initialize SOCKS 5.
@@ -2773,21 +2350,39 @@
*/
/*#define HAS_SQRTL / **/
-/* 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);
+/* HAS_SRAND48_R:
+ * This symbol, if defined, indicates that the srand48_r routine
+ * is available to srand48 re-entrantly.
*/
-/*#define HAS_SETRESGID_PROTO / **/
+/* 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_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);
+/* HAS_SRANDOM_R:
+ * This symbol, if defined, indicates that the srandom_r routine
+ * is available to srandom re-entrantly.
*/
-/*#define HAS_SETRESUID_PROTO / **/
+/* 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
@@ -2812,11 +2407,107 @@
*/
/*#define HAS_FSTATVFS / **/
-/* HAS_STRFTIME:
- * This symbol, if defined, indicates that the strftime routine is
- * available to do time formatting.
+/* 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.
*/
-/*#define HAS_STRFTIME / **/
+/* 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) ((fp)->_IO_read_ptr)
+/*#define STDIO_PTR_LVALUE / **/
+#define FILE_cnt(fp) ((fp)->_IO_read_end - (fp)->_IO_read_ptr)
+/*#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) ((fp)->_IO_read_base)
+#define FILE_bufsiz(fp) ((fp)->_IO_read_end - (fp)->_IO_read_base)
+#endif
+
+/* HAS_STRERROR:
+ * This symbol, if defined, indicates that the strerror routine is
+ * available to translate error numbers to strings. See the writeup
+ * of Strerror() in this file before you try to define your own.
+ */
+/* 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.
+ */
+/* Strerror:
+ * This preprocessor symbol is defined as a macro if strerror() is
+ * not available to translate error numbers to strings but sys_errlist[]
+ * array is there.
+ */
+/*#define HAS_STRERROR / **/
+/*#define HAS_SYS_ERRLIST / **/
+#define Strerror(e) strerror(e)
+
+/* 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
@@ -2836,6 +2527,12 @@
*/
/*#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.
@@ -2848,15 +2545,6 @@
*/
/*#define HAS_STRTOUQ / **/
-/* 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 / **/
-
/* HAS_TELLDIR_PROTO:
* This symbol, if defined, indicates that the system provides
* a prototype for the telldir() function. Otherwise, it is up
@@ -2865,13 +2553,36 @@
*/
/*#define HAS_TELLDIR_PROTO / **/
-/* U32_ALIGNMENT_REQUIRED:
- * This symbol, if defined, indicates that you must access
- * character data through U32-aligned pointers.
+/* HAS_TIME:
+ * This symbol, if defined, indicates that the time() routine exists.
*/
-#ifndef U32_ALIGNMENT_REQUIRED
-#define U32_ALIGNMENT_REQUIRED /**/
-#endif
+/* 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
@@ -2879,6 +2590,28 @@
*/
/*#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
@@ -2886,13 +2619,11 @@
*/
/*#define HAS_UNORDERED / **/
-/* 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);
+/* HAS_UNSETENV:
+ * This symbol, if defined, indicates that the unsetenv () routine is
+ * available for use.
*/
-/*#define HAS_USLEEP_PROTO / **/
+/*#define HAS_UNSETENV / **/
/* HAS_USTAT:
* This symbol, if defined, indicates that the ustat system call is
@@ -2900,6 +2631,33 @@
*/
/*#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 int /* Signal handler's return type */
+
+/* HAS_VPRINTF:
+ * This symbol, if defined, indicates that the vprintf routine is available
+ * to printf with a pointer to an argument list. If unavailable, you
+ * may need to write your own, probably in terms of _doprnt().
+ */
+/* USE_CHAR_VSPRINTF:
+ * This symbol is defined if this system has vsprintf() returning type
+ * (char*). The trend seems to be to declare it as "int vsprintf()". It
+ * is up to the package author to declare vsprintf correctly based on the
+ * symbol.
+ */
+#define HAS_VPRINTF /**/
+/*#define USE_CHAR_VSPRINTF / **/
+
/* HAS_WRITEV:
* This symbol, if defined, indicates that the writev routine is
* available to do scatter writes.
@@ -2912,6 +2670,18 @@
*/
/*#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 /**/
+
+/* 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.
@@ -2926,11 +2696,50 @@
/*#define FFLUSH_NULL / **/
/*#define FFLUSH_ALL / **/
-/* I_CRYPT:
- * This symbol, if defined, indicates that <crypt.h> exists and
- * should be included.
+/* 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 I_CRYPT / **/
+#define Fpos_t int /* File position type */
+
+/* Gid_t_f:
+ * This symbol defines the format string used for printing a Gid_t.
+ */
+#define Gid_t_f "lu" /**/
+
+/* 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 int /* 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 int /* Type for 2nd arg to [sg]etgroups() */
+#endif
/* DB_Prefix_t:
* This symbol contains the type of the prefix structure element
@@ -2962,18 +2771,23 @@
#define DB_VERSION_MINOR_CFG /**/
#define DB_VERSION_PATCH_CFG /**/
-/* I_FP:
- * This symbol, if defined, indicates that <fp.h> exists and
- * should be included.
- */
-/*#define I_FP / **/
-
/* 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.
@@ -2986,24 +2800,30 @@
*/
/*#define I_INTTYPES / **/
-/* I_LANGINFO:
- * This symbol, if defined, indicates that <langinfo.h> exists and
- * should be included.
- */
-/*#define I_LANGINFO / **/
-
/* 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>.
@@ -3022,6 +2842,58 @@
*/
/*#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.
@@ -3069,6 +2941,12 @@
*/
/*#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.
@@ -3081,12 +2959,53 @@
*/
/*#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 NULL /**/
+
+/* 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.
@@ -3108,6 +3027,76 @@
/*#define PERL_PRIeldbl "lle" / **/
/*#define PERL_SCNfldbl "llf" / **/
+/* 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 int /* <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 int /**/
+
+/* 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 int /* 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
+#undef EOF_NONBLOCK
+
/* NEED_VA_COPY:
* This symbol, if defined, indicates that the system stores
* the variable argument list datatype, va_list, in a format
@@ -3119,6 +3108,53 @@
*/
/*#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 const char * /**/
+#define Netdb_hlen_t int /**/
+#define Netdb_name_t const char * /**/
+#define Netdb_net_t unsigned 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_t /**/
+# define Uquad_t uint64_t /**/
+# define QUADKIND 4 /**/
+# 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.
*/
@@ -3193,6 +3229,10 @@
* This symbol contains the number of bits a variable of type NVTYPE
* can preserve of a variable of type UVTYPE.
*/
+/* 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 /**/
@@ -3221,6 +3261,7 @@
#define NVSIZE 8 /**/
#undef NV_PRESERVES_UV
#define NV_PRESERVES_UV_BITS 0
+#undef NV_ZERO_IS_ALLBITS_ZERO
#if UVSIZE == 8
# ifdef BYTEORDER
# if BYTEORDER == 0x1234
@@ -3276,6 +3317,59 @@
#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 "/usr/local/lib/perl5/5.9" /**/
+#define PRIVLIB_EXP "/usr/local/lib/perl5/5.9" /**/
+
+/* 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() & 0x7FFF) / (double) ((unsigned long)1 << 15)) /**/
+#define Rand_seed_t int /**/
+#define seedDrand01(x) srand((Rand_seed_t)x) /**/
+#define RANDBITS 48 /**/
+
/* 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
@@ -3285,6 +3379,125 @@
*/
#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 int /**/
+
+/* 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 0 /**/
+#define SIG_NUM 0 /**/
+#define SIG_SIZE 1 /**/
+
+/* 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 "" /**/
+#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 "" /**/
+#define SITELIB_EXP "" /**/
+#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
@@ -3292,6 +3505,12 @@
*/
#define STARTPERL "" /**/
+/* 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.
@@ -3303,6 +3522,29 @@
/*#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 "lu" /**/
+
+/* 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 int /* 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
@@ -3329,15 +3571,6 @@
/*#define USE_64_BIT_ALL / **/
#endif
-/* 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
-
/* USE_LARGE_FILES:
* This symbol, if defined, indicates that large file support
* should be used when available.
@@ -3387,122 +3620,415 @@
/*#define USE_SOCKS / **/
#endif
-/* HAS_DRAND48_PROTO:
+/* 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 / **/
+
+/* 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 "" / **/
+
+/* VOIDFLAGS:
+ * This symbol indicates how much support of the void type is given by this
+ * compiler. What various bits mean:
+ *
+ * 1 = supports declaration of void
+ * 2 = supports arrays of pointers to functions returning void
+ * 4 = supports comparisons between pointers to void functions and
+ * addresses of void functions
+ * 8 = suports declaration of generic void pointers
+ *
+ * The package designer should define VOIDUSED to indicate the requirements
+ * of the package. This can be done either by #defining VOIDUSED before
+ * including config.h, or by defining defvoidused in Myinit.U. If the
+ * latter approach is taken, only those flags will be tested. If the
+ * level of void support necessary is not present, defines void to int.
+ */
+#ifndef VOIDUSED
+#define VOIDUSED 1
+#endif
+#define VOIDFLAGS 1
+#if (VOIDFLAGS & VOIDUSED) != VOIDUSED
+#define void int /* is void to be avoided? */
+#define M_VOID /* Xenix strikes again */
+#endif
+
+/* 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 / **/
+
+/* I_STDARG:
+ * This symbol, if defined, indicates that <stdarg.h> exists and should
+ * be included.
+ */
+/* I_VARARGS:
+ * This symbol, if defined, indicates to the C program that it should
+ * include <varargs.h>.
+ */
+#define I_STDARG /**/
+/*#define I_VARARGS / **/
+
+/* CAN_PROTOTYPE:
+ * If defined, this macro indicates that the C compiler can handle
+ * function prototypes.
+ */
+/* _:
+ * This macro is used to declare function parameters for folks who want
+ * to make declarations with prototypes using a different style than
+ * the above macros. Use double parentheses. For example:
+ *
+ * int main _((int argc, char *argv[]));
+ */
+/*#define CAN_PROTOTYPE / **/
+#ifdef CAN_PROTOTYPE
+#define _(args) args
+#else
+#define _(args) ()
+#endif
+
+/* 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 "" /**/
+
+/* 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_COPYSIGNL:
+ * This symbol, if defined, indicates that the copysignl routine is
+ * available. If aintl is also present we can emulate modfl.
+ */
+/*#define HAS_COPYSIGNL / **/
+
+/* HAS_DBMINIT_PROTO:
* This symbol, if defined, indicates that the system provides
- * a prototype for the drand48() function. Otherwise, it is up
+ * a prototype for the dbminit() function. Otherwise, it is up
* to the program to supply one. A good guess is
- * extern double drand48(void);
+ * extern int dbminit(char *);
*/
-/*#define HAS_DRAND48_PROTO / **/
+/*#define HAS_DBMINIT_PROTO / **/
-/* 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.
+/* HAS_DIRFD:
+ * This manifest constant lets the C program know that dirfd
+ * is available.
*/
-/*#define HAS_GETHOST_PROTOS / **/
+/*#define HAS_DIRFD / **/
-/* 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.
+/* HAS_FAST_STDIO:
+ * This symbol, if defined, indicates that the "fast stdio"
+ * is available to manipulate the stdio buffers directly.
*/
-/*#define HAS_GETNET_PROTOS / **/
+/*#define HAS_FAST_STDIO / **/
-/* 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.
+/* 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_GETPROTO_PROTOS / **/
+/*#define HAS_FLOCK_PROTO / **/
-/* 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.
+/* 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_GETSERV_PROTOS / **/
+/*#define HAS_FPCLASSL / **/
-/* HAS_LSEEK_PROTO:
+/* 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 lseek() function. Otherwise, it is up
+ * a prototype for the sockatmark() function. Otherwise, it is up
* to the program to supply one. A good guess is
- * extern off_t lseek(int, off_t, int);
+ * extern int sockatmark(int);
*/
-/*#define HAS_LSEEK_PROTO / **/
+/*#define HAS_SOCKATMARK_PROTO / **/
-/* Netdb_host_t:
- * This symbol holds the type used for the 1st argument
- * to gethostbyaddr().
+/* 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);
*/
-/* Netdb_hlen_t:
- * This symbol holds the type used for the 2nd argument
- * to gethostbyaddr().
+/*#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);
*/
-/* Netdb_name_t:
- * This symbol holds the type used for the argument to
- * gethostbyname().
+/*#define HAS_SETRESUID_PROTO / **/
+
+/* HAS_STRFTIME:
+ * This symbol, if defined, indicates that the strftime routine is
+ * available to do time formatting.
*/
-/* Netdb_net_t:
- * This symbol holds the type used for the 1st argument to
- * getnetbyaddr().
+/*#define HAS_STRFTIME / **/
+
+/* HAS_STRLCAT:
+ * This symbol, if defined, indicates that the strlcat () routine is
+ * available to do string concatenation.
*/
-#define Netdb_host_t const char * /**/
-#define Netdb_hlen_t int /**/
-#define Netdb_name_t const char * /**/
-#define Netdb_net_t unsigned long /**/
+/*#define HAS_STRLCAT / **/
-/* 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.
+/* HAS_STRLCPY:
+ * This symbol, if defined, indicates that the strlcpy () routine is
+ * available to do string copying.
*/
-#define Select_fd_set_t int /**/
+/*#define HAS_STRLCPY / **/
-/* 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).
+/* 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 Sock_size_t int /**/
+/*#define HAS_SYSCALL_PROTO / **/
-/* 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.
+/* U32_ALIGNMENT_REQUIRED:
+ * This symbol, if defined, indicates that you must access
+ * character data through U32-aligned pointers.
*/
-#define ARCHNAME "unknown" /**/
+#ifndef U32_ALIGNMENT_REQUIRED
+#define U32_ALIGNMENT_REQUIRED /**/
+#endif
-/* HAS_ASCTIME_R:
- * This symbol, if defined, indicates that the asctime_r routine
- * is available to asctime re-entrantly.
+/* 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);
*/
-/* 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_USLEEP_PROTO / **/
+
+/* I_CRYPT:
+ * This symbol, if defined, indicates that <crypt.h> exists and
+ * should be included.
*/
-/*#define HAS_ASCTIME_R / **/
-#define ASCTIME_R_PROTO 0 /**/
+/*#define I_CRYPT / **/
-/* HAS_CRYPT_R:
- * This symbol, if defined, indicates that the crypt_r routine
- * is available to crypt re-entrantly.
+/* I_FP:
+ * This symbol, if defined, indicates that <fp.h> exists and
+ * should be included.
*/
-/* 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 I_FP / **/
+
+/* I_LANGINFO:
+ * This symbol, if defined, indicates that <langinfo.h> exists and
+ * should be included.
*/
-/*#define HAS_CRYPT_R / **/
-#define CRYPT_R_PROTO 0 /**/
+/*#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 "" /**/
/* HAS_CTERMID_R:
* This symbol, if defined, indicates that the ctermid_r routine
@@ -3517,45 +4043,6 @@
/*#define HAS_CTERMID_R / **/
#define CTERMID_R_PROTO 0 /**/
-/* 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 /**/
-
-/* 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_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_R:
* This symbol, if defined, indicates that the endhostent_r routine
* is available to endhostent re-entrantly.
@@ -3595,19 +4082,6 @@
/*#define HAS_ENDPROTOENT_R / **/
#define ENDPROTOENT_R_PROTO 0 /**/
-/* 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_R:
* This symbol, if defined, indicates that the endservent_r routine
* is available to endservent re-entrantly.
@@ -3621,45 +4095,6 @@
/*#define HAS_ENDSERVENT_R / **/
#define ENDSERVENT_R_PROTO 0 /**/
-/* 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_R:
* This symbol, if defined, indicates that the gethostbyaddr_r routine
* is available to gethostbyaddr re-entrantly.
@@ -3699,19 +4134,6 @@
/*#define HAS_GETHOSTENT_R / **/
#define GETHOSTENT_R_PROTO 0 /**/
-/* 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_GETNETBYADDR_R:
* This symbol, if defined, indicates that the getnetbyaddr_r routine
* is available to getnetbyaddr re-entrantly.
@@ -3790,45 +4212,6 @@
/*#define HAS_GETPROTOENT_R / **/
#define GETPROTOENT_R_PROTO 0 /**/
-/* 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_GETSERVBYNAME_R:
* This symbol, if defined, indicates that the getservbyname_r routine
* is available to getservbyname re-entrantly.
@@ -3868,93 +4251,12 @@
/*#define HAS_GETSERVENT_R / **/
#define GETSERVENT_R_PROTO 0 /**/
-/* 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_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_LOCALTIME_R:
- * This symbol, if defined, indicates that the localtime_r routine
- * is available to localtime re-entrantly.
- */
-/* 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 /**/
-
-/* 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_ATFORK:
* This symbol, if defined, indicates that the pthread_atfork routine
* is available to setup fork handlers.
*/
/*#define HAS_PTHREAD_ATFORK / **/
-/* 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 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_READDIR64_R:
* This symbol, if defined, indicates that the readdir64_r routine
* is available to readdir64 re-entrantly.
@@ -3968,32 +4270,6 @@
/*#define HAS_READDIR64_R / **/
#define READDIR64_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_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_SETHOSTENT_R:
* This symbol, if defined, indicates that the sethostent_r routine
* is available to sethostent re-entrantly.
@@ -4046,19 +4322,6 @@
/*#define HAS_SETPROTOENT_R / **/
#define SETPROTOENT_R_PROTO 0 /**/
-/* 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_R:
* This symbol, if defined, indicates that the setservent_r routine
* is available to setservent re-entrantly.
@@ -4072,58 +4335,6 @@
/*#define HAS_SETSERVENT_R / **/
#define SETSERVENT_R_PROTO 0 /**/
-/* 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 /**/
-
-/* 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_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_TTYNAME_R:
* This symbol, if defined, indicates that the ttyname_r routine
* is available to ttyname re-entrantly.
@@ -4137,157 +4348,4 @@
/*#define HAS_TTYNAME_R / **/
#define TTYNAME_R_PROTO 0 /**/
-/* I_MACH_CTHREADS:
- * This symbol, if defined, indicates to the C program that it should
- * include <mach/cthreads.h>.
- */
-/*#define I_MACH_CTHREADS / **/
-
-/* I_PTHREAD:
- * This symbol, if defined, indicates to the C program that it should
- * include <pthread.h>.
- */
-/*#define I_PTHREAD / **/
-
-/* 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 / **/
-
-/* 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 / **/
-
-/* 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 int /* File position type */
-
-/* Gid_t_f:
- * This symbol defines the format string used for printing a Gid_t.
- */
-#define Gid_t_f "lu" /**/
-
-/* 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 int /* Type for getgid(), etc... */
-
-/* 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 int /* <offset> type */
-#define LSEEKSIZE 4 /* <offset> size */
-#define Off_t_size 4 /* <offset> size */
-
-/* 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 int /* file mode parameter for system calls */
-
-/* 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 */
-
-/* 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 */
-
-/* Uid_t_f:
- * This symbol defines the format string used for printing a Uid_t.
- */
-#define Uid_t_f "lu" /**/
-
-/* 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 int /* UID type */
-
#endif
diff --git a/gnu/usr.bin/perl/uconfig.sh b/gnu/usr.bin/perl/uconfig.sh
index 87be6395243..af4ce9a95cc 100644
--- a/gnu/usr.bin/perl/uconfig.sh
+++ b/gnu/usr.bin/perl/uconfig.sh
@@ -40,7 +40,13 @@ d_archlib='undef'
d_asctime_r='undef'
d_atolf='undef'
d_atoll='undef'
-d_attribut='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_bcmp='undef'
d_bcopy='undef'
d_bsd='undef'
@@ -54,6 +60,7 @@ d_chown='undef'
d_chroot='undef'
d_chsize='undef'
d_class='undef'
+d_clearenv='undef'
d_closedir='define'
d_cmsghdr_s='undef'
d_const='undef'
@@ -122,6 +129,7 @@ d_fstatvfs='undef'
d_fsync='undef'
d_ftello='undef'
d_ftime='undef'
+d_futimes='undef'
d_getcwd='undef'
d_getespwnam='undef'
d_getfsstat='undef'
@@ -196,6 +204,7 @@ d_isnanl='undef'
d_killpg='undef'
d_lchown='undef'
d_ldbl_dig='undef'
+d_libm_lib_version='undef'
d_link='undef'
d_localtime_r='undef'
d_locconv='undef'
@@ -205,6 +214,8 @@ d_longlong='undef'
d_lseekproto='undef'
d_lstat='undef'
d_madvise='undef'
+d_malloc_good_size='undef'
+d_malloc_size='undef'
d_mblen='undef'
d_mbstowcs='undef'
d_mbtowc='undef'
@@ -241,6 +252,7 @@ d_mymalloc='undef'
d_nice='undef'
d_nl_langinfo='undef'
d_nv_preserves_uv='undef'
+d_nv_zero_is_allbits_zero='undef'
nv_preserves_uv_bits='0'
d_off64_t='undef'
d_old_pthread_create_joinable='undef'
@@ -337,11 +349,13 @@ d_sigaction='undef'
d_sigprocmask='undef'
d_sigsetjmp='undef'
d_sockatmark='undef'
+d_snprintf='undef'
d_sockatmarkproto='undef'
d_socket='undef'
d_socklen_t='undef'
d_sockpair='undef'
d_socks5_init='undef'
+d_sprintf_returns_strlen='undef'
d_sqrtl='undef'
d_srand48_r='undef'
d_srandom_r='undef'
@@ -365,6 +379,8 @@ d_strerrm='strerror(e)'
d_strerror='undef'
d_strerror_r='undef'
d_strftime='undef'
+d_strlcat='undef'
+d_strlcpy='undef'
d_strtod='undef'
d_strtol='undef'
d_strtold='undef'
@@ -400,6 +416,7 @@ d_umask='undef'
d_uname='undef'
d_union_semun='undef'
d_unordered='undef'
+d_unsetenv='undef'
d_usleep='undef'
d_usleepproto='undef'
d_ustat='undef'
@@ -412,6 +429,7 @@ d_voidsig='undef'
d_voidtty=''
d_volatile='undef'
d_vprintf='define'
+d_vsnprintf='undef'
d_wait4='undef'
d_waitpid='undef'
d_wcstombs='undef'
@@ -692,8 +710,10 @@ useopcode='true'
useperlio='undef'
useposix='true'
usereentrant='undef'
+userelocatableinc='undef'
usesfio='false'
useshrplib='false'
+usesitecustomize='undef'
usesocks='undef'
usethreads='undef'
usevendorprefix='undef'
diff --git a/gnu/usr.bin/perl/utf8.c b/gnu/usr.bin/perl/utf8.c
index 7571e293dda..40ee39fba02 100644
--- a/gnu/usr.bin/perl/utf8.c
+++ b/gnu/usr.bin/perl/utf8.c
@@ -1,6 +1,7 @@
/* utf8.c
*
- * Copyright (C) 2000, 2001, 2002, 2003, 2004, by Larry Wall and others
+ * Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006,
+ * 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.
@@ -24,7 +25,8 @@
#define PERL_IN_UTF8_C
#include "perl.h"
-static char unees[] = "Malformed UTF-8 character (unexpected end of string)";
+static const char unees[] =
+ "Malformed UTF-8 character (unexpected end of string)";
/*
=head1 Unicode Support
@@ -38,7 +40,7 @@ within non-zero characters.
=for apidoc A|U8 *|uvuni_to_utf8_flags|U8 *d|UV uv|UV flags
Adds the UTF-8 representation of the Unicode codepoint C<uv> to the end
-of the string C<d>; C<d> should be have at least C<UTF8_MAXLEN+1> free
+of the string C<d>; C<d> should be have at least C<UTF8_MAXBYTES+1> free
bytes available. The return value is the pointer to the byte after the
end of the new character. In other words,
@@ -171,21 +173,29 @@ Perl_uvuni_to_utf8(pTHX_ U8 *d, UV uv)
return Perl_uvuni_to_utf8_flags(aTHX_ d, uv, 0);
}
-
/*
-=for apidoc A|STRLEN|is_utf8_char|U8 *s
Tests if some arbitrary number of bytes begins in a valid UTF-8
character. Note that an INVARIANT (i.e. ASCII) character is a valid
UTF-8 character. The actual number of bytes in the UTF-8 character
will be returned if it is valid, otherwise 0.
+This is the "slow" version as opposed to the "fast" version which is
+the "unrolled" IS_UTF8_CHAR(). E.g. for t/uni/class.t the speed
+difference is a factor of 2 to 3. For lengths (UTF8SKIP(s)) of four
+or less you should use the IS_UTF8_CHAR(), for lengths of five or more
+you should use the _slow(). In practice this means that the _slow()
+will be used very rarely, since the maximum Unicode code point (as of
+Unicode 4.1) is U+10FFFF, which encodes in UTF-8 to four bytes. Only
+the "Perl extended UTF-8" (the infamous 'v-strings') will encode into
+five bytes or more.
+
=cut */
-STRLEN
-Perl_is_utf8_char(pTHX_ U8 *s)
+STATIC STRLEN
+S_is_utf8_char_slow(pTHX_ const U8 *s, const STRLEN len)
{
U8 u = *s;
- STRLEN slen, len;
+ STRLEN slen;
UV uv, ouv;
if (UTF8_IS_INVARIANT(u))
@@ -194,13 +204,14 @@ Perl_is_utf8_char(pTHX_ U8 *s)
if (!UTF8_IS_START(u))
return 0;
- len = UTF8SKIP(s);
-
if (len < 2 || !UTF8_IS_CONTINUATION(s[1]))
return 0;
slen = len - 1;
s++;
+#ifdef EBCDIC
+ u = NATIVE_TO_UTF(u);
+#endif
u &= UTF_START_MASK(len);
uv = u;
ouv = uv;
@@ -221,6 +232,26 @@ Perl_is_utf8_char(pTHX_ U8 *s)
}
/*
+=for apidoc A|STRLEN|is_utf8_char|U8 *s
+
+Tests if some arbitrary number of bytes begins in a valid UTF-8
+character. Note that an INVARIANT (i.e. ASCII) character is a valid
+UTF-8 character. The actual number of bytes in the UTF-8 character
+will be returned if it is valid, otherwise 0.
+
+=cut */
+STRLEN
+Perl_is_utf8_char(pTHX_ U8 *s)
+{
+ const STRLEN len = UTF8SKIP(s);
+#ifdef IS_UTF8_CHAR
+ if (IS_UTF8_CHAR_FAST(len))
+ return IS_UTF8_CHAR(s, len) ? len : 0;
+#endif /* #ifdef IS_UTF8_CHAR */
+ return is_utf8_char_slow(s, len);
+}
+
+/*
=for apidoc A|bool|is_utf8_string|U8 *s|STRLEN len
Returns true if first C<len> bytes of the given string form a valid
@@ -228,34 +259,47 @@ UTF-8 string, false otherwise. Note that 'a valid UTF-8 string' does
not mean 'a string that contains code points above 0x7F encoded in UTF-8'
because a valid ASCII string is a valid UTF-8 string.
+See also is_utf8_string_loclen() and is_utf8_string_loc().
+
=cut
*/
bool
Perl_is_utf8_string(pTHX_ U8 *s, STRLEN len)
{
- U8* x = s;
- U8* send;
- STRLEN c;
+ const U8* x = s;
+ const U8* send;
- if (!len && s)
- len = strlen((char *)s);
+ if (!len)
+ len = strlen((const char *)s);
send = s + len;
while (x < send) {
+ STRLEN c;
/* Inline the easy bits of is_utf8_char() here for speed... */
if (UTF8_IS_INVARIANT(*x))
c = 1;
else if (!UTF8_IS_START(*x))
- return FALSE;
+ goto out;
else {
/* ... and call is_utf8_char() only if really needed. */
- c = is_utf8_char(x);
+#ifdef IS_UTF8_CHAR
+ c = UTF8SKIP(x);
+ if (IS_UTF8_CHAR_FAST(c)) {
+ if (!IS_UTF8_CHAR(x, c))
+ goto out;
+ } else if (!is_utf8_char_slow(x, c))
+ goto out;
+#else
+ c = is_utf8_char(x);
+#endif /* #ifdef IS_UTF8_CHAR */
if (!c)
- return FALSE;
+ goto out;
}
x += c;
}
+
+ out:
if (x != send)
return FALSE;
@@ -263,55 +307,85 @@ Perl_is_utf8_string(pTHX_ U8 *s, STRLEN len)
}
/*
-=for apidoc A|bool|is_utf8_string_loc|U8 *s|STRLEN len|U8 **p
+=for apidoc A|bool|is_utf8_string_loclen|const U8 *s|STRLEN len|const U8 **ep|const STRLEN *el
+
+Like is_utf8_string() but stores the location of the failure (in the
+case of "utf8ness failure") or the location s+len (in the case of
+"utf8ness success") in the C<ep>, and the number of UTF-8
+encoded characters in the C<el>.
-Like is_ut8_string but store the location of the failure in
-the last argument.
+See also is_utf8_string_loc() and is_utf8_string().
=cut
*/
bool
-Perl_is_utf8_string_loc(pTHX_ U8 *s, STRLEN len, U8 **p)
+Perl_is_utf8_string_loclen(pTHX_ const U8 *s, STRLEN len, const U8 **ep, STRLEN *el)
{
- U8* x = s;
- U8* send;
+ const U8* x = s;
+ const U8* send;
STRLEN c;
- if (!len && s)
- len = strlen((char *)s);
+ if (!len)
+ len = strlen((const char *)s);
send = s + len;
+ if (el)
+ *el = 0;
while (x < send) {
/* Inline the easy bits of is_utf8_char() here for speed... */
if (UTF8_IS_INVARIANT(*x))
- c = 1;
- else if (!UTF8_IS_START(*x)) {
- if (p)
- *p = x;
- return FALSE;
- }
+ c = 1;
+ else if (!UTF8_IS_START(*x))
+ goto out;
else {
- /* ... and call is_utf8_char() only if really needed. */
- c = is_utf8_char(x);
- if (!c) {
- if (p)
- *p = x;
- return FALSE;
- }
+ /* ... and call is_utf8_char() only if really needed. */
+#ifdef IS_UTF8_CHAR
+ c = UTF8SKIP(x);
+ if (IS_UTF8_CHAR_FAST(c)) {
+ if (!IS_UTF8_CHAR(x, c))
+ c = 0;
+ } else
+ c = is_utf8_char_slow(x, c);
+#else
+ c = is_utf8_char(x);
+#endif /* #ifdef IS_UTF8_CHAR */
+ if (!c)
+ goto out;
}
- x += c;
+ x += c;
+ if (el)
+ (*el)++;
}
- if (x != send) {
- if (p)
- *p = x;
+
+ out:
+ if (ep)
+ *ep = x;
+ if (x != send)
return FALSE;
- }
return TRUE;
}
/*
+=for apidoc A|bool|is_utf8_string_loc|const U8 *s|STRLEN len|const U8 **ep|const STRLEN *el
+
+Like is_utf8_string() but stores the location of the failure (in the
+case of "utf8ness failure") or the location s+len (in the case of
+"utf8ness success") in the C<ep>.
+
+See also is_utf8_string_loclen() and is_utf8_string().
+
+=cut
+*/
+
+bool
+Perl_is_utf8_string_loc(pTHX_ U8 *s, STRLEN len, U8 **ep)
+{
+ return is_utf8_string_loclen(s, len, (const U8 **)ep, 0);
+}
+
+/*
=for apidoc A|UV|utf8n_to_uvuni|U8 *s|STRLEN curlen|STRLEN *retlen|U32 flags
Bottom level UTF-8 decode routine.
@@ -338,11 +412,11 @@ Most code should use utf8_to_uvchr() rather than call this directly.
UV
Perl_utf8n_to_uvuni(pTHX_ U8 *s, STRLEN curlen, STRLEN *retlen, U32 flags)
{
- U8 *s0 = s;
+ const U8 *s0 = s;
UV uv = *s, ouv = 0;
STRLEN len = 1;
- bool dowarn = ckWARN_d(WARN_UTF8);
- UV startbyte = *s;
+ const bool dowarn = ckWARN_d(WARN_UTF8);
+ const UV startbyte = *s;
STRLEN expectlen = 0;
U32 warning = 0;
@@ -432,7 +506,7 @@ Perl_utf8n_to_uvuni(pTHX_ U8 *s, STRLEN curlen, STRLEN *retlen, U32 flags)
if (!(uv > ouv)) {
/* These cannot be allowed. */
if (uv == ouv) {
- if (!(flags & UTF8_ALLOW_LONG)) {
+ if (expectlen != 13 && !(flags & UTF8_ALLOW_LONG)) {
warning = UTF8_WARN_LONG;
goto malformed;
}
@@ -472,12 +546,12 @@ malformed:
}
if (dowarn) {
- SV* sv = sv_2mortal(newSVpv("Malformed UTF-8 character ", 0));
+ SV* const sv = sv_2mortal(newSVpv("Malformed UTF-8 character ", 0));
switch (warning) {
case 0: /* Intentionally empty. */ break;
case UTF8_WARN_EMPTY:
- Perl_sv_catpvf(aTHX_ sv, "(empty string)");
+ Perl_sv_catpv(aTHX_ sv, "(empty string)");
break;
case UTF8_WARN_CONTINUATION:
Perl_sv_catpvf(aTHX_ sv, "(unexpected continuation byte 0x%02"UVxf", with no preceding start byte)", uv);
@@ -486,17 +560,19 @@ malformed:
if (s == s0)
Perl_sv_catpvf(aTHX_ sv, "(unexpected non-continuation byte 0x%02"UVxf", immediately after start byte 0x%02"UVxf")",
(UV)s[1], startbyte);
- else
+ else {
+ const int len = (int)(s-s0);
Perl_sv_catpvf(aTHX_ sv, "(unexpected non-continuation byte 0x%02"UVxf", %d byte%s after start byte 0x%02"UVxf", expected %d bytes)",
- (UV)s[1], s - s0, s - s0 > 1 ? "s" : "", startbyte, expectlen);
-
+ (UV)s[1], len, len > 1 ? "s" : "", startbyte, (int)expectlen);
+ }
+
break;
case UTF8_WARN_FE_FF:
Perl_sv_catpvf(aTHX_ sv, "(byte 0x%02"UVxf")", uv);
break;
case UTF8_WARN_SHORT:
Perl_sv_catpvf(aTHX_ sv, "(%d byte%s, need %d, after start byte 0x%02"UVxf")",
- curlen, curlen == 1 ? "" : "s", expectlen, startbyte);
+ (int)curlen, curlen == 1 ? "" : "s", (int)expectlen, startbyte);
expectlen = curlen; /* distance for caller to skip */
break;
case UTF8_WARN_OVERFLOW:
@@ -508,18 +584,18 @@ malformed:
break;
case UTF8_WARN_LONG:
Perl_sv_catpvf(aTHX_ sv, "(%d byte%s, need %d, after start byte 0x%02"UVxf")",
- expectlen, expectlen == 1 ? "": "s", UNISKIP(uv), startbyte);
+ (int)expectlen, expectlen == 1 ? "": "s", UNISKIP(uv), startbyte);
break;
case UTF8_WARN_FFFF:
Perl_sv_catpvf(aTHX_ sv, "(character 0x%04"UVxf")", uv);
break;
default:
- Perl_sv_catpvf(aTHX_ sv, "(unknown reason)");
+ Perl_sv_catpv(aTHX_ sv, "(unknown reason)");
break;
}
if (warning) {
- char *s = SvPVX(sv);
+ const char * const s = SvPVX_const(sv);
if (PL_op)
Perl_warner(aTHX_ packWARN(WARN_UTF8),
@@ -551,7 +627,7 @@ returned and retlen is set, if possible, to -1.
UV
Perl_utf8_to_uvchr(pTHX_ U8 *s, STRLEN *retlen)
{
- return Perl_utf8n_to_uvchr(aTHX_ s, UTF8_MAXLEN, retlen,
+ return Perl_utf8n_to_uvchr(aTHX_ s, UTF8_MAXBYTES, retlen,
ckWARN(WARN_UTF8) ? 0 : UTF8_ALLOW_ANY);
}
@@ -575,7 +651,7 @@ UV
Perl_utf8_to_uvuni(pTHX_ U8 *s, STRLEN *retlen)
{
/* Call the low level routine asking for checks */
- return Perl_utf8n_to_uvuni(aTHX_ s, UTF8_MAXLEN, retlen,
+ return Perl_utf8n_to_uvuni(aTHX_ s, UTF8_MAXBYTES, retlen,
ckWARN(WARN_UTF8) ? 0 : UTF8_ALLOW_ANY);
}
@@ -598,24 +674,16 @@ Perl_utf8_length(pTHX_ U8 *s, U8 *e)
* the bitops (especially ~) can create illegal UTF-8.
* In other words: in Perl UTF-8 is not just for Unicode. */
- if (e < s) {
- if (ckWARN_d(WARN_UTF8)) {
- if (PL_op)
- Perl_warner(aTHX_ packWARN(WARN_UTF8),
- "%s in %s", unees, OP_DESC(PL_op));
- else
- Perl_warner(aTHX_ packWARN(WARN_UTF8), unees);
- }
- return 0;
- }
+ if (e < s)
+ goto warn_and_return;
while (s < e) {
- U8 t = UTF8SKIP(s);
-
+ const U8 t = UTF8SKIP(s);
if (e - s < t) {
+ warn_and_return:
if (ckWARN_d(WARN_UTF8)) {
if (PL_op)
Perl_warner(aTHX_ packWARN(WARN_UTF8),
- unees, OP_DESC(PL_op));
+ "%s in %s", unees, OP_DESC(PL_op));
else
Perl_warner(aTHX_ packWARN(WARN_UTF8), unees);
}
@@ -651,27 +719,19 @@ Perl_utf8_distance(pTHX_ U8 *a, U8 *b)
if (a < b) {
while (a < b) {
- U8 c = UTF8SKIP(a);
-
- if (b - a < c) {
- if (ckWARN_d(WARN_UTF8)) {
- if (PL_op)
- Perl_warner(aTHX_ packWARN(WARN_UTF8),
- "%s in %s", unees, OP_DESC(PL_op));
- else
- Perl_warner(aTHX_ packWARN(WARN_UTF8), unees);
- }
- return off;
- }
+ const U8 c = UTF8SKIP(a);
+ if (b - a < c)
+ goto warn_and_return;
a += c;
off--;
}
}
else {
while (b < a) {
- U8 c = UTF8SKIP(b);
+ const U8 c = UTF8SKIP(b);
if (a - b < c) {
+ warn_and_return:
if (ckWARN_d(WARN_UTF8)) {
if (PL_op)
Perl_warner(aTHX_ packWARN(WARN_UTF8),
@@ -720,7 +780,7 @@ Perl_utf8_hop(pTHX_ U8 *s, I32 off)
s--;
}
}
- return s;
+ return (U8 *)s;
}
/*
@@ -765,10 +825,10 @@ Perl_utf8_to_bytes(pTHX_ U8 *s, STRLEN *len)
}
/*
-=for apidoc A|U8 *|bytes_from_utf8|U8 *s|STRLEN *len|bool *is_utf8
+=for apidoc A|U8 *|bytes_from_utf8|const U8 *s|STRLEN *len|bool *is_utf8
Converts a string C<s> of length C<len> from UTF-8 into byte encoding.
-Unlike <utf8_to_bytes> but like C<bytes_to_utf8>, returns a pointer to
+Unlike C<utf8_to_bytes> but like C<bytes_to_utf8>, returns a pointer to
the newly-created string, and updates C<len> to contain the new
length. Returns the original string if no conversion occurs, C<len>
is unchanged. Do nothing if C<is_utf8> points to 0. Sets C<is_utf8> to
@@ -781,41 +841,42 @@ U8 *
Perl_bytes_from_utf8(pTHX_ U8 *s, STRLEN *len, bool *is_utf8)
{
U8 *d;
- U8 *start = s;
- U8 *send;
+ const U8 *start = s;
+ const U8 *send;
I32 count = 0;
+ const U8 *s2;
if (!*is_utf8)
- return start;
+ return (U8 *)start;
/* ensure valid UTF-8 and chars < 256 before converting string */
for (send = s + *len; s < send;) {
- U8 c = *s++;
+ U8 c = *s++;
if (!UTF8_IS_INVARIANT(c)) {
if (UTF8_IS_DOWNGRADEABLE_START(c) && s < send &&
(c = *s++) && UTF8_IS_CONTINUATION(c))
count++;
else
- return start;
+ return (U8 *)start;
}
}
*is_utf8 = 0;
- Newz(801, d, (*len) - count + 1, U8);
- s = start; start = d;
- while (s < send) {
- U8 c = *s++;
+ Newxz(d, (*len) - count + 1, U8);
+ s2 = start; start = d;
+ while (s2 < send) {
+ U8 c = *s2++;
if (!UTF8_IS_INVARIANT(c)) {
/* Then it is two-byte encoded */
- c = UTF8_ACCUMULATE(NATIVE_TO_UTF(c), *s++);
+ c = UTF8_ACCUMULATE(NATIVE_TO_UTF(c), *s2++);
c = ASCII_TO_NATIVE(c);
}
*d++ = c;
}
*d = '\0';
*len = d - start;
- return start;
+ return (U8 *)start;
}
/*
@@ -834,16 +895,15 @@ see sv_recode_to_utf8().
U8*
Perl_bytes_to_utf8(pTHX_ U8 *s, STRLEN *len)
{
- U8 *send;
+ const U8 * const send = s + (*len);
U8 *d;
U8 *dst;
- send = s + (*len);
- Newz(801, d, (*len) * 2 + 1, U8);
+ Newxz(d, (*len) * 2 + 1, U8);
dst = d;
while (s < send) {
- UV uv = NATIVE_TO_ASCII(*s++);
+ const UV uv = NATIVE_TO_ASCII(*s++);
if (UNI_IS_INVARIANT(uv))
*d++ = (U8)UTF_TO_NATIVE(uv);
else {
@@ -875,7 +935,7 @@ Perl_utf16_to_utf8(pTHX_ U8* p, U8* d, I32 bytelen, I32 *newlen)
}
if (bytelen & 1)
- Perl_croak(aTHX_ "panic: utf16_to_utf8: odd bytelen %d", bytelen);
+ Perl_croak(aTHX_ "panic: utf16_to_utf8: odd bytelen %"UVf, (UV)bytelen);
pend = p + bytelen;
@@ -937,7 +997,7 @@ Perl_utf16_to_utf8_reversed(pTHX_ U8* p, U8* d, I32 bytelen, I32 *newlen)
bool
Perl_is_uni_alnum(pTHX_ UV c)
{
- U8 tmpbuf[UTF8_MAXLEN+1];
+ U8 tmpbuf[UTF8_MAXBYTES+1];
uvchr_to_utf8(tmpbuf, c);
return is_utf8_alnum(tmpbuf);
}
@@ -945,7 +1005,7 @@ Perl_is_uni_alnum(pTHX_ UV c)
bool
Perl_is_uni_alnumc(pTHX_ UV c)
{
- U8 tmpbuf[UTF8_MAXLEN+1];
+ U8 tmpbuf[UTF8_MAXBYTES+1];
uvchr_to_utf8(tmpbuf, c);
return is_utf8_alnumc(tmpbuf);
}
@@ -953,7 +1013,7 @@ Perl_is_uni_alnumc(pTHX_ UV c)
bool
Perl_is_uni_idfirst(pTHX_ UV c)
{
- U8 tmpbuf[UTF8_MAXLEN+1];
+ U8 tmpbuf[UTF8_MAXBYTES+1];
uvchr_to_utf8(tmpbuf, c);
return is_utf8_idfirst(tmpbuf);
}
@@ -961,7 +1021,7 @@ Perl_is_uni_idfirst(pTHX_ UV c)
bool
Perl_is_uni_alpha(pTHX_ UV c)
{
- U8 tmpbuf[UTF8_MAXLEN+1];
+ U8 tmpbuf[UTF8_MAXBYTES+1];
uvchr_to_utf8(tmpbuf, c);
return is_utf8_alpha(tmpbuf);
}
@@ -969,7 +1029,7 @@ Perl_is_uni_alpha(pTHX_ UV c)
bool
Perl_is_uni_ascii(pTHX_ UV c)
{
- U8 tmpbuf[UTF8_MAXLEN+1];
+ U8 tmpbuf[UTF8_MAXBYTES+1];
uvchr_to_utf8(tmpbuf, c);
return is_utf8_ascii(tmpbuf);
}
@@ -977,7 +1037,7 @@ Perl_is_uni_ascii(pTHX_ UV c)
bool
Perl_is_uni_space(pTHX_ UV c)
{
- U8 tmpbuf[UTF8_MAXLEN+1];
+ U8 tmpbuf[UTF8_MAXBYTES+1];
uvchr_to_utf8(tmpbuf, c);
return is_utf8_space(tmpbuf);
}
@@ -985,7 +1045,7 @@ Perl_is_uni_space(pTHX_ UV c)
bool
Perl_is_uni_digit(pTHX_ UV c)
{
- U8 tmpbuf[UTF8_MAXLEN+1];
+ U8 tmpbuf[UTF8_MAXBYTES+1];
uvchr_to_utf8(tmpbuf, c);
return is_utf8_digit(tmpbuf);
}
@@ -993,7 +1053,7 @@ Perl_is_uni_digit(pTHX_ UV c)
bool
Perl_is_uni_upper(pTHX_ UV c)
{
- U8 tmpbuf[UTF8_MAXLEN+1];
+ U8 tmpbuf[UTF8_MAXBYTES+1];
uvchr_to_utf8(tmpbuf, c);
return is_utf8_upper(tmpbuf);
}
@@ -1001,7 +1061,7 @@ Perl_is_uni_upper(pTHX_ UV c)
bool
Perl_is_uni_lower(pTHX_ UV c)
{
- U8 tmpbuf[UTF8_MAXLEN+1];
+ U8 tmpbuf[UTF8_MAXBYTES+1];
uvchr_to_utf8(tmpbuf, c);
return is_utf8_lower(tmpbuf);
}
@@ -1009,7 +1069,7 @@ Perl_is_uni_lower(pTHX_ UV c)
bool
Perl_is_uni_cntrl(pTHX_ UV c)
{
- U8 tmpbuf[UTF8_MAXLEN+1];
+ U8 tmpbuf[UTF8_MAXBYTES+1];
uvchr_to_utf8(tmpbuf, c);
return is_utf8_cntrl(tmpbuf);
}
@@ -1017,7 +1077,7 @@ Perl_is_uni_cntrl(pTHX_ UV c)
bool
Perl_is_uni_graph(pTHX_ UV c)
{
- U8 tmpbuf[UTF8_MAXLEN+1];
+ U8 tmpbuf[UTF8_MAXBYTES+1];
uvchr_to_utf8(tmpbuf, c);
return is_utf8_graph(tmpbuf);
}
@@ -1025,7 +1085,7 @@ Perl_is_uni_graph(pTHX_ UV c)
bool
Perl_is_uni_print(pTHX_ UV c)
{
- U8 tmpbuf[UTF8_MAXLEN+1];
+ U8 tmpbuf[UTF8_MAXBYTES+1];
uvchr_to_utf8(tmpbuf, c);
return is_utf8_print(tmpbuf);
}
@@ -1033,7 +1093,7 @@ Perl_is_uni_print(pTHX_ UV c)
bool
Perl_is_uni_punct(pTHX_ UV c)
{
- U8 tmpbuf[UTF8_MAXLEN+1];
+ U8 tmpbuf[UTF8_MAXBYTES+1];
uvchr_to_utf8(tmpbuf, c);
return is_utf8_punct(tmpbuf);
}
@@ -1041,7 +1101,7 @@ Perl_is_uni_punct(pTHX_ UV c)
bool
Perl_is_uni_xdigit(pTHX_ UV c)
{
- U8 tmpbuf[UTF8_MAXLEN_UCLC+1];
+ U8 tmpbuf[UTF8_MAXBYTES_CASE+1];
uvchr_to_utf8(tmpbuf, c);
return is_utf8_xdigit(tmpbuf);
}
@@ -1166,7 +1226,7 @@ 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_MAXLEN_UCLC+1];
+ U8 tmpbuf[UTF8_MAXBYTES_CASE+1];
return (U32)to_uni_upper(c, tmpbuf, &len);
}
@@ -1176,7 +1236,7 @@ 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_MAXLEN_UCLC+1];
+ U8 tmpbuf[UTF8_MAXBYTES_CASE+1];
return (U32)to_uni_title(c, tmpbuf, &len);
}
@@ -1186,7 +1246,7 @@ 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_MAXLEN_UCLC+1];
+ U8 tmpbuf[UTF8_MAXBYTES_CASE+1];
return (U32)to_uni_lower(c, tmpbuf, &len);
}
@@ -1215,9 +1275,9 @@ Perl_is_utf8_alnumc(pTHX_ U8 *p)
{
if (!is_utf8_char(p))
return FALSE;
- if (!PL_utf8_alnum)
- PL_utf8_alnum = swash_init("utf8", "IsAlnumC", &PL_sv_undef, 0, 0);
- return swash_fetch(PL_utf8_alnum, p, TRUE) != 0;
+ if (!PL_utf8_alnumc)
+ PL_utf8_alnumc = swash_init("utf8", "IsAlnumC", &PL_sv_undef, 0, 0);
+ return swash_fetch(PL_utf8_alnumc, p, TRUE) != 0;
/* return is_utf8_alpha(p) || is_utf8_digit(p); */
#ifdef SURPRISINGLY_SLOWER /* probably because alpha is usually true */
if (!PL_utf8_alnum)
@@ -1399,15 +1459,14 @@ The "normal" is a string like "ToLower" which means the swash
UV
Perl_to_utf8_case(pTHX_ U8 *p, U8* ustrp, STRLEN *lenp, SV **swashp, char *normal, char *special)
{
- UV uv0, uv1;
- U8 tmpbuf[UTF8_MAXLEN_FOLD+1];
+ U8 tmpbuf[UTF8_MAXBYTES_CASE+1];
STRLEN len = 0;
- uv0 = utf8_to_uvchr(p, 0);
+ const UV uv0 = utf8_to_uvchr(p, NULL);
/* The NATIVE_TO_UNI() and UNI_TO_NATIVE() mappings
* are necessary in EBCDIC, they are redundant no-ops
* in ASCII-ish platforms, and hopefully optimized away. */
- uv1 = NATIVE_TO_UNI(uv0);
+ const UV uv1 = NATIVE_TO_UNI(uv0);
uvuni_to_utf8(tmpbuf, uv1);
if (!*swashp) /* load on-demand */
@@ -1423,9 +1482,9 @@ Perl_to_utf8_case(pTHX_ U8 *p, U8* ustrp, STRLEN *lenp, SV **swashp, char *norma
if ((hv = get_hv(special, FALSE)) &&
(svp = hv_fetch(hv, (const char*)tmpbuf, UNISKIP(uv1), FALSE)) &&
(*svp)) {
- char *s;
+ const char *s;
- s = SvPV(*svp, len);
+ s = SvPV_const(*svp, len);
if (len == 1)
len = uvuni_to_utf8(ustrp, NATIVE_TO_UNI(*(U8*)s)) - ustrp;
else {
@@ -1489,9 +1548,8 @@ Perl_to_utf8_case(pTHX_ U8 *p, U8* ustrp, STRLEN *lenp, SV **swashp, char *norma
Convert the UTF-8 encoded character at p to its uppercase version and
store that in UTF-8 in ustrp and its length in bytes in lenp. Note
-that the ustrp needs to be at least UTF8_MAXLEN_UCLC+1 bytes since the
-uppercase version may be longer than the original character (up to two
-characters).
+that the ustrp needs to be at least UTF8_MAXBYTES_CASE+1 bytes since
+the uppercase version may be longer than the original character.
The first character of the uppercased version is returned
(but note, as explained above, that there may be more.)
@@ -1510,9 +1568,8 @@ Perl_to_utf8_upper(pTHX_ U8 *p, U8* ustrp, STRLEN *lenp)
Convert the UTF-8 encoded character at p to its titlecase version and
store that in UTF-8 in ustrp and its length in bytes in lenp. Note
-that the ustrp needs to be at least UTF8_MAXLEN_UCLC+1 bytes since the
-titlecase version may be longer than the original character (up to two
-characters).
+that the ustrp needs to be at least UTF8_MAXBYTES_CASE+1 bytes since the
+titlecase version may be longer than the original character.
The first character of the titlecased version is returned
(but note, as explained above, that there may be more.)
@@ -1531,9 +1588,8 @@ Perl_to_utf8_title(pTHX_ U8 *p, U8* ustrp, STRLEN *lenp)
Convert the UTF-8 encoded character at p to its lowercase version and
store that in UTF-8 in ustrp and its length in bytes in lenp. Note
-that the ustrp needs to be at least UTF8_MAXLEN_UCLC+1 bytes since the
-lowercase version may be longer than the original character (up to two
-characters).
+that the ustrp needs to be at least UTF8_MAXBYTES_CASE+1 bytes since the
+lowercase version may be longer than the original character.
The first character of the lowercased version is returned
(but note, as explained above, that there may be more.)
@@ -1552,7 +1608,7 @@ Perl_to_utf8_lower(pTHX_ U8 *p, U8* ustrp, STRLEN *lenp)
Convert the UTF-8 encoded character at p to its foldcase version and
store that in UTF-8 in ustrp and its length in bytes in lenp. Note
-that the ustrp needs to be at least UTF8_MAXLEN_FOLD+1 bytes since the
+that the ustrp needs to be at least UTF8_MAXBYTES_CASE+1 bytes since the
foldcase version may be longer than the original character (up to
three characters).
@@ -1574,13 +1630,18 @@ SV*
Perl_swash_init(pTHX_ char* pkg, char* name, SV *listsv, I32 minbits, I32 none)
{
SV* retval;
- SV* tokenbufsv = sv_2mortal(NEWSV(0,0));
+ SV* const tokenbufsv = sv_newmortal();
dSP;
- size_t pkg_len = strlen(pkg);
- size_t name_len = strlen(name);
- HV *stash = gv_stashpvn(pkg, pkg_len, FALSE);
+ const size_t pkg_len = strlen(pkg);
+ const size_t name_len = strlen(name);
+ HV * const stash = gv_stashpvn(pkg, pkg_len, FALSE);
SV* errsv_save;
+ PUSHSTACKi(PERLSI_MAGIC);
+ ENTER;
+ SAVEI32(PL_hints);
+ PL_hints = 0;
+ save_re_context();
if (!gv_fetchmeth(stash, "SWASHNEW", 8, -1)) { /* demand load utf8 */
ENTER;
errsv_save = newSVsv(ERRSV);
@@ -1592,7 +1653,6 @@ Perl_swash_init(pTHX_ char* pkg, char* name, SV *listsv, I32 minbits, I32 none)
LEAVE;
}
SPAGAIN;
- PUSHSTACKi(PERLSI_MAGIC);
PUSHMARK(SP);
EXTEND(SP,5);
PUSHs(sv_2mortal(newSVpvn(pkg, pkg_len)));
@@ -1601,10 +1661,6 @@ Perl_swash_init(pTHX_ char* pkg, char* name, SV *listsv, I32 minbits, I32 none)
PUSHs(sv_2mortal(newSViv(minbits)));
PUSHs(sv_2mortal(newSViv(none)));
PUTBACK;
- ENTER;
- SAVEI32(PL_hints);
- PL_hints = 0;
- save_re_context();
if (IN_PERL_COMPILETIME) {
/* XXX ought to be handled by lex_start */
SAVEI32(PL_in_my);
@@ -1623,7 +1679,7 @@ Perl_swash_init(pTHX_ char* pkg, char* name, SV *listsv, I32 minbits, I32 none)
POPSTACK;
if (IN_PERL_COMPILETIME) {
STRLEN len;
- char* pv = SvPV(tokenbufsv, len);
+ const char* const pv = SvPV_const(tokenbufsv, len);
Copy(pv, PL_tokenbuf, len+1, char);
PL_curcop->op_private = (U8)(PL_hints & HINT_PRIVATE_MASK);
@@ -1646,12 +1702,12 @@ Perl_swash_init(pTHX_ char* pkg, char* name, SV *listsv, I32 minbits, I32 none)
UV
Perl_swash_fetch(pTHX_ SV *sv, U8 *ptr, bool do_utf8)
{
- HV* hv = (HV*)SvRV(sv);
+ HV* const hv = (HV*)SvRV(sv);
U32 klen;
U32 off;
STRLEN slen;
STRLEN needents;
- U8 *tmps = NULL;
+ const U8 *tmps = NULL;
U32 bit;
SV *retval;
U8 tmputf8[2];
@@ -1703,15 +1759,15 @@ Perl_swash_fetch(pTHX_ SV *sv, U8 *ptr, bool do_utf8)
}
else {
/* Try our second-level swatch cache, kept in a hash. */
- SV** svp = hv_fetch(hv, (char*)ptr, klen, FALSE);
+ SV** svp = hv_fetch(hv, (const char*)ptr, klen, FALSE);
/* If not cached, generate it via utf8::SWASHGET */
- if (!svp || !SvPOK(*svp) || !(tmps = (U8*)SvPV(*svp, slen))) {
+ if (!svp || !SvPOK(*svp) || !(tmps = (const U8*)SvPV_const(*svp, slen))) {
dSP;
/* We use utf8n_to_uvuni() as we want an index into
Unicode tables, not a native character number.
*/
- UV code_point = utf8n_to_uvuni(ptr, UTF8_MAXLEN, 0,
+ const UV code_point = utf8n_to_uvuni(ptr, UTF8_MAXBYTES, 0,
ckWARN(WARN_UTF8) ?
0 : UTF8_ALLOW_ANY);
SV *errsv_save;
@@ -1741,7 +1797,7 @@ Perl_swash_fetch(pTHX_ SV *sv, U8 *ptr, bool do_utf8)
if (IN_PERL_COMPILETIME)
PL_curcop->op_private = (U8)(PL_hints & HINT_PRIVATE_MASK);
- svp = hv_store(hv, (char*)ptr, klen, retval, 0);
+ svp = hv_store(hv, (const char *)ptr, klen, retval, 0);
if (!svp || !(tmps = (U8*)SvPV(*svp, slen)) || (slen << 3) < needents)
Perl_croak(aTHX_ "SWASHGET didn't return result of proper length");
@@ -1749,7 +1805,8 @@ Perl_swash_fetch(pTHX_ SV *sv, U8 *ptr, bool do_utf8)
PL_last_swash_hv = hv;
PL_last_swash_klen = klen;
- PL_last_swash_tmps = tmps;
+ /* 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);
@@ -1778,7 +1835,7 @@ Perl_swash_fetch(pTHX_ SV *sv, U8 *ptr, bool do_utf8)
=for apidoc A|U8 *|uvchr_to_utf8|U8 *d|UV uv
Adds the UTF-8 representation of the Native codepoint C<uv> to the end
-of the string C<d>; C<d> should be have at least C<UTF8_MAXLEN+1> free
+of the string C<d>; C<d> should be have at least C<UTF8_MAXBYTES+1> free
bytes available. The return value is the pointer to the byte after the
end of the new character. In other words,
@@ -1825,7 +1882,7 @@ Allows length and flags to be passed to low level routine.
UV
Perl_utf8n_to_uvchr(pTHX_ U8 *s, STRLEN curlen, STRLEN *retlen, U32 flags)
{
- UV uv = Perl_utf8n_to_uvuni(aTHX_ s, curlen, retlen, flags);
+ const UV uv = Perl_utf8n_to_uvuni(aTHX_ s, curlen, retlen, flags);
return UNI_TO_NATIVE(uv);
}
@@ -1850,12 +1907,15 @@ char *
Perl_pv_uni_display(pTHX_ SV *dsv, U8 *spv, STRLEN len, STRLEN pvlim, UV flags)
{
int truncated = 0;
- char *s, *e;
+ const char *s, *e;
sv_setpvn(dsv, "", 0);
- for (s = (char *)spv, e = s + len; s < e; s += UTF8SKIP(s)) {
+ for (s = (const char *)spv, e = s + len; s < e; s += UTF8SKIP(s)) {
UV u;
- bool ok = FALSE;
+ /* This serves double duty as a flag and a character to print after
+ a \ when flags & UNI_DISPLAY_BACKSLASH is true.
+ */
+ char ok = 0;
if (pvlim && SvCUR(dsv) >= pvlim) {
truncated++;
@@ -1863,27 +1923,31 @@ Perl_pv_uni_display(pTHX_ SV *dsv, U8 *spv, STRLEN len, STRLEN pvlim, UV flags)
}
u = utf8_to_uvchr((U8*)s, 0);
if (u < 256) {
+ const unsigned char c = (unsigned char)u & 0xFF;
if (!ok && (flags & UNI_DISPLAY_BACKSLASH)) {
- switch (u & 0xFF) {
+ switch (c) {
case '\n':
- Perl_sv_catpvf(aTHX_ dsv, "\\n"); ok = TRUE; break;
+ ok = 'n'; break;
case '\r':
- Perl_sv_catpvf(aTHX_ dsv, "\\r"); ok = TRUE; break;
+ ok = 'r'; break;
case '\t':
- Perl_sv_catpvf(aTHX_ dsv, "\\t"); ok = TRUE; break;
+ ok = 't'; break;
case '\f':
- Perl_sv_catpvf(aTHX_ dsv, "\\f"); ok = TRUE; break;
+ ok = 'f'; break;
case '\a':
- Perl_sv_catpvf(aTHX_ dsv, "\\a"); ok = TRUE; break;
+ ok = 'a'; break;
case '\\':
- Perl_sv_catpvf(aTHX_ dsv, "\\\\" ); ok = TRUE; break;
+ ok = '\\'; break;
default: break;
}
+ if (ok) {
+ Perl_sv_catpvf(aTHX_ dsv, "\\%c", ok);
+ }
}
/* isPRINT() is the locale-blind version. */
- if (!ok && (flags & UNI_DISPLAY_ISPRINT) && isPRINT(u & 0xFF)) {
- Perl_sv_catpvf(aTHX_ dsv, "%c", (char)(u & 0xFF));
- ok = TRUE;
+ if (!ok && (flags & UNI_DISPLAY_ISPRINT) && isPRINT(c)) {
+ Perl_sv_catpvf(aTHX_ dsv, "%c", c);
+ ok = 1;
}
}
if (!ok)
@@ -1910,8 +1974,8 @@ The pointer to the PV of the dsv is returned.
char *
Perl_sv_uni_display(pTHX_ SV *dsv, SV *ssv, STRLEN pvlim, UV flags)
{
- return Perl_pv_uni_display(aTHX_ dsv, (U8*)SvPVX(ssv), SvCUR(ssv),
- pvlim, flags);
+ return Perl_pv_uni_display(aTHX_ dsv, (U8*)SvPVX_const(ssv),
+ SvCUR(ssv), pvlim, flags);
}
/*
@@ -1942,25 +2006,26 @@ http://www.unicode.org/unicode/reports/tr21/ (Case Mappings).
I32
Perl_ibcmp_utf8(pTHX_ const char *s1, char **pe1, register UV l1, bool u1, const char *s2, char **pe2, register UV l2, bool u2)
{
- register U8 *p1 = (U8*)s1;
- register U8 *p2 = (U8*)s2;
- register U8 *e1 = 0, *f1 = 0, *q1 = 0;
- register U8 *e2 = 0, *f2 = 0, *q2 = 0;
+ register const U8 *p1 = (const U8*)s1;
+ register const U8 *p2 = (const U8*)s2;
+ register const U8 *f1 = 0, *f2 = 0;
+ register U8 *e1 = 0, *q1 = 0;
+ register U8 *e2 = 0, *q2 = 0;
STRLEN n1 = 0, n2 = 0;
- U8 foldbuf1[UTF8_MAXLEN_FOLD+1];
- U8 foldbuf2[UTF8_MAXLEN_FOLD+1];
+ U8 foldbuf1[UTF8_MAXBYTES_CASE+1];
+ U8 foldbuf2[UTF8_MAXBYTES_CASE+1];
U8 natbuf[1+1];
STRLEN foldlen1, foldlen2;
bool match;
if (pe1)
e1 = *(U8**)pe1;
- if (e1 == 0 || (l1 && l1 < (UV)(e1 - (U8*)s1)))
- f1 = (U8*)s1 + l1;
+ if (e1 == 0 || (l1 && l1 < (UV)(e1 - (const U8*)s1)))
+ f1 = (const U8*)s1 + l1;
if (pe2)
e2 = *(U8**)pe2;
- if (e2 == 0 || (l2 && l2 < (UV)(e2 - (U8*)s2)))
- f2 = (U8*)s2 + l2;
+ if (e2 == 0 || (l2 && l2 < (UV)(e2 - (const U8*)s2)))
+ f2 = (const U8*)s2 + l2;
if ((e1 == 0 && f1 == 0) || (e2 == 0 && f2 == 0) || (f1 == 0 && f2 == 0))
return 1; /* mismatch; possible infinite loop or false positive */
@@ -1974,9 +2039,9 @@ Perl_ibcmp_utf8(pTHX_ const char *s1, char **pe1, register UV l1, bool u1, const
(f2 == 0 || p2 < f2)) {
if (n1 == 0) {
if (u1)
- to_utf8_fold(p1, foldbuf1, &foldlen1);
+ to_utf8_fold((U8 *)p1, foldbuf1, &foldlen1);
else {
- natbuf[0] = *p1;
+ uvuni_to_utf8(natbuf, (UV) NATIVE_TO_UNI(((UV)*p1)));
to_utf8_fold(natbuf, foldbuf1, &foldlen1);
}
q1 = foldbuf1;
@@ -1984,9 +2049,9 @@ Perl_ibcmp_utf8(pTHX_ const char *s1, char **pe1, register UV l1, bool u1, const
}
if (n2 == 0) {
if (u2)
- to_utf8_fold(p2, foldbuf2, &foldlen2);
+ to_utf8_fold((U8 *)p2, foldbuf2, &foldlen2);
else {
- natbuf[0] = *p2;
+ uvuni_to_utf8(natbuf, (UV) NATIVE_TO_UNI(((UV)*p2)));
to_utf8_fold(natbuf, foldbuf2, &foldlen2);
}
q2 = foldbuf2;
@@ -2023,3 +2088,12 @@ Perl_ibcmp_utf8(pTHX_ const char *s1, char **pe1, register UV l1, bool u1, const
return match ? 0 : 1; /* 0 match, 1 mismatch */
}
+/*
+ * Local variables:
+ * c-indentation-style: bsd
+ * c-basic-offset: 4
+ * indent-tabs-mode: t
+ * End:
+ *
+ * ex: set ts=8 sts=4 sw=4 noet:
+ */
diff --git a/gnu/usr.bin/perl/utf8.h b/gnu/usr.bin/perl/utf8.h
index d5a884519e7..6d638971b7f 100644
--- a/gnu/usr.bin/perl/utf8.h
+++ b/gnu/usr.bin/perl/utf8.h
@@ -1,6 +1,6 @@
/* utf8.h
*
- * Copyright (C) 2000, 2001, 2002, by Larry Wall and others
+ * Copyright (C) 2000, 2001, 2002, 2005 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.
@@ -42,7 +42,7 @@ EXTCONST unsigned char PL_utf8skip[];
#endif
END_EXTERN_C
-#define UTF8SKIP(s) PL_utf8skip[*(U8*)s]
+#define UTF8SKIP(s) PL_utf8skip[*(const U8*)s]
/* Native character to iso-8859-1 */
#define NATIVE_TO_ASCII(ch) (ch)
@@ -147,10 +147,10 @@ encoded character.
* (that is, the two high bits are set). Otherwise we risk loading in the
* heavy-duty SWASHINIT and SWASHGET routines unnecessarily.
*/
-#define isIDFIRST_lazy_if(p,c) ((IN_BYTES || (!c || (*((U8*)p) < 0xc0))) \
+#define isIDFIRST_lazy_if(p,c) ((IN_BYTES || (!c || (*((const U8*)p) < 0xc0))) \
? isIDFIRST(*(p)) \
: isIDFIRST_utf8((U8*)p))
-#define isALNUM_lazy_if(p,c) ((IN_BYTES || (!c || (*((U8*)p) < 0xc0))) \
+#define isALNUM_lazy_if(p,c) ((IN_BYTES || (!c || (*((const U8*)p) < 0xc0))) \
? isALNUM(*(p)) \
: isALNUM_utf8((U8*)p))
@@ -162,14 +162,26 @@ encoded character.
#define isIDFIRST_lazy(p) isIDFIRST_lazy_if(p,1)
#define isALNUM_lazy(p) isALNUM_lazy_if(p,1)
-/* how wide can a single UTF-8 encoded character become */
-#define UTF8_MAXLEN 13
-/* how wide a character can become when upper/lowercased */
-#define UTF8_MAXLEN_UCLC_MULT 3
-#define UTF8_MAXLEN_UCLC (UTF8_MAXLEN*UTF8_MAXLEN_UCLC_MULT)
-/* how wide a character can become when casefolded */
-#define UTF8_MAXLEN_FOLD_MULT 3
-#define UTF8_MAXLEN_FOLD (UTF8_MAXLEN*UTF8_MAXLEN_FOLD_MULT)
+#define UTF8_MAXBYTES 13
+/* 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 given Unicode's current
+ * upper limit only four bytes is possible. Perl thinks of UTF-8
+ * as a way to encode non-negative integers in a binary format. */
+#define UTF8_MAXLEN UTF8_MAXBYTES
+
+#define UTF8_MAXLEN_UCLC 3 /* Obsolete, do not use. */
+#define UTF8_MAXLEN_UCLC_MULT 39 /* Obsolete, do not use. */
+#define UTF8_MAXLEN_FOLD 3 /* Obsolete, do not use. */
+#define UTF8_MAXLEN_FOLD_MULT 39 /* Obsolete, do not use. */
+
+/* The maximum number of UTF-8 bytes a single Unicode character can
+ * uppercase/lowercase/fold into; this number depends on the Unicode
+ * version. An example of maximal expansion is the U+03B0 which
+ * uppercases to U+03C5 U+0308 U+0301. The Unicode databases that
+ * tell these things are UnicodeDatabase.txt, CaseFolding.txt, and
+ * SpecialCasing.txt. */
+#define UTF8_MAXBYTES_CASE 6
#define IN_BYTES (PL_curcop->op_private & HINT_BYTES)
#define DO_UTF8(sv) (SvUTF8(sv) && !IN_BYTES)
@@ -183,8 +195,7 @@ encoded character.
#define UTF8_ALLOW_FFFF 0x0040 /* Allows also FFFE. */
#define UTF8_ALLOW_LONG 0x0080
#define UTF8_ALLOW_ANYUV (UTF8_ALLOW_EMPTY|UTF8_ALLOW_FE_FF|\
- UTF8_ALLOW_SURROGATE|\
- UTF8_ALLOW_FFFF|UTF8_ALLOW_LONG)
+ UTF8_ALLOW_SURROGATE|UTF8_ALLOW_FFFF)
#define UTF8_ALLOW_ANY 0x00FF
#define UTF8_CHECK_ONLY 0x0200
@@ -246,3 +257,79 @@ encoded character.
toLOWER((input)[1]) == 's')
#endif
#define SHARP_S_SKIP 2
+
+#ifdef EBCDIC
+/* IS_UTF8_CHAR() is not ported to EBCDIC */
+#else
+#define IS_UTF8_CHAR_1(p) \
+ ((p)[0] <= 0x7F)
+#define IS_UTF8_CHAR_2(p) \
+ ((p)[0] >= 0xC2 && (p)[0] <= 0xDF && \
+ (p)[1] >= 0x80 && (p)[1] <= 0xBF)
+#define IS_UTF8_CHAR_3a(p) \
+ ((p)[0] == 0xE0 && \
+ (p)[1] >= 0xA0 && (p)[1] <= 0xBF && \
+ (p)[2] >= 0x80 && (p)[2] <= 0xBF)
+#define IS_UTF8_CHAR_3b(p) \
+ ((p)[0] >= 0xE1 && (p)[0] <= 0xEC && \
+ (p)[1] >= 0x80 && (p)[1] <= 0xBF && \
+ (p)[2] >= 0x80 && (p)[2] <= 0xBF)
+#define IS_UTF8_CHAR_3c(p) \
+ ((p)[0] == 0xED && \
+ (p)[1] >= 0x80 && (p)[1] <= 0xBF && \
+ (p)[2] >= 0x80 && (p)[2] <= 0xBF)
+/* In IS_UTF8_CHAR_3c(p) one could use
+ * (p)[1] >= 0x80 && (p)[1] <= 0x9F
+ * if one wanted to exclude surrogates. */
+#define IS_UTF8_CHAR_3d(p) \
+ ((p)[0] >= 0xEE && (p)[0] <= 0xEF && \
+ (p)[1] >= 0x80 && (p)[1] <= 0xBF && \
+ (p)[2] >= 0x80 && (p)[2] <= 0xBF)
+#define IS_UTF8_CHAR_4a(p) \
+ ((p)[0] == 0xF0 && \
+ (p)[1] >= 0x90 && (p)[1] <= 0xBF && \
+ (p)[2] >= 0x80 && (p)[2] <= 0xBF && \
+ (p)[3] >= 0x80 && (p)[3] <= 0xBF)
+#define IS_UTF8_CHAR_4b(p) \
+ ((p)[0] >= 0xF1 && (p)[0] <= 0xF3 && \
+ (p)[1] >= 0x80 && (p)[1] <= 0xBF && \
+ (p)[2] >= 0x80 && (p)[2] <= 0xBF && \
+ (p)[3] >= 0x80 && (p)[3] <= 0xBF)
+/* In IS_UTF8_CHAR_4c(p) one could use
+ * (p)[0] == 0xF4
+ * if one wanted to stop at the Unicode limit U+10FFFF.
+ * The 0xF7 allows us to go to 0x1fffff (0x200000 would
+ * require five bytes). Not doing any further code points
+ * since that is not needed (and that would not be strict
+ * UTF-8, anyway). The "slow path" in Perl_is_utf8_char()
+ * will take care of the "extended UTF-8". */
+#define IS_UTF8_CHAR_4c(p) \
+ ((p)[0] == 0xF4 && (p)[0] <= 0xF7 && \
+ (p)[1] >= 0x80 && (p)[1] <= 0xBF && \
+ (p)[2] >= 0x80 && (p)[2] <= 0xBF && \
+ (p)[3] >= 0x80 && (p)[3] <= 0xBF)
+
+#define IS_UTF8_CHAR_3(p) \
+ (IS_UTF8_CHAR_3a(p) || \
+ IS_UTF8_CHAR_3b(p) || \
+ IS_UTF8_CHAR_3c(p) || \
+ IS_UTF8_CHAR_3d(p))
+#define IS_UTF8_CHAR_4(p) \
+ (IS_UTF8_CHAR_4a(p) || \
+ IS_UTF8_CHAR_4b(p) || \
+ IS_UTF8_CHAR_4c(p))
+
+/* IS_UTF8_CHAR(p) is strictly speaking wrong (not UTF-8) because it
+ * (1) allows UTF-8 encoded UTF-16 surrogates
+ * (2) it allows code points past U+10FFFF.
+ * The Perl_is_utf8_char() full "slow" code will handle the Perl
+ * "extended UTF-8". */
+#define IS_UTF8_CHAR(p, n) \
+ ((n) == 1 ? IS_UTF8_CHAR_1(p) : \
+ (n) == 2 ? IS_UTF8_CHAR_2(p) : \
+ (n) == 3 ? IS_UTF8_CHAR_3(p) : \
+ (n) == 4 ? IS_UTF8_CHAR_4(p) : 0)
+
+#define IS_UTF8_CHAR_FAST(n) ((n) <= 4)
+
+#endif /* IS_UTF8_CHAR() for UTF-8 */
diff --git a/gnu/usr.bin/perl/utfebcdic.h b/gnu/usr.bin/perl/utfebcdic.h
index e47e90d7de8..7d03608b413 100644
--- a/gnu/usr.bin/perl/utfebcdic.h
+++ b/gnu/usr.bin/perl/utfebcdic.h
@@ -337,7 +337,7 @@ EXTCONST unsigned char PL_a2e[];
END_EXTERN_C
-#define UTF8SKIP(s) PL_utf8skip[*(U8*)s]
+#define UTF8SKIP(s) PL_utf8skip[*(const U8*)s]
/* EBCDIC-happy ways of converting native code to UTF-8 */
@@ -363,10 +363,10 @@ END_EXTERN_C
#define isIDFIRST_lazy_if(p,c) ((IN_BYTES || (!c || UTF8_IS_INVARIANT(*p))) \
? isIDFIRST(*(p)) \
- : isIDFIRST_utf8((U8*)p))
+ : isIDFIRST_utf8((const U8*)p))
#define isALNUM_lazy_if(p,c) ((IN_BYTES || (!c || UTF8_IS_INVARIANT(*p))) \
? isALNUM(*(p)) \
- : isALNUM_utf8((U8*)p))
+ : isALNUM_utf8((const U8*)p))
/*
The following table is adapted from tr16, it shows UTF-8-mod encoding of Unicode code points.
diff --git a/gnu/usr.bin/perl/utils/perlivp.PL b/gnu/usr.bin/perl/utils/perlivp.PL
index 90598691d65..2e597c28f4f 100644
--- a/gnu/usr.bin/perl/utils/perlivp.PL
+++ b/gnu/usr.bin/perl/utils/perlivp.PL
@@ -45,8 +45,9 @@ sub usage {
print << " EOUSAGE";
Usage:
- $0 [-p] [-v] | [-h]
+ $0 [-a] [-p] [-v] | [-h]
+ -a Run all tests (default is to skip .ph tests)
-p Print a preface before each test telling what it will test.
-v Verbose mode in which extra information about test results
is printed. Test failures always print out some extra information
@@ -66,7 +67,7 @@ while ($ARGV[0] =~ /^-/) {
usage() if '?' =~ /\Q$flag/;
usage() if 'h' =~ /\Q$flag/;
usage() if 'H' =~ /\Q$flag/;
- usage("unknown flag: `$flag'") unless 'HhPpVv' =~ /\Q$flag/;
+ usage("unknown flag: `$flag'") unless 'HhPpVva' =~ /\Q$flag/;
warn "$0: `$flag' flag already set\n" if $opt{$flag}++;
}
shift;
@@ -303,6 +304,7 @@ else {
$tests_total++;
+if ($opt{'a'}) {
print "## Checking installations of *.h -> *.ph header files.\n" if $opt{'p'};
my $ph_there = 0;
my $var = undef;
@@ -352,6 +354,10 @@ else {
$error_total++;
}
$tests_total++;
+}
+else {
+ print "## Skip checking of *.ph header files.\n" if $opt{'p'};
+}
# Final report (rather than feed ousrselves to Test::Harness::runtests()
# we simply format some output on our own to keep things simple and
@@ -370,11 +376,11 @@ if ($error_total == 0 && $tests_total) {
=head1 NAME
-B<perlivp> - Perl Installation Verification Procedure
+perlivp - Perl Installation Verification Procedure
=head1 SYNOPSIS
-B<perlivp> [B<-p>] [B<-v>] [B<-h>]
+B<perlivp> [B<-a>] [B<-p>] [B<-v>] [B<-h>]
=head1 DESCRIPTION
@@ -400,6 +406,11 @@ etc.
Prints out a brief help message.
+=item B<-a> run all tests
+
+Normally tests for optional features are skipped. With -a all tests
+are executed.
+
=item B<-p> print preface
Gives a description of each test prior to performing it.
diff --git a/gnu/usr.bin/perl/vmesa/vmesa.c b/gnu/usr.bin/perl/vmesa/vmesa.c
index 8bc733b5b74..7e3635f357c 100644
--- a/gnu/usr.bin/perl/vmesa/vmesa.c
+++ b/gnu/usr.bin/perl/vmesa/vmesa.c
@@ -121,7 +121,7 @@ do_aspawn(SV* really, SV **mark, SV **sp)
status = FAIL;
if (sp > mark)
{
- New(401,PL_Argv, sp - mark + 1, char*);
+ Newx(PL_Argv, sp - mark + 1, char*);
a = PL_Argv;
while (++mark <= sp)
{
@@ -260,7 +260,7 @@ do_spawn(char *cmd, int execf)
}
}
- New(402,PL_Argv, (s - cmd) / 2 + 2, char*);
+ Newx(PL_Argv, (s - cmd) / 2 + 2, char*);
PL_Cmd = savepvn(cmd, s-cmd);
a = PL_Argv;
for (s = PL_Cmd; *s;)
diff --git a/gnu/usr.bin/perl/vms/descrip_mms.template b/gnu/usr.bin/perl/vms/descrip_mms.template
index 3ad8f91e508..979e6e31e6c 100644
--- a/gnu/usr.bin/perl/vms/descrip_mms.template
+++ b/gnu/usr.bin/perl/vms/descrip_mms.template
@@ -31,6 +31,7 @@
~CC~
~MT~
~FLAGS~
+~LARGEFILE~
#: >>>>> Architecture-specific options <<<<<
.ifdef IXE
@@ -210,11 +211,16 @@ THREADH =
.endif
# C preprocessor manifest "DEBUGGING" ==> perl -D, not the VMS debugger
+.IFDEF LARGEFILE
+CFLAGS = $(XTRACCFLAGS)$(DBGCCFLAGS)$(FLAGS)/Define=$(LARGEFILE)
+X2PCFLAGS = $(XTRACCFLAGS)$(DBGCCFLAGS)$(FLAGS)/Define=(PERL_FOR_X2P,$(LARGEFILE))
+CORECFLAGS = $(XTRACCFLAGS)$(DBGCCFLAGS)$(FLAGS)/Define=(PERL_CORE,$(LARGEFILE))
+.ELSE
CFLAGS = $(XTRACCFLAGS)$(DBGCCFLAGS)$(FLAGS)
-# Flags for a core compile
-X2PCFLAGS = $(CFLAGS)/Define=PERL_FOR_X2P
-# Flags for an x2p compile
-CORECFLAGS = $(CFLAGS)/Define=PERL_CORE
+X2PCFLAGS = $(XTRACCFLAGS)$(DBGCCFLAGS)$(FLAGS)/Define=PERL_FOR_X2P
+CORECFLAGS = $(XTRACCFLAGS)$(DBGCCFLAGS)$(FLAGS)/Define=PERL_CORE
+.ENDIF
+
LINKFLAGS = $(DBGLINKFLAGS)
MAKE = $(MMS)
@@ -329,9 +335,9 @@ CRTLOPTS =,$(CRTL)/Options
unidatadirs = lib/unicore/To lib/unicore/lib
# Modules which must be installed before we can build extensions
-LIBPREREQ = $(ARCHDIR)Config.pm [.lib.VMS]Filespec.pm [.lib]DynaLoader.pm [.lib]XSLoader.pm [.lib]lib.pm [.lib.ExtUtils]XSSymSet.pm $(ARCHDIR)vmspipe.com [.lib]re.pm unidatafiles.ts
+LIBPREREQ = $(ARCHDIR)Config.pm $(ARCHDIR)Config_heavy.pl [.lib.VMS]Filespec.pm [.lib]DynaLoader.pm [.lib]XSLoader.pm [.lib]lib.pm [.lib.ExtUtils]XSSymSet.pm $(ARCHDIR)vmspipe.com [.lib]re.pm unidatafiles.ts
-utils1 = [.lib.pod]perldoc.com [.lib.ExtUtils]Miniperl.pm [.utils]c2ph.com [.utils]h2ph.com
+utils1 = [.lib.pods]perldoc.com [.lib.ExtUtils]Miniperl.pm [.utils]c2ph.com [.utils]h2ph.com
utils2 = [.utils]h2xs.com [.utils]libnetcfg.com [.lib]perlbug.com [.lib]perlcc.com [.utils]dprofpp.com
utils3 = [.utils]perlivp.com [.lib]splain.com [.utils]pl2pm.com [.utils]xsubpp.com [.utils]instmodsh.com
utils4 = [.utils]enc2xs.com [.utils]piconv.com [.utils]cpan.com [.utils]prove.com
@@ -357,38 +363,40 @@ libmods : $(LIBPREREQ)
@ $(NOOP)
utils : $(utils1) $(utils2) $(utils3) $(utils4)
@ $(NOOP)
-podxform : [.lib.pod]pod2text.com [.lib.pod]pod2html.com [.lib.pod]pod2latex.com [.lib.pod]pod2man.com [.lib.pod]podchecker.com [.lib.pod]pod2usage.com [.lib.pod]podselect.com
+podxform : [.lib.pods]pod2text.com [.lib.pods]pod2html.com [.lib.pods]pod2latex.com [.lib.pods]pod2man.com [.lib.pods]podchecker.com [.lib.pods]pod2usage.com [.lib.pods]podselect.com
@ $(NOOP)
x2p : [.x2p]$(DBG)a2p$(E) [.x2p]s2p.com [.x2p]find2perl.com
@ $(NOOP)
extra.pods : miniperl
@ @extra_pods.com
-pod0 = [.lib.pod]perl.pod [.lib.pod]perl5004delta.pod [.lib.pod]perl5005delta.pod [.lib.pod]perl561delta.pod [.lib.pod]perl56delta.pod
-pod1 = [.lib.pod]perl570delta.pod [.lib.pod]perl571delta.pod [.lib.pod]perl572delta.pod [.lib.pod]perl573delta.pod [.lib.pod]perl581delta.pod
-pod2 = [.lib.pod]perl582delta.pod [.lib.pod]perl583delta.pod [.lib.pod]perl584delta.pod [.lib.pod]perl585delta.pod [.lib.pod]perl586delta.pod
-pod3 = [.lib.pod]perl58delta.pod [.lib.pod]perlaix.pod [.lib.pod]perlamiga.pod [.lib.pod]perlapi.pod [.lib.pod]perlapio.pod [.lib.pod]perlapollo.pod
-pod4 = [.lib.pod]perlartistic.pod [.lib.pod]perlbeos.pod [.lib.pod]perlbook.pod [.lib.pod]perlboot.pod [.lib.pod]perlbot.pod [.lib.pod]perlbs2000.pod
-pod5 = [.lib.pod]perlcall.pod [.lib.pod]perlce.pod [.lib.pod]perlcheat.pod [.lib.pod]perlclib.pod [.lib.pod]perlcn.pod [.lib.pod]perlcompile.pod
-pod6 = [.lib.pod]perlcygwin.pod [.lib.pod]perldata.pod [.lib.pod]perldbmfilter.pod [.lib.pod]perldebguts.pod [.lib.pod]perldebtut.pod
-pod7 = [.lib.pod]perldebug.pod [.lib.pod]perldelta.pod [.lib.pod]perldgux.pod [.lib.pod]perldiag.pod [.lib.pod]perldoc.pod [.lib.pod]perldos.pod
-pod8 = [.lib.pod]perldsc.pod [.lib.pod]perlebcdic.pod [.lib.pod]perlembed.pod [.lib.pod]perlepoc.pod [.lib.pod]perlfaq.pod [.lib.pod]perlfaq1.pod
-pod9 = [.lib.pod]perlfaq2.pod [.lib.pod]perlfaq3.pod [.lib.pod]perlfaq4.pod [.lib.pod]perlfaq5.pod [.lib.pod]perlfaq6.pod [.lib.pod]perlfaq7.pod
-pod10 = [.lib.pod]perlfaq8.pod [.lib.pod]perlfaq9.pod [.lib.pod]perlfilter.pod [.lib.pod]perlfork.pod [.lib.pod]perlform.pod [.lib.pod]perlfreebsd.pod
-pod11 = [.lib.pod]perlfunc.pod [.lib.pod]perlgpl.pod [.lib.pod]perlguts.pod [.lib.pod]perlhack.pod [.lib.pod]perlhist.pod [.lib.pod]perlhpux.pod
-pod12 = [.lib.pod]perlhurd.pod [.lib.pod]perlintern.pod [.lib.pod]perlintro.pod [.lib.pod]perliol.pod [.lib.pod]perlipc.pod [.lib.pod]perlirix.pod
-pod13 = [.lib.pod]perljp.pod [.lib.pod]perlko.pod [.lib.pod]perllexwarn.pod [.lib.pod]perllocale.pod [.lib.pod]perllol.pod [.lib.pod]perlmachten.pod
-pod14 = [.lib.pod]perlmacos.pod [.lib.pod]perlmacosx.pod [.lib.pod]perlmint.pod [.lib.pod]perlmod.pod [.lib.pod]perlmodinstall.pod [.lib.pod]perlmodlib.pod
-pod15 = [.lib.pod]perlmodstyle.pod [.lib.pod]perlmpeix.pod [.lib.pod]perlnetware.pod [.lib.pod]perlnewmod.pod [.lib.pod]perlnumber.pod [.lib.pod]perlobj.pod
-pod16 = [.lib.pod]perlop.pod [.lib.pod]perlopentut.pod [.lib.pod]perlos2.pod [.lib.pod]perlos390.pod [.lib.pod]perlos400.pod [.lib.pod]perlothrtut.pod
-pod17 = [.lib.pod]perlpacktut.pod [.lib.pod]perlplan9.pod [.lib.pod]perlpod.pod [.lib.pod]perlpodspec.pod [.lib.pod]perlport.pod [.lib.pod]perlqnx.pod
-pod18 = [.lib.pod]perlre.pod [.lib.pod]perlref.pod [.lib.pod]perlreftut.pod [.lib.pod]perlrequick.pod [.lib.pod]perlreref.pod [.lib.pod]perlretut.pod
-pod19 = [.lib.pod]perlrun.pod [.lib.pod]perlsec.pod [.lib.pod]perlsolaris.pod [.lib.pod]perlstyle.pod [.lib.pod]perlsub.pod [.lib.pod]perlsyn.pod
-pod20 = [.lib.pod]perlthrtut.pod [.lib.pod]perltie.pod [.lib.pod]perltoc.pod [.lib.pod]perltodo.pod [.lib.pod]perltooc.pod [.lib.pod]perltoot.pod
-pod21 = [.lib.pod]perltrap.pod [.lib.pod]perltru64.pod [.lib.pod]perltw.pod [.lib.pod]perlunicode.pod [.lib.pod]perluniintro.pod [.lib.pod]perlutil.pod
-pod22 = [.lib.pod]perluts.pod [.lib.pod]perlvar.pod [.lib.pod]perlvmesa.pod [.lib.pod]perlvms.pod [.lib.pod]perlvos.pod [.lib.pod]perlwin32.pod
-pod23 = [.lib.pod]perlxs.pod [.lib.pod]perlxstut.pod
-pod = $(pod0) $(pod1) $(pod2) $(pod3) $(pod4) $(pod5) $(pod6) $(pod7) $(pod8) $(pod9) $(pod10) $(pod11) $(pod12) $(pod13) $(pod14) $(pod15) $(pod16) $(pod17) $(pod18) $(pod19) $(pod20) $(pod21) $(pod22) $(pod23)
+pod0 = [.lib.pods]perl.pod [.lib.pods]perl5004delta.pod [.lib.pods]perl5005delta.pod [.lib.pods]perl561delta.pod [.lib.pods]perl56delta.pod
+pod1 = [.lib.pods]perl570delta.pod [.lib.pods]perl571delta.pod [.lib.pods]perl572delta.pod [.lib.pods]perl573delta.pod [.lib.pods]perl581delta.pod
+pod2 = [.lib.pods]perl582delta.pod [.lib.pods]perl583delta.pod [.lib.pods]perl584delta.pod [.lib.pods]perl585delta.pod [.lib.pods]perl586delta.pod
+pod3 = [.lib.pods]perl587delta.pod [.lib.pods]perl588delta.pod [.lib.pods]perl58delta.pod [.lib.pods]perlaix.pod [.lib.pods]perlamiga.pod
+pod4 = [.lib.pods]perlapi.pod [.lib.pods]perlapio.pod [.lib.pods]perlapollo.pod [.lib.pods]perlartistic.pod [.lib.pods]perlbeos.pod [.lib.pods]perlbook.pod
+pod5 = [.lib.pods]perlboot.pod [.lib.pods]perlbot.pod [.lib.pods]perlbs2000.pod [.lib.pods]perlcall.pod [.lib.pods]perlce.pod [.lib.pods]perlcheat.pod
+pod6 = [.lib.pods]perlclib.pod [.lib.pods]perlcn.pod [.lib.pods]perlcompile.pod [.lib.pods]perlcygwin.pod [.lib.pods]perldata.pod
+pod7 = [.lib.pods]perldbmfilter.pod [.lib.pods]perldebguts.pod [.lib.pods]perldebtut.pod [.lib.pods]perldebug.pod [.lib.pods]perldelta.pod
+pod8 = [.lib.pods]perldgux.pod [.lib.pods]perldiag.pod [.lib.pods]perldoc.pod [.lib.pods]perldos.pod [.lib.pods]perldsc.pod [.lib.pods]perlebcdic.pod
+pod9 = [.lib.pods]perlembed.pod [.lib.pods]perlepoc.pod [.lib.pods]perlfaq.pod [.lib.pods]perlfaq1.pod [.lib.pods]perlfaq2.pod [.lib.pods]perlfaq3.pod
+pod10 = [.lib.pods]perlfaq4.pod [.lib.pods]perlfaq5.pod [.lib.pods]perlfaq6.pod [.lib.pods]perlfaq7.pod [.lib.pods]perlfaq8.pod [.lib.pods]perlfaq9.pod
+pod11 = [.lib.pods]perlfilter.pod [.lib.pods]perlfork.pod [.lib.pods]perlform.pod [.lib.pods]perlfreebsd.pod [.lib.pods]perlfunc.pod
+pod12 = [.lib.pods]perlglossary.pod [.lib.pods]perlgpl.pod [.lib.pods]perlguts.pod [.lib.pods]perlhack.pod [.lib.pods]perlhist.pod [.lib.pods]perlhpux.pod
+pod13 = [.lib.pods]perlhurd.pod [.lib.pods]perlintern.pod [.lib.pods]perlintro.pod [.lib.pods]perliol.pod [.lib.pods]perlipc.pod [.lib.pods]perlirix.pod
+pod14 = [.lib.pods]perljp.pod [.lib.pods]perlko.pod [.lib.pods]perllexwarn.pod [.lib.pods]perllinux.pod [.lib.pods]perllocale.pod [.lib.pods]perllol.pod
+pod15 = [.lib.pods]perlmachten.pod [.lib.pods]perlmacos.pod [.lib.pods]perlmacosx.pod [.lib.pods]perlmint.pod [.lib.pods]perlmod.pod
+pod16 = [.lib.pods]perlmodinstall.pod [.lib.pods]perlmodlib.pod [.lib.pods]perlmodstyle.pod [.lib.pods]perlmpeix.pod [.lib.pods]perlnetware.pod
+pod17 = [.lib.pods]perlnewmod.pod [.lib.pods]perlnumber.pod [.lib.pods]perlobj.pod [.lib.pods]perlop.pod [.lib.pods]perlopenbsd.pod
+pod18 = [.lib.pods]perlopentut.pod [.lib.pods]perlos2.pod [.lib.pods]perlos390.pod [.lib.pods]perlos400.pod [.lib.pods]perlothrtut.pod
+pod19 = [.lib.pods]perlpacktut.pod [.lib.pods]perlplan9.pod [.lib.pods]perlpod.pod [.lib.pods]perlpodspec.pod [.lib.pods]perlport.pod [.lib.pods]perlqnx.pod
+pod20 = [.lib.pods]perlre.pod [.lib.pods]perlref.pod [.lib.pods]perlreftut.pod [.lib.pods]perlrequick.pod [.lib.pods]perlreref.pod [.lib.pods]perlretut.pod
+pod21 = [.lib.pods]perlrun.pod [.lib.pods]perlsec.pod [.lib.pods]perlsolaris.pod [.lib.pods]perlstyle.pod [.lib.pods]perlsub.pod [.lib.pods]perlsyn.pod
+pod22 = [.lib.pods]perlthrtut.pod [.lib.pods]perltie.pod [.lib.pods]perltoc.pod [.lib.pods]perltodo.pod [.lib.pods]perltooc.pod [.lib.pods]perltoot.pod
+pod23 = [.lib.pods]perltrap.pod [.lib.pods]perltru64.pod [.lib.pods]perltw.pod [.lib.pods]perlunicode.pod [.lib.pods]perluniintro.pod [.lib.pods]perlutil.pod
+pod24 = [.lib.pods]perluts.pod [.lib.pods]perlvar.pod [.lib.pods]perlvmesa.pod [.lib.pods]perlvms.pod [.lib.pods]perlvos.pod [.lib.pods]perlwin32.pod
+pod25 = [.lib.pods]perlxs.pod [.lib.pods]perlxstut.pod
+pod = $(pod0) $(pod1) $(pod2) $(pod3) $(pod4) $(pod5) $(pod6) $(pod7) $(pod8) $(pod9) $(pod10) $(pod11) $(pod12) $(pod13) $(pod14) $(pod15) $(pod16) $(pod17) $(pod18) $(pod19) $(pod20) $(pod21) $(pod22) $(pod23) $(pod24) $(pod25)
# Would be useful to automate the generation of this rule from pod/buildtoc
# Plus its corresponding delete in the clean target.
@@ -471,6 +479,10 @@ $(ARCHDIR)Config.pm : [.lib]Config.pm
Create/Directory $(ARCHDIR)
Copy/NoConfirm/Log $(MMS$SOURCE) $(ARCHDIR)
+$(ARCHDIR)Config_heavy.pl : [.lib]Config_heavy.pl
+ Create/Directory $(ARCHDIR)
+ Copy/NoConfirm/Log $(MMS$SOURCE) $(ARCHDIR)
+
[.lib]Config.pm : config.h $(MINIPERL_EXE)
$(MINIPERL) ConfigPM.
@@ -482,7 +494,7 @@ unidatafiles.ts : $(MINIPERL_EXE) [.lib]Config.pm [.lib.unicore]mktables
@ If F$Search("$(MMS$TARGET)").nes."" Then Delete/NoLog/NoConfirm $(MMS$TARGET);*
@ Copy/NoConfirm _NLA0: $(MMS$TARGET)
-[.ext.dynaloader]dl_vms.c : [.ext.dynaloader]dl_vms.xs $(ARCHDIR)Config.pm [.lib.ExtUtils]XSSymSet.pm $(MINIPERL_EXE)
+[.ext.dynaloader]dl_vms.c : [.ext.dynaloader]dl_vms.xs $(ARCHDIR)Config.pm [.lib.ExtUtils]XSSymSet.pm $(MINIPERL_EXE) [.lib.VMS]Filespec.pm
$(XSUBPP) $(MMS$SOURCE) >$(MMS$TARGET)
[.ext.dynaloader]dl_vms$(O) : [.ext.dynaloader]dl_vms.c
@@ -520,70 +532,70 @@ dynext : $(LIBPREREQ) $(DBG)perlshr$(E) preplibrary
@ If F$Search("[.lib]ExtUtils.Dir").eqs."" Then Create/Directory [.lib.ExtUtils]
Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.ExtUtils]
-[.lib.pod]perldoc.com : [.utils]perldoc.PL $(ARCHDIR)Config.pm
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- $(MINIPERL) $(MMS$SOURCE)
- Copy/NoConfirm/Log [.utils]perldoc.com [.lib.pod]
+[.lib.pods]perldoc.com : [.utils]perldoc.PL $(ARCHDIR)Config.pm
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ $(MINIPERL) -"I[-.lib]" $(MMS$SOURCE)
+ Copy/NoConfirm/Log [.utils]perldoc.com [.lib.pods]
[.lib.ExtUtils]Miniperl.pm : Minimod.PL miniperlmain.c $(ARCHDIR)Config.pm
- $(MINIPERL) $(MMS$SOURCE) >$(MMS$TARGET)
+ $(MINIPERL) -"I[-.lib]" $(MMS$SOURCE) >$(MMS$TARGET)
[.utils]perlivp.com : [.utils]perlivp.PL $(ARCHDIR)Config.pm
- $(MINIPERL) $(MMS$SOURCE)
+ $(MINIPERL) -"I[-.lib]" $(MMS$SOURCE)
[.utils]cpan.com : [.utils]cpan.PL $(ARCHDIR)Config.pm
- $(MINIPERL) $(MMS$SOURCE)
+ $(MINIPERL) -"I[-.lib]" $(MMS$SOURCE)
[.utils]prove.com : [.utils]prove.PL $(ARCHDIR)Config.pm
- $(MINIPERL) $(MMS$SOURCE)
+ $(MINIPERL) -"I[-.lib]" $(MMS$SOURCE)
[.utils]c2ph.com : [.utils]c2ph.PL $(ARCHDIR)Config.pm
- $(MINIPERL) $(MMS$SOURCE)
+ $(MINIPERL) -"I[-.lib]" $(MMS$SOURCE)
[.utils]dprofpp.com : [.utils]dprofpp.PL $(ARCHDIR)Config.pm
- $(MINIPERL) $(MMS$SOURCE)
+ $(MINIPERL) -"I[-.lib]" $(MMS$SOURCE)
[.utils]enc2xs.com : [.utils]enc2xs.PL $(ARCHDIR)Config.pm
- $(MINIPERL) $(MMS$SOURCE)
+ $(MINIPERL) -"I[-.lib]" $(MMS$SOURCE)
[.utils]h2ph.com : [.utils]h2ph.PL $(ARCHDIR)Config.pm
- $(MINIPERL) $(MMS$SOURCE)
+ $(MINIPERL) -"I[-.lib]" $(MMS$SOURCE)
[.utils]h2xs.com : [.utils]h2xs.PL $(ARCHDIR)Config.pm
- $(MINIPERL) $(MMS$SOURCE)
+ $(MINIPERL) -"I[-.lib]" $(MMS$SOURCE)
[.utils]instmodsh.com : [.utils]instmodsh.PL $(ARCHDIR)Config.pm
- $(MINIPERL) $(MMS$SOURCE)
+ $(MINIPERL) -"I[-.lib]" $(MMS$SOURCE)
[.utils]libnetcfg.com : [.utils]libnetcfg.PL $(ARCHDIR)Config.pm
- $(MINIPERL) $(MMS$SOURCE)
+ $(MINIPERL) -"I[-.lib]" $(MMS$SOURCE)
[.lib]perlbug.com : [.utils]perlbug.PL $(ARCHDIR)Config.pm
- $(MINIPERL) $(MMS$SOURCE)
+ $(MINIPERL) -"I[-.lib]" $(MMS$SOURCE)
Copy/NoConfirm/Log [.utils]perlbug.com [.lib]
[.lib]perlcc.com : [.utils]perlcc.PL $(ARCHDIR)Config.pm
- $(MINIPERL) $(MMS$SOURCE)
+ $(MINIPERL) -"I[-.lib]" $(MMS$SOURCE)
Copy/NoConfirm/Log [.utils]perlcc.com [.lib]
[.utils]piconv.com : [.utils]piconv.PL $(ARCHDIR)Config.pm
- $(MINIPERL) $(MMS$SOURCE)
+ $(MINIPERL) -"I[-.lib]" $(MMS$SOURCE)
[.utils]pl2pm.com : [.utils]pl2pm.PL $(ARCHDIR)Config.pm
- $(MINIPERL) $(MMS$SOURCE)
+ $(MINIPERL) -"I[-.lib]" $(MMS$SOURCE)
[.lib]splain.com : [.utils]splain.PL $(ARCHDIR)Config.pm
- $(MINIPERL) $(MMS$SOURCE)
+ $(MINIPERL) -"I[-.lib]" $(MMS$SOURCE)
Copy/NoConfirm/Log [.utils]splain.com [.lib]
[.x2p]find2perl.com : [.x2p]find2perl.PL $(ARCHDIR)Config.pm
- $(MINIPERL) $(MMS$SOURCE)
+ $(MINIPERL) -"I[-.lib]" $(MMS$SOURCE)
[.x2p]s2p.com : [.x2p]s2p.PL $(ARCHDIR)Config.pm
- $(MINIPERL) $(MMS$SOURCE)
+ $(MINIPERL) -"I[-.lib]" $(MMS$SOURCE)
[.utils]xsubpp.com : [.utils]xsubpp.PL $(ARCHDIR)Config.pm
- $(MINIPERL) $(MMS$SOURCE)
+ $(MINIPERL) -"I[-.lib]" $(MMS$SOURCE)
# Rename catches problem with some DECC versions in which object file is
# placed in current default dir, not same one as source file.
@@ -614,589 +626,609 @@ dynext : $(LIBPREREQ) $(DBG)perlshr$(E) preplibrary
$(CC) $(X2PCFLAGS) /Include=[.x2p] $(MMS$SOURCE)
.endif
-[.lib.pod]pod2html.com : [.pod]pod2html.PL $(ARCHDIR)Config.pm
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- $(MINIPERL) $(MMS$SOURCE)
- Copy/NoConfirm/Log [.pod]pod2html.com [.lib.pod]
-
-[.lib.pod]pod2latex.com : [.pod]pod2latex.PL $(ARCHDIR)Config.pm
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- $(MINIPERL) $(MMS$SOURCE)
- Copy/NoConfirm/Log [.pod]pod2latex.com [.lib.pod]
+[.lib.pods]pod2html.com : [.pod]pod2html.PL $(ARCHDIR)Config.pm
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ $(MINIPERL) -"I[-.lib]" $(MMS$SOURCE)
+ Copy/NoConfirm/Log [.pod]pod2html.com [.lib.pods]
+
+[.lib.pods]pod2latex.com : [.pod]pod2latex.PL $(ARCHDIR)Config.pm
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ $(MINIPERL) -"I[-.lib]" $(MMS$SOURCE)
+ Copy/NoConfirm/Log [.pod]pod2latex.com [.lib.pods]
+
+[.lib.pods]pod2man.com : [.pod]pod2man.PL $(ARCHDIR)Config.pm
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ $(MINIPERL) -"I[-.lib]" $(MMS$SOURCE)
+ Copy/NoConfirm/Log [.pod]pod2man.com [.lib.pods]
+
+[.lib.pods]pod2text.com : [.pod]pod2text.PL $(ARCHDIR)Config.pm
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ $(MINIPERL) -"I[-.lib]" $(MMS$SOURCE)
+ Copy/NoConfirm/Log [.pod]pod2text.com [.lib.pods]
+
+[.lib.pods]podchecker.com : [.pod]podchecker.PL $(ARCHDIR)Config.pm
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ $(MINIPERL) -"I[-.lib]" $(MMS$SOURCE)
+ Copy/NoConfirm/Log [.pod]podchecker.com [.lib.pods]
+
+[.lib.pods]pod2usage.com : [.pod]pod2usage.PL $(ARCHDIR)Config.pm
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ $(MINIPERL) -"I[-.lib]" $(MMS$SOURCE)
+ Copy/NoConfirm/Log [.pod]pod2usage.com [.lib.pods]
+
+[.lib.pods]podselect.com : [.pod]podselect.PL $(ARCHDIR)Config.pm
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ $(MINIPERL) -"I[-.lib]" $(MMS$SOURCE)
+ Copy/NoConfirm/Log [.pod]podselect.com [.lib.pods]
-[.lib.pod]pod2man.com : [.pod]pod2man.PL $(ARCHDIR)Config.pm
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- $(MINIPERL) $(MMS$SOURCE)
- Copy/NoConfirm/Log [.pod]pod2man.com [.lib.pod]
+preplibrary : $(MINIPERL_EXE) $(LIBPREREQ)
+ @ Write Sys$Output "Autosplitting Perl library . . ."
+ @ Create/Directory [.lib.auto]
+ @ $(MINIPERL) -e "use AutoSplit; autosplit_lib_modules(@ARGV)" [.lib]*.pm [.lib.*]*.pm
-[.lib.pod]pod2text.com : [.pod]pod2text.PL $(ARCHDIR)Config.pm
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- $(MINIPERL) $(MMS$SOURCE)
- Copy/NoConfirm/Log [.pod]pod2text.com [.lib.pod]
+[.lib.pods]perl.pod : [.pod]perl.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]podchecker.com : [.pod]podchecker.PL $(ARCHDIR)Config.pm
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- $(MINIPERL) $(MMS$SOURCE)
- Copy/NoConfirm/Log [.pod]podchecker.com [.lib.pod]
+[.lib.pods]perl5004delta.pod : [.pod]perl5004delta.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]pod2usage.com : [.pod]pod2usage.PL $(ARCHDIR)Config.pm
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- $(MINIPERL) $(MMS$SOURCE)
- Copy/NoConfirm/Log [.pod]pod2usage.com [.lib.pod]
+[.lib.pods]perl5005delta.pod : [.pod]perl5005delta.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]podselect.com : [.pod]podselect.PL $(ARCHDIR)Config.pm
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- $(MINIPERL) $(MMS$SOURCE)
- Copy/NoConfirm/Log [.pod]podselect.com [.lib.pod]
+[.lib.pods]perl561delta.pod : [.pod]perl561delta.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-preplibrary : $(MINIPERL_EXE) $(LIBPREREQ)
- @ Write Sys$Output "Autosplitting Perl library . . ."
- @ Create/Directory [.lib.auto]
- @ $(MINIPERL) -e "use AutoSplit; autosplit_lib_modules(@ARGV)" [.lib]*.pm [.lib.*]*.pm
+[.lib.pods]perl56delta.pod : [.pod]perl56delta.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perl.pod : [.pod]perl.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perl570delta.pod : [.pod]perl570delta.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perl5004delta.pod : [.pod]perl5004delta.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perl571delta.pod : [.pod]perl571delta.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perl5005delta.pod : [.pod]perl5005delta.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perl572delta.pod : [.pod]perl572delta.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perl561delta.pod : [.pod]perl561delta.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perl573delta.pod : [.pod]perl573delta.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perl56delta.pod : [.pod]perl56delta.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perl581delta.pod : [.pod]perl581delta.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perl570delta.pod : [.pod]perl570delta.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perl582delta.pod : [.pod]perl582delta.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perl571delta.pod : [.pod]perl571delta.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perl583delta.pod : [.pod]perl583delta.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perl572delta.pod : [.pod]perl572delta.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perl584delta.pod : [.pod]perl584delta.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perl573delta.pod : [.pod]perl573delta.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perl585delta.pod : [.pod]perl585delta.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perl581delta.pod : [.pod]perl581delta.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perl586delta.pod : [.pod]perl586delta.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perl582delta.pod : [.pod]perl582delta.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perl587delta.pod : [.pod]perl587delta.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perl583delta.pod : [.pod]perl583delta.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perl588delta.pod : [.pod]perl588delta.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perl584delta.pod : [.pod]perl584delta.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perl58delta.pod : [.pod]perl58delta.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perl585delta.pod : [.pod]perl585delta.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlaix.pod : [.pod]perlaix.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perl586delta.pod : [.pod]perl586delta.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlamiga.pod : [.pod]perlamiga.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perl58delta.pod : [.pod]perl58delta.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlapi.pod : [.pod]perlapi.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlaix.pod : [.pod]perlaix.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlapio.pod : [.pod]perlapio.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlamiga.pod : [.pod]perlamiga.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlapollo.pod : [.pod]perlapollo.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlapi.pod : [.pod]perlapi.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlartistic.pod : [.pod]perlartistic.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlapio.pod : [.pod]perlapio.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlbeos.pod : [.pod]perlbeos.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlapollo.pod : [.pod]perlapollo.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlbook.pod : [.pod]perlbook.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlartistic.pod : [.pod]perlartistic.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlboot.pod : [.pod]perlboot.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlbeos.pod : [.pod]perlbeos.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlbot.pod : [.pod]perlbot.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlbook.pod : [.pod]perlbook.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlbs2000.pod : [.pod]perlbs2000.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlboot.pod : [.pod]perlboot.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlcall.pod : [.pod]perlcall.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlbot.pod : [.pod]perlbot.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlce.pod : [.pod]perlce.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlbs2000.pod : [.pod]perlbs2000.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlcheat.pod : [.pod]perlcheat.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlcall.pod : [.pod]perlcall.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlclib.pod : [.pod]perlclib.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlce.pod : [.pod]perlce.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlcn.pod : [.pod]perlcn.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlcheat.pod : [.pod]perlcheat.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlcompile.pod : [.pod]perlcompile.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlclib.pod : [.pod]perlclib.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlcygwin.pod : [.pod]perlcygwin.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlcn.pod : [.pod]perlcn.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perldata.pod : [.pod]perldata.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlcompile.pod : [.pod]perlcompile.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perldbmfilter.pod : [.pod]perldbmfilter.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlcygwin.pod : [.pod]perlcygwin.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perldebguts.pod : [.pod]perldebguts.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perldata.pod : [.pod]perldata.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perldebtut.pod : [.pod]perldebtut.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perldbmfilter.pod : [.pod]perldbmfilter.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perldebug.pod : [.pod]perldebug.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perldebguts.pod : [.pod]perldebguts.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perldelta.pod : [.pod]perldelta.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perldebtut.pod : [.pod]perldebtut.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perldgux.pod : [.pod]perldgux.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perldebug.pod : [.pod]perldebug.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perldiag.pod : [.pod]perldiag.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perldelta.pod : [.pod]perldelta.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perldoc.pod : [.pod]perldoc.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perldgux.pod : [.pod]perldgux.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perldos.pod : [.pod]perldos.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perldiag.pod : [.pod]perldiag.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perldsc.pod : [.pod]perldsc.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perldoc.pod : [.pod]perldoc.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlebcdic.pod : [.pod]perlebcdic.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perldos.pod : [.pod]perldos.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlembed.pod : [.pod]perlembed.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perldsc.pod : [.pod]perldsc.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlepoc.pod : [.pod]perlepoc.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlebcdic.pod : [.pod]perlebcdic.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlfaq.pod : [.pod]perlfaq.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlembed.pod : [.pod]perlembed.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlfaq1.pod : [.pod]perlfaq1.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlepoc.pod : [.pod]perlepoc.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlfaq2.pod : [.pod]perlfaq2.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlfaq.pod : [.pod]perlfaq.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlfaq3.pod : [.pod]perlfaq3.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlfaq1.pod : [.pod]perlfaq1.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlfaq4.pod : [.pod]perlfaq4.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlfaq2.pod : [.pod]perlfaq2.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlfaq5.pod : [.pod]perlfaq5.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlfaq3.pod : [.pod]perlfaq3.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlfaq6.pod : [.pod]perlfaq6.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlfaq4.pod : [.pod]perlfaq4.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlfaq7.pod : [.pod]perlfaq7.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlfaq5.pod : [.pod]perlfaq5.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlfaq8.pod : [.pod]perlfaq8.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlfaq6.pod : [.pod]perlfaq6.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlfaq9.pod : [.pod]perlfaq9.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlfaq7.pod : [.pod]perlfaq7.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlfilter.pod : [.pod]perlfilter.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlfaq8.pod : [.pod]perlfaq8.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlfork.pod : [.pod]perlfork.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlfaq9.pod : [.pod]perlfaq9.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlform.pod : [.pod]perlform.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlfilter.pod : [.pod]perlfilter.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlfreebsd.pod : [.pod]perlfreebsd.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlfork.pod : [.pod]perlfork.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlfunc.pod : [.pod]perlfunc.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlform.pod : [.pod]perlform.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlglossary.pod : [.pod]perlglossary.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlfreebsd.pod : [.pod]perlfreebsd.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlgpl.pod : [.pod]perlgpl.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlfunc.pod : [.pod]perlfunc.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlguts.pod : [.pod]perlguts.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlgpl.pod : [.pod]perlgpl.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlhack.pod : [.pod]perlhack.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlguts.pod : [.pod]perlguts.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlhist.pod : [.pod]perlhist.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlhack.pod : [.pod]perlhack.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlhpux.pod : [.pod]perlhpux.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlhist.pod : [.pod]perlhist.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlhurd.pod : [.pod]perlhurd.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlhpux.pod : [.pod]perlhpux.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlintern.pod : [.pod]perlintern.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlhurd.pod : [.pod]perlhurd.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlintro.pod : [.pod]perlintro.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlintern.pod : [.pod]perlintern.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perliol.pod : [.pod]perliol.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlintro.pod : [.pod]perlintro.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlipc.pod : [.pod]perlipc.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perliol.pod : [.pod]perliol.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlirix.pod : [.pod]perlirix.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlipc.pod : [.pod]perlipc.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perljp.pod : [.pod]perljp.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlirix.pod : [.pod]perlirix.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlko.pod : [.pod]perlko.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perljp.pod : [.pod]perljp.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perllexwarn.pod : [.pod]perllexwarn.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlko.pod : [.pod]perlko.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perllinux.pod : [.pod]perllinux.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perllexwarn.pod : [.pod]perllexwarn.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perllocale.pod : [.pod]perllocale.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perllocale.pod : [.pod]perllocale.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perllol.pod : [.pod]perllol.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perllol.pod : [.pod]perllol.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlmachten.pod : [.pod]perlmachten.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlmachten.pod : [.pod]perlmachten.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlmacos.pod : [.pod]perlmacos.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlmacos.pod : [.pod]perlmacos.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlmacosx.pod : [.pod]perlmacosx.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlmacosx.pod : [.pod]perlmacosx.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlmint.pod : [.pod]perlmint.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlmint.pod : [.pod]perlmint.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlmod.pod : [.pod]perlmod.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlmod.pod : [.pod]perlmod.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlmodinstall.pod : [.pod]perlmodinstall.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlmodinstall.pod : [.pod]perlmodinstall.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlmodlib.pod : [.pod]perlmodlib.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlmodlib.pod : [.pod]perlmodlib.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlmodstyle.pod : [.pod]perlmodstyle.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlmodstyle.pod : [.pod]perlmodstyle.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlmpeix.pod : [.pod]perlmpeix.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlmpeix.pod : [.pod]perlmpeix.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlnetware.pod : [.pod]perlnetware.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlnetware.pod : [.pod]perlnetware.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlnewmod.pod : [.pod]perlnewmod.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlnewmod.pod : [.pod]perlnewmod.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlnumber.pod : [.pod]perlnumber.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlnumber.pod : [.pod]perlnumber.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlobj.pod : [.pod]perlobj.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlobj.pod : [.pod]perlobj.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlop.pod : [.pod]perlop.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlop.pod : [.pod]perlop.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlopenbsd.pod : [.pod]perlopenbsd.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlopentut.pod : [.pod]perlopentut.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlopentut.pod : [.pod]perlopentut.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlos2.pod : [.pod]perlos2.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlos2.pod : [.pod]perlos2.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlos390.pod : [.pod]perlos390.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlos390.pod : [.pod]perlos390.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlos400.pod : [.pod]perlos400.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlos400.pod : [.pod]perlos400.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlothrtut.pod : [.pod]perlothrtut.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlothrtut.pod : [.pod]perlothrtut.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlpacktut.pod : [.pod]perlpacktut.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlpacktut.pod : [.pod]perlpacktut.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlplan9.pod : [.pod]perlplan9.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlplan9.pod : [.pod]perlplan9.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlpod.pod : [.pod]perlpod.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlpod.pod : [.pod]perlpod.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlpodspec.pod : [.pod]perlpodspec.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlpodspec.pod : [.pod]perlpodspec.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlport.pod : [.pod]perlport.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlport.pod : [.pod]perlport.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlqnx.pod : [.pod]perlqnx.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlqnx.pod : [.pod]perlqnx.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlre.pod : [.pod]perlre.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlre.pod : [.pod]perlre.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlref.pod : [.pod]perlref.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlref.pod : [.pod]perlref.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlreftut.pod : [.pod]perlreftut.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlreftut.pod : [.pod]perlreftut.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlrequick.pod : [.pod]perlrequick.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlrequick.pod : [.pod]perlrequick.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlreref.pod : [.pod]perlreref.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlreref.pod : [.pod]perlreref.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlretut.pod : [.pod]perlretut.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlretut.pod : [.pod]perlretut.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlrun.pod : [.pod]perlrun.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlrun.pod : [.pod]perlrun.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlsec.pod : [.pod]perlsec.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlsec.pod : [.pod]perlsec.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlsolaris.pod : [.pod]perlsolaris.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlsolaris.pod : [.pod]perlsolaris.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlstyle.pod : [.pod]perlstyle.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlstyle.pod : [.pod]perlstyle.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlsub.pod : [.pod]perlsub.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlsub.pod : [.pod]perlsub.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlsyn.pod : [.pod]perlsyn.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlsyn.pod : [.pod]perlsyn.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlthrtut.pod : [.pod]perlthrtut.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlthrtut.pod : [.pod]perlthrtut.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perltie.pod : [.pod]perltie.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perltie.pod : [.pod]perltie.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perltoc.pod : [.pod]perltoc.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perltoc.pod : [.pod]perltoc.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perltodo.pod : [.pod]perltodo.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perltodo.pod : [.pod]perltodo.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perltooc.pod : [.pod]perltooc.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perltooc.pod : [.pod]perltooc.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perltoot.pod : [.pod]perltoot.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perltoot.pod : [.pod]perltoot.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perltrap.pod : [.pod]perltrap.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perltrap.pod : [.pod]perltrap.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perltru64.pod : [.pod]perltru64.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perltru64.pod : [.pod]perltru64.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perltw.pod : [.pod]perltw.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perltw.pod : [.pod]perltw.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlunicode.pod : [.pod]perlunicode.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlunicode.pod : [.pod]perlunicode.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perluniintro.pod : [.pod]perluniintro.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perluniintro.pod : [.pod]perluniintro.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlutil.pod : [.pod]perlutil.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlutil.pod : [.pod]perlutil.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perluts.pod : [.pod]perluts.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perluts.pod : [.pod]perluts.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlvar.pod : [.pod]perlvar.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlvar.pod : [.pod]perlvar.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlvmesa.pod : [.pod]perlvmesa.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlvmesa.pod : [.pod]perlvmesa.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlvms.pod : [.vms]perlvms.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlvms.pod : [.vms]perlvms.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlvos.pod : [.pod]perlvos.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlvos.pod : [.pod]perlvos.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlwin32.pod : [.pod]perlwin32.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlwin32.pod : [.pod]perlwin32.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlxs.pod : [.pod]perlxs.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlxs.pod : [.pod]perlxs.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
-[.lib.pod]perlxstut.pod : [.pod]perlxstut.pod
- @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
- Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pod]
+[.lib.pods]perlxstut.pod : [.pod]perlxstut.pod
+ @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods]
+ Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods]
install.html : $(perlpods)
@ @perl_setup.com
@@ -1280,6 +1312,10 @@ test_harness : all [.t.lib]vmsfspec.t [.t.lib]vms_dclsym.t [.t.lib]vms_stdio.t
- @[.VMS]Test.Com "$(E)" "$(__DEBUG__)"
@ $(MINIPERL) -e "print ""Ran tests"";" > [.t]rantests.
+minitest : $(MINITEST_EXE) [.lib]re.pm [.lib]lib.pm [.lib.VMS]Filespec.pm unidatafiles.ts
+ @ PERL_TEST_DRIVER == "minitest"
+ - @[.VMS]Test.Com "$(E)" "$(__DEBUG__)"
+
# install ought not need a source, but it doesn't work if one's not
# there. Go figure...
install : $(MINIPERL_EXE)
@@ -1293,6 +1329,7 @@ archify : all
Backup/Log/Verify [.lib.auto...]*.*;/Exclude=(*.al,*.ix) 'archroot'/New_Version
Delete/Log/NoConfirm [.lib.auto...]*.*;*/exclude=(*.al,*.ix,*.dir)
Delete/Log/NoConfirm [.lib]Config.pm;*
+ Delete/Log/NoConfirm [.lib]Config_heavy.pl;*
Copy/Log/NoConfirm *$(E);,[.x2p]$(DBG)a2p$(E); $(ARCHDIR)
Delete/Log/NoConfirm Perl*$(E);*,[.x2p]$(DBG)a2p$(E);*
@ QUALIFIERS := $(MMSQUALIFIERS)
@@ -1539,7 +1576,7 @@ run$(O) : run.c $(h)
$(CC) $(CORECFLAGS) $(MMS$SOURCE)
scope$(O) : scope.c $(h)
$(CC) $(CORECFLAGS) $(MMS$SOURCE)
-sv$(O) : sv.c
+sv$(O) : sv.c $(h)
$(CC) $(CORECFLAGS) $(MMS$SOURCE)
taint$(O) : taint.c $(h)
$(CC) $(CORECFLAGS) $(MMS$SOURCE)
@@ -1629,16 +1666,18 @@ tidy : cleanlis
- If F$Search("[.Lib]XSLoader.pm;-1").nes."" Then Purge/NoConfirm/Log [.Lib]XSLoader.pm
- If F$Search("[.Lib]Config.pm;-1").nes."" Then Purge/NoConfirm/Log [.Lib]Config.pm
- If F$Search("$(ARCHDIR)Config.pm;-1").nes."" Then Purge/NoConfirm/Log $(ARCHDIR)Config.pm
+ - If F$Search("[.Lib]Config_heavy.pl;-1").nes."" Then Purge/NoConfirm/Log [.Lib]Config_heavy.pl
+ - If F$Search("$(ARCHDIR)Config_heavy.pl;-1").nes."" Then Purge/NoConfirm/Log $(ARCHDIR)Config_heavy.pl
- If F$Search("[.lib.ExtUtils]Miniperl.pm").nes."" Then Purge/NoConfirm/Log [.lib.ExtUtils]Miniperl.pm
- If F$Search("[.lib.ExtUtils]XSSymSet.pm").nes."" Then Purge/NoConfirm/Log [.lib.ExtUtils]XSSymSet.pm
- If F$Search("[.Lib.VMS]*.*;-1").nes."" Then Purge/NoConfirm/Log [.Lib.VMS]*.*
- - If F$Search("[.Lib.Pod]*.Pod;-1").nes."" Then Purge/NoConfirm/Log [.Lib.Pod]*.Pod
+ - If F$Search("[.lib.pods]*.Pod;-1").nes."" Then Purge/NoConfirm/Log [.lib.pods]*.Pod
- If F$Search("$(ARCHCORE)*.*").nes."" Then Purge/NoConfirm/Log $(ARCHCORE)*.*
- If F$Search("[.lib]*.com;-1").nes."" Then Purge/NoConfirm/Log [.lib]*.com
- If F$Search("[.pod]*.com;-1").nes."" Then Purge/NoConfirm/Log [.pod]*.com
- If F$Search("[.utils]*.com;-1").nes."" Then Purge/NoConfirm/Log [.utils]*.com
- If F$Search("[.x2p]*.com;-1").nes."" Then Purge/NoConfirm/Log [.x2p]*.com
- - If F$Search("[.lib.pod]*.com;-1").nes."" Then Purge/NoConfirm/Log [.lib.pod]*.com
+ - If F$Search("[.lib.pods]*.com;-1").nes."" Then Purge/NoConfirm/Log [.lib.pods]*.com
clean : tidy cleantest
- @make_ext "$(MINIPERL_EXE)" "$(MMS)" clean
@@ -1674,22 +1713,25 @@ realclean : clean
- If F$Search("Descrip.MMS").nes."" Then Delete/NoConfirm/Log Descrip.MMS;*
- If F$Search("make_ext.Com").nes."" Then Delete/NoConfirm/Log make_ext.Com;*
- If F$Search("extra_pods.Com").nes."" Then Delete/NoConfirm/Log extra_pods.Com;*
+ - If F$Search("extra.pods").nes."" Then Delete/NoConfirm/Log extra.pods;*
- $(MINIPERL) -e "use File::Path; rmtree(['lib/auto','lib/VMS','lib/$(ARCH)'],1,0);"
- If F$Search("*.TS").nes."" Then Delete/NoConfirm/Log *.TS;*
- If F$Search("[.Lib]DynaLoader.pm").nes."" Then Delete/NoConfirm/Log [.Lib]DynaLoader.pm;*
- If F$Search("[.Lib]XSLoader.pm").nes."" Then Delete/NoConfirm/Log [.Lib]XSLoader.pm;*
- If F$Search("[.Lib]Config.pm").nes."" Then Delete/NoConfirm/Log [.Lib]Config.pm;*
+ - If F$Search("[.Lib]Config_heavy.pl").nes."" Then Delete/NoConfirm/Log [.Lib]Config_heavy.pl;*
- If F$Search("[.Lib]*.com").nes."" Then Delete/NoConfirm/Log [.Lib]*.com;*
- If F$Search("[.pod]*.com").nes."" Then Delete/NoConfirm/Log [.pod]*.com;*
- If F$Search("[.utils]*.com").nes."" Then Delete/NoConfirm/Log [.utils]*.com;*
- If F$Search("[.x2p]*.com").nes."" Then Delete/NoConfirm/Log [.x2p]*.com;*
- If F$Search("$(ARCHDIR)Config.pm").nes."" Then Delete/NoConfirm/Log $(ARCHDIR)Config.pm;*
+ - If F$Search("$(ARCHDIR)Config_heavy.pl").nes."" Then Delete/NoConfirm/Log $(ARCHDIR)Config_heavy.pl;*
- If F$Search("[.lib.ExtUtils]Miniperl.pm").nes."" Then Delete/NoConfirm/Log [.lib.ExtUtils]Miniperl.pm;*
- If F$Search("[.lib.ExtUtils]XSSymSet.pm").nes."" Then Delete/NoConfirm/Log [.lib.ExtUtils]XSSymSet.pm;*
- - If F$Search("[.lib.pod]*.pod").nes."" Then Delete/NoConfirm/Log [.lib.pod]*.pod;*
- - If F$Search("[.lib.pod]perldoc.com").nes."" Then Delete/NoConfirm/Log [.lib.pod]perldoc.com;*
+ - If F$Search("[.lib.pods]*.pod").nes."" Then Delete/NoConfirm/Log [.lib.pods]*.pod;*
+ - If F$Search("[.lib.pods]perldoc.com").nes."" Then Delete/NoConfirm/Log [.lib.pods]perldoc.com;*
- If F$Search("[.utils]perlivp.com").nes."" Then Delete/NoConfirm/Log [.utils]perlivp.com;*
- - If F$Search("[.lib.pod]pod2*.com").nes."" Then Delete/NoConfirm/Log [.lib.pod]pod2*.com;*
+ - If F$Search("[.lib.pods]pod2*.com").nes."" Then Delete/NoConfirm/Log [.lib.pods]pod2*.com;*
- If F$Search("[.t.lib]vms*.t").nes."" Then Delete/NoConfirm/Log [.t.lib]vms*.t;*
- If F$Search("[...]*$(E)").nes."" Then Delete/NoConfirm/Log [...]*$(E);*
- If F$Search("[.vms]Perl_Setup.Com").nes."" Then Delete/NoConfirm/Log [.vms]Perl_Setup.Com;*
diff --git a/gnu/usr.bin/perl/vos/mv-if-diff b/gnu/usr.bin/perl/vos/mv-if-diff
new file mode 100644
index 00000000000..4a85b983922
--- /dev/null
+++ b/gnu/usr.bin/perl/vos/mv-if-diff
@@ -0,0 +1,15 @@
+: mv-if-diff file1 file2
+: move file1 to file2 if file1 and file2 are different.
+
+if test $# -lt 2 ; then
+ echo "usage: $0 file1 file2"
+ echo "move file1 to file2 if file1 and file2 are different."
+ exit 1
+fi
+if cmp $1 $2 >/dev/null 2>&1; then
+ echo "File $2 not changed."
+ rm -f $1
+else
+ rm -f $2
+ mv $1 $2
+fi
diff --git a/gnu/usr.bin/perl/warnings.h b/gnu/usr.bin/perl/warnings.h
index 02c3cc20141..1fbaa422acb 100644
--- a/gnu/usr.bin/perl/warnings.h
+++ b/gnu/usr.bin/perl/warnings.h
@@ -1,4 +1,5 @@
-/* !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+/* -*- buffer-read-only: t -*-
+ !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
This file is built by warnings.pl
Any changes made here will be lost!
*/
@@ -81,69 +82,23 @@
#define isLEXWARN_on (PL_curcop->cop_warnings != pWARN_STD)
#define isLEXWARN_off (PL_curcop->cop_warnings == pWARN_STD)
#define isWARN_ONCE (PL_dowarn & (G_WARN_ON|G_WARN_ONCE))
-#define isWARN_on(c,x) (IsSet(SvPVX(c), 2*(x)))
-#define isWARNf_on(c,x) (IsSet(SvPVX(c), 2*(x)+1))
-
-#define ckWARN(x) \
- ( (isLEXWARN_on && PL_curcop->cop_warnings != pWARN_NONE && \
- (PL_curcop->cop_warnings == pWARN_ALL || \
- isWARN_on(PL_curcop->cop_warnings, x) ) ) \
- || (isLEXWARN_off && PL_dowarn & G_WARN_ON) )
-
-#define ckWARN2(x,y) \
- ( (isLEXWARN_on && PL_curcop->cop_warnings != pWARN_NONE && \
- (PL_curcop->cop_warnings == pWARN_ALL || \
- isWARN_on(PL_curcop->cop_warnings, x) || \
- isWARN_on(PL_curcop->cop_warnings, y) ) ) \
- || (isLEXWARN_off && PL_dowarn & G_WARN_ON) )
-
-#define ckWARN3(x,y,z) \
- ( (isLEXWARN_on && PL_curcop->cop_warnings != pWARN_NONE && \
- (PL_curcop->cop_warnings == pWARN_ALL || \
- isWARN_on(PL_curcop->cop_warnings, x) || \
- isWARN_on(PL_curcop->cop_warnings, y) || \
- isWARN_on(PL_curcop->cop_warnings, z) ) ) \
- || (isLEXWARN_off && PL_dowarn & G_WARN_ON) )
-
-#define ckWARN4(x,y,z,t) \
- ( (isLEXWARN_on && PL_curcop->cop_warnings != pWARN_NONE && \
- (PL_curcop->cop_warnings == pWARN_ALL || \
- isWARN_on(PL_curcop->cop_warnings, x) || \
- isWARN_on(PL_curcop->cop_warnings, y) || \
- isWARN_on(PL_curcop->cop_warnings, z) || \
- isWARN_on(PL_curcop->cop_warnings, t) ) ) \
- || (isLEXWARN_off && PL_dowarn & G_WARN_ON) )
-
-#define ckWARN_d(x) \
- (isLEXWARN_off || PL_curcop->cop_warnings == pWARN_ALL || \
- (PL_curcop->cop_warnings != pWARN_NONE && \
- isWARN_on(PL_curcop->cop_warnings, x) ) )
-
-#define ckWARN2_d(x,y) \
- (isLEXWARN_off || PL_curcop->cop_warnings == pWARN_ALL || \
- (PL_curcop->cop_warnings != pWARN_NONE && \
- (isWARN_on(PL_curcop->cop_warnings, x) || \
- isWARN_on(PL_curcop->cop_warnings, y) ) ) )
-
-#define ckWARN3_d(x,y,z) \
- (isLEXWARN_off || PL_curcop->cop_warnings == pWARN_ALL || \
- (PL_curcop->cop_warnings != pWARN_NONE && \
- (isWARN_on(PL_curcop->cop_warnings, x) || \
- isWARN_on(PL_curcop->cop_warnings, y) || \
- isWARN_on(PL_curcop->cop_warnings, z) ) ) )
-
-#define ckWARN4_d(x,y,z,t) \
- (isLEXWARN_off || PL_curcop->cop_warnings == pWARN_ALL || \
- (PL_curcop->cop_warnings != pWARN_NONE && \
- (isWARN_on(PL_curcop->cop_warnings, x) || \
- isWARN_on(PL_curcop->cop_warnings, y) || \
- isWARN_on(PL_curcop->cop_warnings, z) || \
- isWARN_on(PL_curcop->cop_warnings, t) ) ) )
-
-#define packWARN(a) (a )
-#define packWARN2(a,b) ((a) | (b)<<8 )
-#define packWARN3(a,b,c) ((a) | (b)<<8 | (c) <<16 )
-#define packWARN4(a,b,c,d) ((a) | (b)<<8 | (c) <<16 | (d) <<24)
+#define isWARN_on(c,x) (IsSet(SvPVX_const(c), 2*(x)))
+#define isWARNf_on(c,x) (IsSet(SvPVX_const(c), 2*(x)+1))
+
+#define ckWARN(w) Perl_ckwarn(aTHX_ packWARN(w))
+#define ckWARN2(w1,w2) Perl_ckwarn(aTHX_ packWARN2(w1,w2))
+#define ckWARN3(w1,w2,w3) Perl_ckwarn(aTHX_ packWARN3(w1,w2,w3))
+#define ckWARN4(w1,w2,w3,w4) Perl_ckwarn(aTHX_ packWARN4(w1,w2,w3,w4))
+
+#define ckWARN_d(w) Perl_ckwarn_d(aTHX_ packWARN(w))
+#define ckWARN2_d(w1,w2) Perl_ckwarn_d(aTHX_ packWARN2(w1,w2))
+#define ckWARN3_d(w1,w2,w3) Perl_ckwarn_d(aTHX_ packWARN3(w1,w2,w3))
+#define ckWARN4_d(w1,w2,w3,w4) Perl_ckwarn_d(aTHX_ packWARN4(w1,w2,w3,w4))
+
+#define packWARN(a) (a )
+#define packWARN2(a,b) ((a) | ((b)<<8) )
+#define packWARN3(a,b,c) ((a) | ((b)<<8) | ((c)<<16) )
+#define packWARN4(a,b,c,d) ((a) | ((b)<<8) | ((c)<<16) | ((d) <<24))
#define unpackWARN1(x) ((x) & 0xFF)
#define unpackWARN2(x) (((x) >>8) & 0xFF)
@@ -159,4 +114,4 @@
isWARNf_on(PL_curcop->cop_warnings, unpackWARN4(x))))
/* end of file warnings.h */
-
+/* ex: set ro: */
diff --git a/gnu/usr.bin/perl/warnings.pl b/gnu/usr.bin/perl/warnings.pl
index 3c80ba960cc..6cafcc13ad8 100644
--- a/gnu/usr.bin/perl/warnings.pl
+++ b/gnu/usr.bin/perl/warnings.pl
@@ -1,6 +1,6 @@
#!/usr/bin/perl
-$VERSION = '1.02';
+$VERSION = '1.02_02';
BEGIN {
push @INC, './lib';
@@ -251,10 +251,13 @@ if (@ARGV && $ARGV[0] eq "tree")
unlink "warnings.h";
unlink "lib/warnings.pm";
open(WARN, ">warnings.h") || die "Can't create warnings.h: $!\n";
+binmode WARN;
open(PM, ">lib/warnings.pm") || die "Can't create lib/warnings.pm: $!\n";
+binmode PM;
print WARN <<'EOM' ;
-/* !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+/* -*- buffer-read-only: t -*-
+ !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
This file is built by warnings.pl
Any changes made here will be lost!
*/
@@ -321,69 +324,23 @@ print WARN <<'EOM';
#define isLEXWARN_on (PL_curcop->cop_warnings != pWARN_STD)
#define isLEXWARN_off (PL_curcop->cop_warnings == pWARN_STD)
#define isWARN_ONCE (PL_dowarn & (G_WARN_ON|G_WARN_ONCE))
-#define isWARN_on(c,x) (IsSet(SvPVX(c), 2*(x)))
-#define isWARNf_on(c,x) (IsSet(SvPVX(c), 2*(x)+1))
-
-#define ckWARN(x) \
- ( (isLEXWARN_on && PL_curcop->cop_warnings != pWARN_NONE && \
- (PL_curcop->cop_warnings == pWARN_ALL || \
- isWARN_on(PL_curcop->cop_warnings, x) ) ) \
- || (isLEXWARN_off && PL_dowarn & G_WARN_ON) )
-
-#define ckWARN2(x,y) \
- ( (isLEXWARN_on && PL_curcop->cop_warnings != pWARN_NONE && \
- (PL_curcop->cop_warnings == pWARN_ALL || \
- isWARN_on(PL_curcop->cop_warnings, x) || \
- isWARN_on(PL_curcop->cop_warnings, y) ) ) \
- || (isLEXWARN_off && PL_dowarn & G_WARN_ON) )
-
-#define ckWARN3(x,y,z) \
- ( (isLEXWARN_on && PL_curcop->cop_warnings != pWARN_NONE && \
- (PL_curcop->cop_warnings == pWARN_ALL || \
- isWARN_on(PL_curcop->cop_warnings, x) || \
- isWARN_on(PL_curcop->cop_warnings, y) || \
- isWARN_on(PL_curcop->cop_warnings, z) ) ) \
- || (isLEXWARN_off && PL_dowarn & G_WARN_ON) )
-
-#define ckWARN4(x,y,z,t) \
- ( (isLEXWARN_on && PL_curcop->cop_warnings != pWARN_NONE && \
- (PL_curcop->cop_warnings == pWARN_ALL || \
- isWARN_on(PL_curcop->cop_warnings, x) || \
- isWARN_on(PL_curcop->cop_warnings, y) || \
- isWARN_on(PL_curcop->cop_warnings, z) || \
- isWARN_on(PL_curcop->cop_warnings, t) ) ) \
- || (isLEXWARN_off && PL_dowarn & G_WARN_ON) )
-
-#define ckWARN_d(x) \
- (isLEXWARN_off || PL_curcop->cop_warnings == pWARN_ALL || \
- (PL_curcop->cop_warnings != pWARN_NONE && \
- isWARN_on(PL_curcop->cop_warnings, x) ) )
-
-#define ckWARN2_d(x,y) \
- (isLEXWARN_off || PL_curcop->cop_warnings == pWARN_ALL || \
- (PL_curcop->cop_warnings != pWARN_NONE && \
- (isWARN_on(PL_curcop->cop_warnings, x) || \
- isWARN_on(PL_curcop->cop_warnings, y) ) ) )
-
-#define ckWARN3_d(x,y,z) \
- (isLEXWARN_off || PL_curcop->cop_warnings == pWARN_ALL || \
- (PL_curcop->cop_warnings != pWARN_NONE && \
- (isWARN_on(PL_curcop->cop_warnings, x) || \
- isWARN_on(PL_curcop->cop_warnings, y) || \
- isWARN_on(PL_curcop->cop_warnings, z) ) ) )
-
-#define ckWARN4_d(x,y,z,t) \
- (isLEXWARN_off || PL_curcop->cop_warnings == pWARN_ALL || \
- (PL_curcop->cop_warnings != pWARN_NONE && \
- (isWARN_on(PL_curcop->cop_warnings, x) || \
- isWARN_on(PL_curcop->cop_warnings, y) || \
- isWARN_on(PL_curcop->cop_warnings, z) || \
- isWARN_on(PL_curcop->cop_warnings, t) ) ) )
-
-#define packWARN(a) (a )
-#define packWARN2(a,b) ((a) | (b)<<8 )
-#define packWARN3(a,b,c) ((a) | (b)<<8 | (c) <<16 )
-#define packWARN4(a,b,c,d) ((a) | (b)<<8 | (c) <<16 | (d) <<24)
+#define isWARN_on(c,x) (IsSet(SvPVX_const(c), 2*(x)))
+#define isWARNf_on(c,x) (IsSet(SvPVX_const(c), 2*(x)+1))
+
+#define ckWARN(w) Perl_ckwarn(aTHX_ packWARN(w))
+#define ckWARN2(w1,w2) Perl_ckwarn(aTHX_ packWARN2(w1,w2))
+#define ckWARN3(w1,w2,w3) Perl_ckwarn(aTHX_ packWARN3(w1,w2,w3))
+#define ckWARN4(w1,w2,w3,w4) Perl_ckwarn(aTHX_ packWARN4(w1,w2,w3,w4))
+
+#define ckWARN_d(w) Perl_ckwarn_d(aTHX_ packWARN(w))
+#define ckWARN2_d(w1,w2) Perl_ckwarn_d(aTHX_ packWARN2(w1,w2))
+#define ckWARN3_d(w1,w2,w3) Perl_ckwarn_d(aTHX_ packWARN3(w1,w2,w3))
+#define ckWARN4_d(w1,w2,w3,w4) Perl_ckwarn_d(aTHX_ packWARN4(w1,w2,w3,w4))
+
+#define packWARN(a) (a )
+#define packWARN2(a,b) ((a) | ((b)<<8) )
+#define packWARN3(a,b,c) ((a) | ((b)<<8) | ((c)<<16) )
+#define packWARN4(a,b,c,d) ((a) | ((b)<<8) | ((c)<<16) | ((d) <<24))
#define unpackWARN1(x) ((x) & 0xFF)
#define unpackWARN2(x) (((x) >>8) & 0xFF)
@@ -399,7 +356,7 @@ print WARN <<'EOM';
isWARNf_on(PL_curcop->cop_warnings, unpackWARN4(x))))
/* end of file warnings.h */
-
+/* ex: set ro: */
EOM
close WARN ;
@@ -462,10 +419,11 @@ while (<DATA>) {
print PM $_ ;
}
+print PM "# ex: set ro:\n";
close PM ;
__END__
-
+# -*- buffer-read-only: t -*-
# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
# This file was created by warnings.pl
# Any changes made here will be lost.
@@ -473,7 +431,7 @@ __END__
package warnings;
-our $VERSION = '1.03';
+our $VERSION = '1.05';
=head1 NAME
@@ -606,6 +564,7 @@ $All = "" ; vec($All, $Offsets{'all'}, 2) = 3 ;
sub Croaker
{
+ local $Carp::CarpInternal{'warnings'};
delete $Carp::CarpInternal{'warnings'};
Carp::croak(@_);
}
diff --git a/gnu/usr.bin/perl/win32/FindExt.pm b/gnu/usr.bin/perl/win32/FindExt.pm
index 8f1952fe967..b73d777d032 100644
--- a/gnu/usr.bin/perl/win32/FindExt.pm
+++ b/gnu/usr.bin/perl/win32/FindExt.pm
@@ -1,69 +1,108 @@
package FindExt;
-our $VERSION = '1.00';
-
-# We (probably) have not got a Config.pm yet
-BEGIN { $INC{'Config.pm'} = __FILE__ };
+our $VERSION = '1.01';
use strict;
-use File::Find;
-use File::Basename;
-use Cwd;
+use warnings;
-my $no = join('|',qw(DynaLoader GDBM_File ODBM_File NDBM_File DB_File
+my $no = join('|',qw(GDBM_File ODBM_File NDBM_File DB_File
Syslog SysV Langinfo));
$no = qr/^(?:$no)$/i;
my %ext;
my $ext;
+my %static;
+
+sub getcwd {
+ $ENV{'PWD'} = Win32::GetCwd();
+ $ENV{'PWD'} =~ s:\\:/:g ;
+ return $ENV{'PWD'};
+}
+
+sub set_static_extensions
+{
+ # adjust results of scan_ext, and also save
+ # statics in case scan_ext hasn't been called yet.
+ %static = ();
+ for (@_) {
+ $static{$_} = 1;
+ $ext{$_} = 'static' if $ext{$_} && $ext{$_} eq 'dynamic';
+ }
+}
+
sub scan_ext
{
my $here = getcwd();
my $dir = shift;
chdir($dir) || die "Cannot cd to $dir\n";
($ext = getcwd()) =~ s,/,\\,g;
- find(\&find_ext,'.');
+ find_ext('');
chdir($here) || die "Cannot cd to $here\n";
my @ext = extensions();
}
-sub dynamic_extensions
+sub dynamic_ext
+{
+ return sort grep $ext{$_} eq 'dynamic',keys %ext;
+}
+
+sub static_ext
{
- return grep $ext{$_} eq 'dynamic',keys %ext;
+ return sort grep $ext{$_} eq 'static',keys %ext;
}
-sub noxs_extensions
+sub nonxs_ext
{
- return grep $ext{$_} eq 'nonxs',keys %ext;
+ return sort grep $ext{$_} eq 'nonxs',keys %ext;
}
sub extensions
{
- return keys %ext;
+ return sort grep $ext{$_} ne 'known',keys %ext;
+}
+
+sub known_extensions
+{
+ # faithfully copy Configure in not including nonxs extensions for the nonce
+ return sort grep $ext{$_} ne 'nonxs',keys %ext;
+}
+
+sub is_static
+{
+ return $ext{$_[0]} eq 'static'
}
+# Function to recursively find available extensions, ignoring DynaLoader
+# NOTE: recursion limit of 10 to prevent runaway in case of symlink madness
sub find_ext
{
- if (/^(.*)\.pm$/i || /^(.*)_pm\.PL$/i || /^(.*)\.xs$/i)
- {
- my $name = $1;
- return if $name =~ $no;
- my $dir = $File::Find::dir;
- $dir =~ s,./,,;
- return if exists $ext{$dir};
- return unless -f "$ext/$dir/Makefile.PL";
- if ($dir =~ /$name$/i)
- {
- if (-f "$ext/$dir/$name.xs")
- {
- $ext{$dir} = 'dynamic';
- }
- else
- {
- $ext{$dir} = 'nonxs';
- }
+ opendir my $dh, '.';
+ my @items = grep { !/^\.\.?$/ } readdir $dh;
+ closedir $dh;
+ for my $xxx (@items) {
+ if ($xxx ne "DynaLoader") {
+ if (-f "$xxx/$xxx.xs") {
+ $ext{"$_[0]$xxx"} = $static{"$_[0]$xxx"} ? 'static' : 'dynamic';
+ } elsif (-f "$xxx/Makefile.PL") {
+ $ext{"$_[0]$xxx"} = 'nonxs';
+ } else {
+ if (-d $xxx && @_ < 10) {
+ chdir $xxx;
+ find_ext("$_[0]$xxx/", @_);
+ chdir "..";
+ }
+ }
+ $ext{"$_[0]$xxx"} = 'known' if $ext{"$_[0]$xxx"} && $xxx =~ $no;
+ }
+ }
+
+# Special case: Add in threads/shared since it is not picked up by the
+# recursive find above (and adding in general recursive finding breaks
+# SDBM_File/sdbm). A.D. 10/25/2001.
+
+ if (!$_[0] && -d "threads/shared") {
+ $ext{"threads/shared"} = 'dynamic';
}
- }
}
1;
diff --git a/gnu/usr.bin/perl/win32/config.gc b/gnu/usr.bin/perl/win32/config.gc
index 8a3cd4733e3..c08bea230cc 100644
--- a/gnu/usr.bin/perl/win32/config.gc
+++ b/gnu/usr.bin/perl/win32/config.gc
@@ -1,12 +1,12 @@
## Configured by: ~cf_email~
## Target system: WIN32
Author=''
-PERL_CONFIG_SH='true'
Date='$Date'
Header=''
Id='$Id'
Locker=''
Log='$Log'
+Mcc='Mcc'
RCSfile='$RCSfile'
Revision='$Revision'
Source=''
@@ -41,12 +41,12 @@ byteorder='1234'
c=''
castflags='0'
cat='type'
-cc='~CC~'
+cc='gcc'
cccdlflags=' '
ccdlflags=' '
ccflags='-MD -DWIN32'
ccflags_uselargefiles=''
-ccname='~CC~'
+ccname='~cc~'
ccsymbols=''
ccversion=''
cf_by='nobody'
@@ -62,14 +62,14 @@ compress=''
contains='grep'
cp='copy'
cpio=''
-cpp='gcc -E'
+cpp='~cc~ -E'
cpp_stuff='42'
cppccsymbols=''
cppflags='-DWIN32'
cpplast=''
cppminus='-'
-cpprun='gcc -E'
-cppstdin='gcc -E'
+cpprun='~cc~ -E'
+cppstdin='~cc~ -E'
cppsymbols=''
crypt_r_proto='0'
cryptlib=''
@@ -99,7 +99,13 @@ d_archlib='define'
d_asctime_r='undef'
d_atolf='undef'
d_atoll='undef'
-d_attribut='define'
+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_bcmp='undef'
d_bcopy='undef'
d_bsd='define'
@@ -113,6 +119,7 @@ d_chown='undef'
d_chroot='undef'
d_chsize='define'
d_class='undef'
+d_clearenv='undef'
d_closedir='define'
d_cmsghdr_s='undef'
d_const='define'
@@ -150,7 +157,7 @@ d_endsent='undef'
d_endservent_r='undef'
d_eofnblk='define'
d_eunice='undef'
-d_faststdio='undef'
+d_faststdio='define'
d_fchdir='undef'
d_fchmod='undef'
d_fchown='undef'
@@ -181,6 +188,7 @@ d_fstatvfs='undef'
d_fsync='undef'
d_ftello='undef'
d_ftime='define'
+d_futimes='undef'
d_getcwd='define'
d_getespwnam='undef'
d_getfsstat='undef'
@@ -254,6 +262,7 @@ d_isnanl='undef'
d_killpg='undef'
d_lchown='undef'
d_ldbl_dig='define'
+d_libm_lib_version='undef'
d_link='define'
d_localtime_r='undef'
d_locconv='define'
@@ -263,6 +272,8 @@ d_longlong='undef'
d_lseekproto='define'
d_lstat='undef'
d_madvise='undef'
+d_malloc_good_size='undef'
+d_malloc_size='undef'
d_mblen='define'
d_mbstowcs='define'
d_mbtowc='define'
@@ -280,6 +291,7 @@ 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'
@@ -298,6 +310,7 @@ d_mymalloc='undef'
d_nice='undef'
d_nl_langinfo='undef'
d_nv_preserves_uv='define'
+d_nv_zero_is_allbits_zero='define'
d_off64_t='undef'
d_old_pthread_create_joinable='undef'
d_oldpthreads='undef'
@@ -398,6 +411,7 @@ d_socket='define'
d_socklen_t='undef'
d_sockpair='undef'
d_socks5_init='undef'
+d_sprintf_returns_strlen='define'
d_sqrtl='undef'
d_srand48_r='undef'
d_srandom_r='undef'
@@ -421,6 +435,8 @@ d_strerrm='strerror(e)'
d_strerror='define'
d_strerror_r='undef'
d_strftime='define'
+d_strlcat='undef'
+d_strlcpy='undef'
d_strtod='define'
d_strtol='define'
d_strtold='undef'
@@ -450,18 +466,20 @@ d_tmpnam_r='undef'
d_truncate='undef'
d_ttyname_r='undef'
d_tzname='define'
-d_u32align='undef'
+d_u32align='define'
d_ualarm='undef'
d_umask='define'
d_uname='define'
d_union_semun='define'
d_unordered='undef'
+d_unsetenv='undef'
d_usleep='undef'
d_usleepproto='undef'
d_ustat='undef'
d_vendorarch='undef'
d_vendorbin='undef'
d_vendorlib='undef'
+d_vendorscript='undef'
d_vfork='undef'
d_void_closedir='undef'
d_voidsig='define'
@@ -512,9 +530,11 @@ flex=''
fpossize='8'
fpostype='fpos_t'
freetype='void'
+from=':'
full_ar=''
full_csh=''
full_sed=''
+gccansipedantic=''
gccosandvers=''
gccversion=''
getgrent_r_proto='0'
@@ -544,6 +564,7 @@ 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 '
gmake='gmake'
gmtime_r_proto='0'
+gnulibc_version=''
grep='grep'
groupcat=''
groupstype='gid_t'
@@ -552,6 +573,10 @@ h_fcntl='false'
h_sysfile='true'
hint='recommended'
hostcat='ypcat hosts'
+html1dir=' '
+html1direxp=''
+html3dir=' '
+html3direxp=''
i16size='2'
i16type='short'
i32size='4'
@@ -649,6 +674,8 @@ incpath=''
inews=''
installarchlib='~INST_TOP~~INST_VER~\lib~INST_ARCH~'
installbin='~INST_TOP~~INST_VER~\bin~INST_ARCH~'
+installhtml1dir=''
+installhtml3dir=''
installhtmldir='~INST_TOP~~INST_VER~\html'
installhtmlhelpdir='~INST_TOP~~INST_VER~\htmlhelp'
installman1dir='~INST_TOP~~INST_VER~\man\man1'
@@ -659,12 +686,22 @@ 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~'
+installsitehtml1dir=''
+installsitehtml3dir=''
installsitelib='~INST_TOP~\site~INST_VER~\lib'
+installsiteman1dir=''
+installsiteman3dir=''
+installsitescript=''
installstyle='lib'
installusrbinperl='undef'
installvendorarch=''
installvendorbin=''
+installvendorhtml1dir=''
+installvendorhtml3dir=''
installvendorlib=''
+installvendorman1dir=''
+installvendorman3dir=''
+installvendorscript=''
intsize='4'
issymlink=''
ivdformat='"ld"'
@@ -672,7 +709,7 @@ ivsize='4'
ivtype='long'
known_extensions='~static_ext~ ~dynamic_ext~ ~nonxs_ext~'
ksh=''
-ld='gcc'
+ld='g++'
lddlflags='-mdll ~LINK_FLAGS~'
ldflags='~LINK_FLAGS~'
ldflags_uselargefiles=''
@@ -688,6 +725,7 @@ libsfiles=''
libsfound=''
libspath=''
libswanted='net socket inet nsl nm ndbm gdbm dbm db malloc dl dld ld sun m c cposix posix ndir dir crypt ucb bsd BSD PW x'
+libswanted_uselargefiles='net socket inet nsl nm ndbm gdbm dbm db malloc dl dld ld sun m c cposix posix ndir dir crypt ucb bsd BSD PW x'
line='line'
lint=''
lkflags=''
@@ -718,6 +756,7 @@ man3dir='~INST_TOP~~INST_VER~\man\man3'
man3direxp='~INST_TOP~~INST_VER~\man\man3'
man3ext='3'
mips_type=''
+mistrustnm=''
mkdir='mkdir'
mmaptype='void *'
modetype='mode_t'
@@ -763,6 +802,7 @@ patchlevel='~PATCHLEVEL~'
path_sep=';'
perl5=''
perl='perl'
+perl_patchlevel=''
perladmin=''
perllibs='~libs~'
perlpath='~INST_TOP~~INST_VER~\bin~INST_ARCH~\perl.exe'
@@ -792,6 +832,7 @@ readdir_r_proto='0'
revision='5'
rm='del'
rmail=''
+run=''
runnm='true'
sPRIEUldbl='"E"'
sPRIFUldbl='"F"'
@@ -839,11 +880,21 @@ 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~'
+sitehtml1dir=''
+sitehtml1direxp=''
+sitehtml3dir=''
+sitehtml3direxp=''
sitelib='~INST_TOP~\site~INST_VER~\lib'
sitelib_stem=''
sitelibexp='~INST_TOP~\site~INST_VER~\lib'
+siteman1dir=''
+siteman1direxp=''
+siteman3dir=''
+siteman3direxp=''
siteprefix='~INST_TOP~\site~INST_VER~'
siteprefixexp='~INST_TOP~\site~INST_VER~'
+sitescript=''
+sitescriptexp=''
sizesize='4'
sizetype='size_t'
sleep=''
@@ -883,6 +934,7 @@ test=''
timeincl='/usr/include/sys/time.h '
timetype='time_t'
tmpnam_r_proto='0'
+to=':'
touch='touch'
tr=''
trnl='\012'
@@ -910,18 +962,21 @@ usecrosscompile='undef'
usedl='define'
usefaststdio='define'
useithreads='undef'
-uselargefiles='define'
+uselargefiles='undef'
uselongdouble='undef'
+usemallocwrap='define'
usemorebits='undef'
usemultiplicity='undef'
usemymalloc='n'
usenm='false'
useopcode='true'
-useperlio='~USE_PERLIO~'
+useperlio='undef'
useposix='true'
usereentrant='undef'
+userelocatableinc='undef'
usesfio='false'
useshrplib='yes'
+usesitecustomize='undef'
usesocks='undef'
usethreads='undef'
usevendorprefix='undef'
@@ -938,16 +993,29 @@ vendorarch=''
vendorarchexp=''
vendorbin=''
vendorbinexp=''
+vendorhtml1dir=' '
+vendorhtml1direxp=''
+vendorhtml3dir=' '
+vendorhtml3direxp=''
vendorlib=''
vendorlib_stem=''
vendorlibexp=''
+vendorman1dir=' '
+vendorman1direxp=''
+vendorman3dir=' '
+vendorman3direxp=''
vendorprefix=''
vendorprefixexp=''
+vendorscript=''
+vendorscriptexp=''
version='~VERSION~'
+version_patchlevel_string=''
versiononly='undef'
vi=''
voidflags='15'
xlibpth='/usr/lib/386 /lib/386'
+yacc='yacc'
+yaccflags=''
zcat=''
zip='zip'
PERL_REVISION='~PERL_REVISION~'
@@ -957,4 +1025,4 @@ PERL_API_REVISION='~PERL_API_REVISION~'
PERL_API_SUBVERSION='~PERL_API_SUBVERSION~'
PERL_API_VERSION='~PERL_API_VERSION~'
PERL_PATCHLEVEL='~PERL_VERSION~'
-version_patchlevel_string=''
+PERL_CONFIG_SH='true'
diff --git a/gnu/usr.bin/perl/win32/config.vc64 b/gnu/usr.bin/perl/win32/config.vc64
index c4d2e8f1f03..1f4c2144465 100644
--- a/gnu/usr.bin/perl/win32/config.vc64
+++ b/gnu/usr.bin/perl/win32/config.vc64
@@ -1,12 +1,12 @@
-# Configured by: ~cf_email~
+## Configured by: ~cf_email~
## Target system: WIN32
Author=''
-PERL_CONFIG_SH='true'
Date='$Date'
Header=''
Id='$Id'
Locker=''
Log='$Log'
+Mcc='Mcc'
RCSfile='$RCSfile'
Revision='$Revision'
Source=''
@@ -41,12 +41,12 @@ byteorder='1234'
c=''
castflags='0'
cat='type'
-cc='~CC~'
+cc='cl'
cccdlflags=' '
ccdlflags=' '
ccflags='-MD -DWIN32'
ccflags_uselargefiles=''
-ccname='~CC~'
+ccname='~cc~'
ccsymbols=''
ccversion=''
cf_by='nobody'
@@ -62,13 +62,13 @@ compress=''
contains='grep'
cp='copy'
cpio=''
-cpp='cl -nologo -E'
+cpp='~cc~ -nologo -E'
cpp_stuff='42'
cppccsymbols=''
cppflags='-DWIN32'
cpplast=''
cppminus=''
-cpprun='cl -nologo -E'
+cpprun='~cc~ -nologo -E'
cppstdin='cppstdin'
cppsymbols=''
crypt_r_proto='0'
@@ -99,7 +99,13 @@ d_archlib='define'
d_asctime_r='undef'
d_atolf='undef'
d_atoll='define'
-d_attribut='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_bcmp='undef'
d_bcopy='undef'
d_bsd='define'
@@ -113,6 +119,7 @@ d_chown='undef'
d_chroot='undef'
d_chsize='define'
d_class='undef'
+d_clearenv='undef'
d_closedir='define'
d_cmsghdr_s='undef'
d_const='define'
@@ -150,7 +157,7 @@ d_endsent='undef'
d_endservent_r='undef'
d_eofnblk='define'
d_eunice='undef'
-d_faststdio='undef'
+d_faststdio='define'
d_fchdir='undef'
d_fchmod='undef'
d_fchown='undef'
@@ -181,6 +188,7 @@ d_fstatvfs='undef'
d_fsync='undef'
d_ftello='undef'
d_ftime='define'
+d_futimes='undef'
d_getcwd='define'
d_getespwnam='undef'
d_getfsstat='undef'
@@ -254,6 +262,7 @@ d_isnanl='undef'
d_killpg='undef'
d_lchown='undef'
d_ldbl_dig='define'
+d_libm_lib_version='undef'
d_link='define'
d_localtime_r='undef'
d_locconv='define'
@@ -263,6 +272,8 @@ d_longlong='undef'
d_lseekproto='define'
d_lstat='undef'
d_madvise='undef'
+d_malloc_good_size='undef'
+d_malloc_size='undef'
d_mblen='define'
d_mbstowcs='define'
d_mbtowc='define'
@@ -280,6 +291,7 @@ 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'
@@ -298,6 +310,7 @@ d_mymalloc='undef'
d_nice='undef'
d_nl_langinfo='undef'
d_nv_preserves_uv='undef'
+d_nv_zero_is_allbits_zero='define'
d_off64_t='undef'
d_old_pthread_create_joinable='undef'
d_oldpthreads='undef'
@@ -338,8 +351,8 @@ d_safebcpy='undef'
d_safemcpy='undef'
d_sanemcmp='define'
d_sbrkproto='undef'
-d_sched_yield='undef'
d_scalbnl='undef'
+d_sched_yield='undef'
d_scm_rights='undef'
d_seekdir='define'
d_select='define'
@@ -398,6 +411,7 @@ d_socket='define'
d_socklen_t='undef'
d_sockpair='undef'
d_socks5_init='undef'
+d_sprintf_returns_strlen='define'
d_sqrtl='undef'
d_srand48_r='undef'
d_srandom_r='undef'
@@ -421,6 +435,8 @@ d_strerrm='strerror(e)'
d_strerror='define'
d_strerror_r='undef'
d_strftime='define'
+d_strlcat='undef'
+d_strlcpy='undef'
d_strtod='define'
d_strtol='define'
d_strtold='undef'
@@ -456,12 +472,14 @@ d_umask='define'
d_uname='define'
d_union_semun='define'
d_unordered='undef'
+d_unsetenv='undef'
d_usleep='undef'
d_usleepproto='undef'
d_ustat='undef'
d_vendorarch='undef'
d_vendorbin='undef'
d_vendorlib='undef'
+d_vendorscript='undef'
d_vfork='undef'
d_void_closedir='undef'
d_voidsig='define'
@@ -512,9 +530,11 @@ flex=''
fpossize='8'
fpostype='fpos_t'
freetype='void'
+from=':'
full_ar=''
full_csh=''
full_sed=''
+gccansipedantic=''
gccosandvers=''
gccversion=''
getgrent_r_proto='0'
@@ -544,6 +564,7 @@ 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 '
gmake='gmake'
gmtime_r_proto='0'
+gnulibc_version=''
grep='grep'
groupcat=''
groupstype='gid_t'
@@ -552,6 +573,10 @@ h_fcntl='false'
h_sysfile='true'
hint='recommended'
hostcat='ypcat hosts'
+html1dir=' '
+html1direxp=''
+html3dir=' '
+html3direxp=''
i16size='2'
i16type='short'
i32size='4'
@@ -649,6 +674,8 @@ incpath=''
inews=''
installarchlib='~INST_TOP~~INST_VER~\lib~INST_ARCH~'
installbin='~INST_TOP~~INST_VER~\bin~INST_ARCH~'
+installhtml1dir=''
+installhtml3dir=''
installhtmldir='~INST_TOP~~INST_VER~\html'
installhtmlhelpdir='~INST_TOP~~INST_VER~\htmlhelp'
installman1dir='~INST_TOP~~INST_VER~\man\man1'
@@ -659,12 +686,22 @@ 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~'
+installsitehtml1dir=''
+installsitehtml3dir=''
installsitelib='~INST_TOP~\site~INST_VER~\lib'
+installsiteman1dir=''
+installsiteman3dir=''
+installsitescript=''
installstyle='lib'
installusrbinperl='undef'
installvendorarch=''
installvendorbin=''
+installvendorhtml1dir=''
+installvendorhtml3dir=''
installvendorlib=''
+installvendorman1dir=''
+installvendorman3dir=''
+installvendorscript=''
intsize='4'
issymlink=''
ivdformat='"I64d"'
@@ -672,7 +709,7 @@ ivsize='8'
ivtype='__int64'
known_extensions='~static_ext~ ~dynamic_ext~ ~nonxs_ext~'
ksh=''
-ld='~LINK32~'
+ld='link'
lddlflags='-dll ~LINK_FLAGS~'
ldflags='~LINK_FLAGS~'
ldflags_uselargefiles=''
@@ -688,6 +725,7 @@ libsfiles=''
libsfound=''
libspath=''
libswanted='net socket inet nsl nm ndbm gdbm dbm db malloc dl dld ld sun m c cposix posix ndir dir crypt ucb bsd BSD PW x'
+libswanted_uselargefiles='net socket inet nsl nm ndbm gdbm dbm db malloc dl dld ld sun m c cposix posix ndir dir crypt ucb bsd BSD PW x'
line='line'
lint=''
lkflags=''
@@ -718,6 +756,7 @@ man3dir='~INST_TOP~~INST_VER~\man\man3'
man3direxp='~INST_TOP~~INST_VER~\man\man3'
man3ext='3'
mips_type=''
+mistrustnm=''
mkdir='mkdir'
mmaptype='void *'
modetype='mode_t'
@@ -763,6 +802,7 @@ patchlevel='~PATCHLEVEL~'
path_sep=';'
perl5=''
perl='perl'
+perl_patchlevel=''
perladmin=''
perllibs='~libs~'
perlpath='~INST_TOP~~INST_VER~\bin~INST_ARCH~\perl.exe'
@@ -792,6 +832,7 @@ readdir_r_proto='0'
revision='5'
rm='del'
rmail=''
+run=''
runnm='true'
sPRIEUldbl='"E"'
sPRIFUldbl='"F"'
@@ -839,11 +880,21 @@ 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~'
+sitehtml1dir=''
+sitehtml1direxp=''
+sitehtml3dir=''
+sitehtml3direxp=''
sitelib='~INST_TOP~\site~INST_VER~\lib'
sitelib_stem=''
sitelibexp='~INST_TOP~\site~INST_VER~\lib'
+siteman1dir=''
+siteman1direxp=''
+siteman3dir=''
+siteman3direxp=''
siteprefix='~INST_TOP~\site~INST_VER~'
siteprefixexp='~INST_TOP~\site~INST_VER~'
+sitescript=''
+sitescriptexp=''
sizesize='8'
sizetype='size_t'
sleep=''
@@ -883,6 +934,7 @@ test=''
timeincl='/usr/include/sys/time.h '
timetype='time_t'
tmpnam_r_proto='0'
+to=':'
touch='touch'
tr=''
trnl='\012'
@@ -910,18 +962,21 @@ usecrosscompile='undef'
usedl='define'
usefaststdio='define'
useithreads='undef'
-uselargefiles='define'
+uselargefiles='undef'
uselongdouble='undef'
+usemallocwrap='define'
usemorebits='undef'
usemultiplicity='undef'
usemymalloc='n'
usenm='false'
useopcode='true'
-useperlio='~USE_PERLIO~'
+useperlio='undef'
useposix='true'
usereentrant='undef'
+userelocatableinc='undef'
usesfio='false'
useshrplib='yes'
+usesitecustomize='undef'
usesocks='undef'
usethreads='undef'
usevendorprefix='undef'
@@ -938,16 +993,29 @@ vendorarch=''
vendorarchexp=''
vendorbin=''
vendorbinexp=''
+vendorhtml1dir=' '
+vendorhtml1direxp=''
+vendorhtml3dir=' '
+vendorhtml3direxp=''
vendorlib=''
vendorlib_stem=''
vendorlibexp=''
+vendorman1dir=' '
+vendorman1direxp=''
+vendorman3dir=' '
+vendorman3direxp=''
vendorprefix=''
vendorprefixexp=''
+vendorscript=''
+vendorscriptexp=''
version='~VERSION~'
+version_patchlevel_string=''
versiononly='undef'
vi=''
voidflags='15'
xlibpth='/usr/lib/386 /lib/386'
+yacc='yacc'
+yaccflags=''
zcat=''
zip='zip'
PERL_REVISION='~PERL_REVISION~'
@@ -957,4 +1025,4 @@ PERL_API_REVISION='~PERL_API_REVISION~'
PERL_API_SUBVERSION='~PERL_API_SUBVERSION~'
PERL_API_VERSION='~PERL_API_VERSION~'
PERL_PATCHLEVEL='~PERL_VERSION~'
-version_patchlevel_string=''
+PERL_CONFIG_SH='true'
diff --git a/gnu/usr.bin/perl/win32/config_H.vc64 b/gnu/usr.bin/perl/win32/config_H.vc64
index 088f2321bae..80c192bb9f3 100644
--- a/gnu/usr.bin/perl/win32/config_H.vc64
+++ b/gnu/usr.bin/perl/win32/config_H.vc64
@@ -26,12 +26,6 @@
*/
#define LOC_SED "" /**/
-/* 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_ALARM:
* This symbol, if defined, indicates that the alarm routine is
* available.
@@ -875,47 +869,6 @@
*/
/*#define I_VFORK /**/
-/* 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 /**/
-
-/* 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 /**/
-
-/* 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 4 /**/
-# define QUAD_IS_INT 1
-# define QUAD_IS_LONG 2
-# define QUAD_IS_LONG_LONG 3
-# define QUAD_IS_INT64_T 4
-#endif
-
/* HAS_ACCESSX:
* This symbol, if defined, indicates that the accessx routine is
* available to do extended access checks.
@@ -940,6 +893,40 @@
*/
/*#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 "" /**/
+#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,
@@ -951,6 +938,69 @@
#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 "c:\\perl\\5.8.8\\lib\\MSWin32-x86" /**/
+/*#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 "MSWin32-x86" /**/
+
+/* 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 "c:\\perl\\5.8.8\\bin\\MSWin32-x86" /**/
+#define BIN_EXP "c:\\perl\\5.8.8\\bin\\MSWin32-x86" /**/
+
+/* 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...
@@ -994,495 +1044,8 @@
#define BYTEORDER 0x1234 /* large digits for MSB */
#endif /* NeXT */
-/* 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 /**/
-
-/* VOID_CLOSEDIR:
- * This symbol, if defined, indicates that the closedir() routine
- * does not return a value.
- */
-/*#define VOID_CLOSEDIR /**/
-
-/* HAS_FD_SET:
- * This symbol, when defined, indicates presence of the fd_set typedef
- * in <sys/types.h>
- */
-#define HAS_FD_SET /**/
-
-/* 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_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_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_ISASCII:
- * This manifest constant lets the C program know that isascii
- * is available.
- */
-#define HAS_ISASCII /**/
-
-/* 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_OPEN3:
- * This manifest constant lets the C program know that the three
- * argument form of open(2) is available.
- */
-/*#define HAS_OPEN3 /**/
-
-/* HAS_SAFE_BCOPY:
- * This symbol, if defined, indicates that the bcopy routine is available
- * to copy potentially overlapping memory blocks. Normally, you should
- * probably use memmove() or memcpy(). If neither is defined, roll your
- * own version.
- */
-/*#define HAS_SAFE_BCOPY /**/
-
-/* HAS_SAFE_MEMCPY:
- * This symbol, if defined, indicates that the memcpy routine is available
- * to copy potentially overlapping memory blocks. If you need to
- * copy overlapping memory blocks, you should check HAS_MEMMOVE and
- * use memmove() instead, if available.
- */
-/*#define HAS_SAFE_MEMCPY /**/
-
-/* HAS_SANE_MEMCMP:
- * This symbol, if defined, indicates that the memcmp routine is available
- * and can be used to compare relative magnitudes of chars with their high
- * bits set. If it is not defined, roll your own version.
- */
-#define HAS_SANE_MEMCMP /**/
-
-/* 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
-
-/* 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) ((fp)->_ptr)
-#define STDIO_PTR_LVALUE /**/
-#define FILE_cnt(fp) ((fp)->_cnt)
-#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) ((fp)->_base)
-#define FILE_bufsiz(fp) ((fp)->_cnt + (fp)->_ptr - (fp)->_base)
-#endif
-
-/* HAS_VPRINTF:
- * This symbol, if defined, indicates that the vprintf routine is available
- * to printf with a pointer to an argument list. If unavailable, you
- * may need to write your own, probably in terms of _doprnt().
- */
-/* USE_CHAR_VSPRINTF:
- * This symbol is defined if this system has vsprintf() returning type
- * (char*). The trend seems to be to declare it as "int vsprintf()". It
- * is up to the package author to declare vsprintf correctly based on the
- * symbol.
- */
-#define HAS_VPRINTF /**/
-/*#define USE_CHAR_VSPRINTF /**/
-
-/* DOUBLESIZE:
- * This symbol contains the size of a double, so that the C preprocessor
- * can make decisions based on it.
- */
-#define DOUBLESIZE 8 /**/
-
-/* 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 /**/
-
-/* 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
-
-/* 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 8 /**/
-
-/* 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 /**/
-
-/* 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 __int64 /* signed count of bytes */
-
-/* EBCDIC:
- * This symbol, if defined, indicates that this system uses
- * EBCDIC encoding.
- */
-/*#define EBCDIC /**/
-
-/* 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 "c:\\perl\\5.8.6\\lib\\MSWin32-x86-multi-thread" /**/
-/*#define ARCHLIB_EXP "" /**/
-
-/* 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 "c:\\perl\\5.8.6\\bin\\MSWin32-x86-multi-thread" /**/
-#define BIN_EXP "c:\\perl\\5.8.6\\bin\\MSWin32-x86-multi-thread" /**/
-
-/* 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_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 "" /**/
-
-/* 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 "c:\\perl\\5.8.6\\lib" /**/
-#define PRIVLIB_EXP (win32_get_privlib("5.8.6")) /**/
-
-/* 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 "c:\\perl\\site\\5.8.6\\lib\\MSWin32-x86-multi-thread" /**/
-/*#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 "c:\\perl\\site\\5.8.6\\lib" /**/
-#define SITELIB_EXP (win32_get_sitelib("5.8.6")) /**/
-#define SITELIB_STEM "" /**/
-
-/* 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 "" /**/
-
-/* 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" /**/
-
/* CAT2:
- * This macro catenates 2 tokens together.
+ * This macro concatenates 2 tokens together.
*/
/* STRINGIFY:
* This macro surrounds its token with double quotes.
@@ -1535,6 +1098,12 @@
#define CPPRUN "cl -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.
@@ -1542,23 +1111,82 @@
*/
#define HAS_ACCESS /**/
-/* HASATTRIBUTE:
- * This symbol indicates the C compiler can check for function attributes,
- * such as printf formats. This is normally only supported by GNU cc.
+/* HAS_ASCTIME_R:
+ * This symbol, if defined, indicates that the asctime_r routine
+ * is available to asctime re-entrantly.
*/
-/*#define HASATTRIBUTE /**/
-#ifndef HASATTRIBUTE
-#ifdef __attribute__
-#undef __attribute__
-#endif
-#define __attribute__(_arg_)
-#endif
+/* 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 /**/
-/* HAS_CRYPT:
- * This symbol, if defined, indicates that the crypt routine is available
- * to encrypt passwords and the like.
+/* CASTI32:
+ * This symbol is defined if the C compiler can cast negative
+ * or large floating point numbers to 32-bit ints.
*/
-/*#define HAS_CRYPT /**/
+/*#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.
@@ -1571,25 +1199,47 @@
#define CSH "" /**/
#endif
-/* 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.
+/* HAS_CTIME_R:
+ * This symbol, if defined, indicates that the ctime_r routine
+ * is available to ctime re-entrantly.
*/
-/* 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.
+/* 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 SETUID_SCRIPTS_ARE_SECURE_NOW /**/
-/*#define DOSUID /**/
+/*#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
@@ -1597,6 +1247,19 @@
*/
/*#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.
@@ -1621,24 +1284,242 @@
*/
/*#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.
@@ -1686,6 +1567,45 @@
#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.
@@ -1704,6 +1624,21 @@
*/
/*#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.
@@ -1732,6 +1667,20 @@
#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.
@@ -1739,12 +1688,78 @@
*/
/*#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.
@@ -1756,6 +1771,34 @@
#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
@@ -1781,6 +1824,71 @@
#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_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.
@@ -1808,12 +1916,44 @@
#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_MEMCHR:
* This symbol, if defined, indicates that the memchr routine is available
* to locate characters within a C string.
*/
#define HAS_MEMCHR /**/
+/* 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
@@ -1821,6 +1961,13 @@
*/
/*#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.
@@ -1833,24 +1980,187 @@
/*#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.
+ */
+/* HAS_MODFL_POW32_BUG:
+ * This symbol, if defined, indicates that the modfl routine is
+ * broken for long doubles >= pow(2, 32).
+ * For example from 4294967303.150000 one would get 4294967302.000000
+ * and 1.150000. The bug has been seen in certain versions of glibc,
+ * release 2.2.2 is known to be okay.
+ */
+/*#define HAS_MODFL /**/
+/*#define HAS_MODFL_PROTO /**/
+/*#define HAS_MODFL_POW32_BUG /**/
+
+/* 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_SAFE_BCOPY:
+ * This symbol, if defined, indicates that the bcopy routine is available
+ * to copy potentially overlapping memory blocks. Normally, you should
+ * probably use memmove() or memcpy(). If neither is defined, roll your
+ * own version.
+ */
+/*#define HAS_SAFE_BCOPY /**/
+
+/* HAS_SAFE_MEMCPY:
+ * This symbol, if defined, indicates that the memcpy routine is available
+ * to copy potentially overlapping memory blocks. If you need to
+ * copy overlapping memory blocks, you should check HAS_MEMMOVE and
+ * use memmove() instead, if available.
+ */
+/*#define HAS_SAFE_MEMCPY /**/
+
+/* HAS_SANE_MEMCMP:
+ * This symbol, if defined, indicates that the memcmp routine is available
+ * and can be used to compare relative magnitudes of chars with their high
+ * bits set. If it is not defined, roll your own version.
+ */
+#define HAS_SANE_MEMCMP /**/
+
+/* 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
@@ -1864,6 +2174,12 @@
*/
/*#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.
@@ -1888,12 +2204,31 @@
/*#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.
@@ -1907,25 +2242,60 @@
*/
#define HAS_SETVBUF /**/
+/* USE_SFIO:
+ * This symbol, if defined, indicates that sfio should
+ * be used.
+ */
+/*#define USE_SFIO /**/
+
/* HAS_SHM:
* This symbol, if defined, indicates that the entire shm*(2) library is
* supported.
*/
/*#define HAS_SHM /**/
-/* Shmat_t:
- * This symbol holds the return type of the shmat() system call.
- * Usually set to 'void *' or 'char *'.
+/* HAS_SIGACTION:
+ * This symbol, if defined, indicates that Vr4's sigaction() routine
+ * is available.
*/
-/* 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 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.
*/
-#define Shmat_t void * /**/
-/*#define HAS_SHMAT_PROTOTYPE /**/
+/* 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
+
+/* 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
@@ -1974,781 +2344,6 @@
/*#define HAS_MSG_PROXY /**/
/*#define HAS_SCM_RIGHTS /**/
-/* 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_STRERROR:
- * This symbol, if defined, indicates that the strerror routine is
- * available to translate error numbers to strings. See the writeup
- * of Strerror() in this file before you try to define your own.
- */
-/* 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.
- */
-/* Strerror:
- * This preprocessor symbol is defined as a macro if strerror() is
- * not available to translate error numbers to strings but sys_errlist[]
- * array is there.
- */
-#define HAS_STRERROR /**/
-#define HAS_SYS_ERRLIST /**/
-#define Strerror(e) strerror(e)
-
-/* 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_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_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 */
-
-/* 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
-
-/* 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_NDBM:
- * This symbol, if defined, indicates that <ndbm.h> exists and should
- * be included.
- */
-/*#define I_NDBM /**/
-
-/* I_NETDB:
- * This symbol, if defined, indicates that <netdb.h> exists and
- * should be included.
- */
-/*#define I_NETDB /**/
-
-/* 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_SYSUIO:
- * This symbol, if defined, indicates that <sys/uio.h> exists and
- * should be included.
- */
-/*#define I_SYSUIO /**/
-
-/* I_STDARG:
- * This symbol, if defined, indicates that <stdarg.h> exists and should
- * be included.
- */
-/* I_VARARGS:
- * This symbol, if defined, indicates to the C program that it should
- * include <varargs.h>.
- */
-#define I_STDARG /**/
-/*#define I_VARARGS /**/
-
-/* 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 /**/
-
-/* MYMALLOC:
- * This symbol, if defined, indicates that we're using our own malloc.
- */
-/*#define MYMALLOC /**/
-
-/* PERL_MALLOC_WRAP:
- * This symbol, if defined, indicates that we'd like malloc wrap checks.
- */
-#define PERL_MALLOC_WRAP /**/
-
-/* CAN_PROTOTYPE:
- * If defined, this macro indicates that the C compiler can handle
- * function prototypes.
- */
-/* _:
- * This macro is used to declare function parameters for folks who want
- * to make declarations with prototypes using a different style than
- * the above macros. Use double parentheses. For example:
- *
- * int main _((int argc, char *argv[]));
- */
-#define CAN_PROTOTYPE /**/
-#ifdef CAN_PROTOTYPE
-#define _(args) args
-#else
-#define _(args) ()
-#endif
-
-/* 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" /**/
-
-/* 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", "HUP", "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, 21, 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 /**/
-
-/* 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 /**/
-
-/* VOIDFLAGS:
- * This symbol indicates how much support of the void type is given by this
- * compiler. What various bits mean:
- *
- * 1 = supports declaration of void
- * 2 = supports arrays of pointers to functions returning void
- * 4 = supports comparisons between pointers to void functions and
- * addresses of void functions
- * 8 = suports declaration of generic void pointers
- *
- * The package designer should define VOIDUSED to indicate the requirements
- * of the package. This can be done either by #defining VOIDUSED before
- * including config.h, or by defining defvoidused in Myinit.U. If the
- * latter approach is taken, only those flags will be tested. If the
- * level of void support necessary is not present, defines void to int.
- */
-#ifndef VOIDUSED
-#define VOIDUSED 15
-#endif
-#define VOIDFLAGS 15
-#if (VOIDFLAGS & VOIDUSED) != VOIDUSED
-#define void int /* is void to be avoided? */
-#define M_VOID /* Xenix strikes again */
-#endif
-
-/* 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 "" /**/
-#endif
-
-/* 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 /**/
-
-/* 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_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 /**/
-
-/* HAS_STRUCT_CMSGHDR:
- * This symbol, if defined, indicates that the struct cmsghdr
- * is supported.
- */
-/*#define HAS_STRUCT_CMSGHDR /**/
-
-/* 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 /**/
-
-/* 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 /**/
-
-/* 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_FAST_STDIO:
- * This symbol, if defined, indicates that the "fast stdio"
- * is available to manipulate the stdio buffers directly.
- */
-#define HAS_FAST_STDIO /**/
-
-/* 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_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 /**/
-
-/* 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_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_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_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_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_GETITIMER:
- * This symbol, if defined, indicates that the getitimer routine is
- * available to return interval timers.
- */
-/*#define HAS_GETITIMER /**/
-
-/* 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_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_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_HASMNTOPT:
- * This symbol, if defined, indicates that the hasmntopt routine is
- * available to query the mount options of file systems.
- */
-/*#define HAS_HASMNTOPT /**/
-
-/* 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 /**/
-
-/* 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_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_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_MADVISE:
- * This symbol, if defined, indicates that the madvise system call is
- * available to map a file into memory.
- */
-/*#define HAS_MADVISE /**/
-
-/* 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_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_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.
- */
-/* HAS_MODFL_POW32_BUG:
- * This symbol, if defined, indicates that the modfl routine is
- * broken for long doubles >= pow(2, 32).
- * For example from 4294967303.150000 one would get 4294967302.000000
- * and 1.150000. The bug has been seen in certain versions of glibc,
- * release 2.2.2 is known to be okay.
- */
-/*#define HAS_MODFL /**/
-/*#define HAS_MODFL_PROTO /**/
-/*#define HAS_MODFL_POW32_BUG /**/
-
-/* 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_STRUCT_MSGHDR:
- * This symbol, if defined, indicates that the struct msghdr
- * is supported.
- */
-/*#define HAS_STRUCT_MSGHDR /**/
-
-/* 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_OFF64_T:
- * This symbol will be defined if the C compiler supports off64_t.
- */
-/*#define HAS_OFF64_T /**/
-
-/* 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_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_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_SENDMSG:
- * This symbol, if defined, indicates that the sendmsg routine is
- * available to send structured socket messages.
- */
-/*#define HAS_SENDMSG /**/
-
-/* HAS_SETITIMER:
- * This symbol, if defined, indicates that the setitimer routine is
- * available to set interval timers.
- */
-/*#define HAS_SETITIMER /**/
-
-/* HAS_SETPROCTITLE:
- * This symbol, if defined, indicates that the setproctitle routine is
- * available to set process title.
- */
-/*#define HAS_SETPROCTITLE /**/
-
-/* USE_SFIO:
- * This symbol, if defined, indicates that sfio should
- * be used.
- */
-/*#define USE_SFIO /**/
-
-/* 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_SOCKS5_INIT:
* This symbol, if defined, indicates that the socks5_init routine is
* available to initialize SOCKS 5.
@@ -2761,21 +2356,39 @@
*/
/*#define HAS_SQRTL /**/
-/* 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);
+/* HAS_SRAND48_R:
+ * This symbol, if defined, indicates that the srand48_r routine
+ * is available to srand48 re-entrantly.
*/
-/*#define HAS_SETRESGID_PROTO /**/
+/* 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_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);
+/* HAS_SRANDOM_R:
+ * This symbol, if defined, indicates that the srandom_r routine
+ * is available to srandom re-entrantly.
*/
-/*#define HAS_SETRESUID_PROTO /**/
+/* 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
@@ -2800,11 +2413,107 @@
*/
/*#define HAS_FSTATVFS /**/
-/* HAS_STRFTIME:
- * This symbol, if defined, indicates that the strftime routine is
- * available to do time formatting.
+/* 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.
*/
-#define HAS_STRFTIME /**/
+/* 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) ((fp)->_ptr)
+#define STDIO_PTR_LVALUE /**/
+#define FILE_cnt(fp) ((fp)->_cnt)
+#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) ((fp)->_base)
+#define FILE_bufsiz(fp) ((fp)->_cnt + (fp)->_ptr - (fp)->_base)
+#endif
+
+/* HAS_STRERROR:
+ * This symbol, if defined, indicates that the strerror routine is
+ * available to translate error numbers to strings. See the writeup
+ * of Strerror() in this file before you try to define your own.
+ */
+/* 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.
+ */
+/* Strerror:
+ * This preprocessor symbol is defined as a macro if strerror() is
+ * not available to translate error numbers to strings but sys_errlist[]
+ * array is there.
+ */
+#define HAS_STRERROR /**/
+#define HAS_SYS_ERRLIST /**/
+#define Strerror(e) strerror(e)
+
+/* 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
@@ -2824,6 +2533,12 @@
*/
/*#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.
@@ -2836,15 +2551,6 @@
*/
/*#define HAS_STRTOUQ /**/
-/* 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 /**/
-
/* HAS_TELLDIR_PROTO:
* This symbol, if defined, indicates that the system provides
* a prototype for the telldir() function. Otherwise, it is up
@@ -2853,13 +2559,36 @@
*/
#define HAS_TELLDIR_PROTO /**/
-/* U32_ALIGNMENT_REQUIRED:
- * This symbol, if defined, indicates that you must access
- * character data through U32-aligned pointers.
+/* HAS_TIME:
+ * This symbol, if defined, indicates that the time() routine exists.
*/
-#ifndef U32_ALIGNMENT_REQUIRED
-#define U32_ALIGNMENT_REQUIRED /**/
-#endif
+/* 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
@@ -2867,6 +2596,28 @@
*/
/*#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
@@ -2874,13 +2625,11 @@
*/
/*#define HAS_UNORDERED /**/
-/* 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);
+/* HAS_UNSETENV:
+ * This symbol, if defined, indicates that the unsetenv () routine is
+ * available for use.
*/
-/*#define HAS_USLEEP_PROTO /**/
+/*#define HAS_UNSETENV /**/
/* HAS_USTAT:
* This symbol, if defined, indicates that the ustat system call is
@@ -2888,6 +2637,33 @@
*/
/*#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_VPRINTF:
+ * This symbol, if defined, indicates that the vprintf routine is available
+ * to printf with a pointer to an argument list. If unavailable, you
+ * may need to write your own, probably in terms of _doprnt().
+ */
+/* USE_CHAR_VSPRINTF:
+ * This symbol is defined if this system has vsprintf() returning type
+ * (char*). The trend seems to be to declare it as "int vsprintf()". It
+ * is up to the package author to declare vsprintf correctly based on the
+ * symbol.
+ */
+#define HAS_VPRINTF /**/
+/*#define USE_CHAR_VSPRINTF /**/
+
/* HAS_WRITEV:
* This symbol, if defined, indicates that the writev routine is
* available to do scatter writes.
@@ -2900,6 +2676,18 @@
*/
#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 /**/
+
+/* 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.
@@ -2914,11 +2702,50 @@
#define FFLUSH_NULL /**/
/*#define FFLUSH_ALL /**/
-/* I_CRYPT:
- * This symbol, if defined, indicates that <crypt.h> exists and
- * should be included.
+/* 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 I_CRYPT /**/
+#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
@@ -2950,18 +2777,23 @@
#define DB_VERSION_MINOR_CFG 0 /**/
#define DB_VERSION_PATCH_CFG 0 /**/
-/* I_FP:
- * This symbol, if defined, indicates that <fp.h> exists and
- * should be included.
- */
-/*#define I_FP /**/
-
/* 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.
@@ -2974,24 +2806,30 @@
*/
/*#define I_INTTYPES /**/
-/* I_LANGINFO:
- * This symbol, if defined, indicates that <langinfo.h> exists and
- * should be included.
- */
-/*#define I_LANGINFO /**/
-
/* 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>.
@@ -3010,6 +2848,58 @@
*/
/*#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.
@@ -3057,6 +2947,12 @@
*/
/*#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.
@@ -3069,12 +2965,53 @@
*/
/*#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.
@@ -3096,6 +3033,76 @@
/*#define PERL_PRIeldbl "e" /**/
/*#define PERL_SCNfldbl "f" /**/
+/* 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 __int64 /* <offset> type */
+#define LSEEKSIZE 8 /* <offset> size */
+#define Off_t_size 8 /* <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
@@ -3107,6 +3114,53 @@
*/
/*#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 4 /**/
+# 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.
*/
@@ -3181,6 +3235,10 @@
* This symbol contains the number of bits a variable of type NVTYPE
* can preserve of a variable of type UVTYPE.
*/
+/* 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 __int64 /**/
#define UVTYPE unsigned __int64 /**/
#define I8TYPE char /**/
@@ -3209,6 +3267,20 @@
#define NVSIZE 8 /**/
#undef NV_PRESERVES_UV
#define NV_PRESERVES_UV_BITS 53
+#define NV_ZERO_IS_ALLBITS_ZERO
+#if 8 == 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
@@ -3251,6 +3323,59 @@
#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 "c:\\perl\\5.8.8\\lib" /**/
+#define PRIVLIB_EXP (win32_get_privlib("5.8.8")) /**/
+
+/* 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 8 /**/
+
+/* 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
@@ -3260,6 +3385,125 @@
*/
#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", "HUP", "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, 21, 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 "c:\\perl\\site\\5.8.8\\lib\\MSWin32-x86" /**/
+/*#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 "c:\\perl\\site\\5.8.8\\lib" /**/
+#define SITELIB_EXP (win32_get_sitelib("5.8.8")) /**/
+#define SITELIB_STEM "" /**/
+
+/* Size_t_size:
+ * This symbol holds the size of a Size_t in bytes.
+ */
+#define Size_t_size 8 /**/
+
+/* 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 __int64 /* 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
@@ -3267,6 +3511,12 @@
*/
#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.
@@ -3278,6 +3528,29 @@
/*#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
@@ -3304,30 +3577,12 @@
/*#define USE_64_BIT_ALL /**/
#endif
-/* 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
-
-/* 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
-
/* 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 /**/
+/*#define USE_LARGE_FILES /**/
#endif
/* USE_LONG_DOUBLE:
@@ -3351,7 +3606,7 @@
* be built to use multiplicity.
*/
#ifndef MULTIPLICITY
-#define MULTIPLICITY /**/
+/*#define MULTIPLICITY /**/
#endif
/* USE_PERLIO:
@@ -3360,7 +3615,7 @@
* used in a fully backward compatible manner.
*/
#ifndef USE_PERLIO
-#define USE_PERLIO /**/
+/*#define USE_PERLIO /**/
#endif
/* USE_SOCKS:
@@ -3371,122 +3626,429 @@
/*#define USE_SOCKS /**/
#endif
-/* HAS_DRAND48_PROTO:
+/* 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 /**/
+
+/* 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 "" /**/
+
+/* VOIDFLAGS:
+ * This symbol indicates how much support of the void type is given by this
+ * compiler. What various bits mean:
+ *
+ * 1 = supports declaration of void
+ * 2 = supports arrays of pointers to functions returning void
+ * 4 = supports comparisons between pointers to void functions and
+ * addresses of void functions
+ * 8 = suports declaration of generic void pointers
+ *
+ * The package designer should define VOIDUSED to indicate the requirements
+ * of the package. This can be done either by #defining VOIDUSED before
+ * including config.h, or by defining defvoidused in Myinit.U. If the
+ * latter approach is taken, only those flags will be tested. If the
+ * level of void support necessary is not present, defines void to int.
+ */
+#ifndef VOIDUSED
+#define VOIDUSED 15
+#endif
+#define VOIDFLAGS 15
+#if (VOIDFLAGS & VOIDUSED) != VOIDUSED
+#define void int /* is void to be avoided? */
+#define M_VOID /* Xenix strikes again */
+#endif
+
+/* 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_MALLOC /**/
+/*#define HASATTRIBUTE_NONNULL /**/
+/*#define HASATTRIBUTE_NORETURN /**/
+/*#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 /**/
+
+/* I_STDARG:
+ * This symbol, if defined, indicates that <stdarg.h> exists and should
+ * be included.
+ */
+/* I_VARARGS:
+ * This symbol, if defined, indicates to the C program that it should
+ * include <varargs.h>.
+ */
+#define I_STDARG /**/
+/*#define I_VARARGS /**/
+
+/* CAN_PROTOTYPE:
+ * If defined, this macro indicates that the C compiler can handle
+ * function prototypes.
+ */
+/* _:
+ * This macro is used to declare function parameters for folks who want
+ * to make declarations with prototypes using a different style than
+ * the above macros. Use double parentheses. For example:
+ *
+ * int main _((int argc, char *argv[]));
+ */
+#define CAN_PROTOTYPE /**/
+#ifdef CAN_PROTOTYPE
+#define _(args) args
+#else
+#define _(args) ()
+#endif
+
+/* 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 /**/
+
+/* HAS_DBMINIT_PROTO:
* This symbol, if defined, indicates that the system provides
- * a prototype for the drand48() function. Otherwise, it is up
+ * a prototype for the dbminit() function. Otherwise, it is up
* to the program to supply one. A good guess is
- * extern double drand48(void);
+ * extern int dbminit(char *);
*/
-/*#define HAS_DRAND48_PROTO /**/
+/*#define HAS_DBMINIT_PROTO /**/
-/* 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.
+/* HAS_DIRFD:
+ * This manifest constant lets the C program know that dirfd
+ * is available.
*/
-#define HAS_GETHOST_PROTOS /**/
+/*#define HAS_DIRFD /**/
-/* 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.
+/* HAS_FAST_STDIO:
+ * This symbol, if defined, indicates that the "fast stdio"
+ * is available to manipulate the stdio buffers directly.
*/
-/*#define HAS_GETNET_PROTOS /**/
+#define HAS_FAST_STDIO /**/
-/* 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.
+/* 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_GETPROTO_PROTOS /**/
+#define HAS_FLOCK_PROTO /**/
-/* 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.
+/* 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_GETSERV_PROTOS /**/
+/*#define HAS_FPCLASSL /**/
-/* HAS_LSEEK_PROTO:
+/* 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 lseek() function. Otherwise, it is up
+ * a prototype for the sockatmark() function. Otherwise, it is up
* to the program to supply one. A good guess is
- * extern off_t lseek(int, off_t, int);
+ * extern int sockatmark(int);
*/
-#define HAS_LSEEK_PROTO /**/
+/*#define HAS_SOCKATMARK_PROTO /**/
-/* Netdb_host_t:
- * This symbol holds the type used for the 1st argument
- * to gethostbyaddr().
+/* SPRINTF_RETURNS_STRLEN:
+ * This variable defines whether sprintf returns the length of the string
+ * (as per the ANSI spec). Some C libraries retain compatibility with
+ * pre-ANSI C and return a pointer to the passed in buffer; for these
+ * this variable will be undef.
*/
-/* Netdb_hlen_t:
- * This symbol holds the type used for the 2nd argument
- * to gethostbyaddr().
+#define SPRINTF_RETURNS_STRLEN /**/
+
+/* 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);
*/
-/* Netdb_name_t:
- * This symbol holds the type used for the argument to
- * gethostbyname().
+/*#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);
*/
-/* Netdb_net_t:
- * This symbol holds the type used for the 1st argument to
- * getnetbyaddr().
+/*#define HAS_SETRESUID_PROTO /**/
+
+/* HAS_STRFTIME:
+ * This symbol, if defined, indicates that the strftime routine is
+ * available to do time formatting.
*/
-#define Netdb_host_t char * /**/
-#define Netdb_hlen_t int /**/
-#define Netdb_name_t char * /**/
-#define Netdb_net_t long /**/
+#define HAS_STRFTIME /**/
-/* 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.
+/* HAS_STRLCAT:
+ * This symbol, if defined, indicates that the strlcat () routine is
+ * available to do string concatenation.
*/
-#define Select_fd_set_t Perl_fd_set * /**/
+/*#define HAS_STRLCAT /**/
-/* 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).
+/* HAS_STRLCPY:
+ * This symbol, if defined, indicates that the strlcpy () routine is
+ * available to do string copying.
*/
-#define Sock_size_t int /**/
+/*#define HAS_STRLCPY /**/
-/* 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.
+/* 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 ARCHNAME "MSWin32-x86-multi-thread" /**/
+/*#define HAS_SYSCALL_PROTO /**/
-/* HAS_ASCTIME_R:
- * This symbol, if defined, indicates that the asctime_r routine
- * is available to asctime re-entrantly.
+/* U32_ALIGNMENT_REQUIRED:
+ * This symbol, if defined, indicates that you must access
+ * character data through U32-aligned pointers.
*/
-/* 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.
+#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_ASCTIME_R /**/
-#define ASCTIME_R_PROTO 0 /**/
+/*#define HAS_USLEEP_PROTO /**/
-/* HAS_CRYPT_R:
- * This symbol, if defined, indicates that the crypt_r routine
- * is available to crypt re-entrantly.
+/* I_CRYPT:
+ * This symbol, if defined, indicates that <crypt.h> exists and
+ * should be included.
*/
-/* 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 I_CRYPT /**/
+
+/* I_FP:
+ * This symbol, if defined, indicates that <fp.h> exists and
+ * should be included.
*/
-/*#define HAS_CRYPT_R /**/
-#define CRYPT_R_PROTO 0 /**/
+/*#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 "" /**/
/* HAS_CTERMID_R:
* This symbol, if defined, indicates that the ctermid_r routine
@@ -3501,45 +4063,6 @@
/*#define HAS_CTERMID_R /**/
#define CTERMID_R_PROTO 0 /**/
-/* 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 /**/
-
-/* 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_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_R:
* This symbol, if defined, indicates that the endhostent_r routine
* is available to endhostent re-entrantly.
@@ -3579,19 +4102,6 @@
/*#define HAS_ENDPROTOENT_R /**/
#define ENDPROTOENT_R_PROTO 0 /**/
-/* 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_R:
* This symbol, if defined, indicates that the endservent_r routine
* is available to endservent re-entrantly.
@@ -3605,45 +4115,6 @@
/*#define HAS_ENDSERVENT_R /**/
#define ENDSERVENT_R_PROTO 0 /**/
-/* 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_R:
* This symbol, if defined, indicates that the gethostbyaddr_r routine
* is available to gethostbyaddr re-entrantly.
@@ -3683,19 +4154,6 @@
/*#define HAS_GETHOSTENT_R /**/
#define GETHOSTENT_R_PROTO 0 /**/
-/* 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_GETNETBYADDR_R:
* This symbol, if defined, indicates that the getnetbyaddr_r routine
* is available to getnetbyaddr re-entrantly.
@@ -3774,45 +4232,6 @@
/*#define HAS_GETPROTOENT_R /**/
#define GETPROTOENT_R_PROTO 0 /**/
-/* 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_GETSERVBYNAME_R:
* This symbol, if defined, indicates that the getservbyname_r routine
* is available to getservbyname re-entrantly.
@@ -3852,93 +4271,12 @@
/*#define HAS_GETSERVENT_R /**/
#define GETSERVENT_R_PROTO 0 /**/
-/* 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_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_LOCALTIME_R:
- * This symbol, if defined, indicates that the localtime_r routine
- * is available to localtime re-entrantly.
- */
-/* 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 /**/
-
-/* 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_ATFORK:
* This symbol, if defined, indicates that the pthread_atfork routine
* is available to setup fork handlers.
*/
/*#define HAS_PTHREAD_ATFORK /**/
-/* 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_READDIR64_R:
* This symbol, if defined, indicates that the readdir64_r routine
* is available to readdir64 re-entrantly.
@@ -3952,32 +4290,6 @@
/*#define HAS_READDIR64_R /**/
#define READDIR64_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_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_SETHOSTENT_R:
* This symbol, if defined, indicates that the sethostent_r routine
* is available to sethostent re-entrantly.
@@ -4030,19 +4342,6 @@
/*#define HAS_SETPROTOENT_R /**/
#define SETPROTOENT_R_PROTO 0 /**/
-/* 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_R:
* This symbol, if defined, indicates that the setservent_r routine
* is available to setservent re-entrantly.
@@ -4056,58 +4355,6 @@
/*#define HAS_SETSERVENT_R /**/
#define SETSERVENT_R_PROTO 0 /**/
-/* 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 /**/
-
-/* 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_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_TTYNAME_R:
* This symbol, if defined, indicates that the ttyname_r routine
* is available to ttyname re-entrantly.
@@ -4121,157 +4368,4 @@
/*#define HAS_TTYNAME_R /**/
#define TTYNAME_R_PROTO 0 /**/
-/* I_MACH_CTHREADS:
- * This symbol, if defined, indicates to the C program that it should
- * include <mach/cthreads.h>.
- */
-/*#define I_MACH_CTHREADS /**/
-
-/* I_PTHREAD:
- * This symbol, if defined, indicates to the C program that it should
- * include <pthread.h>.
- */
-/*#define I_PTHREAD /**/
-
-/* 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 /**/
-
-/* 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 /**/
-
-/* 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... */
-
-/* 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 __int64 /* <offset> type */
-#define LSEEKSIZE 8 /* <offset> size */
-#define Off_t_size 8 /* <offset> size */
-
-/* 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 */
-
-/* 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 */
-
-/* Size_t_size:
- * This symbol holds the size of a Size_t in bytes.
- */
-#define Size_t_size 8 /**/
-
-/* 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 */
-
-/* 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 */
-
#endif
diff --git a/gnu/usr.bin/perl/win32/fcrypt.c b/gnu/usr.bin/perl/win32/fcrypt.c
index 85590dac169..4c9f2733f60 100644
--- a/gnu/usr.bin/perl/win32/fcrypt.c
+++ b/gnu/usr.bin/perl/win32/fcrypt.c
@@ -40,7 +40,7 @@ typedef struct des_ks_struct
*((c)++)=(unsigned char)(((l)>>24)&0xff))
static unsigned long SPtrans[8][64]={
-/* nibble 0 */
+{ /* nibble 0 */
0x00820200, 0x00020000, 0x80800000, 0x80820200,
0x00800000, 0x80020200, 0x80020000, 0x80800000,
0x80020200, 0x00820200, 0x00820000, 0x80000200,
@@ -56,8 +56,8 @@ static unsigned long SPtrans[8][64]={
0x80820200, 0x00020200, 0x00820000, 0x80800200,
0x00800000, 0x80000200, 0x80020000, 0x00000000,
0x00020000, 0x00800000, 0x80800200, 0x00820200,
-0x80000000, 0x80820000, 0x00000200, 0x80020200,
-/* nibble 1 */
+0x80000000, 0x80820000, 0x00000200, 0x80020200},
+{ /* nibble 1 */
0x10042004, 0x00000000, 0x00042000, 0x10040000,
0x10000004, 0x00002004, 0x10002000, 0x00042000,
0x00002000, 0x10040004, 0x00000004, 0x10002000,
@@ -73,8 +73,8 @@ static unsigned long SPtrans[8][64]={
0x10042000, 0x00002000, 0x00000000, 0x10000004,
0x00000004, 0x10042004, 0x00042000, 0x10040000,
0x10040004, 0x00040000, 0x00002004, 0x10002000,
-0x10002004, 0x00000004, 0x10040000, 0x00042000,
-/* nibble 2 */
+0x10002004, 0x00000004, 0x10040000, 0x00042000},
+{ /* nibble 2 */
0x41000000, 0x01010040, 0x00000040, 0x41000040,
0x40010000, 0x01000000, 0x41000040, 0x00010040,
0x01000040, 0x00010000, 0x01010000, 0x40000000,
@@ -90,8 +90,8 @@ static unsigned long SPtrans[8][64]={
0x40010040, 0x41000000, 0x01000000, 0x41010040,
0x00010000, 0x01000040, 0x41000040, 0x00010040,
0x01000040, 0x00000000, 0x41010000, 0x40000040,
-0x41000000, 0x40010040, 0x00000040, 0x01010000,
-/* nibble 3 */
+0x41000000, 0x40010040, 0x00000040, 0x01010000},
+{ /* nibble 3 */
0x00100402, 0x04000400, 0x00000002, 0x04100402,
0x00000000, 0x04100000, 0x04000402, 0x00100002,
0x04100400, 0x04000002, 0x04000000, 0x00000402,
@@ -107,8 +107,8 @@ static unsigned long SPtrans[8][64]={
0x04000000, 0x04100402, 0x00100402, 0x00100000,
0x04100402, 0x00000002, 0x04000400, 0x00100402,
0x00100002, 0x00100400, 0x04100000, 0x04000402,
-0x00000402, 0x04000000, 0x04000002, 0x04100400,
-/* nibble 4 */
+0x00000402, 0x04000000, 0x04000002, 0x04100400},
+{ /* nibble 4 */
0x02000000, 0x00004000, 0x00000100, 0x02004108,
0x02004008, 0x02000100, 0x00004108, 0x02004000,
0x00004000, 0x00000008, 0x02000008, 0x00004100,
@@ -124,8 +124,8 @@ static unsigned long SPtrans[8][64]={
0x02000108, 0x00000100, 0x00000000, 0x02004108,
0x02004008, 0x02004100, 0x00000108, 0x00004000,
0x00004100, 0x02004008, 0x02000100, 0x00000108,
-0x00000008, 0x00004108, 0x02004000, 0x02000008,
-/* nibble 5 */
+0x00000008, 0x00004108, 0x02004000, 0x02000008},
+{ /* nibble 5 */
0x20000010, 0x00080010, 0x00000000, 0x20080800,
0x00080010, 0x00000800, 0x20000810, 0x00080000,
0x00000810, 0x20080810, 0x00080800, 0x20000000,
@@ -141,8 +141,8 @@ static unsigned long SPtrans[8][64]={
0x20080810, 0x00080800, 0x00080000, 0x20000810,
0x20000010, 0x20080000, 0x00080810, 0x00000000,
0x00000800, 0x20000010, 0x20000810, 0x20080800,
-0x20080000, 0x00000810, 0x00000010, 0x20080010,
-/* nibble 6 */
+0x20080000, 0x00000810, 0x00000010, 0x20080010},
+{ /* nibble 6 */
0x00001000, 0x00000080, 0x00400080, 0x00400001,
0x00401081, 0x00001001, 0x00001080, 0x00000000,
0x00400000, 0x00400081, 0x00000081, 0x00401000,
@@ -158,8 +158,8 @@ static unsigned long SPtrans[8][64]={
0x00000000, 0x00400081, 0x00400080, 0x00001080,
0x00000081, 0x00001000, 0x00401081, 0x00400000,
0x00401080, 0x00000001, 0x00001001, 0x00401081,
-0x00400001, 0x00401080, 0x00401000, 0x00001001,
-/* nibble 7 */
+0x00400001, 0x00401080, 0x00401000, 0x00001001},
+{ /* nibble 7 */
0x08200020, 0x08208000, 0x00008020, 0x00000000,
0x08008000, 0x00200020, 0x08200000, 0x08208020,
0x00000020, 0x08000000, 0x00208000, 0x00008020,
@@ -175,9 +175,10 @@ static unsigned long SPtrans[8][64]={
0x08208020, 0x00200000, 0x08200000, 0x08000020,
0x00208000, 0x00008020, 0x08008020, 0x08200000,
0x00000020, 0x08208000, 0x00208020, 0x00000000,
-0x08000000, 0x08200020, 0x00008000, 0x00208020};
+0x08000000, 0x08200020, 0x00008000, 0x00208020}
+};
static unsigned long skb[8][64]={
-/* for C bits (numbered as per FIPS 46) 1 2 3 4 5 6 */
+{ /* for C bits (numbered as per FIPS 46) 1 2 3 4 5 6 */
0x00000000,0x00000010,0x20000000,0x20000010,
0x00010000,0x00010010,0x20010000,0x20010010,
0x00000800,0x00000810,0x20000800,0x20000810,
@@ -193,8 +194,8 @@ static unsigned long skb[8][64]={
0x00080020,0x00080030,0x20080020,0x20080030,
0x00090020,0x00090030,0x20090020,0x20090030,
0x00080820,0x00080830,0x20080820,0x20080830,
-0x00090820,0x00090830,0x20090820,0x20090830,
-/* for C bits (numbered as per FIPS 46) 7 8 10 11 12 13 */
+0x00090820,0x00090830,0x20090820,0x20090830},
+{ /* for C bits (numbered as per FIPS 46) 7 8 10 11 12 13 */
0x00000000,0x02000000,0x00002000,0x02002000,
0x00200000,0x02200000,0x00202000,0x02202000,
0x00000004,0x02000004,0x00002004,0x02002004,
@@ -210,8 +211,8 @@ static unsigned long skb[8][64]={
0x10000400,0x12000400,0x10002400,0x12002400,
0x10200400,0x12200400,0x10202400,0x12202400,
0x10000404,0x12000404,0x10002404,0x12002404,
-0x10200404,0x12200404,0x10202404,0x12202404,
-/* for C bits (numbered as per FIPS 46) 14 15 16 17 19 20 */
+0x10200404,0x12200404,0x10202404,0x12202404},
+{ /* for C bits (numbered as per FIPS 46) 14 15 16 17 19 20 */
0x00000000,0x00000001,0x00040000,0x00040001,
0x01000000,0x01000001,0x01040000,0x01040001,
0x00000002,0x00000003,0x00040002,0x00040003,
@@ -227,8 +228,8 @@ static unsigned long skb[8][64]={
0x08000200,0x08000201,0x08040200,0x08040201,
0x09000200,0x09000201,0x09040200,0x09040201,
0x08000202,0x08000203,0x08040202,0x08040203,
-0x09000202,0x09000203,0x09040202,0x09040203,
-/* for C bits (numbered as per FIPS 46) 21 23 24 26 27 28 */
+0x09000202,0x09000203,0x09040202,0x09040203},
+{ /* for C bits (numbered as per FIPS 46) 21 23 24 26 27 28 */
0x00000000,0x00100000,0x00000100,0x00100100,
0x00000008,0x00100008,0x00000108,0x00100108,
0x00001000,0x00101000,0x00001100,0x00101100,
@@ -244,8 +245,8 @@ static unsigned long skb[8][64]={
0x04020000,0x04120000,0x04020100,0x04120100,
0x04020008,0x04120008,0x04020108,0x04120108,
0x04021000,0x04121000,0x04021100,0x04121100,
-0x04021008,0x04121008,0x04021108,0x04121108,
-/* for D bits (numbered as per FIPS 46) 1 2 3 4 5 6 */
+0x04021008,0x04121008,0x04021108,0x04121108},
+{ /* for D bits (numbered as per FIPS 46) 1 2 3 4 5 6 */
0x00000000,0x10000000,0x00010000,0x10010000,
0x00000004,0x10000004,0x00010004,0x10010004,
0x20000000,0x30000000,0x20010000,0x30010000,
@@ -261,8 +262,8 @@ static unsigned long skb[8][64]={
0x00101000,0x10101000,0x00111000,0x10111000,
0x00101004,0x10101004,0x00111004,0x10111004,
0x20101000,0x30101000,0x20111000,0x30111000,
-0x20101004,0x30101004,0x20111004,0x30111004,
-/* for D bits (numbered as per FIPS 46) 8 9 11 12 13 14 */
+0x20101004,0x30101004,0x20111004,0x30111004},
+{ /* for D bits (numbered as per FIPS 46) 8 9 11 12 13 14 */
0x00000000,0x08000000,0x00000008,0x08000008,
0x00000400,0x08000400,0x00000408,0x08000408,
0x00020000,0x08020000,0x00020008,0x08020008,
@@ -278,8 +279,8 @@ static unsigned long skb[8][64]={
0x02000001,0x0A000001,0x02000009,0x0A000009,
0x02000401,0x0A000401,0x02000409,0x0A000409,
0x02020001,0x0A020001,0x02020009,0x0A020009,
-0x02020401,0x0A020401,0x02020409,0x0A020409,
-/* for D bits (numbered as per FIPS 46) 16 17 18 19 20 21 */
+0x02020401,0x0A020401,0x02020409,0x0A020409},
+{ /* for D bits (numbered as per FIPS 46) 16 17 18 19 20 21 */
0x00000000,0x00000100,0x00080000,0x00080100,
0x01000000,0x01000100,0x01080000,0x01080100,
0x00000010,0x00000110,0x00080010,0x00080110,
@@ -295,8 +296,8 @@ static unsigned long skb[8][64]={
0x00200200,0x00200300,0x00280200,0x00280300,
0x01200200,0x01200300,0x01280200,0x01280300,
0x00200210,0x00200310,0x00280210,0x00280310,
-0x01200210,0x01200310,0x01280210,0x01280310,
-/* for D bits (numbered as per FIPS 46) 22 23 24 25 27 28 */
+0x01200210,0x01200310,0x01280210,0x01280310},
+{ /* for D bits (numbered as per FIPS 46) 22 23 24 25 27 28 */
0x00000000,0x04000000,0x00040000,0x04040000,
0x00000002,0x04000002,0x00040002,0x04040002,
0x00002000,0x04002000,0x00042000,0x04042000,
@@ -312,7 +313,7 @@ static unsigned long skb[8][64]={
0x00000820,0x04000820,0x00040820,0x04040820,
0x00000822,0x04000822,0x00040822,0x04040822,
0x00002820,0x04002820,0x00042820,0x04042820,
-0x00002822,0x04002822,0x00042822,0x04042822,
+0x00002822,0x04002822,0x00042822,0x04042822}
};
/* See ecb_encrypt.c for a pseudo description of these macros. */
@@ -467,7 +468,7 @@ char *
des_fcrypt(const char *buf, const char *salt, char *buff)
{
unsigned int i,j,x,y;
- unsigned long Eswap0=0,Eswap1=0;
+ unsigned long Eswap0,Eswap1;
unsigned long out[2],ll;
des_cblock key;
des_key_schedule ks;
@@ -483,16 +484,16 @@ des_fcrypt(const char *buf, const char *salt, char *buff)
* crypt to "*". This was found when replacing the crypt in
* our shared libraries. People found that the disbled
* accounts effectivly had no passwd :-(. */
- x=buff[0]=((salt[0] == '\0')?'A':salt[0]);
+ x=buff[0]=((salt[0] == '\0')?(char)'A':salt[0]);
Eswap0=con_salt[x];
- x=buff[1]=((salt[1] == '\0')?'A':salt[1]);
+ x=buff[1]=((salt[1] == '\0')?(char)'A':salt[1]);
Eswap1=con_salt[x]<<4;
for (i=0; i<8; i++)
{
c= *(buf++);
if (!c) break;
- key[i]=(c<<1);
+ key[i]=(char)(c<<1);
}
for (; i<8; i++)
key[i]=0;
diff --git a/gnu/usr.bin/perl/win32/perlhost.h b/gnu/usr.bin/perl/win32/perlhost.h
index 3b6d11d99e7..216b4bc01ac 100644
--- a/gnu/usr.bin/perl/win32/perlhost.h
+++ b/gnu/usr.bin/perl/win32/perlhost.h
@@ -2216,7 +2216,7 @@ CPerlHost::GetChildDir(void)
dTHX;
int length;
char* ptr;
- New(0, ptr, MAX_PATH+1, char);
+ Newx(ptr, MAX_PATH+1, char);
if(ptr) {
m_pvDir->GetCurrentDirectoryA(MAX_PATH+1, ptr);
length = strlen(ptr);
@@ -2263,7 +2263,7 @@ CPerlHost::CreateLocalEnvironmentStrings(VDir &vDir)
// add the additional space used by changes made to the environment
dwSize += CalculateEnvironmentSpace();
- New(1, lpStr, dwSize, char);
+ Newx(lpStr, dwSize, char);
lpPtr = lpStr;
if(lpStr != NULL) {
// build the local environment