Imported Upstream version 5.33.1 upstream/5.33.1
authorDongHun Kwak <dh0128.kwak@samsung.com>
Fri, 21 Jan 2022 04:41:36 +0000 (13:41 +0900)
committerDongHun Kwak <dh0128.kwak@samsung.com>
Fri, 21 Jan 2022 04:41:36 +0000 (13:41 +0900)
732 files changed:
.travis.yml
AUTHORS
Cross/Makefile-cross-SH
Cross/cflags-cross-arm
Cross/config.sh-arm-linux
Cross/config.sh-arm-linux-n770
EXTERN.h
INSTALL
INTERN.h
MANIFEST
META.json
META.yml
Makefile.SH
Makefile.micro
NetWare/Makefile
NetWare/config_H.wc
NetWare/interface.c
NetWare/interface.cpp
NetWare/nw5thread.h
Porting/Glossary
Porting/Maintainers.pl
Porting/Maintainers.pm
Porting/checkAUTHORS.pl
Porting/checkcfgvar.pl
Porting/config.sh
Porting/config_H
Porting/corelist.pl
Porting/epigraphs.pod
Porting/exec-bit.txt
Porting/makerel
Porting/perldelta_template.pod
Porting/pod_lib.pl
Porting/release_schedule.pod
Porting/sync-with-cpan
Porting/todo.pod
README.bs2000
README.cn
README.cygwin
README.haiku
README.macosx
README.os2
README.os390
README.symbian [deleted file]
README.vms
XSUB.h
amigaos4/amigaio.c
autodoc.pl
av.c
av.h
cpan/ExtUtils-Constant/t/Constant.t
cpan/ExtUtils-PL2Bat/lib/ExtUtils/PL2Bat.pm [new file with mode: 0644]
cpan/ExtUtils-PL2Bat/t/make_executable.t [new file with mode: 0644]
cpan/File-Path/lib/File/Path.pm
cpan/File-Path/t/Path_root.t
cpan/IPC-SysV/Makefile.PL
cpan/IPC-SysV/SysV.xs
cpan/IPC-SysV/lib/IPC/Msg.pm
cpan/IPC-SysV/lib/IPC/Semaphore.pm
cpan/IPC-SysV/lib/IPC/SharedMem.pm
cpan/IPC-SysV/lib/IPC/SysV.pm
cpan/IPC-SysV/t/ipcsysv.t
cpan/IPC-SysV/t/msg.t
cpan/IPC-SysV/t/pod.t
cpan/IPC-SysV/t/podcov.t
cpan/IPC-SysV/t/sem.t
cpan/IPC-SysV/t/shm.t
cpan/JSON-PP/lib/JSON/PP.pm
cpan/JSON-PP/lib/JSON/PP/Boolean.pm
cpan/JSON-PP/t/000_load.t
cpan/JSON-PP/t/001_utf8.t
cpan/JSON-PP/t/002_error.t
cpan/JSON-PP/t/003_types.t
cpan/JSON-PP/t/004_dwiw_encode.t
cpan/JSON-PP/t/006_pc_pretty.t
cpan/JSON-PP/t/007_pc_esc.t
cpan/JSON-PP/t/008_pc_base.t
cpan/JSON-PP/t/009_pc_extra_number.t
cpan/JSON-PP/t/010_pc_keysort.t
cpan/JSON-PP/t/011_pc_expo.t
cpan/JSON-PP/t/012_blessed.t
cpan/JSON-PP/t/013_limit.t
cpan/JSON-PP/t/014_latin1.t
cpan/JSON-PP/t/015_prefix.t
cpan/JSON-PP/t/016_tied.t
cpan/JSON-PP/t/017_relaxed.t
cpan/JSON-PP/t/019_incr.t
cpan/JSON-PP/t/020_unknown.t
cpan/JSON-PP/t/021_evans.t
cpan/JSON-PP/t/052_object.t
cpan/JSON-PP/t/099_binary.t
cpan/JSON-PP/t/104_sortby.t
cpan/JSON-PP/t/105_esc_slash.t
cpan/JSON-PP/t/106_allow_barekey.t
cpan/JSON-PP/t/107_allow_singlequote.t
cpan/JSON-PP/t/108_decode.t
cpan/JSON-PP/t/109_encode.t
cpan/JSON-PP/t/110_bignum.t
cpan/JSON-PP/t/112_upgrade.t
cpan/JSON-PP/t/113_overloaded_eq.t
cpan/JSON-PP/t/114_decode_prefix.t
cpan/JSON-PP/t/115_tie_ixhash.t
cpan/JSON-PP/t/116_incr_parse_fixed.t
cpan/JSON-PP/t/117_numbers.t
cpan/JSON-PP/t/118_boolean_values.t
cpan/JSON-PP/t/gh_28_json_test_suite.t
cpan/JSON-PP/t/gh_29_trailing_false_value.t
cpan/JSON-PP/t/rt_116998_wrong_character_offset.t
cpan/JSON-PP/t/rt_90071_incr_parse.t
cpan/JSON-PP/t/zero-mojibake.t
cpan/Math-Complex/lib/Math/Complex.pm
cpan/Math-Complex/t/Complex.t
cpan/Math-Complex/t/Trig.t
cpan/Math-Complex/t/underbar.t
cpan/Pod-Usage/lib/Pod/Usage.pm
cpan/Pod-Usage/scripts/pod2usage.PL
cpan/Pod-Usage/t/pod/pod2usage.xr
cpan/Pod-Usage/t/pod/pod2usage2.t
cpan/Pod-Usage/t/pod/testp2pt.pl
cpan/Socket/Socket.pm
cpan/Socket/t/Socket.t
cpan/Socket/t/getaddrinfo.t
cpan/Socket/t/getnameinfo.t
cpan/Socket/t/ip_mreq.t
cpan/Socket/t/ipv6_mreq.t
cpan/Socket/t/sockaddr.t
cpan/Socket/t/socketpair.t
cygwin/cygwin.c
dist/Data-Dumper/Dumper.pm
dist/Data-Dumper/Dumper.xs
dist/Devel-PPPort/Changes
dist/Devel-PPPort/HACKERS
dist/Devel-PPPort/Makefile.PL
dist/Devel-PPPort/PPPort_pm.PL
dist/Devel-PPPort/devel/devtools.pl
dist/Devel-PPPort/devel/mkapidoc.pl [changed mode: 0644->0755]
dist/Devel-PPPort/devel/mkppport_fnc.pl
dist/Devel-PPPort/devel/regenerate
dist/Devel-PPPort/devel/scanprov
dist/Devel-PPPort/devel/update_release_date.pl [new file with mode: 0755]
dist/Devel-PPPort/mktests.PL
dist/Devel-PPPort/parts/apicheck.pl
dist/Devel-PPPort/parts/apidoc.fnc
dist/Devel-PPPort/parts/base/5003007
dist/Devel-PPPort/parts/base/5004000
dist/Devel-PPPort/parts/base/5004001
dist/Devel-PPPort/parts/base/5004002
dist/Devel-PPPort/parts/base/5004004
dist/Devel-PPPort/parts/base/5004005
dist/Devel-PPPort/parts/base/5005000
dist/Devel-PPPort/parts/base/5005002
dist/Devel-PPPort/parts/base/5005003
dist/Devel-PPPort/parts/base/5005004
dist/Devel-PPPort/parts/base/5006000
dist/Devel-PPPort/parts/base/5006001
dist/Devel-PPPort/parts/base/5007000
dist/Devel-PPPort/parts/base/5007001
dist/Devel-PPPort/parts/base/5007002
dist/Devel-PPPort/parts/base/5007003
dist/Devel-PPPort/parts/base/5008000
dist/Devel-PPPort/parts/base/5008001
dist/Devel-PPPort/parts/base/5008002
dist/Devel-PPPort/parts/base/5008009
dist/Devel-PPPort/parts/base/5009000
dist/Devel-PPPort/parts/base/5009001
dist/Devel-PPPort/parts/base/5009002
dist/Devel-PPPort/parts/base/5009003
dist/Devel-PPPort/parts/base/5009004
dist/Devel-PPPort/parts/base/5009005
dist/Devel-PPPort/parts/base/5010000
dist/Devel-PPPort/parts/base/5010001
dist/Devel-PPPort/parts/base/5011000
dist/Devel-PPPort/parts/base/5011001
dist/Devel-PPPort/parts/base/5011002
dist/Devel-PPPort/parts/base/5011004
dist/Devel-PPPort/parts/base/5011005
dist/Devel-PPPort/parts/base/5013000
dist/Devel-PPPort/parts/base/5013001
dist/Devel-PPPort/parts/base/5013002
dist/Devel-PPPort/parts/base/5013003
dist/Devel-PPPort/parts/base/5013004
dist/Devel-PPPort/parts/base/5013005
dist/Devel-PPPort/parts/base/5013006
dist/Devel-PPPort/parts/base/5013007
dist/Devel-PPPort/parts/base/5013008
dist/Devel-PPPort/parts/base/5013009
dist/Devel-PPPort/parts/base/5013010
dist/Devel-PPPort/parts/base/5013011
dist/Devel-PPPort/parts/base/5014000
dist/Devel-PPPort/parts/base/5015000
dist/Devel-PPPort/parts/base/5015001
dist/Devel-PPPort/parts/base/5015002
dist/Devel-PPPort/parts/base/5015003
dist/Devel-PPPort/parts/base/5015004
dist/Devel-PPPort/parts/base/5015005
dist/Devel-PPPort/parts/base/5015006
dist/Devel-PPPort/parts/base/5015007
dist/Devel-PPPort/parts/base/5015008
dist/Devel-PPPort/parts/base/5015009
dist/Devel-PPPort/parts/base/5016000
dist/Devel-PPPort/parts/base/5017000
dist/Devel-PPPort/parts/base/5017001
dist/Devel-PPPort/parts/base/5017002
dist/Devel-PPPort/parts/base/5017003
dist/Devel-PPPort/parts/base/5017004
dist/Devel-PPPort/parts/base/5017005
dist/Devel-PPPort/parts/base/5017006
dist/Devel-PPPort/parts/base/5017007
dist/Devel-PPPort/parts/base/5017008
dist/Devel-PPPort/parts/base/5017009
dist/Devel-PPPort/parts/base/5017010
dist/Devel-PPPort/parts/base/5017011
dist/Devel-PPPort/parts/base/5018000
dist/Devel-PPPort/parts/base/5019001
dist/Devel-PPPort/parts/base/5019002
dist/Devel-PPPort/parts/base/5019003
dist/Devel-PPPort/parts/base/5019004
dist/Devel-PPPort/parts/base/5019005
dist/Devel-PPPort/parts/base/5019006
dist/Devel-PPPort/parts/base/5019007
dist/Devel-PPPort/parts/base/5019008
dist/Devel-PPPort/parts/base/5019009
dist/Devel-PPPort/parts/base/5019010
dist/Devel-PPPort/parts/base/5020000
dist/Devel-PPPort/parts/base/5021001
dist/Devel-PPPort/parts/base/5021002
dist/Devel-PPPort/parts/base/5021003
dist/Devel-PPPort/parts/base/5021004
dist/Devel-PPPort/parts/base/5021005
dist/Devel-PPPort/parts/base/5021006
dist/Devel-PPPort/parts/base/5021007
dist/Devel-PPPort/parts/base/5021008
dist/Devel-PPPort/parts/base/5021009
dist/Devel-PPPort/parts/base/5021010
dist/Devel-PPPort/parts/base/5023000
dist/Devel-PPPort/parts/base/5023001
dist/Devel-PPPort/parts/base/5023002
dist/Devel-PPPort/parts/base/5023003
dist/Devel-PPPort/parts/base/5023005
dist/Devel-PPPort/parts/base/5023006
dist/Devel-PPPort/parts/base/5023007
dist/Devel-PPPort/parts/base/5023008
dist/Devel-PPPort/parts/base/5023009
dist/Devel-PPPort/parts/base/5024000
dist/Devel-PPPort/parts/base/5025001
dist/Devel-PPPort/parts/base/5025002
dist/Devel-PPPort/parts/base/5025003
dist/Devel-PPPort/parts/base/5025004
dist/Devel-PPPort/parts/base/5025005
dist/Devel-PPPort/parts/base/5025006
dist/Devel-PPPort/parts/base/5025007
dist/Devel-PPPort/parts/base/5025008
dist/Devel-PPPort/parts/base/5025009
dist/Devel-PPPort/parts/base/5025010
dist/Devel-PPPort/parts/base/5025011
dist/Devel-PPPort/parts/base/5025012
dist/Devel-PPPort/parts/base/5027001
dist/Devel-PPPort/parts/base/5027002
dist/Devel-PPPort/parts/base/5027003
dist/Devel-PPPort/parts/base/5027004
dist/Devel-PPPort/parts/base/5027005
dist/Devel-PPPort/parts/base/5027006
dist/Devel-PPPort/parts/base/5027007
dist/Devel-PPPort/parts/base/5027008
dist/Devel-PPPort/parts/base/5027009
dist/Devel-PPPort/parts/base/5027010
dist/Devel-PPPort/parts/base/5027011
dist/Devel-PPPort/parts/base/5028002 [new file with mode: 0644]
dist/Devel-PPPort/parts/base/5028003 [new file with mode: 0644]
dist/Devel-PPPort/parts/base/5029000
dist/Devel-PPPort/parts/base/5029001
dist/Devel-PPPort/parts/base/5029002
dist/Devel-PPPort/parts/base/5029003
dist/Devel-PPPort/parts/base/5029004
dist/Devel-PPPort/parts/base/5029005
dist/Devel-PPPort/parts/base/5029006
dist/Devel-PPPort/parts/base/5029007
dist/Devel-PPPort/parts/base/5029008
dist/Devel-PPPort/parts/base/5029009
dist/Devel-PPPort/parts/base/5029010
dist/Devel-PPPort/parts/base/5030001 [new file with mode: 0644]
dist/Devel-PPPort/parts/base/5030002 [new file with mode: 0644]
dist/Devel-PPPort/parts/base/5030003 [new file with mode: 0644]
dist/Devel-PPPort/parts/base/5031000 [new file with mode: 0644]
dist/Devel-PPPort/parts/base/5031001
dist/Devel-PPPort/parts/base/5031002
dist/Devel-PPPort/parts/base/5031004
dist/Devel-PPPort/parts/base/5031005
dist/Devel-PPPort/parts/base/5031006
dist/Devel-PPPort/parts/base/5031007
dist/Devel-PPPort/parts/base/5031008
dist/Devel-PPPort/parts/base/5031009 [new file with mode: 0644]
dist/Devel-PPPort/parts/base/5031010 [new file with mode: 0644]
dist/Devel-PPPort/parts/base/5031011 [new file with mode: 0644]
dist/Devel-PPPort/parts/base/5032000 [new file with mode: 0644]
dist/Devel-PPPort/parts/base/5033000 [new file with mode: 0644]
dist/Devel-PPPort/parts/base/5033001 [new file with mode: 0644]
dist/Devel-PPPort/parts/base/5033002 [new file with mode: 0644]
dist/Devel-PPPort/parts/embed.fnc
dist/Devel-PPPort/parts/inc/call
dist/Devel-PPPort/parts/inc/cop
dist/Devel-PPPort/parts/inc/format
dist/Devel-PPPort/parts/inc/gv
dist/Devel-PPPort/parts/inc/inctools
dist/Devel-PPPort/parts/inc/locale
dist/Devel-PPPort/parts/inc/magic
dist/Devel-PPPort/parts/inc/mess
dist/Devel-PPPort/parts/inc/misc
dist/Devel-PPPort/parts/inc/newSVpv
dist/Devel-PPPort/parts/inc/ppphbin
dist/Devel-PPPort/parts/inc/ppphdoc
dist/Devel-PPPort/parts/inc/ppphtest
dist/Devel-PPPort/parts/inc/pv_tools
dist/Devel-PPPort/parts/inc/sv_xpvf
dist/Devel-PPPort/parts/inc/utf8
dist/Devel-PPPort/parts/inc/uv
dist/Devel-PPPort/parts/inc/variables
dist/Devel-PPPort/parts/inc/version
dist/Devel-PPPort/parts/inc/warn
dist/Devel-PPPort/parts/ppport.fnc
dist/Devel-PPPort/parts/ppptools.pl
dist/Devel-PPPort/parts/todo/5003007
dist/Devel-PPPort/parts/todo/5004000
dist/Devel-PPPort/parts/todo/5005000
dist/Devel-PPPort/parts/todo/5006000
dist/Devel-PPPort/parts/todo/5006001
dist/Devel-PPPort/parts/todo/5007001
dist/Devel-PPPort/parts/todo/5007002
dist/Devel-PPPort/parts/todo/5007003
dist/Devel-PPPort/parts/todo/5008001
dist/Devel-PPPort/parts/todo/5008009
dist/Devel-PPPort/parts/todo/5009000
dist/Devel-PPPort/parts/todo/5009003
dist/Devel-PPPort/parts/todo/5009004
dist/Devel-PPPort/parts/todo/5009005
dist/Devel-PPPort/parts/todo/5010000
dist/Devel-PPPort/parts/todo/5010001
dist/Devel-PPPort/parts/todo/5011000
dist/Devel-PPPort/parts/todo/5011002
dist/Devel-PPPort/parts/todo/5013006
dist/Devel-PPPort/parts/todo/5013007
dist/Devel-PPPort/parts/todo/5013008
dist/Devel-PPPort/parts/todo/5015003
dist/Devel-PPPort/parts/todo/5017001
dist/Devel-PPPort/parts/todo/5017007
dist/Devel-PPPort/parts/todo/5021006
dist/Devel-PPPort/parts/todo/5023000
dist/Devel-PPPort/parts/todo/5023008
dist/Devel-PPPort/parts/todo/5027008
dist/Devel-PPPort/parts/todo/5028002 [new file with mode: 0644]
dist/Devel-PPPort/parts/todo/5028003 [new file with mode: 0644]
dist/Devel-PPPort/parts/todo/5030001 [new file with mode: 0644]
dist/Devel-PPPort/parts/todo/5030002 [new file with mode: 0644]
dist/Devel-PPPort/parts/todo/5030003 [new file with mode: 0644]
dist/Devel-PPPort/parts/todo/5031000 [new file with mode: 0644]
dist/Devel-PPPort/parts/todo/5031005
dist/Devel-PPPort/parts/todo/5031007
dist/Devel-PPPort/parts/todo/5031009 [new file with mode: 0644]
dist/Devel-PPPort/parts/todo/5031010 [new file with mode: 0644]
dist/Devel-PPPort/parts/todo/5031011 [new file with mode: 0644]
dist/Devel-PPPort/parts/todo/5032000 [new file with mode: 0644]
dist/Devel-PPPort/parts/todo/5033000 [new file with mode: 0644]
dist/Devel-PPPort/parts/todo/5033001 [new file with mode: 0644]
dist/Devel-PPPort/parts/todo/5033002 [new file with mode: 0644]
dist/Devel-PPPort/t/01_test.t [deleted file]
dist/Devel-PPPort/t/HvNAME.t [deleted file]
dist/Devel-PPPort/t/MY_CXT.t [deleted file]
dist/Devel-PPPort/t/SvPV.t [deleted file]
dist/Devel-PPPort/t/SvREFCNT.t [deleted file]
dist/Devel-PPPort/t/Sv_set.t [deleted file]
dist/Devel-PPPort/t/call.t [deleted file]
dist/Devel-PPPort/t/cop.t [deleted file]
dist/Devel-PPPort/t/exception.t [deleted file]
dist/Devel-PPPort/t/format.t [deleted file]
dist/Devel-PPPort/t/grok.t [deleted file]
dist/Devel-PPPort/t/gv.t [deleted file]
dist/Devel-PPPort/t/limits.t [deleted file]
dist/Devel-PPPort/t/locale.t [deleted file]
dist/Devel-PPPort/t/mPUSH.t [deleted file]
dist/Devel-PPPort/t/magic.t [deleted file]
dist/Devel-PPPort/t/memory.t [deleted file]
dist/Devel-PPPort/t/mess.t [deleted file]
dist/Devel-PPPort/t/misc.t [deleted file]
dist/Devel-PPPort/t/newCONSTSUB.t [deleted file]
dist/Devel-PPPort/t/newRV.t [deleted file]
dist/Devel-PPPort/t/newSV_type.t [deleted file]
dist/Devel-PPPort/t/newSVpv.t [deleted file]
dist/Devel-PPPort/t/podtest.t [deleted file]
dist/Devel-PPPort/t/ppphtest.t [deleted file]
dist/Devel-PPPort/t/pv_tools.t [deleted file]
dist/Devel-PPPort/t/pvs.t [deleted file]
dist/Devel-PPPort/t/shared_pv.t [deleted file]
dist/Devel-PPPort/t/snprintf.t [deleted file]
dist/Devel-PPPort/t/sprintf.t [deleted file]
dist/Devel-PPPort/t/strlfuncs.t [deleted file]
dist/Devel-PPPort/t/sv_xpvf.t [deleted file]
dist/Devel-PPPort/t/threads.t [deleted file]
dist/Devel-PPPort/t/utf8.t [deleted file]
dist/Devel-PPPort/t/uv.t [deleted file]
dist/Devel-PPPort/t/variables.t [deleted file]
dist/Devel-PPPort/t/warn.t [deleted file]
dist/Dumpvalue/t/Dumpvalue.t
dist/Exporter/lib/Exporter.pm
dist/Exporter/lib/Exporter/Heavy.pm
dist/Exporter/t/Exporter.t
dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm
dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Constants.pm
dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/CountLines.pm
dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Eval.pm
dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Utilities.pm
dist/ExtUtils-ParseXS/t/001-basic.t
dist/ExtUtils-ParseXS/t/002-more.t
dist/ExtUtils-ParseXS/t/003-usage.t
dist/IO/ChangeLog
dist/IO/IO.pm
dist/IO/IO.xs
dist/IO/Makefile.PL
dist/IO/lib/IO/Socket.pm
dist/IO/lib/IO/Socket/UNIX.pm
dist/IO/t/cachepropagate-unix.t
dist/IO/t/io_const.t
dist/IO/t/io_dir.t
dist/IO/t/io_dup.t
dist/IO/t/io_linenum.t
dist/IO/t/io_multihomed.t
dist/IO/t/io_pipe.t
dist/IO/t/io_poll.t
dist/IO/t/io_sel.t
dist/IO/t/io_sock.t
dist/IO/t/io_taint.t
dist/IO/t/io_tell.t
dist/IO/t/io_unix.t
dist/IO/t/io_utf8.t
dist/IO/t/io_utf8argv.t
dist/IO/t/io_xs.t
dist/Module-CoreList/Changes
dist/Module-CoreList/corelist
dist/Module-CoreList/lib/Module/CoreList.pm
dist/Module-CoreList/lib/Module/CoreList/Utils.pm
dist/Net-Ping/Changes
dist/Net-Ping/lib/Net/Ping.pm
dist/Net-Ping/t/450_service.t
dist/Safe/Safe.pm
dist/Safe/t/safeutf8.t
dist/Storable/Storable.pm
dist/Storable/Storable.xs
dist/Storable/t/malice.t
dist/Time-HiRes/Changes
dist/Time-HiRes/HiRes.pm
dist/Time-HiRes/HiRes.xs
dist/Time-HiRes/Makefile.PL
dist/Unicode-Normalize/Normalize.pm
dist/Unicode-Normalize/Normalize.xs
dist/threads-shared/lib/threads/shared.pm
dist/threads-shared/shared.xs
dist/threads/lib/threads.pm
dist/threads/threads.xs
doio.c
doop.c
dump.c
ebcdic_tables.h
embed.fnc
embed.h
embedvar.h
ext/B/B.pm
ext/B/B.xs
ext/B/t/OptreeCheck.pm
ext/B/t/concise.t
ext/B/t/showlex.t
ext/Devel-Peek/Peek.pm
ext/Devel-Peek/Peek.xs
ext/DynaLoader/DynaLoader_pm.PL
ext/DynaLoader/dl_symbian.xs [deleted file]
ext/DynaLoader/t/DynaLoader.t
ext/Errno/Errno_pm.PL
ext/ExtUtils-Miniperl/lib/ExtUtils/Miniperl.pm
ext/Fcntl/Fcntl.pm
ext/Fcntl/Fcntl.xs
ext/File-Glob/t/basic.t
ext/Hash-Util-FieldHash/FieldHash.xs
ext/Hash-Util-FieldHash/lib/Hash/Util/FieldHash.pm
ext/Hash-Util/Util.xs
ext/Hash-Util/lib/Hash/Util.pm
ext/POSIX/POSIX.xs
ext/POSIX/lib/POSIX.pm
ext/POSIX/t/export.t
ext/PerlIO-mmap/mmap.pm
ext/PerlIO-mmap/mmap.xs
ext/SDBM_File/t/corrupt.t
ext/XS-APItest/APItest.pm
ext/XS-APItest/APItest.xs
ext/XS-APItest/t/hv_macro.t
ext/XS-APItest/t/utf8_warn_base.pl
ext/XS-APItest/t/xsub_h.t
ext/XS-Typemap/Typemap.pm
ext/XS-Typemap/Typemap.xs
ext/mro/mro.pm
ext/mro/mro.xs
feature.h
globals.c
globvar.sym
gv.c
haiku/Haiku/Haiku.pm
haiku/Haiku/Haiku.xs
handy.h
hints/catamount.sh
hints/darwin.sh
hints/haiku.sh
hints/linux.sh
hv.c
hv_func.h
inline.h
intrpvar.h
lib/B/Deparse.pm
lib/B/Deparse.t
lib/B/Op_private.pm
lib/ExtUtils/t/Embed.t
lib/feature.pm
lib/perl5db.pl
lib/perl5db.t
lib/perl5db/t/gh-17661 [new file with mode: 0644]
lib/perl5db/t/gh-17661b [new file with mode: 0644]
lib/perl5db/t/test-a-statement-3 [new file with mode: 0644]
lib/strict.pm
lib/warnings.pm
locale.c
make_ext.pl
makedef.pl
malloc.c
mg.c
miniperlmain.c
myconfig.SH
op.c
op.h
op_reg_common.h
opcode.h
os2/Makefile.SHs
os2/os2.c
os2/os2ish.h
pad.c
patchlevel.h
perl.c
perl.h
perl_siphash.h [new file with mode: 0644]
perlapi.c [deleted file]
perlapi.h
perlio.c
perlvars.h
perly.act
perly.c
perly.h
perly.tab
perly.y
plan9/9front.patch [new file with mode: 0644]
plan9/aperl
plan9/buildinfo
plan9/config.plan9
plan9/config_sh.sample
plan9/exclude
plan9/fndvers [changed mode: 0644->0755]
plan9/genconfig.pl
plan9/math.h [new file with mode: 0644]
plan9/mkfile
plan9/plan9.c
plan9/plan9ish.h
plan9/setup.rc [changed mode: 0644->0755]
plan9/uninstall.rc [new file with mode: 0755]
plan9/versnum
pod/perl.pod
pod/perl5320delta.pod
pod/perl5330delta.pod [new file with mode: 0644]
pod/perldebguts.pod
pod/perldelta.pod
pod/perldiag.pod
pod/perlexperiment.pod
pod/perlfunc.pod
pod/perlguts.pod
pod/perlhack.pod
pod/perlhacktips.pod
pod/perlhist.pod
pod/perlop.pod
pod/perlpacktut.pod
pod/perlport.pod
pod/perlrecharclass.pod
pod/perlref.pod
pod/perlrun.pod
pp.c
pp.h
pp_ctl.c
pp_hot.c
pp_pack.c
pp_sys.c
proto.h
reentr.c
reentr.h
regcomp.c
regcomp.h
regen/ebcdic.pl
regen/embed.pl
regen/feature.pl
regen/op_private
regen/opcode.pl
regen/reentr.pl
regen/regen_lib.pl
regen/warnings.pl
regen_perly.pl
regexec.c
scope.c
scope.h
sv.c
sv.h
symbian/PerlApp.cpp [deleted file]
symbian/PerlApp.h [deleted file]
symbian/PerlApp.hrh [deleted file]
symbian/PerlAppAif.rss [deleted file]
symbian/PerlBase.cpp [deleted file]
symbian/PerlBase.h [deleted file]
symbian/PerlBase.pod [deleted file]
symbian/PerlRecog.cpp [deleted file]
symbian/PerlRecog.mmp [deleted file]
symbian/PerlUi.cpp [deleted file]
symbian/PerlUi.h [deleted file]
symbian/PerlUi.hrh [deleted file]
symbian/PerlUiS60.rss [deleted file]
symbian/PerlUiS80.rss [deleted file]
symbian/PerlUiS90.rss [deleted file]
symbian/PerlUiUIQ.rss [deleted file]
symbian/PerlUtil.cpp [deleted file]
symbian/PerlUtil.h [deleted file]
symbian/PerlUtil.pod [deleted file]
symbian/README [deleted file]
symbian/TODO [deleted file]
symbian/bld.inf [deleted file]
symbian/config.pl [deleted file]
symbian/config.sh [deleted file]
symbian/cwd.pl [deleted file]
symbian/demo_pl [deleted file]
symbian/ext/Moped/Msg/Msg.mmp [deleted file]
symbian/ext/Moped/Msg/Msg.pkg [deleted file]
symbian/ext/Moped/Msg/Msg.pm [deleted file]
symbian/ext/Moped/Msg/Msg.xs [deleted file]
symbian/ext/Moped/Msg/README [deleted file]
symbian/ext/Moped/Msg/bld.inf [deleted file]
symbian/ext/Moped/Msg/location.pl [deleted file]
symbian/find_writeable_data.pl [deleted file]
symbian/hexdump.pl [deleted file]
symbian/install.cfg [deleted file]
symbian/makesis.pl [deleted file]
symbian/port.pl [deleted file]
symbian/sanity.pl [deleted file]
symbian/sdk.pl [deleted file]
symbian/sisify.pl [deleted file]
symbian/symbian_dll.cpp [deleted file]
symbian/symbian_proto.h [deleted file]
symbian/symbian_stubs.c [deleted file]
symbian/symbian_stubs.h [deleted file]
symbian/symbian_utils.cpp [deleted file]
symbian/symbianish.h [deleted file]
symbian/uid.pl [deleted file]
symbian/version.pl [deleted file]
symbian/xsbuild.pl [deleted file]
t/TEST
t/comp/require.t
t/comp/use.t
t/lib/feature/multidimensional [new file with mode: 0644]
t/lib/warnings/sv
t/loc_tools.pl
t/op/aassign.t
t/op/args.t
t/op/bop.t
t/op/groups.t
t/op/infnan.t
t/op/lex_assign.t
t/op/local.t
t/op/magic.t
t/op/pack.t
t/op/ref.t
t/op/taint.t
t/op/while.t
t/porting/customized.dat
t/porting/globvar.t
t/porting/known_pod_issues.dat
t/porting/libperl.t
t/porting/pod_rules.t
t/porting/readme.t
t/porting/regen.t
t/re/re_tests
t/re/reg_mesg.t
t/test.pl
thread.h
time64.c
time64.h
toke.c
universal.c
utf8.c
utf8.h
util.c
util.h
utils/corelist.PL
utils/cpan.PL
utils/enc2xs.PL
utils/encguess.PL
utils/h2ph.PL
utils/h2xs.PL
utils/instmodsh.PL
utils/json_pp.PL
utils/libnetcfg.PL
utils/perlbug.PL
utils/perlivp.PL
utils/piconv.PL
utils/pl2pm.PL
utils/pod2html.PL
utils/prove.PL
utils/ptar.PL
utils/ptardiff.PL
utils/ptargrep.PL
utils/shasum.PL
utils/splain.PL
utils/streamzip.PL
utils/xsubpp.PL
utils/zipdetails.PL
vms/descrip_mms.template
vms/vms.c
vutil.h
win32/GNUmakefile
win32/Makefile
win32/bin/pl2bat.pl
win32/makefile.mk
win32/perllib.c
win32/pod.mak
win32/win32.c
win32/win32.h
win32/win32thread.h

index 9115d30..df0d5cf 100644 (file)
@@ -21,8 +21,6 @@ env:
         # threads often cause build issues
         - CONFIGURE_ARGS='-Uusethreads'
         - CONFIGURE_ARGS='-Dusethreads'
-        # it's easy to miss dVAR
-        - CONFIGURE_ARGS='-DPERL_GLOBAL_STRUCT_PRIVATE'
         # test scripts can be sensitive to PERL_UNICODE, and check long doubles
         - CONFIGURE_ARGS='-Duseshrplib -Dusesitecustomize -Duselongdouble' PERL_UNICODE='' LANG='en_US.UTF-8'
         # we've rarely had a problem with non-Englush locales, and exercise quadmath
diff --git a/AUTHORS b/AUTHORS
index e4ea405..9738235 100644 (file)
--- a/AUTHORS
+++ b/AUTHORS
@@ -31,6 +31,7 @@ Abir Viqar                     <abiviq@hushmail.com>
 Achim Bohnet                   <ach@mpe.mpg.de>
 Achim Gratz                    <achim.gratz@stromeko.de>
 Adam Flott                     <adam@npjh.com>
+Adam Hartley                   @BytesGuy
 Adam Kennedy                   <adam@ali.as>
 Adam Krolnik                   <adamk@gypsy.cyrix.com>
 Adam Milner                    <carmiac@nmt.edu>
@@ -247,6 +248,7 @@ Christian Burger               <burger@terra.mpikg-teltow.mpg.de>
 Christian Hansen               <chansen@cpan.org>
 Christian Kirsch               <ck@held.mind.de>
 Christian Millour              <cm.perl@abtela.com>
+Christian Walde (Mithaldu)     <walde.christian@gmail.com>
 Christian Winter               <bitpoet@linux-config.de>
 Christoph Lamprecht            <ch.l.ngre@online.de>
 Christophe Grosjean            <christophe.grosjean@gmail.com>
@@ -457,6 +459,7 @@ Gerrit P. Haase                <gp@familiehaase.de>
 Gideon Israel Dsouza           <gideon@cpan.org>
 Giles Lean                     <giles@nemeton.com.au>
 Gisle Aas                      <gisle@aas.no>
+vividsnow                      @vividsnow
 Glenn D. Golden                <gdg@zplane.com>
 Glenn Linderman                <perl@nevcal.com>
 Gordon J. Miller               <gjm@cray.com>
@@ -465,6 +468,7 @@ Goro Fuji                      <gfuji@cpan.org>
 Grace Lee                      <grace@hal.com>
 Graham Barr                    <gbarr@pobox.com>
 Graham Knop                    <haarg@haarg.org>
+Graham Ollis                   <plicease@cpan.org>
 Graham TerMarsch               <graham@howlingfrog.com>
 Grant McLean                   <grantm@cpan.org>
 Greg Bacon                     <gbacon@itsc.uah.edu>
@@ -537,6 +541,7 @@ Ingo Weinhold                  <ingo_weinhold@gmx.de>
 Ingy döt Net                   <ingy@ttul.org>
 insecure                       <insecure@mail.od.ua>
 Irving Reid                    <irving@tor.securecomputing.com>
+Ivan Baidakou                  <the.dmol@yandex.by>
 Ivan Kurmanov                  <kurmanov@openlib.org>
 Ivan Pozdeev                   <vano@mail.mipt.ru>
 Ivan Tubert-Brohman            <itub@cpan.org>
@@ -1042,6 +1047,7 @@ Rafael Garcia-Suarez           <rgs@consttype.org>
 Rainer Keuchel                 <keuchel@allgeier.com>
 Rainer Orth                    <ro@TechFak.Uni-Bielefeld.DE>
 Rainer Tammer                  <tammer@tammer.net>
+raiph                          <raiph.mellor@gmail.com>
 Rajesh Mandalemula             <rajesh.mandalemula@deshaw.com>
 Rajesh Vaidheeswarran          <rv@gnu.org>
 Ralf S. Engelschall            <rse@engelschall.com>
@@ -1099,6 +1105,7 @@ Rocco Caputo                   <troc@netrus.net>
 Roderick Schertler             <roderick@argon.org>
 Rodger Anderson                <rodger@boi.hp.com>
 Rodolfo Carvalho               <rhcarvalho@gmail.com>
+Romano                         <unobe@cpan.org>
 Ronald F. Guilmette            <rfg@monkeys.com>
 Ronald J. Kimball              <rjk@linguist.dartmouth.edu>
 Ronald Schmidt                 <RonaldWS@aol.com>
@@ -1125,6 +1132,7 @@ Santtu Ojanperä                <santtuojanpera98@gmail.com>
 Sawyer X                       <xsawyerx@cpan.org>
 Schuyler Erle                  <schuyler@oreilly.com>
 Scott A Crosby                 <scrosby@cs.rice.edu>
+Scott Baker                    <scott@perturb.org>
 Scott Bronson                  <bronson@rinspin.com>
 Scott Gifford                  <sgifford@tir.com>
 Scott Henry                    <scotth@sgi.com>
@@ -1161,6 +1169,7 @@ Simon Parsons                  <S.Parsons@ftel.co.uk>
 Simon Schubert                 <corecode@fs.ei.tum.de>
 Sinan Unur                     <sinan@unur.com>
 Sisyphus                       <sisyphus@cpan.org>
+Sizhe Zhao                     <prc.zhao@outlook.com>
 Slaven Rezic                   <slaven@rezic.de>
 Smylers                        <smylers@stripey.com>
 Solar Designer                 <solar@openwall.com>
@@ -1260,6 +1269,7 @@ Tom Hughes                     <tom@compton.nu>
 Tom Hukins                     <tom@eborcom.com>
 Tom Phoenix                    <rootbeer@teleport.com>
 Tom Spindler                   <dogcow@isi.net>
+Tom Stellard                   <tstellar@redhat.com>
 Tom Wyant                      <wyant@cpan.org>
 Tomasz Konojacki               <me@xenu.pl>
 Tomoyuki Sadahiro              <BQW10602@nifty.com>
@@ -1291,6 +1301,7 @@ Ville Skyttä                   <scop@cs132170.pp.htv.fi>
 Vincent Pit                    <perl@profvince.com>
 Vishal Bhatia                  <vishal@deja.com>
 Vitali Peil                    <vitali.peil@uni-bielefeld.de>
+vividsnow                      <vividsnow@gmail.com>
 Vlad Harchev                   <hvv@hippo.ru>
 Vladimir Alexiev               <vladimir@cs.ualberta.ca>
 Vladimir Marek                 <vlmarek@volny.cz>
index 85fc64a..032fcd2 100644 (file)
@@ -348,14 +348,14 @@ h = $(h1) $(h2) $(h3) $(h4) $(h5)
 c1 = av.c scope.c op.c doop.c doio.c dquote.c dump.c gv.c hv.c mg.c reentr.c mro_core.c perl.c
 c2 = perly.c pp.c pp_hot.c pp_ctl.c pp_sys.c regcomp.c regexec.c utf8.c sv.c
 c3 = taint.c time64.c toke.c util.c deb.c run.c universal.c pad.c globals.c keywords.c
-c4 = perlio.c perlapi.c numeric.c mathoms.c locale.c pp_pack.c pp_sort.c
+c4 = perlio.c numeric.c mathoms.c locale.c pp_pack.c pp_sort.c
 c5 = $(mallocsrc)
 
 c = $(c1) $(c2) $(c3) $(c4) $(c5) miniperlmain.c perlmain.c opmini.c
 
 obj1 = $(mallocobj) gv$(OBJ_EXT) toke$(OBJ_EXT) perly$(OBJ_EXT) op$(OBJ_EXT) pad$(OBJ_EXT) regcomp$(OBJ_EXT) dquote$(OBJ_EXT) dump$(OBJ_EXT) util$(OBJ_EXT) mg$(OBJ_EXT) reentr$(OBJ_EXT) mro_core$(OBJ_EXT)
 obj2 = hv$(OBJ_EXT) av$(OBJ_EXT) perl$(OBJ_EXT) run$(OBJ_EXT) pp_hot$(OBJ_EXT) sv$(OBJ_EXT) pp$(OBJ_EXT) scope$(OBJ_EXT) pp_ctl$(OBJ_EXT) pp_sys$(OBJ_EXT)
-obj3 = doop$(OBJ_EXT) doio$(OBJ_EXT) regexec$(OBJ_EXT) utf8$(OBJ_EXT) taint$(OBJ_EXT) deb$(OBJ_EXT) universal$(OBJ_EXT) globals$(OBJ_EXT) perlio$(OBJ_EXT) perlapi$(OBJ_EXT) numeric$(OBJ_EXT) mathoms$(OBJ_EXT) locale$(OBJ_EXT) pp_pack$(OBJ_EXT) pp_sort$(OBJ_EXT) time64$(OBJ_EXT)
+obj3 = doop$(OBJ_EXT) doio$(OBJ_EXT) regexec$(OBJ_EXT) utf8$(OBJ_EXT) taint$(OBJ_EXT) deb$(OBJ_EXT) universal$(OBJ_EXT) globals$(OBJ_EXT) perlio$(OBJ_EXT) numeric$(OBJ_EXT) mathoms$(OBJ_EXT) locale$(OBJ_EXT) pp_pack$(OBJ_EXT) pp_sort$(OBJ_EXT) time64$(OBJ_EXT)
 
 obj = $(obj1) $(obj2) $(obj3) $(ARCHOBJS)
 
@@ -844,7 +844,7 @@ SYMH = perlvars.h intrpvar.h
 CHMOD_W = chmod +w
 
 # The following files are generated automatically
-#      embed.pl:       proto.h embed.h embedvar.h perlapi.h perlapi.c
+#      embed.pl:       proto.h embed.h embedvar.h
 #      opcode.pl:      opcode.h opnames.h pp_proto.h
 #      regcomp.pl:     regnodes.h
 #      warnings.pl:    warnings.h lib/warnings.pm
index 2fa2a45..93d4f1e 100644 (file)
@@ -88,7 +88,6 @@ for file do
     opmini) ;;
     pad) ;;
     perl) ;;
-    perlapi) ;;
     perlmain) ;;
     perly) ;;
     pp) ;;
index 947e08b..8813d1d 100644 (file)
@@ -31,12 +31,12 @@ afsroot='/afs'
 alignbytes='4'
 aphostname='/bin/hostname'
 api_revision='5'
-api_subversion='0'
+api_subversion='1'
 api_version='33'
-api_versionstring='5.33.0'
+api_versionstring='5.33.1'
 ar='ar'
-archlib='/usr/lib/perl5/5.33.0/armv4l-linux'
-archlibexp='/usr/lib/perl5/5.33.0/armv4l-linux'
+archlib='/usr/lib/perl5/5.33.1/armv4l-linux'
+archlibexp='/usr/lib/perl5/5.33.1/armv4l-linux'
 archname64=''
 archname='armv4l-linux'
 archobjs=''
@@ -55,7 +55,7 @@ castflags='0'
 cat='cat'
 cc='cc'
 cccdlflags='-fpic'
-ccdlflags='-rdynamic -Wl,-rpath,/usr/lib/perl5/5.33.0/armv4l-linux/CORE'
+ccdlflags='-rdynamic -Wl,-rpath,/usr/lib/perl5/5.33.1/armv4l-linux/CORE'
 ccflags='-fno-strict-aliasing -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64'
 ccflags_uselargefiles='-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64'
 ccname='arm-linux-gcc'
@@ -824,7 +824,7 @@ inc_version_list=' '
 inc_version_list_init='0'
 incpath=''
 inews=''
-installarchlib='./install_me_here/usr/lib/perl5/5.33.0/armv4l-linux'
+installarchlib='./install_me_here/usr/lib/perl5/5.33.1/armv4l-linux'
 installbin='./install_me_here/usr/bin'
 installhtml1dir=''
 installhtml3dir=''
@@ -832,13 +832,13 @@ installman1dir='./install_me_here/usr/share/man/man1'
 installman3dir='./install_me_here/usr/share/man/man3'
 installprefix='./install_me_here/usr'
 installprefixexp='./install_me_here/usr'
-installprivlib='./install_me_here/usr/lib/perl5/5.33.0'
+installprivlib='./install_me_here/usr/lib/perl5/5.33.1'
 installscript='./install_me_here/usr/bin'
-installsitearch='./install_me_here/usr/lib/perl5/site_perl/5.33.0/armv4l-linux'
+installsitearch='./install_me_here/usr/lib/perl5/site_perl/5.33.1/armv4l-linux'
 installsitebin='./install_me_here/usr/bin'
 installsitehtml1dir=''
 installsitehtml3dir=''
-installsitelib='./install_me_here/usr/lib/perl5/site_perl/5.33.0'
+installsitelib='./install_me_here/usr/lib/perl5/site_perl/5.33.1'
 installsiteman1dir='./install_me_here/usr/share/man/man1'
 installsiteman3dir='./install_me_here/usr/share/man/man3'
 installsitescript='./install_me_here/usr/bin'
@@ -972,8 +972,8 @@ pmake=''
 pr=''
 prefix='/usr'
 prefixexp='/usr'
-privlib='/usr/lib/perl5/5.33.0'
-privlibexp='/usr/lib/perl5/5.33.0'
+privlib='/usr/lib/perl5/5.33.1'
+privlibexp='/usr/lib/perl5/5.33.1'
 procselfexe='"/proc/self/exe"'
 prototype='define'
 ptrsize='4'
@@ -1038,17 +1038,17 @@ sig_num='0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
 sig_num_init='0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 6, 17, 29, 31, 0'
 sig_size='68'
 signal_t='void'
-sitearch='/usr/lib/perl5/site_perl/5.33.0/armv4l-linux'
-sitearchexp='/usr/lib/perl5/site_perl/5.33.0/armv4l-linux'
+sitearch='/usr/lib/perl5/site_perl/5.33.1/armv4l-linux'
+sitearchexp='/usr/lib/perl5/site_perl/5.33.1/armv4l-linux'
 sitebin='/usr/bin'
 sitebinexp='/usr/bin'
 sitehtml1dir=''
 sitehtml1direxp=''
 sitehtml3dir=''
 sitehtml3direxp=''
-sitelib='/usr/lib/perl5/site_perl/5.33.0'
+sitelib='/usr/lib/perl5/site_perl/5.33.1'
 sitelib_stem='/usr/lib/perl5/site_perl'
-sitelibexp='/usr/lib/perl5/site_perl/5.33.0'
+sitelibexp='/usr/lib/perl5/site_perl/5.33.1'
 siteman1dir='/usr/share/man/man1'
 siteman1direxp='/usr/share/man/man1'
 siteman3dir='/usr/share/man/man3'
@@ -1087,7 +1087,7 @@ stdio_stream_array=''
 strerror_r_proto='0'
 strings='/usr/include/string.h'
 submit=''
-subversion='0'
+subversion='1'
 sysman='/usr/share/man/man1'
 tail=''
 tar=''
@@ -1178,8 +1178,8 @@ vendorprefix=''
 vendorprefixexp=''
 vendorscript=''
 vendorscriptexp=''
-version='5.33.0'
-version_patchlevel_string='version 33 subversion 0'
+version='5.33.1'
+version_patchlevel_string='version 33 subversion 1'
 versiononly='undef'
 vi=''
 xlibpth='/usr/lib/386 /lib/386'
@@ -1193,9 +1193,9 @@ config_args=''
 config_argc=0
 PERL_REVISION=5
 PERL_VERSION=33
-PERL_SUBVERSION=0
+PERL_SUBVERSION=1
 PERL_API_REVISION=5
 PERL_API_VERSION=33
-PERL_API_SUBVERSION=0
+PERL_API_SUBVERSION=1
 PERL_PATCHLEVEL=
 PERL_CONFIG_SH=true
index 9e95faf..30c37cf 100644 (file)
@@ -31,12 +31,12 @@ afsroot='/afs'
 alignbytes='4'
 aphostname='/bin/hostname'
 api_revision='5'
-api_subversion='0'
+api_subversion='1'
 api_version='33'
-api_versionstring='5.33.0'
+api_versionstring='5.33.1'
 ar='ar'
-archlib='/usr/lib/perl5/5.33.0/armv4l-linux'
-archlibexp='/usr/lib/perl5/5.33.0/armv4l-linux'
+archlib='/usr/lib/perl5/5.33.1/armv4l-linux'
+archlibexp='/usr/lib/perl5/5.33.1/armv4l-linux'
 archname64=''
 archname='armv4l-linux'
 archobjs=''
@@ -54,7 +54,7 @@ castflags='0'
 cat='cat'
 cc='arm-none-linux-gnueabi-gcc'
 cccdlflags='-fpic'
-ccdlflags='-rdynamic -Wl,-rpath,/usr/lib/perl5/5.33.0/armv4l-linux/CORE'
+ccdlflags='-rdynamic -Wl,-rpath,/usr/lib/perl5/5.33.1/armv4l-linux/CORE'
 ccflags='-fno-strict-aliasing -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64'
 ccflags_uselargefiles='-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64'
 ccname='arm-linux-gcc'
@@ -822,7 +822,7 @@ inc_version_list=' '
 inc_version_list_init='0'
 incpath=''
 inews=''
-installarchlib='./install_me_here/usr/lib/perl5/5.33.0/armv4l-linux'
+installarchlib='./install_me_here/usr/lib/perl5/5.33.1/armv4l-linux'
 installbin='./install_me_here/usr/bin'
 installhtml1dir=''
 installhtml3dir=''
@@ -830,13 +830,13 @@ installman1dir='./install_me_here/usr/share/man/man1'
 installman3dir='./install_me_here/usr/share/man/man3'
 installprefix='./install_me_here/usr'
 installprefixexp='./install_me_here/usr'
-installprivlib='./install_me_here/usr/lib/perl5/5.33.0'
+installprivlib='./install_me_here/usr/lib/perl5/5.33.1'
 installscript='./install_me_here/usr/bin'
-installsitearch='./install_me_here/usr/lib/perl5/site_perl/5.33.0/armv4l-linux'
+installsitearch='./install_me_here/usr/lib/perl5/site_perl/5.33.1/armv4l-linux'
 installsitebin='./install_me_here/usr/bin'
 installsitehtml1dir=''
 installsitehtml3dir=''
-installsitelib='./install_me_here/usr/lib/perl5/site_perl/5.33.0'
+installsitelib='./install_me_here/usr/lib/perl5/site_perl/5.33.1'
 installsiteman1dir='./install_me_here/usr/share/man/man1'
 installsiteman3dir='./install_me_here/usr/share/man/man3'
 installsitescript='./install_me_here/usr/bin'
@@ -970,8 +970,8 @@ pmake=''
 pr=''
 prefix='/usr'
 prefixexp='/usr'
-privlib='/usr/lib/perl5/5.33.0'
-privlibexp='/usr/lib/perl5/5.33.0'
+privlib='/usr/lib/perl5/5.33.1'
+privlibexp='/usr/lib/perl5/5.33.1'
 procselfexe='"/proc/self/exe"'
 prototype='define'
 ptrsize='4'
@@ -1036,17 +1036,17 @@ sig_num='0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
 sig_num_init='0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 6, 17, 29, 31, 0'
 sig_size='68'
 signal_t='void'
-sitearch='/usr/lib/perl5/site_perl/5.33.0/armv4l-linux'
-sitearchexp='/usr/lib/perl5/site_perl/5.33.0/armv4l-linux'
+sitearch='/usr/lib/perl5/site_perl/5.33.1/armv4l-linux'
+sitearchexp='/usr/lib/perl5/site_perl/5.33.1/armv4l-linux'
 sitebin='/usr/bin'
 sitebinexp='/usr/bin'
 sitehtml1dir=''
 sitehtml1direxp=''
 sitehtml3dir=''
 sitehtml3direxp=''
-sitelib='/usr/lib/perl5/site_perl/5.33.0'
+sitelib='/usr/lib/perl5/site_perl/5.33.1'
 sitelib_stem='/usr/lib/perl5/site_perl'
-sitelibexp='/usr/lib/perl5/site_perl/5.33.0'
+sitelibexp='/usr/lib/perl5/site_perl/5.33.1'
 siteman1dir='/usr/share/man/man1'
 siteman1direxp='/usr/share/man/man1'
 siteman3dir='/usr/share/man/man3'
@@ -1085,7 +1085,7 @@ stdio_stream_array=''
 strerror_r_proto='0'
 strings='/usr/include/string.h'
 submit=''
-subversion='0'
+subversion='1'
 sysman='/usr/share/man/man1'
 tail=''
 tar=''
@@ -1176,8 +1176,8 @@ vendorprefix=''
 vendorprefixexp=''
 vendorscript=''
 vendorscriptexp=''
-version='5.33.0'
-version_patchlevel_string='version 33 subversion 0'
+version='5.33.1'
+version_patchlevel_string='version 33 subversion 1'
 versiononly='undef'
 vi=''
 xlibpth='/usr/lib/386 /lib/386'
@@ -1191,9 +1191,9 @@ config_args=''
 config_argc=0
 PERL_REVISION=5
 PERL_VERSION=33
-PERL_SUBVERSION=0
+PERL_SUBVERSION=1
 PERL_API_REVISION=5
 PERL_API_VERSION=33
-PERL_API_SUBVERSION=0
+PERL_API_SUBVERSION=1
 PERL_PATCHLEVEL=
 PERL_CONFIG_SH=true
index 4406b29..7946323 100644 (file)
--- a/EXTERN.h
+++ b/EXTERN.h
 #undef EXTCONST
 #undef dEXTCONST
 
-#  if (defined(WIN32) || defined(__SYMBIAN32__)) && !defined(PERL_STATIC_SYMS)
+#  if defined(WIN32) && !defined(PERL_STATIC_SYMS)
     /* miniperl should not export anything */
 #    if defined(PERL_IS_MINIPERL)
 #      define EXT extern
 #      define dEXT 
 #      define EXTCONST extern const
 #      define dEXTCONST const
-#    elif defined(PERLDLL) || defined(__SYMBIAN32__)
+#    elif defined(PERLDLL)
 #      define EXT EXTERN_C __declspec(dllexport)
 #      define dEXT 
 #      define EXTCONST EXTERN_C __declspec(dllexport) const
diff --git a/INSTALL b/INSTALL
index 594c277..7acf874 100644 (file)
--- a/INSTALL
+++ b/INSTALL
@@ -506,7 +506,7 @@ You can elect to build a shared libperl by
 To build a shared libperl, the environment variable controlling shared
 library search (LD_LIBRARY_PATH in most systems, DYLD_LIBRARY_PATH for
 Darwin, LD_LIBRARY_PATH/SHLIB_PATH
-for HP-UX, LIBPATH for AIX, PATH for Cygwin) must be set up to include
+for HP-UX, LIBPATH for AIX and z/OS, PATH for Cygwin) must be set up to include
 the Perl build directory because that's where the shared libperl will
 be created.  Configure arranges makefile to have the correct shared
 library search settings.  You can find the name of the environment
@@ -615,7 +615,7 @@ The directories set up by Configure fall into three broad categories.
 
 =item Directories for the perl distribution
 
-By default, Configure will use the following directories for 5.33.0.
+By default, Configure will use the following directories for 5.33.1.
 $version is the full perl version number, including subversion, e.g.
 5.12.3, and $archname is a string like sun4-sunos,
 determined by Configure.  The full definitions of all Configure
@@ -1545,10 +1545,11 @@ retesting with the various PERL variables unset.
 =item LD_LIBRARY_PATH
 
 If you run into dynamic loading problems, check your setting of
-the LD_LIBRARY_PATH environment variable.  If you're creating a static
-Perl library (libperl.a rather than libperl.so) it should build
-fine with LD_LIBRARY_PATH unset, though that may depend on details
-of your local setup.
+the LD_LIBRARY_PATH environment variable (or on some systems the equivalent
+with a different name, see L</Building a shared Perl library>).  If you're
+creating a static Perl library (libperl.a rather than libperl.so) it should
+build fine with LD_LIBRARY_PATH unset, though that may depend on details of
+your local setup.
 
 =item nm extraction
 
@@ -2437,7 +2438,7 @@ L<https://www.chiark.greenend.org.uk/~sgtatham/bugs.html>
 
 =head1 Coexistence with earlier versions of perl 5
 
-Perl 5.33.0 is not binary compatible with earlier versions of Perl.
+Perl 5.33.1 is not binary compatible with earlier versions of Perl.
 In other words, you will have to recompile your XS modules.
 
 In general, you can usually safely upgrade from one stable version of Perl
@@ -2512,9 +2513,9 @@ won't interfere with another version.  (The defaults guarantee this for
 libraries after 5.6.0, but not for executables. TODO?)  One convenient
 way to do this is by using a separate prefix for each version, such as
 
-       sh Configure -Dprefix=/opt/perl5.33.0
+       sh Configure -Dprefix=/opt/perl5.33.1
 
-and adding /opt/perl5.33.0/bin to the shell PATH variable.  Such users
+and adding /opt/perl5.33.1/bin to the shell PATH variable.  Such users
 may also wish to add a symbolic link /usr/local/bin/perl so that
 scripts can still start with #!/usr/local/bin/perl.
 
@@ -2529,11 +2530,11 @@ yet.
 
 =head2 Upgrading from 5.32.0 or earlier
 
-B<Perl 5.33.0 may not be binary compatible with Perl 5.32.0 or
+B<Perl 5.33.1 may not be binary compatible with Perl 5.32.0 or
 earlier Perl releases.>  Perl modules having binary parts
 (meaning that a C compiler is used) will have to be recompiled to be
-used with 5.33.0.  If you find you do need to rebuild an extension with
-5.33.0, you may safely do so without disturbing the older
+used with 5.33.1.  If you find you do need to rebuild an extension with
+5.33.1, you may safely do so without disturbing the older
 installations.  (See L<"Coexistence with earlier versions of perl 5">
 above.)
 
@@ -2566,15 +2567,15 @@ Firstly, the bare minimum to run this script
      print("$f\n");
   }
 
-in Linux with perl-5.33.0 is as follows (under $Config{prefix}):
+in Linux with perl-5.33.1 is as follows (under $Config{prefix}):
 
   ./bin/perl
-  ./lib/perl5/5.33.0/strict.pm
-  ./lib/perl5/5.33.0/warnings.pm
-  ./lib/perl5/5.33.0/i686-linux/File/Glob.pm
-  ./lib/perl5/5.33.0/feature.pm
-  ./lib/perl5/5.33.0/XSLoader.pm
-  ./lib/perl5/5.33.0/i686-linux/auto/File/Glob/Glob.so
+  ./lib/perl5/5.33.1/strict.pm
+  ./lib/perl5/5.33.1/warnings.pm
+  ./lib/perl5/5.33.1/i686-linux/File/Glob.pm
+  ./lib/perl5/5.33.1/feature.pm
+  ./lib/perl5/5.33.1/XSLoader.pm
+  ./lib/perl5/5.33.1/i686-linux/auto/File/Glob/Glob.so
 
 Secondly, for perl-5.10.1, the Debian perl-base package contains 591
 files, (of which 510 are for lib/unicore) totaling about 3.5MB in its
index 35bb4ee..4305b6b 100644 (file)
--- a/INTERN.h
+++ b/INTERN.h
@@ -19,8 +19,7 @@
 #undef EXTCONST
 #undef dEXTCONST
 
-#  if (defined(WIN32) && defined(__MINGW32__) && ! defined(PERL_IS_MINIPERL)) \
-     || defined(__SYMBIAN32__)
+#  if (defined(WIN32) && defined(__MINGW32__) && ! defined(PERL_IS_MINIPERL))
 #    ifdef __cplusplus
 #      define EXT      __declspec(dllexport)
 #      define dEXT
index 540b9a5..7d7e912 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -876,6 +876,8 @@ cpan/ExtUtils-MakeMaker/t/writemakefile_args.t                      See if WriteMakefile works
 cpan/ExtUtils-Manifest/lib/ExtUtils/Manifest.pm                        Utilities to write MANIFEST files
 cpan/ExtUtils-Manifest/lib/ExtUtils/MANIFEST.SKIP              The default MANIFEST.SKIP
 cpan/ExtUtils-Manifest/t/Manifest.t                            See if ExtUtils::Manifest works
+cpan/ExtUtils-PL2Bat/lib/ExtUtils/PL2Bat.pm    Implement pl2bat
+cpan/ExtUtils-PL2Bat/t/make_executable.t       Tests if ExtUtils::PL2Bat makes bat files that are executable
 cpan/File-Fetch/lib/File/Fetch.pm      File::Fetch
 cpan/File-Fetch/t/01_File-Fetch.t      File::Fetch tests
 cpan/File-Fetch/t/null_subclass.t
@@ -3024,6 +3026,7 @@ dist/Devel-PPPort/devel/mktodo            Devel::PPPort baseline/todo generator
 dist/Devel-PPPort/devel/mktodo.pl      Devel::PPPort baseline/todo generator
 dist/Devel-PPPort/devel/regenerate     Devel::PPPort API re-generator
 dist/Devel-PPPort/devel/scanprov       Devel::PPPort provided API scanner
+dist/Devel-PPPort/devel/update_release_date.pl Devel::PPPort timestamp builder
 dist/Devel-PPPort/HACKERS              Devel::PPPort hackers documentation
 dist/Devel-PPPort/Makefile.PL          Devel::PPPort makefile writer
 dist/Devel-PPPort/MANIFEST.SKIP                Devel::PPPort manifest skip file
@@ -3208,6 +3211,8 @@ dist/Devel-PPPort/parts/base/5027010      Devel::PPPort baseline todo file
 dist/Devel-PPPort/parts/base/5027011   Devel::PPPort baseline todo file
 dist/Devel-PPPort/parts/base/5028000   Devel::PPPort baseline todo file
 dist/Devel-PPPort/parts/base/5028001   Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/base/5028002   Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/base/5028003   Devel::PPPort baseline todo file
 dist/Devel-PPPort/parts/base/5029000   Devel::PPPort baseline todo file
 dist/Devel-PPPort/parts/base/5029001   Devel::PPPort baseline todo file
 dist/Devel-PPPort/parts/base/5029002   Devel::PPPort baseline todo file
@@ -3220,6 +3225,10 @@ dist/Devel-PPPort/parts/base/5029008     Devel::PPPort baseline todo file
 dist/Devel-PPPort/parts/base/5029009   Devel::PPPort baseline todo file
 dist/Devel-PPPort/parts/base/5029010   Devel::PPPort baseline todo file
 dist/Devel-PPPort/parts/base/5030000   Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/base/5030001   Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/base/5030002   Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/base/5030003   Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/base/5031000   Devel::PPPort baseline todo file
 dist/Devel-PPPort/parts/base/5031001   Devel::PPPort baseline todo file
 dist/Devel-PPPort/parts/base/5031002   Devel::PPPort baseline todo file
 dist/Devel-PPPort/parts/base/5031003   Devel::PPPort baseline todo file
@@ -3228,6 +3237,13 @@ dist/Devel-PPPort/parts/base/5031005     Devel::PPPort baseline todo file
 dist/Devel-PPPort/parts/base/5031006   Devel::PPPort baseline todo file
 dist/Devel-PPPort/parts/base/5031007   Devel::PPPort baseline todo file
 dist/Devel-PPPort/parts/base/5031008
+dist/Devel-PPPort/parts/base/5031009   Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/base/5031010   Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/base/5031011   Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/base/5032000   Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/base/5033000   Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/base/5033001   Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/base/5033002   Devel::PPPort baseline todo file
 dist/Devel-PPPort/parts/embed.fnc      Devel::PPPort Perl API listing
 dist/Devel-PPPort/parts/inc/01_test    Devel::PPPort include
 dist/Devel-PPPort/parts/inc/call       Devel::PPPort include
@@ -3450,6 +3466,8 @@ dist/Devel-PPPort/parts/todo/5027010      Devel::PPPort baseline todo file
 dist/Devel-PPPort/parts/todo/5027011   Devel::PPPort baseline todo file
 dist/Devel-PPPort/parts/todo/5028000   Devel::PPPort baseline todo file
 dist/Devel-PPPort/parts/todo/5028001   Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/todo/5028002   Devel::PPPort todo file
+dist/Devel-PPPort/parts/todo/5028003   Devel::PPPort todo file
 dist/Devel-PPPort/parts/todo/5029000   Devel::PPPort baseline todo file
 dist/Devel-PPPort/parts/todo/5029001   Devel::PPPort baseline todo file
 dist/Devel-PPPort/parts/todo/5029002   Devel::PPPort baseline todo file
@@ -3462,6 +3480,10 @@ dist/Devel-PPPort/parts/todo/5029008     Devel::PPPort baseline todo file
 dist/Devel-PPPort/parts/todo/5029009   Devel::PPPort baseline todo file
 dist/Devel-PPPort/parts/todo/5029010   Devel::PPPort baseline todo file
 dist/Devel-PPPort/parts/todo/5030000   Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/todo/5030001   Devel::PPPort todo file
+dist/Devel-PPPort/parts/todo/5030002   Devel::PPPort todo file
+dist/Devel-PPPort/parts/todo/5030003   Devel::PPPort todo file
+dist/Devel-PPPort/parts/todo/5031000   Devel::PPPort todo file
 dist/Devel-PPPort/parts/todo/5031001   Devel::PPPort baseline todo file
 dist/Devel-PPPort/parts/todo/5031002   Devel::PPPort baseline todo file
 dist/Devel-PPPort/parts/todo/5031003   Devel::PPPort baseline todo file
@@ -3470,49 +3492,19 @@ dist/Devel-PPPort/parts/todo/5031005    Devel::PPPort baseline todo file
 dist/Devel-PPPort/parts/todo/5031006   Devel::PPPort baseline todo file
 dist/Devel-PPPort/parts/todo/5031007   Devel::PPPort baseline todo file
 dist/Devel-PPPort/parts/todo/5031008
+dist/Devel-PPPort/parts/todo/5031009   Devel::PPPort todo file
+dist/Devel-PPPort/parts/todo/5031010   Devel::PPPort todo file
+dist/Devel-PPPort/parts/todo/5031011   Devel::PPPort todo file
+dist/Devel-PPPort/parts/todo/5032000   Devel::PPPort todo file
+dist/Devel-PPPort/parts/todo/5033000   Devel::PPPort todo file
+dist/Devel-PPPort/parts/todo/5033001   Devel::PPPort todo file
+dist/Devel-PPPort/parts/todo/5033002   Devel::PPPort todo file
 dist/Devel-PPPort/PPPort.xs            Devel::PPPort dummy PPPort.xs
 dist/Devel-PPPort/ppport_h.PL          Devel::PPPort ppport.h writer
 dist/Devel-PPPort/PPPort_pm.PL         Devel::PPPort PPPort.pm writer
 dist/Devel-PPPort/RealPPPort_xs.PL             Devel::PPPort RealPPPort.xs writer
 dist/Devel-PPPort/soak                 Devel::PPPort Test Harness to run under various Perls
-dist/Devel-PPPort/t/01_test.t          Devel::PPPort test file
-dist/Devel-PPPort/t/call.t             Devel::PPPort test file
-dist/Devel-PPPort/t/cop.t              Devel::PPPort test file
-dist/Devel-PPPort/t/exception.t                Devel::PPPort test file
-dist/Devel-PPPort/t/format.t           Devel::PPPort test file
-dist/Devel-PPPort/t/grok.t             Devel::PPPort test file
-dist/Devel-PPPort/t/gv.t               Devel::PPPort test file
-dist/Devel-PPPort/t/HvNAME.t           Devel::PPPort test file
-dist/Devel-PPPort/t/limits.t           Devel::PPPort test file
-dist/Devel-PPPort/t/locale.t
-dist/Devel-PPPort/t/magic.t            Devel::PPPort test file
-dist/Devel-PPPort/t/memory.t           Devel::PPPort test file
-dist/Devel-PPPort/t/mess.t             Devel::PPPort test file
-dist/Devel-PPPort/t/misc.t             Devel::PPPort test file
-dist/Devel-PPPort/t/mPUSH.t            Devel::PPPort test file
-dist/Devel-PPPort/t/MY_CXT.t           Devel::PPPort test file
-dist/Devel-PPPort/t/newCONSTSUB.t      Devel::PPPort test file
-dist/Devel-PPPort/t/newRV.t            Devel::PPPort test file
-dist/Devel-PPPort/t/newSV_type.t       Devel::PPPort test file
-dist/Devel-PPPort/t/newSVpv.t          Devel::PPPort test file
-dist/Devel-PPPort/t/podtest.t          Devel::PPPort test file
-dist/Devel-PPPort/t/ppphtest.t         Devel::PPPort test file
-dist/Devel-PPPort/t/pv_tools.t         Devel::PPPort test file
-dist/Devel-PPPort/t/pvs.t              Devel::PPPort test file
-dist/Devel-PPPort/t/shared_pv.t                Devel::PPPort test file
-dist/Devel-PPPort/t/snprintf.t         Devel::PPPort test file
-dist/Devel-PPPort/t/sprintf.t          Devel::PPPort test file
-dist/Devel-PPPort/t/strlfuncs.t                Devel::PPPort test file
-dist/Devel-PPPort/t/Sv_set.t           Devel::PPPort test file
-dist/Devel-PPPort/t/sv_xpvf.t          Devel::PPPort test file
-dist/Devel-PPPort/t/SvPV.t             Devel::PPPort test file
-dist/Devel-PPPort/t/SvREFCNT.t         Devel::PPPort test file
-dist/Devel-PPPort/t/testutil.pl                Devel::PPPort test utilities
-dist/Devel-PPPort/t/threads.t          Devel::PPPort test file
-dist/Devel-PPPort/t/utf8.t
-dist/Devel-PPPort/t/uv.t               Devel::PPPort test file
-dist/Devel-PPPort/t/variables.t                Devel::PPPort test file
-dist/Devel-PPPort/t/warn.t             Devel::PPPort test file
+dist/Devel-PPPort/t/testutil.pl                        Devel::PPPort test utilities
 dist/Devel-PPPort/TODO                 Devel::PPPort developer notes
 dist/Devel-PPPort/typemap              Devel::PPPort Typemap
 dist/Devel-SelfStubber/lib/Devel/SelfStubber.pm        Generate stubs for SelfLoader.pm
@@ -4139,7 +4131,6 @@ ext/DynaLoader/dl_dyld.xs NeXT/Apple dyld implementation
 ext/DynaLoader/dl_freemint.xs  GNU dld style implementation for FreeMINT
 ext/DynaLoader/dl_hpux.xs      HP-UX implementation
 ext/DynaLoader/dl_none.xs      Stub implementation
-ext/DynaLoader/dl_symbian.xs   Symbian implementation
 ext/DynaLoader/dl_vms.xs       VMS implementation
 ext/DynaLoader/dl_win32.xs     Win32 implementation
 ext/DynaLoader/dlutils.c       Dynamic loader utilities for dl_*.xs files
@@ -4807,6 +4798,8 @@ lib/perl5db/t/eval-line-bug       Tests for the Perl debugger
 lib/perl5db/t/fact             Tests for the Perl debugger
 lib/perl5db/t/filename-line-breakpoint         Tests for the Perl debugger
 lib/perl5db/t/gh-17660         Tests for the Perl debugger
+lib/perl5db/t/gh-17661         Tests for the Perl debugger
+lib/perl5db/t/gh-17661b                Tests for the Perl debugger
 lib/perl5db/t/load-modules     Tests for the Perl debugger
 lib/perl5db/t/lsub-n           Test script used by perl5db.t
 lib/perl5db/t/lvalue-bug       Tests for the Perl debugger
@@ -4825,6 +4818,7 @@ lib/perl5db/t/symbol-table-bug    Tests for the Perl debugger
 lib/perl5db/t/taint            Tests for the Perl debugger
 lib/perl5db/t/test-a-statement-1       Tests for the Perl debugger
 lib/perl5db/t/test-a-statement-2       Tests for the Perl debugger
+lib/perl5db/t/test-a-statement-3       Tests for the Perl debugger
 lib/perl5db/t/test-dieLevel-option-1   Tests for the Perl debugger
 lib/perl5db/t/test-frame-option-1      Tests for the Perl debugger
 lib/perl5db/t/test-l-statement-1       Tests for the Perl debugger
@@ -5112,8 +5106,8 @@ perl.c                            main()
 perl.h                         Global declarations
 perl_inc_macro.h               macro used to set \@INC using S_incpush_use_sep
 perl_langinfo.h                        Perl's version of <langinfo.h>
-perlapi.c                      Perl API functions
-perlapi.h                      Perl API function declarations
+perl_siphash.h                 Implementation of SipHash
+perlapi.h                      Empty backwards-compat include
 perldtrace.d                   D script for Perl probes
 perlio.c                       C code for PerlIO abstraction
 perlio.h                       PerlIO abstraction
@@ -5126,20 +5120,23 @@ perly.c                         parser code (NOT derived from perly.y)
 perly.h                                header file for perly.c; derived from perly.y
 perly.tab                      parser state tables; derived from perly.y
 perly.y                                Yacc grammar for perl
-plan9/aperl                    Shell to make Perl error messages Acme-friendly
+plan9/9front.patch             Plan9 port: patch for 9front-specific flavor of Plan 9
+plan9/aperl                    Plan9 port: shell to make Perl error messages Acme-friendly
 plan9/arpa/inet.h              Plan9 port: replacement C header file
 plan9/buildinfo                        Plan9 port: configuration information
 plan9/config.plan9             Plan9 port: config.h template
-plan9/config_h.sample          Plan9 port: 5.8.0 sample config.h
-plan9/config_sh.sample         Plan9 port: 5.8.0 sample config.sh
+plan9/config_h.sample          Plan9 port: 5.32.0 sample config.h
+plan9/config_sh.sample         Plan9 port: 5.32.0 sample config.sh
 plan9/exclude                  Plan9 port: tests to skip
 plan9/fndvers                  Plan9 port: update Perl version in config.plan9
 plan9/genconfig.pl             Plan9 port: generate config.sh
+plan9/math.h                   Plan9 port: Plan9-specific math.h
 plan9/mkfile                   Plan9 port: Mk driver for build
 plan9/myconfig.plan9           Plan9 port: script to print config summary
 plan9/plan9.c                  Plan9 port: Plan9-specific C routines
 plan9/plan9ish.h               Plan9 port: Plan9-specific C header file
 plan9/setup.rc                 Plan9 port: script for easy build+install
+plan9/uninstall.rc             Plan9 port: uninstall script
 plan9/versnum                  Plan9 port: script to print version number
 pod/buildtoc                   Generate pod/perltoc.pod and pod/roffitall
 pod/Makefile.SH                        generate Makefile which makes pods into something else
@@ -5194,6 +5191,7 @@ pod/perl5301delta.pod             Perl changes in version 5.30.1
 pod/perl5302delta.pod          Perl changes in version 5.30.2
 pod/perl5303delta.pod          Perl changes in version 5.30.3
 pod/perl5320delta.pod          Perl changes in version 5.32.0
+pod/perl5330delta.pod          Perl changes in version 5.33.0
 pod/perl561delta.pod           Perl changes in version 5.6.1
 pod/perl56delta.pod            Perl changes in version 5.6
 pod/perl581delta.pod           Perl changes in version 5.8.1
@@ -5391,7 +5389,7 @@ README.aix                        Perl notes for AIX
 README.amiga                   Perl notes for AmigaOS
 README.android                 Perl notes for Android
 README.bs2000                  Perl notes for POSIX-BC BS2000
-README.cn                      Perl for Simplified Chinese (in EUC-CN)
+README.cn                      Perl for Simplified Chinese (in UTF-8)
 README.cygwin                  Perl notes for Cygwin
 README.dos                     Perl notes for DOS
 README.freebsd                 Perl notes for FreeBSD
@@ -5414,7 +5412,6 @@ README.plan9                      Perl notes for Plan 9
 README.qnx                     Perl notes for QNX
 README.riscos                  Perl notes for RISC OS
 README.solaris                 Perl notes for Solaris
-README.symbian                 Perl notes for Symbian
 README.synology                        Perl notes for Synology
 README.tru64                   Perl notes for Tru64
 README.tw                      Perl for Traditional Chinese (in Big5)
@@ -5466,56 +5463,6 @@ SECURITY.md                      Add Security Policy for GitHub
 stadtx_hash.h                  StadtX hash code (64 Bit fast hash function)
 sv.c                           Scalar value code
 sv.h                           Scalar value header
-symbian/bld.inf                        Symbian sample app build config
-symbian/config.pl              Configuration script for Symbian
-symbian/config.sh              Configuration data for Symbian
-symbian/cwd.pl                 Helper code for config.pl
-symbian/demo_pl                        "Archive" of demo code
-symbian/ext/Moped/Msg/bld.inf  Demo extension build configuration
-symbian/ext/Moped/Msg/location.pl      Demo extension script
-symbian/ext/Moped/Msg/Msg.mmp  Demo extension building
-symbian/ext/Moped/Msg/Msg.pkg  Demo extension packaging
-symbian/ext/Moped/Msg/Msg.pm   Demo extension Perl glue
-symbian/ext/Moped/Msg/Msg.xs   Demo extension code
-symbian/ext/Moped/Msg/README   Demo extension documentation
-symbian/find_writeable_data.pl Development utility
-symbian/hexdump.pl             Helper for sisify.pl updating
-symbian/install.cfg            Installation instructions
-symbian/makesis.pl             Installation file creator
-symbian/PerlApp.cpp            Symbian app launcher code
-symbian/PerlApp.h              Symbian app launcher header
-symbian/PerlApp.hrh            Symbian app launcher resource header
-symbian/PerlAppAif.rss         Symbian app launcher code
-symbian/PerlBase.cpp           Symbian Perl base class
-symbian/PerlBase.h             Symbian Perl base class header
-symbian/PerlBase.pod           Symbian Perl base class documentation
-symbian/PerlRecog.cpp          Symbian recognizer code
-symbian/PerlRecog.mmp          Symbian recognizer build
-symbian/PerlUi.cpp             Symbian Perl UI class
-symbian/PerlUi.h               Symbian Perl UI class header
-symbian/PerlUi.hrh             Symbian Perl UI class resource header
-symbian/PerlUiS60.rss          Symbian app launcher resource definition
-symbian/PerlUiS80.rss          Symbian app launcher resource definition
-symbian/PerlUiS90.rss          Symbian app launcher resource definition
-symbian/PerlUiUIQ.rss          Symbian app launcher resource definition
-symbian/PerlUtil.cpp           Symbian Perl utility class
-symbian/PerlUtil.h             Symbian Perl utility class header
-symbian/PerlUtil.pod           Symbian Perl utility class documentation
-symbian/port.pl                        Helper code for config.pl
-symbian/README                 ReadMe for the Symbian files
-symbian/sanity.pl              Helper code for config.pl
-symbian/sdk.pl                 Helper code for config.pl
-symbian/sisify.pl              Packaging utility
-symbian/symbian_dll.cpp                The DLL stub for Symbian
-symbian/symbian_proto.h                Prototypes for Symbian
-symbian/symbian_stubs.c                Stub routines for Symbian
-symbian/symbian_stubs.h                Stub headers for Symbian
-symbian/symbian_utils.cpp      Helper routines for Symbian
-symbian/symbianish.h           Header for Symbian
-symbian/TODO                   Symbian things to do
-symbian/uid.pl                 Helper code for config.pl
-symbian/version.pl             Helper code for config.pl
-symbian/xsbuild.pl             Building extensions
 t/base/cond.t                  See if conditionals work
 t/base/if.t                    See if if works
 t/base/lex.t                   See if lexical items work
@@ -5639,6 +5586,7 @@ t/lib/feature/bits                Tests for feature bit handling
 t/lib/feature/bundle           Tests for feature bundles
 t/lib/feature/implicit         Tests for implicit loading of feature.pm
 t/lib/feature/indirect         Tests for enabling/disabling indirect method calls
+t/lib/feature/multidimensional Tests for enabling/disabling $foo{$x, y} => $foo{join($;, $x, $y)}
 t/lib/feature/nonesuch         Tests for enabling/disabling nonexistent feature
 t/lib/feature/removed          Tests for enabling/disabling removed feature
 t/lib/feature/say              Tests for enabling/disabling say feature
index adbcd63..5ebde5e 100644 (file)
--- a/META.json
+++ b/META.json
          "url" : "https://github.com/Perl/perl5"
       }
    },
-   "version" : "5.033000",
-   "x_serialization_backend" : "JSON::PP version 4.04"
+   "version" : "5.033001",
+   "x_serialization_backend" : "JSON::PP version 4.05"
 }
index aa05f73..2587f06 100644 (file)
--- a/META.yml
+++ b/META.yml
@@ -117,5 +117,5 @@ resources:
   homepage: https://www.perl.org/
   license: https://dev.perl.org/licenses/
   repository: https://github.com/Perl/perl5
-version: '5.033000'
+version: '5.033001'
 x_serialization_backend: 'CPAN::Meta::YAML version 0.018'
index b683c74..236ef49 100755 (executable)
@@ -523,14 +523,14 @@ h = $(h1) $(h2) $(h3) $(h4) $(h5) $(h6)
 c1 = av.c scope.c op.c doop.c doio.c dump.c gv.c hv.c mg.c reentr.c mro_core.c perl.c
 c2 = perly.c pp.c pp_hot.c pp_ctl.c pp_sys.c regcomp.c regexec.c utf8.c sv.c
 c3 = taint.c toke.c util.c deb.c run.c universal.c pad.c globals.c keywords.c
-c4 = perlio.c perlapi.c numeric.c mathoms.c locale.c pp_pack.c pp_sort.c caretx.c dquote.c time64.c
+c4 = perlio.c numeric.c mathoms.c locale.c pp_pack.c pp_sort.c caretx.c dquote.c time64.c
 c5 = $(mallocsrc)
 
 c = $(c1) $(c2) $(c3) $(c4) $(c5) miniperlmain.c opmini.c perlmini.c
 
 obj1 = $(mallocobj) gv$(OBJ_EXT) toke$(OBJ_EXT) perly$(OBJ_EXT) pad$(OBJ_EXT) regcomp$(OBJ_EXT) dump$(OBJ_EXT) util$(OBJ_EXT) mg$(OBJ_EXT) reentr$(OBJ_EXT) mro_core$(OBJ_EXT) keywords$(OBJ_EXT)
 obj2 = hv$(OBJ_EXT) av$(OBJ_EXT) run$(OBJ_EXT) pp_hot$(OBJ_EXT) sv$(OBJ_EXT) pp$(OBJ_EXT) scope$(OBJ_EXT) pp_ctl$(OBJ_EXT) pp_sys$(OBJ_EXT)
-obj3 = doop$(OBJ_EXT) doio$(OBJ_EXT) regexec$(OBJ_EXT) utf8$(OBJ_EXT) taint$(OBJ_EXT) deb$(OBJ_EXT) universal$(OBJ_EXT) globals$(OBJ_EXT) perlio$(OBJ_EXT) perlapi$(OBJ_EXT) numeric$(OBJ_EXT) mathoms$(OBJ_EXT) locale$(OBJ_EXT) pp_pack$(OBJ_EXT) pp_sort$(OBJ_EXT) caretx$(OBJ_EXT) dquote$(OBJ_EXT) time64$(OBJ_EXT)
+obj3 = doop$(OBJ_EXT) doio$(OBJ_EXT) regexec$(OBJ_EXT) utf8$(OBJ_EXT) taint$(OBJ_EXT) deb$(OBJ_EXT) universal$(OBJ_EXT) globals$(OBJ_EXT) perlio$(OBJ_EXT) numeric$(OBJ_EXT) mathoms$(OBJ_EXT) locale$(OBJ_EXT) pp_pack$(OBJ_EXT) pp_sort$(OBJ_EXT) caretx$(OBJ_EXT) dquote$(OBJ_EXT) time64$(OBJ_EXT)
 
 # split the objects into 3 exclusive sets: those used by both miniperl and
 # perl, and those used by just one or the other. Doesn't include the
@@ -589,7 +589,7 @@ esac
 
 $spitshell >>$Makefile <<'!NO!SUBS!'
 
-perltoc_pod_prereqs = extra.pods pod/perl5330delta.pod pod/perlapi.pod pod/perlintern.pod pod/perlmodlib.pod pod/perluniprops.pod
+perltoc_pod_prereqs = extra.pods pod/perl5331delta.pod pod/perlapi.pod pod/perlintern.pod pod/perlmodlib.pod pod/perluniprops.pod
 generated_pods = pod/perltoc.pod $(perltoc_pod_prereqs)
 generated_headers = uudmap.h bitcount.h mg_data.h
 
@@ -1153,9 +1153,9 @@ pod/perlintern.pod: $(MINIPERL_EXE) autodoc.pl embed.fnc
 pod/perlmodlib.pod: $(MINIPERL_EXE) pod/perlmodlib.PL MANIFEST
        $(MINIPERL) pod/perlmodlib.PL -q
 
-pod/perl5330delta.pod: pod/perldelta.pod
-       $(RMS) pod/perl5330delta.pod
-       $(LNS) perldelta.pod pod/perl5330delta.pod
+pod/perl5331delta.pod: pod/perldelta.pod
+       $(RMS) pod/perl5331delta.pod
+       $(LNS) perldelta.pod pod/perl5331delta.pod
 
 extra.pods: $(MINIPERL_EXE)
        -@test ! -f extra.pods || rm -f `cat extra.pods`
@@ -1274,7 +1274,7 @@ SYMH = perlvars.h intrpvar.h
 CHMOD_W = chmod +w
 
 # The following files are generated automatically
-#      embed.pl:       proto.h embed.h embedvar.h perlapi.h perlapi.c
+#      embed.pl:       proto.h embed.h embedvar.h
 #      opcode.pl:      opcode.h opnames.h pp_proto.h
 #      regcomp.pl:     regnodes.h
 #      warnings.pl:    warnings.h lib/warnings.pm
index e1e56b8..dabebcd 100644 (file)
@@ -21,7 +21,7 @@ O = uav$(_O) udeb$(_O) udoio$(_O) udoop$(_O) udquote$(_O) udump$(_O) \
        uregcomp$(_O) uregexec$(_O) urun$(_O) \
        uscope$(_O) usv$(_O) utaint$(_O) utime64$(_O) utoke$(_O) \
        unumeric$(_O) ulocale$(_O) umathoms$(_O) \
-       uuniversal$(_O) uutf8$(_O) uutil$(_O) uperlapi$(_O) ukeywords$(_O)
+       uuniversal$(_O) uutf8$(_O) uutil$(_O) ukeywords$(_O)
 
 microperl:     $(O)
        $(LD) -o $@ $(O) $(LDFLAGS) $(LIBS)
@@ -81,7 +81,7 @@ udquote$(_O): $(HE) dquote.c regcomp.h regnodes.h
 udump$(_O):    $(HE) dump.c regcomp.h regnodes.h
        $(CC) $(CCFLAGS) -o $@ $(CFLAGS) dump.c
 
-uglobals$(_O): $(H) globals.c INTERN.h perlapi.h $(generated_headers)
+uglobals$(_O): $(H) globals.c INTERN.h $(generated_headers)
        $(CC) $(CCFLAGS) -o $@ $(CFLAGS) globals.c
 
 ugv$(_O):      $(HE) gv.c
@@ -180,9 +180,6 @@ uutf8$(_O): $(HE) utf8.c
 uutil$(_O):    $(HE) util.c
        $(CC) $(CCFLAGS) -o $@ $(CFLAGS) util.c
 
-uperlapi$(_O): $(HE) perlapi.c perlapi.h
-       $(CC) $(CCFLAGS) -o $@ $(CFLAGS) perlapi.c
-
 uuudmap.h umg_data.h: ubitcount.h
 
 ubitcount.h: ugenerate_uudmap$(_X)
index 279e855..07d31f0 100644 (file)
@@ -86,7 +86,7 @@ NLM_VERSION    = 3,20,0
 
 
 # Here comes the CW tools - TO BE FILLED TO BUILD WITH CW -
-MODULE_DESC     = "Perl 5.33.0 for NetWare"
+MODULE_DESC     = "Perl 5.33.1 for NetWare"
 CCTYPE          = CodeWarrior
 C_COMPILER             = mwccnlm -c
 CPP_COMPILER   = mwccnlm
@@ -462,7 +462,7 @@ INST_NW_TOP2 = $(INST_NW_DRV)\perl
 # versioned installation can be obtained by setting INST_TOP above to a
 # path that includes an arbitrary version string.
 #
-INST_VER       = \5.33.0
+INST_VER       = \5.33.1
 
 #
 # Comment this out if you DON'T want your perl installation to have
@@ -701,7 +701,6 @@ MICROCORE_SRC       =               \
                ..\numeric.c    \
                ..\op.c         \
                ..\perl.c       \
-               ..\perlapi.c    \
                ..\perly.c      \
                ..\pp.c         \
                ..\pp_ctl.c     \
index 0e24bae..dc55b95 100644 (file)
  *     This symbol contains the ~name expanded version of ARCHLIB, to be used
  *     in programs that are not prepared to deal with ~ expansion at run-time.
  */
-#define ARCHLIB "c:\\perl\\5.33.0\\lib\\NetWare-x86-multi-thread"              /**/
+#define ARCHLIB "c:\\perl\\5.33.1\\lib\\NetWare-x86-multi-thread"              /**/
 /*#define ARCHLIB_EXP ""       /**/
 
 /* ARCHNAME:
  *     This symbol is the filename expanded version of the BIN symbol, for
  *     programs that do not want to deal with that at run-time.
  */
-#define BIN "c:\\perl\\5.33.0\\bin\\NetWare-x86-multi-thread"  /**/
-#define BIN_EXP "c:\\perl\\5.33.0\\bin\\NetWare-x86-multi-thread"      /**/
+#define BIN "c:\\perl\\5.33.1\\bin\\NetWare-x86-multi-thread"  /**/
+#define BIN_EXP "c:\\perl\\5.33.1\\bin\\NetWare-x86-multi-thread"      /**/
 
 /* BYTEORDER:
  *     This symbol holds the hexadecimal constant defined in byteorder,
  *     This symbol contains the ~name expanded version of SITEARCH, to be used
  *     in programs that are not prepared to deal with ~ expansion at run-time.
  */
-#define SITEARCH "c:\\perl\\site\\5.33.0\\lib\\NetWare-x86-multi-thread"               /**/
+#define SITEARCH "c:\\perl\\site\\5.33.1\\lib\\NetWare-x86-multi-thread"               /**/
 /*#define SITEARCH_EXP ""      /**/
 
 /* SITELIB:
  *     removed.  The elements in inc_version_list (inc_version_list.U) can
  *     be tacked onto this variable to generate a list of directories to search.
  */
-#define SITELIB "c:\\perl\\site\\5.33.0\\lib"          /**/
+#define SITELIB "c:\\perl\\site\\5.33.1\\lib"          /**/
 /*#define SITELIB_EXP ""       /**/
 #define SITELIB_STEM ""                /**/
 
index 1d29885..be3eddf 100644 (file)
@@ -125,20 +125,6 @@ int RunPerl(int argc, char **argv, char **env)
        PerlInterpreter *my_perl = NULL;                // defined in Perl.h
        PerlInterpreter *new_perl = NULL;               // defined in Perl.h
 
-       #ifdef PERL_GLOBAL_STRUCT
-               #define PERLVAR(prefix,var,type)
-               #define PERLVARA(prefix,var,type)
-               #define PERLVARI(prefix,var,type,init) PL_Vars.prefix##var = init;
-               #define PERLVARIC(prefix,var,type,init) PL_Vars.prefix##var = init;
-
-               #include "perlvars.h"
-
-               #undef PERLVAR
-               #undef PERLVARA
-               #undef PERLVARI
-               #undef PERLVARIC
-       #endif
-
        PERL_SYS_INIT(&argc, &argv);
 
        if (!(my_perl = perl_alloc()))          // Allocate memory for Perl.
index b08d6c2..b9795b3 100644 (file)
@@ -120,19 +120,6 @@ int RunPerl(int argc, char **argv, char **env)
        PerlInterpreter *new_perl = NULL;               // defined in Perl.h
 
        //__asm{int 3};
-       #ifdef PERL_GLOBAL_STRUCT
-               #define PERLVAR(prefix,var,type)
-               #define PERLVARA(prefix,var,type)
-               #define PERLVARI(prefix,var,type,init) PL_Vars.prefix##var = init;
-               #define PERLVARIC(prefix,var,type,init) PL_Vars.prefix##var = init;
-
-               #include "perlvars.h"
-
-               #undef PERLVAR
-               #undef PERLVARA
-               #undef PERLVARI
-               #undef PERLVARIC
-       #endif
 
        PERL_SYS_INIT(&argc, &argv);
 
index b1a2534..e7d8675 100644 (file)
@@ -165,7 +165,6 @@ extern __declspec(thread) void *PL_current_context;
 
 //Check the following, will be used in Thread extension - CHKSGP
 #define THREAD_RET_TYPE        unsigned __stdcall
-#define THREAD_RET_CAST(p)     ((unsigned)(p))
 
 #define INIT_THREADS           NOOP
 
index e11e4ee..102c6e2 100644 (file)
@@ -448,6 +448,11 @@ d_atoll (atoll.U):
        This variable conditionally defines the HAS_ATOLL symbol, which
        indicates to the C program that the atoll() routine is available.
 
+d_attribute_always_inline (d_attribut.U):
+       This variable conditionally defines HASATTRIBUTE_ALWAYS_INLINE,
+       which indicates that the C compiler can know that certain
+       functions should always be inlined.
+
 d_attribute_deprecated (d_attribut.U):
        This variable conditionally defines HASATTRIBUTE_DEPRECATED, which
        indicates that GCC can handle the attribute for marking deprecated
@@ -1663,6 +1668,10 @@ d_malloc_size (d_malloc_size.U):
        This symbol, if defined, indicates that the malloc_size
        routine is available for use.
 
+d_malloc_usable_size (d_malloc_size.U):
+       This symbol, if defined, indicates that the malloc_usable_size
+       routine is available for use.
+
 d_mblen (d_mblen.U):
        This variable conditionally defines the HAS_MBLEN symbol, which
        indicates to the C program that the mblen() routine is available
@@ -2491,6 +2500,10 @@ d_sockaddr_sa_len (d_socket.U):
        which indicates that a struct sockaddr structure has the sa_len
        member.
 
+d_sockaddr_storage (d_socket.U):
+       This variable conditionally defines the HAS_SOCKADDR_STORAGE symbol,
+       which indicates the availability of a struct sockaddr_storage.
+
 d_sockatmark (d_sockatmark.U):
        This variable conditionally defines the HAS_SOCKATMARK symbol, which
        indicates to the C program that the sockatmark() routine is available.
@@ -2902,6 +2915,11 @@ d_waitpid (d_waitpid.U):
        This variable conditionally defines HAS_WAITPID if waitpid() is
        available to wait for child process.
 
+d_wcrtomb (d_wcrtomb.U):
+       This variable conditionally defines the HAS_WCRTOMB symbol if the
+       wcrtomb() routine is available to be used to convert a wide character
+       into a multi-byte character.
+
 d_wcscmp (d_wcscmp.U):
        This variable conditionally defines the HAS_WCSCMP symbol if the
        wcscmp() routine is available and can be used to compare wide
@@ -5268,7 +5286,7 @@ startperl (startperl.U):
        shell. Of course, that leading line must be followed by the classical
        perl idiom:
        eval 'exec perl -S $0 ${1+"$@"}'
-       if $running_under_some_shell;
+       if 0; # ^ Run only under a shell
        to guarantee perl startup should the shell execute the script. Note
        that this magic incantation is not understood by csh.
 
index b5ffbaf..d0f525d 100755 (executable)
@@ -448,6 +448,10 @@ use File::Glob qw(:case);
 
         'DISTRIBUTION' => 'NWCLARK/ExtUtils-Constant-0.25.tar.gz',
         'FILES'    => q[cpan/ExtUtils-Constant],
+        'CUSTOMIZED' => [
+            # https://rt.cpan.org/Public/Bug/Display.html?id=132995
+            't/Constant.t',
+        ],
         'EXCLUDED' => [
             qw( lib/ExtUtils/Constant/Aaargh56Hash.pm
                 examples/perl_keyword.pl
@@ -485,6 +489,14 @@ use File::Glob qw(:case);
         ],
     },
 
+       'ExtUtils::PL2Bat' => {
+               'DISTRIBUTION' => 'LEONT/ExtUtils-PL2Bat-0.002.tar.gz',
+               'FILES'        => q[cpan/ExtUtils-PL2Bat],
+               'EXCLUDED'     => [
+                       't/00-compile.t',
+               ],
+       },
+
     'ExtUtils::Manifest' => {
         'DISTRIBUTION' => 'ETHER/ExtUtils-Manifest-1.72.tar.gz',
         'FILES'        => q[cpan/ExtUtils-Manifest],
@@ -505,7 +517,7 @@ use File::Glob qw(:case);
     },
 
     'File::Path' => {
-        'DISTRIBUTION' => 'JKEENAN/File-Path-2.16.tar.gz',
+        'DISTRIBUTION' => 'JKEENAN/File-Path-2.17.tar.gz',
         'FILES'        => q[cpan/File-Path],
         'EXCLUDED'     => [
             qw(t/Path-Class.t),
@@ -660,7 +672,7 @@ use File::Glob qw(:case);
     },
 
     'IPC::SysV' => {
-        'DISTRIBUTION' => 'MHX/IPC-SysV-2.07.tar.gz',
+        'DISTRIBUTION' => 'MHX/IPC-SysV-2.08.tar.gz',
         'FILES'        => q[cpan/IPC-SysV],
         'EXCLUDED'     => [
             qw( const-c.inc
@@ -670,7 +682,7 @@ use File::Glob qw(:case);
     },
 
     'JSON::PP' => {
-        'DISTRIBUTION' => 'ISHIGAKI/JSON-PP-4.04.tar.gz',
+        'DISTRIBUTION' => 'ISHIGAKI/JSON-PP-4.05.tar.gz',
         'FILES'        => q[cpan/JSON-PP],
     },
 
@@ -831,7 +843,7 @@ use File::Glob qw(:case);
     },
 
     'Net::Ping' => {
-        'DISTRIBUTION' => 'RURBAN/Net-Ping-2.72.tar.gz',
+        'DISTRIBUTION' => 'RURBAN/Net-Ping-2.73.tar.gz',
         'FILES'        => q[dist/Net-Ping],
         'EXCLUDED'     => [
             qw(README.md.PL),
@@ -839,6 +851,16 @@ use File::Glob qw(:case);
             qw(t/600_pod.t),
             qw(t/601_pod-coverage.t),
         ],
+        'CUSTOMIZED' => [
+            qw{
+                t/000_load.t
+                t/001_new.t
+                t/010_pingecho.t
+                t/450_service.t
+                t/500_ping_icmp.t
+                t/501_ping_icmpv6.t
+            }
+        ],
     },
 
     'NEXT' => {
@@ -933,11 +955,8 @@ use File::Glob qw(:case);
     },
 
     'Pod::Usage' => {
-        'DISTRIBUTION' => 'MAREKR/Pod-Usage-1.69.tar.gz',
+        'DISTRIBUTION' => 'MAREKR/Pod-Usage-1.70.tar.gz',
         'FILES'        => q[cpan/Pod-Usage],
-        'CUSTOMIZED'   => [
-            't/pod/testp2pt.pl',
-        ],
     },
 
     'podlators' => {
@@ -976,7 +995,7 @@ use File::Glob qw(:case);
     },
 
     'Socket' => {
-        'DISTRIBUTION' => 'PEVANS/Socket-2.029.tar.gz',
+        'DISTRIBUTION' => 'PEVANS/Socket-2.030.tar.gz',
         'FILES'        => q[cpan/Socket],
     },
 
index 20ed4f7..5ffcfb2 100644 (file)
@@ -21,7 +21,7 @@ our @EXPORT_OK = qw(%Modules %Maintainers
                show_results process_options files_to_modules
                finish_tap_output
                reload_manifest);
-our $VERSION = 0.13;
+our $VERSION = 0.14;
 
 require Exporter;
 
@@ -355,7 +355,7 @@ sub duplicated_maintainers {
 
 sub warn_maintainer {
     my $name = shift;
-    ok($files{$name}, "$name has a maintainer (see Porting/Maintainer.pl)");
+    ok($files{$name}, "$name has a maintainer (see Porting/Maintainers.pl)");
 }
 
 sub missing_maintainers {
index a473416..c304598 100755 (executable)
@@ -644,6 +644,9 @@ __DATA__
 #
 #  Committers.
 #
+adamh                                   \100BytesGuy
++                                       bytesguy\100users.noreply.github.com
++                                       git\100ahartley.com
 adi                                     enache\100rdslink.ro
 alanbur                                 alan.burlison\100sun.com
 +                                       alan.burlison\100uk.sun.com
@@ -1108,6 +1111,8 @@ khw\100cpan.org                         khw\100karl.(none)
 +                                       khw\100khw-desktop.(none)
 
 radu\100netsoft.ro                      rgreab\100fx.ro
+raiph                                   \100raiph
++                                       raiph.mellor\100gmail.com
 rajagopa\100pauline.schrodinger.com     rajagopa\100schrodinger.com
 raphael.manfredi\100pobox.com           raphael_manfredi\100grenoble.hp.com
 module\100renee-baecker.de              renee.baecker\100smart-websolutions.de
@@ -1128,6 +1133,7 @@ rick\100consumercontact.com             rick\100bort.ca
 rjbs\100cpan.org                        rjbs-perl-p5p\100lists.manxome.org
 +                                       perl.p5p\100rjbs.manxome.org
 +                                       rjbs\100semiotic.systems
++                                       rjbs\100users.noreply.github.com
 rjk\100linguist.dartmouth.edu           rjk\100linguist.thayer.dartmouth.edu
 +                                       rjk-perl-p5p\100tamias.net
 +                                       rjk\100tamias.net
index 101f12d..e7eb58e 100755 (executable)
@@ -50,7 +50,6 @@ my @CFG = (
           "Cross/config.sh-arm-linux",
           "Cross/config.sh-arm-linux-n770",
           "NetWare/config.wc",
-          "symbian/config.sh",
           "uconfig.sh",
           "uconfig64.sh",
           "plan9/config_sh.sample",
index 1b1afcc..122a619 100644 (file)
@@ -44,12 +44,12 @@ afsroot='/afs'
 alignbytes='8'
 aphostname=''
 api_revision='5'
-api_subversion='0'
+api_subversion='1'
 api_version='33'
-api_versionstring='5.33.0'
+api_versionstring='5.33.1'
 ar='ar'
-archlib='/opt/perl/lib/5.33.0/x86_64-linux'
-archlibexp='/opt/perl/lib/5.33.0/x86_64-linux'
+archlib='/opt/perl/lib/5.33.1/x86_64-linux'
+archlibexp='/opt/perl/lib/5.33.1/x86_64-linux'
 archname64=''
 archname='x86_64-linux'
 archobjs=''
@@ -848,7 +848,7 @@ incpath=''
 incpth='/usr/lib/gcc/x86_64-linux-gnu/4.9/include /usr/local/include /usr/lib/gcc/x86_64-linux-gnu/4.9/include-fixed /usr/include/x86_64-linux-gnu /usr/include'
 inews=''
 initialinstalllocation='/opt/perl/bin'
-installarchlib='/opt/perl/lib/5.33.0/x86_64-linux'
+installarchlib='/opt/perl/lib/5.33.1/x86_64-linux'
 installbin='/opt/perl/bin'
 installhtml1dir=''
 installhtml3dir=''
@@ -856,13 +856,13 @@ installman1dir='/opt/perl/man/man1'
 installman3dir='/opt/perl/man/man3'
 installprefix='/opt/perl'
 installprefixexp='/opt/perl'
-installprivlib='/opt/perl/lib/5.33.0'
+installprivlib='/opt/perl/lib/5.33.1'
 installscript='/opt/perl/bin'
-installsitearch='/opt/perl/lib/site_perl/5.33.0/x86_64-linux'
+installsitearch='/opt/perl/lib/site_perl/5.33.1/x86_64-linux'
 installsitebin='/opt/perl/bin'
 installsitehtml1dir=''
 installsitehtml3dir=''
-installsitelib='/opt/perl/lib/site_perl/5.33.0'
+installsitelib='/opt/perl/lib/site_perl/5.33.1'
 installsiteman1dir='/opt/perl/man/man1'
 installsiteman3dir='/opt/perl/man/man3'
 installsitescript='/opt/perl/bin'
@@ -987,7 +987,7 @@ perl_patchlevel=''
 perl_static_inline='static __inline__'
 perladmin='yourname@yourhost.yourplace.com'
 perllibs='-lpthread -lnsl -ldl -lm -lcrypt -lutil -lc'
-perlpath='/opt/perl/bin/perl5.33.0'
+perlpath='/opt/perl/bin/perl5.33.1'
 pg='pg'
 phostname=''
 pidtype='pid_t'
@@ -996,8 +996,8 @@ pmake=''
 pr=''
 prefix='/opt/perl'
 prefixexp='/opt/perl'
-privlib='/opt/perl/lib/5.33.0'
-privlibexp='/opt/perl/lib/5.33.0'
+privlib='/opt/perl/lib/5.33.1'
+privlibexp='/opt/perl/lib/5.33.1'
 procselfexe='"/proc/self/exe"'
 ptrsize='8'
 quadkind='2'
@@ -1062,17 +1062,17 @@ sig_num='0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
 sig_num_init='0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 6, 17, 29, 31, 0'
 sig_size='69'
 signal_t='void'
-sitearch='/opt/perl/lib/site_perl/5.33.0/x86_64-linux'
-sitearchexp='/opt/perl/lib/site_perl/5.33.0/x86_64-linux'
+sitearch='/opt/perl/lib/site_perl/5.33.1/x86_64-linux'
+sitearchexp='/opt/perl/lib/site_perl/5.33.1/x86_64-linux'
 sitebin='/opt/perl/bin'
 sitebinexp='/opt/perl/bin'
 sitehtml1dir=''
 sitehtml1direxp=''
 sitehtml3dir=''
 sitehtml3direxp=''
-sitelib='/opt/perl/lib/site_perl/5.33.0'
+sitelib='/opt/perl/lib/site_perl/5.33.1'
 sitelib_stem='/opt/perl/lib/site_perl'
-sitelibexp='/opt/perl/lib/site_perl/5.33.0'
+sitelibexp='/opt/perl/lib/site_perl/5.33.1'
 siteman1dir='/opt/perl/man/man1'
 siteman1direxp='/opt/perl/man/man1'
 siteman3dir='/opt/perl/man/man3'
@@ -1098,7 +1098,7 @@ src='.'
 ssizetype='ssize_t'
 st_ino_sign='1'
 st_ino_size='8'
-startperl='#!/opt/perl/bin/perl5.33.0'
+startperl='#!/opt/perl/bin/perl5.33.1'
 startsh='#!/bin/sh'
 static_ext=' '
 stdchar='char'
@@ -1110,7 +1110,7 @@ stdio_ptr='((fp)->_IO_read_ptr)'
 stdio_stream_array=''
 strerror_r_proto='0'
 submit=''
-subversion='0'
+subversion='1'
 sysman='/usr/share/man/man1'
 sysroot=''
 tail=''
@@ -1208,8 +1208,8 @@ vendorprefix=''
 vendorprefixexp=''
 vendorscript=''
 vendorscriptexp=''
-version='5.33.0'
-version_patchlevel_string='version 33 subversion 0'
+version='5.33.1'
+version_patchlevel_string='version 33 subversion 1'
 versiononly='define'
 vi=''
 xlibpth='/usr/lib/386 /lib/386'
@@ -1219,10 +1219,10 @@ zcat=''
 zip='zip'
 PERL_REVISION=5
 PERL_VERSION=33
-PERL_SUBVERSION=0
+PERL_SUBVERSION=1
 PERL_API_REVISION=5
 PERL_API_VERSION=33
-PERL_API_SUBVERSION=0
+PERL_API_SUBVERSION=1
 PERL_PATCHLEVEL=''
 PERL_CONFIG_SH=true
 : Variables propagated from previous config.sh file.
index 34bb20f..708add2 100644 (file)
  *     This symbol contains the ~name expanded version of ARCHLIB, to be used
  *     in programs that are not prepared to deal with ~ expansion at run-time.
  */
-#define ARCHLIB "/opt/perl/lib/5.33.0/x86_64-linux"            /**/
-#define ARCHLIB_EXP "/opt/perl/lib/5.33.0/x86_64-linux"                /**/
+#define ARCHLIB "/opt/perl/lib/5.33.1/x86_64-linux"            /**/
+#define ARCHLIB_EXP "/opt/perl/lib/5.33.1/x86_64-linux"                /**/
 
 /* BIN:
  *     This symbol holds the path of the bin directory where the package will
  *     This symbol contains the ~name expanded version of PRIVLIB, to be used
  *     in programs that are not prepared to deal with ~ expansion at run-time.
  */
-#define PRIVLIB "/opt/perl/lib/5.33.0"         /**/
-#define PRIVLIB_EXP "/opt/perl/lib/5.33.0"             /**/
+#define PRIVLIB "/opt/perl/lib/5.33.1"         /**/
+#define PRIVLIB_EXP "/opt/perl/lib/5.33.1"             /**/
 
 /* SITEARCH:
  *     This symbol contains the name of the private library for this package.
  *     This symbol contains the ~name expanded version of SITEARCH, to be used
  *     in programs that are not prepared to deal with ~ expansion at run-time.
  */
-#define SITEARCH "/opt/perl/lib/site_perl/5.33.0/x86_64-linux"         /**/
-#define SITEARCH_EXP "/opt/perl/lib/site_perl/5.33.0/x86_64-linux"             /**/
+#define SITEARCH "/opt/perl/lib/site_perl/5.33.1/x86_64-linux"         /**/
+#define SITEARCH_EXP "/opt/perl/lib/site_perl/5.33.1/x86_64-linux"             /**/
 
 /* SITELIB:
  *     This symbol contains the name of the private library for this package.
  *     removed.  The elements in inc_version_list (inc_version_list.U) can
  *     be tacked onto this variable to generate a list of directories to search.
  */
-#define SITELIB "/opt/perl/lib/site_perl/5.33.0"               /**/
-#define SITELIB_EXP "/opt/perl/lib/site_perl/5.33.0"           /**/
+#define SITELIB "/opt/perl/lib/site_perl/5.33.1"               /**/
+#define SITELIB_EXP "/opt/perl/lib/site_perl/5.33.1"           /**/
 #define SITELIB_STEM "/opt/perl/lib/site_perl"         /**/
 
 /* PERL_VENDORARCH:
  *     script to make sure (one hopes) that it runs with perl and not
  *     some shell.
  */
-#define STARTPERL "#!/opt/perl/bin/perl5.33.0"         /**/
+#define STARTPERL "#!/opt/perl/bin/perl5.33.1"         /**/
 
 /* HAS_STDIO_STREAM_ARRAY:
  *     This symbol, if defined, tells that there is an array
index 2f2e61c..05393c0 100755 (executable)
@@ -105,7 +105,7 @@ find(
         $version =~ /\d/ and $version = "'$version'";
 
         # some heuristics to figure out the module name from the file name
-        $module =~ s{^(lib|cpan|dist|(?:symbian/)?ext|os2/OS2)/}{}
+        $module =~ s{^(lib|cpan|dist|ext|os2/OS2)/}{}
                        and $1 ne 'lib'
             and (
             $module =~ s{\b(\w+)/\1\b}{$1},
@@ -130,7 +130,6 @@ find(
         $module_to_file{$module} = $File::Find::name;
     },
     'os2/OS2',
-    'symbian/ext',
     'lib',
     'ext',
        'cpan',
index f80a8aa..237615a 100644 (file)
@@ -17,6 +17,12 @@ Consult your favorite dictionary for details.
 
 =head1 EPIGRAPHS
 
+=head2 v5.33.0 - Confucius, "Confucius: The Analects"
+
+Announed on 2020-07-17 by Sawyer X
+
+  The man who moves a mountain begins by carrying away small stones.
+
 =head2 v5.32.0 - Bob Dylan, "The Times They Are A Changing"
 
 L<Announced on 2020-06-20 by Sawyer X|https://www.nntp.perl.org/group/perl.perl5.porters/2020/06/msg257547.html>
index d5c727c..ac6fc54 100644 (file)
@@ -14,15 +14,20 @@ cpan/autodie/t/chmod.t
 cpan/CPAN-Meta-YAML/t/tml
 cpan/Test-Harness/t/source_tests/source.sh
 cpan/Test-Harness/t/source_tests/source_args.sh
+dist/Devel-PPPort/devel/mkapidoc.pl
 dist/Devel-PPPort/devel/mktodo
 dist/Devel-PPPort/devel/regenerate
 dist/Devel-PPPort/devel/scanprov
+dist/Devel-PPPort/devel/update_release_date.pl
 dist/Devel-PPPort/soak
 installperl
 installman
 makedepend.SH
 metaconfig.SH
 myconfig.SH
+plan9/fndvers
+plan9/setup.rc
+plan9/uninstall.rc
 regen/embed.pl
 regen/feature.pl
 regen/keywords.pl
index 165c8cd..e9a7ea4 100755 (executable)
 #
 # Tim Bunce, June 1997
 
+# Translation tables, so far only to 1047
+my @a2e = (     # ASCII to EBCDIC CP 1047
+0x00,0x01,0x02,0x03,0x37,0x2D,0x2E,0x2F,0x16,0x05,0x15,0x0B,0x0C,0x0D,0x0E,0x0F,
+0x10,0x11,0x12,0x13,0x3C,0x3D,0x32,0x26,0x18,0x19,0x3F,0x27,0x1C,0x1D,0x1E,0x1F,
+0x40,0x5A,0x7F,0x7B,0x5B,0x6C,0x50,0x7D,0x4D,0x5D,0x5C,0x4E,0x6B,0x60,0x4B,0x61,
+0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0x7A,0x5E,0x4C,0x7E,0x6E,0x6F,
+0x7C,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,
+0xD7,0xD8,0xD9,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xAD,0xE0,0xBD,0x5F,0x6D,
+0x79,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x91,0x92,0x93,0x94,0x95,0x96,
+0x97,0x98,0x99,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xC0,0x4F,0xD0,0xA1,0x07,
+0x20,0x21,0x22,0x23,0x24,0x25,0x06,0x17,0x28,0x29,0x2A,0x2B,0x2C,0x09,0x0A,0x1B,
+0x30,0x31,0x1A,0x33,0x34,0x35,0x36,0x08,0x38,0x39,0x3A,0x3B,0x04,0x14,0x3E,0xFF,
+0x41,0xAA,0x4A,0xB1,0x9F,0xB2,0x6A,0xB5,0xBB,0xB4,0x9A,0x8A,0xB0,0xCA,0xAF,0xBC,
+0x90,0x8F,0xEA,0xFA,0xBE,0xA0,0xB6,0xB3,0x9D,0xDA,0x9B,0x8B,0xB7,0xB8,0xB9,0xAB,
+0x64,0x65,0x62,0x66,0x63,0x67,0x9E,0x68,0x74,0x71,0x72,0x73,0x78,0x75,0x76,0x77,
+0xAC,0x69,0xED,0xEE,0xEB,0xEF,0xEC,0xBF,0x80,0xFD,0xFE,0xFB,0xFC,0xBA,0xAE,0x59,
+0x44,0x45,0x42,0x46,0x43,0x47,0x9C,0x48,0x54,0x51,0x52,0x53,0x58,0x55,0x56,0x57,
+0x8C,0x49,0xCD,0xCE,0xCB,0xCF,0xCC,0xE1,0x70,0xDD,0xDE,0xDB,0xDC,0x8D,0x8E,0xDF
+);
+
+my @i8_2_e = (   # UTF-EBCDIC I8 to EBCDIC CP 1047
+0x00,0x01,0x02,0x03,0x37,0x2D,0x2E,0x2F,0x16,0x05,0x15,0x0B,0x0C,0x0D,0x0E,0x0F,
+0x10,0x11,0x12,0x13,0x3C,0x3D,0x32,0x26,0x18,0x19,0x3F,0x27,0x1C,0x1D,0x1E,0x1F,
+0x40,0x5A,0x7F,0x7B,0x5B,0x6C,0x50,0x7D,0x4D,0x5D,0x5C,0x4E,0x6B,0x60,0x4B,0x61,
+0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0x7A,0x5E,0x4C,0x7E,0x6E,0x6F,
+0x7C,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,
+0xD7,0xD8,0xD9,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xAD,0xE0,0xBD,0x5F,0x6D,
+0x79,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x91,0x92,0x93,0x94,0x95,0x96,
+0x97,0x98,0x99,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xC0,0x4F,0xD0,0xA1,0x07,
+0x20,0x21,0x22,0x23,0x24,0x25,0x06,0x17,0x28,0x29,0x2A,0x2B,0x2C,0x09,0x0A,0x1B,
+0x30,0x31,0x1A,0x33,0x34,0x35,0x36,0x08,0x38,0x39,0x3A,0x3B,0x04,0x14,0x3E,0xFF,
+0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x51,0x52,0x53,0x54,0x55,0x56,
+0x57,0x58,0x59,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x70,0x71,0x72,0x73,
+0x74,0x75,0x76,0x77,0x78,0x80,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x9A,0x9B,0x9C,
+0x9D,0x9E,0x9F,0xA0,0xAA,0xAB,0xAC,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,
+0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBE,0xBF,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xDA,0xDB,
+0xDC,0xDD,0xDE,0xDF,0xE1,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,0xFA,0xFB,0xFC,0xFD,0xFE
+);
+
 use ExtUtils::Manifest qw(fullcheck);
 $ExtUtils::Manifest::Quiet = 1;
 use Getopt::Std;
@@ -36,10 +75,16 @@ usage: $0 [ -r rootdir ] [-s suffix ] [ -x ] [ -n ]
                 in patchlevel.h (or blank, if none)
     -x           make a .xz file in addition to a .gz file
     -n           do not make any tarballs, just the directory
+    -c cleanup   perform a cleanup before building: clean git repo and target
+                 directory/tarballs
+    -e           Make the outputs be translated into EBCDIC.  (They can then
+                 be downloaded directly to an EBCDIC platform without needing
+                 any further translation.)
 EOF
 
 my %opts;
-getopts('xnr:s:', \%opts) or usage;
+getopts('exncr:s:', \%opts) or usage;
+
 @ARGV && usage;
 
 $relroot = defined $opts{r} ? $opts{r} : "..";
@@ -74,6 +119,8 @@ $reldir .= "-$lpatch_tags" if $lpatch_tags;
 
 print "\nMaking a release for $perl in $relroot/$reldir\n\n";
 
+cleanup($relroot, $reldir) if $opts{c};
+
 print "Cross-checking the MANIFEST...\n";
 ($missfile, $missentry) = fullcheck();
 @$missentry
@@ -100,8 +147,9 @@ print "\n";
 # VMS no longer has hardcoded version numbers descrip.mms
 
 print "Creating $relroot/$reldir release directory...\n";
-die "$relroot/$reldir release directory already exists\n"   if -e "$relroot/$reldir";
-die "$relroot/$reldir.tar.gz release file already exists\n" if -e "$relroot/$reldir.tar.gz";
+die "$relroot/$reldir release directory already exists [consider using -c]\n"   if -e "$relroot/$reldir";
+die "$relroot/$reldir.tar.gz release file already exists [consider using -c]\n" if -e "$relroot/$reldir.tar.gz";
+die "$relroot/$reldir.tar.xz release file already exists [consider using -c]\n" if $opts{x} && -e "$relroot/$reldir.tar.xz";
 mkdir("$relroot/$reldir", 0755) or die "mkdir $relroot/$reldir: $!\n";
 print "\n";
 
@@ -115,18 +163,118 @@ print "\n";
 
 chdir "$relroot/$reldir" or die $!;
 
-
-print "Setting file permissions...\n";
-system("find . -type f -print     | xargs chmod 0444");
-system("find . -type d -print     | xargs chmod 0755");
 my @exe = map   { my ($f) = split; glob($f) }
           grep  { $_ !~ /\A#/ && $_ !~ /\A\s*\z/ }
           map   { split "\n" }
           do    { local (@ARGV, $/) = 'Porting/exec-bit.txt'; <> };
 
+if ($opts{e}) {
+    die "$0 must be run on an ASCII platform" if ord("A") != 65;
+
+    print "Translating to EBCDIC...\n";
+
+    open my $mani_fh, "<", "MANIFEST" or die "Can't read copied MANIFEST: $!";
+    my @manifest = <$mani_fh>;  # Slurp in whole thing before the file gets trashed
+    close $mani_fh or die "Couldn't close MANIFEST: $!";
+    while (defined ($_ = shift @manifest)) {
+        chomp;
+        my $file = $_ =~ s/\s.*//r; # Rmv description to get just the file
+                                    # name
+        print STDERR "$file is binary\n" if -B $file;   # Binary files aren't translated
+        next if -B $file;   # Binary files aren't translated
+
+        local $/; # slurp mode
+        open my $fh, "+<:raw", $file or die "Can't read copied $file: $!";
+        my $text = <$fh>;
+        my $xlated = "";
+
+        if (! utf8::decode($text) || $text =~ / ^ [[:ascii:][:cntrl:]]* $ /x) {
+
+            # Here, either $text isn't legal UTF-8; or it is, but it consists
+            # entirely of one of the 160 ASCII and control characters whose
+            # EBCDIC representation is the same whether UTF-EBCDIC or not.
+            # This means we just translate byte-by-byte from Latin1 to EBCDIC.
+            $xlated = ($text =~ s/(.)/chr $a2e[ord $1]/rsge);
+        }
+        else {
+
+            # Here, $text is legal UTF-8, and the representation of some
+            # character(s) in it it matters if is encoded in UTF-EBCDIC or not.
+            # Also, the decode caused $text to now be viewed as UTF-8 characters
+            # instead of the input bytes.  We convert to UTF-EBCDIC.
+
+            while ($text =~ m/(.)/gs) {
+                my $ord = ord $1;
+                if ($ord < 0xA0) {  # UTF-EBCDIC invariant
+                    $xlated .= chr $a2e[$ord];
+                    next;
+                }
+
+                # Get how many bytes (1 start + n continuations) its
+                # representation is, and the start mark, which consists of the
+                # upper n+1 bits being 1
+                my $start_mark;
+                my $conts;
+                if ($ord < 0x400) {
+                    $start_mark = 0xC0;
+                    $conts = 1;
+                }
+                elsif ($ord < 0x4000) {
+                    $start_mark = 0xE0;
+                    $conts = 2;
+                }
+                elsif ($ord < 0x40000) {
+                    $start_mark = 0xF0;
+                    $conts = 3;
+                }
+                elsif ($ord < 0x400000) {
+                    $start_mark = 0xF8;
+                    $conts = 4;
+                }
+                elsif ($ord < 0x4000000) {
+                    $start_mark = 0xFC;
+                    $conts = 5;
+                }
+                elsif ($ord < 0x40000000) {
+                    $start_mark = 0xFE;
+                    $conts = 6;
+                }
+                else {
+                    $start_mark = 0xFF;
+                    $conts = 13;
+                }
+
+                # Use the underlying I8 fundamentals to get each byte of the I8
+                # representation, then convert that to native with @i8_2_e
+                my @i8;
+                while ($conts-- > 0) {  # First the continuations
+                    unshift @i8, chr($i8_2_e[0xA0 | ($ord & 0x1F)]);
+                    $ord >>= 5
+                }
+
+                # Then the start byte
+                unshift @i8, chr($i8_2_e[$start_mark | $ord]);
+                $xlated .= join "", @i8;
+            }
+        } # End of loop through the file
+
+        # Overwrite it with the translation
+        truncate $fh, 0;
+        seek $fh, 0, 0;
+        print $fh $xlated;
+
+        close $fh or die "Couldn't close $file: $!";
+    }
+}
+
+print "Setting file permissions...\n";
+system("find . -type f -print     | xargs chmod 0444");
+system("find . -type d -print     | xargs chmod 0755");
+
 system("chmod +x @exe") == 0
     or die "system: $!";
 
+# MANIFEST may be resorted, so needs to be writable
 my @writables = qw(
     NetWare/config_H.wc
     NetWare/Makefile
@@ -134,6 +282,7 @@ my @writables = qw(
     lib/feature.pm
     keywords.h
     keywords.c
+    MANIFEST
     opcode.h
     opnames.h
     pp_proto.h
@@ -143,8 +292,6 @@ my @writables = qw(
     overload.inc
     overload.h
     mg_vtable.h
-    perlapi.h
-    perlapi.c
     dist/Devel-PPPort/module2.c
     dist/Devel-PPPort/module3.c
     cpan/autodie/t/touch_me
@@ -180,21 +327,30 @@ exit if $opts{n};
 
 my $src = (-e $perl) ? $perl : 'perl'; # 'perl' in maint branch
 
-print "Checking if you have 7z...\n";
-my $output_7z = `7z 2>&1`;
-my $have_7z = defined $output_7z && $output_7z =~ /7-Zip/;
+my $output_7z;
+my $have_7z;
+if (! $opts{e}) {
+    print "Checking if you have 7z...\n";
+    $output_7z = `7z 2>&1`;
+    $have_7z = defined $output_7z && $output_7z =~ /7-Zip/;
+}
 
 print "Checking if you have advdef...\n";
 my $output_advdef = `advdef --version 2>&1`;
 my $have_advdef = defined $output_advdef && $output_advdef =~ /advancecomp/;
 
-if ($have_7z) {
+if (! $opts{e} && $have_7z) {
     print "Creating and compressing the tar.gz file with 7z...\n";
     $cmd = "tar cf - $reldir | 7z a -tgzip -mx9 -bd -si $reldir.tar.gz";
     system($cmd) == 0 or die "$cmd failed";
 } else {
     print "Creating and compressing the tar.gz file...\n";
-    $cmd = "tar cf - $reldir | gzip --best > $reldir.tar.gz";
+    my $extra_opts = "";
+    if ($opts{e}) {
+        print "(Using ustar format since is for an EBCDIC box)\n";
+        $extra_opts = ' --format=ustar';
+    }
+    $cmd = "tar cf - $extra_opts $reldir | gzip --best > $reldir.tar.gz";
     system($cmd) == 0 or die "$cmd failed";
     if ($have_advdef) {
         print "Recompressing the tar.gz file with advdef...\n";
@@ -221,3 +377,39 @@ for my $sha (qw(sha1 shasum sha1sum)) {
        last;
     }
 }
+
+sub cleanup {
+    my ( $relroot, $reldir ) = @_;
+
+    require File::Path;
+
+    my @cmds = (
+        [ qw{make distclean} ],
+        [ qw{git clean -dxf} ],
+    );
+
+    foreach my $cmd (@cmds) {
+        print join( ' ', "Running:", @$cmd, "\n" );
+        system @$cmd;
+        die "fail to run ".(join(' ', @$cmd) ) unless $? == 0;
+    }
+
+    if ( -d "$relroot/$reldir" ) {
+        print "Removing directory $relroot/$reldir\n";
+        File::Path::rmtree("$relroot/$reldir");
+    }
+
+    # always clean both
+    my @files = ( "$relroot/$reldir.tar.gz", "$relroot/$reldir.tar.xz" );
+
+    foreach my $f ( @files ) {
+        next unless -f $f;
+        print "Removing file '$f'\n";
+        unlink($f);
+    }
+
+    return;
+
+}
+
+1;
index 64c4a18..dd4f6ec 100644 (file)
@@ -403,7 +403,7 @@ died, add a short obituary here.
 
 XXX Generate this with:
 
-  perl Porting/acknowledgements.pl v5.33.0..HEAD
+  perl Porting/acknowledgements.pl v5.33.1..HEAD
 
 =head1 Reporting Bugs
 
index 1098074..097d96f 100644 (file)
@@ -405,7 +405,7 @@ sub __prime_state {
     my $filename = "pod/$source";
     my $contents = slurp_or_die($filename);
     my @want =
-        $contents =~ /perldelta - what is new for perl v(5)\.(\d+)\.(\d+)\r?\n/;
+        $contents =~ /perldelta - what is new for perl v(\d+)\.(\d+)\.(\d+)\r?\n/;
     die "Can't extract version from $filename" unless @want;
     my $delta_leaf = join '', 'perl', @want, 'delta';
     $state{delta_target} = "$delta_leaf.pod";
index b7858cc..b499094 100644 (file)
@@ -13,14 +13,8 @@ deemed necessary by the Pumpking.
 
 =head2 Perl 5.32
 
-Code freezes (which happen in the 5.31.X series)
-
-  2020-01-20  5.31.8 ✓        Contentious changes freeze
-  2020-02-20  5.31.9 ✓        User-visible changes to correctly
-                              functioning programs freeze
-  2020-03-20  5.31.10 ✓       Full code freeze
-  2020-04-28  5.31.11 ✓       Full code freeze (clearing BBCs)
-  2020-05-20  5.32.0  ✓       Stable release! (Hopefully)
+  2020-06-20  5.32.0 ✓        Sawyer X
+  2020-??-??  5.32.1
 
 =head2 Perl 5.30
 
@@ -29,20 +23,6 @@ Code freezes (which happen in the 5.31.X series)
   2020-03-14  5.30.2 ✓        Steve Hay
   2020-06-01  5.30.3 ✓        Steve Hay
 
-=head2 Perl 5.28
-
-  2018-05-20  5.28.0 ✓        Sawyer X
-  2018-11-29  5.28.1 ✓        Steve Hay
-  2019-04-19  5.28.2 ✓        Steve Hay
-  2020-06-01  5.28.3 ✓        Steve Hay
-
-=head2 Perl 5.26
-
-  2017-05-30  5.26.0 ✓        Sawyer X
-  2017-09-22  5.26.1 ✓        Steve Hay
-  2018-04-14  5.26.2 ✓        Steve Hay
-  2018-11-29  5.26.3 ✓        Steve Hay
-
 =head1 DEVELOPMENT RELEASE SCHEDULE
 
 This schedule lists the release engineers for at least the next
@@ -57,23 +37,12 @@ When shipping a release, you should include the schedule for (at least)
 the next four releases. If a stable version of Perl is released,
 you should reset the version numbers to the next blead series.
 
-=head2 Perl 5.31
-
-  2019-05-23  5.31.0 ✓       Sawyer X
-  2019-06-20  5.31.1 ✓       Karen Etheridge
-  2019-07-20  5.31.2 ✓       Steve Hay
-  2019-08-20  5.31.3 ✓       Tom Hukins
-  2019-09-20  5.31.4 ✓       Max Maischein
-  2019-10-20  5.31.5 ✓       Steve Hay
-  2019-11-20  5.31.6 ✓       BinGOs
-  2019-12-20  5.31.7 ✓       Atoomic
-  2020-01-20  5.31.8 ✓       Matthew Horsfall
-  2020-02-20  5.31.9 ✓       Renee Bäcker
-  2020-03-20  5.31.10 ✓      Sawyer X
-  2020-04-28  5.31.11 ✓      Sawyer X
-
-(RC0 for 5.32.0 will be released once we think that all the blockers have been
-addressed.  This typically means some time in April or May.)
+=head2 Perl 5.33
+
+  2020-07-17  5.33.0 ✓       Sawyer X
+  2020-08-20  5.33.1
+  2020-09-20  5.33.2
+  2020-10-20  5.33.3
 
 =head1 VICTIMS
 
index 4b3a18b..550de28 100755 (executable)
@@ -301,6 +301,8 @@ if ($cpan_mod =~ /-/ && $cpan_mod !~ /::/) {
 sub wget {
     my ($url, $saveas) = @_;
     eval {
+        require IO::Socket::SSL;
+        require Net::SSLeay;
         require HTTP::Tiny;
         my $http= HTTP::Tiny->new();
         $http->mirror( $url => $saveas );
index 3935bdc..9a7ce0a 100644 (file)
@@ -486,7 +486,7 @@ Natively 64-bit systems need neither -Duse64bitint nor -Duse64bitall.
 On these systems, it might be the default compilation mode, and there
 is currently no guarantee that passing no use64bitall option to the
 Configure process will build a 32bit perl. Implementing -Duse32bit*
-options would be nice for perl 5.33.0.
+options would be nice for perl 5.33.1.
 
 =head2 Profile Perl - am I hot or not?
 
@@ -1189,7 +1189,7 @@ L<http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2013-01/msg00339.html>
 =head1 Big projects
 
 Tasks that will get your name mentioned in the description of the "Highlights
-of 5.33.0"
+of 5.33.1"
 
 =head2 make ithreads more robust
 
index bfed5d5..d34cc7c 100644 (file)
@@ -137,7 +137,7 @@ instead:
 
 : # use perl
     eval 'exec /usr/local/bin/perl -S $0 ${1+"$@"}'
-        if $running_under_some_shell;
+        if 0; # ^ Run only under a shell
 
 =head2 Using Perl in "native" BS2000
 
index d14d406..05c2db6 100644 (file)
--- a/README.cn
+++ b/README.cn
@@ -2,7 +2,7 @@
 
 如果你用一般的文字编辑器阅览这份文件, 请忽略文中奇特的注记字符.
 这份文件是以 POD (简明文件格式) 写成; 这种格式是为了能让人直接阅读,
-而特别设计的. 关于此格式的进一步信息, 请参考 perlpod 线上文件.
+而特别设计的. 关于此格式的进一步信息, 请参考 perlpod 在线文档.
 
 =head1 NAME
 
@@ -12,36 +12,36 @@ perlcn - 简体中文 Perl 指南
 
 欢迎来到 Perl 的天地!
 
-ä»\8e 5.8.0 ç\89\88å¼\80å§\8b, Perl å\85·å¤\87äº\86å®\8cå\96\84ç\9a\84 Unicode (ç»\9fä¸\80ç \81) æ\94¯æ\8f´,
-ä¹\9fè¿\9e带æ\94¯æ\8f´äº\86许å¤\9aæ\8b\89ä¸\81语系以å¤\96ç\9a\84ç¼\96ç \81æ\96¹å¼\8f; CJK (中æ\97¥é\9f©) ä¾¿æ\98¯å\85¶ä¸­ç\9a\84ä¸\80é\83¨ä»½.
+ä»\8e 5.8.0 ç\89\88å¼\80å§\8b, Perl å\85·å¤\87äº\86å®\8cå\96\84ç\9a\84 Unicode (ç»\9fä¸\80ç \81) æ\94¯æ\8c\81,
+ä¹\9fè¿\9e带æ\94¯æ\8c\81äº\86许å¤\9aæ\8b\89ä¸\81语系以å¤\96ç\9a\84ç¼\96ç \81æ\96¹å¼\8f; CJK (中æ\97¥é\9f©) ä¾¿æ\98¯å\85¶ä¸­ç\9a\84ä¸\80é\83¨å\88\86.
 Unicode 是国际性的标准, 试图涵盖世界上所有的字符: 西方世界, 东方世界,
-以及两者间的一切 (希腊文, 叙利亚文, 拉伯文, 希伯来文, 印度文,
-印地安文, 等等). 它也容纳了多种作业系统与平台 (如 PC 及麦金塔).
+以及两者间的一切 (希腊文, 叙利亚文, 拉伯文, 希伯来文, 印度文,
+印地安文, 等等). 它也容纳了多种操作系统与平台 (如 PC 及麦金塔).
 
 Perl 本身以 Unicode 进行操作. 这表示 Perl 内部的字符串数据可用 Unicode
-表示; Perl 的函式与算符 (例如正规表示式比对) 也能对 Unicode 进行操作.
\9c¨è¾\93å\85¥å\8f\8aè¾\93å\87ºæ\97¶, ä¸ºäº\86å¤\84ç\90\86以 Unicode ä¹\8bå\89\8dç\9a\84ç¼\96ç \81æ\96¹å¼\8få­\98æ\94¾的数据, Perl
\8f\90ä¾\9bäº\86 Encode è¿\99个模å\9d\97, å\8f¯ä»¥è®©ä½ è½»æ\98\93å\9c°è¯»å\8f\96å\8f\8aå\86\99å\85¥æ\97§æ\9c\89ç\9a\84ç¼\96ç \81数据.
+表示; Perl 的函数与运算符 (例如正则表达式匹配) 也能对 Unicode 进行操作.
\9c¨è¾\93å\85¥å\8f\8aè¾\93å\87ºæ\97¶, ä¸ºäº\86å¤\84ç\90\86以 Unicode ä¹\8bå\89\8dç\9a\84ç¼\96ç \81æ\96¹å¼\8få\82¨å­\98的数据, Perl
\8f\90ä¾\9bäº\86 Encode è¿\99个模å\9d\97, å\8f¯ä»¥è®©ä½ è½»æ\98\93å\9c°è¯»å\86\99使ç\94¨æ\97§æ\9c\89ç\9a\84ç¼\96ç \81æ ¼å¼\8fç\9a\84数据.
 
-Encode 延伸模块支援下列简体中文的编码方式 ('gb2312' 表示 'euc-cn'):
+Encode 扩展模块支持下列简体中文的编码方式 ('gb2312' 表示 'euc-cn'):
 
-    euc-cn     Unix 延伸字符集, 也就是俗称的国标码
+    euc-cn     Unix 扩展字符集, 也就是俗称的国标码
     gb2312-raw 未经处理的 (低比特) GB2312 字符表
     gb12345    未经处理的中国用繁体中文编码
     iso-ir-165 GB2312 + GB6345 + GB8565 + 新增字符
     cp936      字码页 936, 也可以用 'GBK' (扩充国标码) 指明
     hz         7 比特逸出式 GB2312 编码
 
-举ä¾\8bæ\9d¥è¯´, å°\86 EUC-CN ç¼\96ç \81ç\9a\84æ¡£æ¡\88转æ\88\90 Unicode, ç¥\97é\9c\80é\94®å\85¥ä¸\8bå\88\97æ\8c\87令:
+举ä¾\8bæ\9d¥è¯´, å°\86 EUC-CN ç¼\96ç \81ç\9a\84æ\96\87件转æ\88\90 Unicode, å\8fªé\9c\80è¾\93å\85¥ä»¥ä¸\8bå\91½令:
 
     perl -Mencoding=euc-cn,STDOUT,utf8 -pe1 < file.euc-cn > file.utf8
 
-Perl 也内附了 "piconv", 一完全以 Perl 写成的字符转换工具程序, 用法如下:
+Perl 也内附了 "piconv", 一完全以 Perl 写成的字符转换工具程序, 用法如下:
 
     piconv -f euc-cn -t utf8 < file.euc-cn > file.utf8
     piconv -f utf8 -t euc-cn < file.utf8 > file.euc-cn
 
-另外, 利用 encoding 模块, 你可以轻易写出以字符为单位的程序码, 如下所示:
+另外, 利用 encoding 模块, 你可以轻易写出以字符为单位的码, 如下所示:
 
     #!/usr/bin/env perl
     # 启动 euc-cn 字串解析; 标准输出入及标准错误都设为 euc-cn 编码
@@ -53,7 +53,7 @@ Perl 也内附了 "piconv", 一支完全以 Perl 写成的字符转换工具程
 
 在最后一列例子里, "谆" 的第二个字节与 "谆" 的第一个字节结合成 EUC-CN
 码的 "蛔"; "谆" 的第二个字节则与 "教" 的第一个字节结合成 "唤".
-这解决了以前 EUC-CN 码比对处理上常见的问题.
+这解决了以前 EUC-CN 码匹配处理上常见的问题.
 
 =head2 额外的中文编码
 
@@ -67,7 +67,7 @@ Encode::HanExtra 模块. 它目前提供下列编码方式:
     big5-simp  Big5 繁体中文与 Unicode 简体中文互转
     gbk-trad   GBK 简体中文与 Unicode 繁体中文互转
 
-若想在 GBK 与 Big5 之间互转, 请参考该模块内附的 b2g.pl 与 g2b.pl 两程序,
+若想在 GBK 与 Big5 之间互转, 请参考该模块内附的 b2g.pl 与 g2b.pl 两程序,
 或在程序内使用下列写法:
 
     use Encode::HanConvert;
@@ -93,7 +93,7 @@ Perl 的首页
 
 =item L<https://www.perl.com/>
 
-由 Perl 基金会所营运的文章辑录
+由 Perl 基金会运营的文章辑录
 
 =item L<https://www.cpan.org/>
 
@@ -135,7 +135,7 @@ Unicode 学术学会 (Unicode 标准的制定者)
 
 =item L<https://www.cl.cam.ac.uk/%7Emgk25/unicode.html>
 
-Unix/Linux 上的 UTF-8 及 Unicode 答客问
+Unix/Linux 上的 UTF-8 及 Unicode 常见问题解答
 
 =back
 
@@ -149,4 +149,6 @@ Jarkko Hietaniemi E<lt>jhi@iki.fiE<gt>
 
 Audrey Tang (唐凤) E<lt>audreyt@audreyt.orgE<gt>
 
+Sizhe Zhao E<lt>prc.zhao@outlook.comE<gt>
+
 =cut
index 5885ac5..6ad9fb5 100644 (file)
@@ -576,7 +576,6 @@ be kept as clean as possible.
  lib/ExtUtils/NOTES lib/ExtUtils/PATCHING lib/ExtUtils/README
  lib/Net/Ping/Changes lib/Test/Harness/Changes
  lib/Term/ANSIColor/ChangeLog lib/Term/ANSIColor/README
- README.symbian symbian/TODO
 
 =item Build, Configure, Make, Install
 
@@ -597,7 +596,6 @@ be kept as clean as possible.
 
  NetWare/Makefile
  plan9/mkfile
- symbian/sanity.pl symbian/sisify.pl
  hints/uwin.sh
  vms/descrip_mms.template
  win32/Makefile win32/makefile.mk
index 0a1fcd7..dd1db17 100644 (file)
@@ -22,9 +22,9 @@ The build procedure is completely standard:
 Make perl executable and create a symlink for libperl:
 
   chmod a+x /boot/common/bin/perl
-  cd /boot/common/lib; ln -s perl5/5.33.0/BePC-haiku/CORE/libperl.so .
+  cd /boot/common/lib; ln -s perl5/5.33.1/BePC-haiku/CORE/libperl.so .
 
-Replace C<5.33.0> with your respective version of Perl.
+Replace C<5.33.1> with your respective version of Perl.
 
 =head1 KNOWN PROBLEMS
 
index e50d85d..7a4e4f2 100644 (file)
@@ -10,9 +10,9 @@ perlmacosx - Perl under Mac OS X
 
 This document briefly describes Perl under Mac OS X.
 
-  curl -O https://www.cpan.org/src/perl-5.33.0.tar.gz
-  tar -xzf perl-5.33.0.tar.gz
-  cd perl-5.33.0
+  curl -O https://www.cpan.org/src/perl-5.33.1.tar.gz
+  tar -xzf perl-5.33.1.tar.gz
+  cd perl-5.33.1
   ./Configure -des -Dprefix=/usr/local/
   make
   make test
@@ -20,7 +20,7 @@ This document briefly describes Perl under Mac OS X.
 
 =head1 DESCRIPTION
 
-The latest Perl release (5.33.0 as of this writing) builds without changes
+The latest Perl release (5.33.1 as of this writing) builds without changes
 under all versions of Mac OS X from 10.3 "Panther" onwards. 
 
 In order to build your own version of Perl you will need 'make',
index 8d3c286..1423957 100644 (file)
@@ -619,7 +619,7 @@ C<set PERLLIB_PREFIX> in F<Config.sys>, see L</"C<PERLLIB_PREFIX>">.
 
 =item Additional Perl modules
 
-  unzip perl_ste.zip -d f:/perllib/lib/site_perl/5.33.0/
+  unzip perl_ste.zip -d f:/perllib/lib/site_perl/5.33.1/
 
 Same remark as above applies.  Additionally, if this directory is not
 one of directories on @INC (and @INC is influenced by C<PERLLIB_PREFIX>), you
index 443963c..73ec3f8 100644 (file)
@@ -452,7 +452,7 @@ Updated 12 March    2001 to mention //'SYS1.TCPPARMS(TCPDATA)'.
 
 Updated 28 November 2001 for broken URLs.
 
-Updated 03 October  2019 for perl-5.33.0+
+Updated 03 October  2019 for perl-5.33.1+
 
 =cut
 
diff --git a/README.symbian b/README.symbian
deleted file mode 100644 (file)
index cb4a42f..0000000
+++ /dev/null
@@ -1,434 +0,0 @@
-If you read this file _as_is_, just ignore the funny characters you see.
-It is written in the POD format (see pod/perlpod.pod) which is specially
-designed to be readable as is.
-
-=head1 NAME
-
-perlsymbian - Perl version 5 on Symbian OS
-
-=head1 DESCRIPTION
-
-This document describes various features of the Symbian operating
-system that will affect how Perl version 5 (hereafter just Perl)
-is compiled and/or runs.
-
-B<NOTE: this port (as of 0.4.1) does not compile into a Symbian
-OS GUI application, but instead it results in a Symbian DLL.>
-The DLL includes a C++ class called CPerlBase, which one can then
-(derive from and) use to embed Perl into applications, see F<symbian/README>.
-
-The base port of Perl to Symbian only implements the basic POSIX-like
-functionality; it does not implement any further Symbian or Series 60,
-Series 80, or UIQ bindings for Perl.
-
-It is also possible to generate Symbian executables for "miniperl"
-and "perl", but since there is no standard command line interface
-for Symbian (nor full keyboards in the devices), these are useful
-mainly as demonstrations.
-
-=head2 Compiling Perl on Symbian
-
-(0) You need to have the appropriate Symbian SDK installed.
-
-These instructions have been tested under various Nokia Series 60
-Symbian SDKs (1.2 to 2.6, 2.8 should also work, 1.2 compiles but
-does not work), Series 80 2.0, and Nokia 7710 (Series 90) SDK.
-You can get the SDKs from Forum Nokia (L<http://www.forum.nokia.com/>).
-A very rough port ("it compiles") to UIQ 2.1 has also been made.
-
-A prerequisite for any of the SDKs is to install ActivePerl
-from ActiveState, L<http://www.activestate.com/Products/ActivePerl/>
-
-Having the SDK installed also means that you need to have either
-the Metrowerks CodeWarrior installed (2.8 and 3.0 were used in testing)
-or the Microsoft Visual C++ 6.0 installed (SP3 minimum, SP5 recommended).
-
-Note that for example the Series 60 2.0 VC SDK installation talks
-about ActivePerl build 518, which does no more (as of mid-2005) exist
-at the ActiveState website.  The ActivePerl 5.8.4 build 810 was
-used successfully for compiling Perl on Symbian.  The 5.6.x ActivePerls
-do not work.
-
-Other SDKs or compilers like Visual.NET, command-line-only
-Visual.NET, Borland, GnuPoc, or sdk2unix have not been tried.
-
-These instructions almost certainly won't work with older Symbian
-releases or other SDKs.  Patches to get this port running in other
-releases, SDKs, compilers, platforms, or devices are naturally welcome.
-
-(1) Get a Perl source code distribution (for example the file
-perl-5.9.2.tar.gz is fine) from L<http://www.cpan.org/src/>
-and unpack it in your the C:/Symbian directory of your Windows
-system.
-
-(2) Change to the perl source directory.
-
-    cd c:\Symbian\perl-5.x.x
-
-(3) Run the following script using the perl coming with the SDK
-
-    perl symbian\config.pl
-
-You must use the cmd.exe, the Cygwin shell will not work.
-The PATH must include the SDK tools, including a Perl,
-which should be the case under cmd.exe.  If you do not
-have that, see the end of symbian\sdk.pl for notes of
-how your environment should be set up for Symbian compiles.
-
-(4) Build the project, either by
-
-     make all
-
-in cmd.exe or by using either the Metrowerks CodeWarrior
-or the Visual C++ 6.0, or the Visual Studio 8 (the Visual C++
-2005 Express Edition works fine).
-
-If you use the VC IDE, you will have to run F<symbian\config.pl>
-first using the cmd.exe, and then run 'make win.mf vc6.mf' to generate
-the VC6 makefiles and workspaces.  "make vc6" will compile for the VC6,
-and "make cw" for the CodeWarrior.
-
-The following SDK and compiler configurations and Nokia phones were
-tested at some point in time (+ = compiled and PerlApp run, - = not),
-both for Perl 5.8.x and 5.9.x:
-
-     SDK     | VC | CW |
-     --------+----+----+---
-     S60 1.2 | +  | +  | 3650 (*)
-     S60 2.0 | +  | +  | 6600
-     S60 2.1 | -  | +  | 6670
-     S60 2.6 | +  | +  | 6630
-     S60 2.8 | +  | +  | (not tested in a device)
-     S80 2.6 | -  | +  | 9300
-     S90 1.1 | +  | -  | 7710
-     UIQ 2.1 | -  | +  | (not tested in a device)
-
- (*) Compiles but does not work, unfortunately, a problem with Symbian.
-
-If you are using the 'make' directly, it is the GNU make from the SDKs,
-and it will invoke the right make commands for the Windows emulator
-build and the Arm target builds ('thumb' by default) as necessary.
-
-The build scripts assume the 'absolute style' SDK installs under C:,
-the 'subst style' will not work.
-
-If using the VC IDE, to build use for example the File->Open Workspace->
-C:\Symbian\8.0a\S60_2nd_FP2\epoc32\build\symbian\perl\perl\wins\perl.dsw
-The emulator binaries will appear in the same directory.
-
-If using the VC IDE, you will a lot of warnings in the beginning of
-the build because a lot of headers mentioned by the source cannot
-be found, but this is not serious since those headers are not used.
-
-The Metrowerks will give a lot of warnings about unused variables and
-empty declarations, you can ignore those.
-
-When the Windows and Arm DLLs are built do not be scared by a very long
-messages whizzing by: it is the "export freeze" phase where the whole
-(rather large) API of Perl is listed.
-
-Once the build is completed you need to create the DLL SIS file by
-
-     make perldll.sis
-
-which will create the file perlXYZ.sis (the XYZ being the Perl version)
-which you can then install into your Symbian device: an easy way
-to do this is to send them via Bluetooth or infrared and just open
-the messages.
-
-Since the total size of all Perl SIS files once installed is
-over 2 MB, it is recommended to do the installation into a
-memory card (drive E:) instead of the C: drive.
-
-The size of the perlXYZ.SIS is about 370 kB but once it is in the
-device it is about one 750 kB (according to the application manager).
-
-The perlXYZ.sis includes only the Perl DLL: to create an additional
-SIS file which includes some of the standard (pure) Perl libraries,
-issue the command
-
-     make perllib.sis
-
-Some of the standard Perl libraries are included, but not all:
-see L</HISTORY> or F<symbian\install.cfg> for more details
-(250 kB -> 700 kB).
-
-Some of the standard Perl XS extensions (see L</HISTORY> are
-also available:
-
-     make perlext.sis
-
-which will create perlXYZext.sis (290 kB -> 770 kB).
-
-To compile the demonstration application PerlApp you need first to
-install the Perl headers under the SDK.
-
-To install the Perl headers and the class CPerlBase documentation
-so that you no more need the Perl sources around to compile Perl
-applications using the SDK:
-
-     make sdkinstall
-
-The destination directory is C:\Symbian\perl\X.Y.Z.  For more
-details, see F<symbian\PerlBase.pod>.
-
-Once the headers have been installed, you can create a SIS for
-the PerlApp:
-
-     make perlapp.sis
-
-The perlapp.sis (11 kB -> 16 kB) will be built in the symbian
-subdirectory, but a copy will also be made to the main directory.
-
-If you want to package the Perl DLLs (one for WINS, one for ARMI),
-the headers, and the documentation:
-
-     make perlsdk.zip
-
-which will create perlXYZsdk.zip that can be used in another
-Windows system with the SDK, without having to compile Perl in
-that system.
-
-If you want to package the PerlApp sources:
-
-     make perlapp.zip
-
-If you want to package the perl.exe and miniperl.exe, you
-can use the perlexe.sis and miniperlexe.sis make targets.
-You also probably want the perllib.sis for the libraries
-and maybe even the perlapp.sis for the recognizer.
-
-The make target 'allsis' combines all the above SIS targets.
-
-To clean up after compilation you can use either of
-
-     make clean
-     make distclean
-
-depending on how clean you want to be.
-
-=head2 Compilation problems
-
-If you see right after "make" this
-
-    cat makefile.sh >makefile
-    'cat' is not recognized as an internal or external command,
-    operable program or batch file.
-
-it means you need to (re)run the F<symbian\config.pl>.
-
-If you get the error
-
-        'perl' is not recognized as an internal or external command,
-        operable program or batch file.
-
-you may need to reinstall the ActivePerl.
-
-If you see this
-
-    ren makedef.pl nomakedef.pl
-    The system cannot find the file specified.
-    C:\Symbian\...\make.exe: [rename_makedef] Error 1 (ignored)
-
-please ignore it since it is nothing serious (the build process of
-renames the Perl makedef.pl as nomakedef.pl to avoid confusing it
-with a makedef.pl of the SDK).
-
-=head2 PerlApp
-
-The PerlApp application demonstrates how to embed Perl interpreters
-to a Symbian application.  The "Time" menu item runs the following
-Perl code: C<print "Running in ", $^O, "\n", scalar localtime>,
-the "Oneliner" allows one to type in Perl code, and the "Run"
-opens a file chooser for selecting a Perl file to run.
-
-The PerlApp also is started when the "Perl recognizer" (also included
-and installed) detects a Perl file being activated through the GUI,
-and offers either to install it under \Perl (if the Perl file is in
-the inbox of the messaging application) or to run it (if the Perl file
-is under \Perl).
-
-=head2 sisify.pl
-
-In the symbian subdirectory there is F<sisify.pl> utility which can be used
-to package Perl scripts and/or Perl library directories into SIS files,
-which can be installed to the device.  To run the sisify.pl utility,
-you will need to have the 'makesis' and 'uidcrc' utilities already
-installed.  If you don't have the Win32 SDKs, you may try for example
-L<http://gnupoc.sourceforge.net/> or L<http://symbianos.org/~andreh/>.
-
-=head2 Using Perl in Symbian
-
-First of all note that you have full access to the Symbian device
-when using Perl: you can do a lot of damage to your device (like
-removing system files) unless you are careful.  Please do take
-backups before doing anything.
-
-The Perl port has been done for the most part using the Symbian
-standard POSIX-ish STDLIB library. It is a reasonably complete
-library, but certain corners of such emulation libraries that tend
-to be left unimplemented on non-UNIX platforms have been left
-unimplemented also this time: fork(), signals(), user/group ids,
-select() working for sockets, non-blocking sockets, and so forth.
-See the file F<symbian/config.sh> and look for 'undef' to find the
-unsupported APIs (or from Perl use Config).
-
-The filesystem of Symbian devices uses DOSish syntax, "drives"
-separated from paths by a colon, and backslashes for the path.  The
-exact assignment of the drives probably varies between platforms, but
-for example in Series 60 you might see C: as the (flash) main memory,
-D: as the RAM drive, E: as the memory card (MMC), Z: as the ROM.  In
-Series 80 D: is the memory card.  As far the devices go the NUL: is
-the bit bucket, the COMx: are the serial lines, IRCOMx: are the IR
-ports, TMP: might be C:\System\Temp.  Remember to double those
-backslashes in doublequoted strings.
-
-The Perl DLL is installed in \System\Libs\.  The Perl libraries and
-extension DLLs are installed in \System\Libs\Perl\X.Y.Z\.  The PerlApp
-is installed in \System\Apps\, and the SIS also installs a couple of
-demo scripts in \Perl\ (C:\Mydocs\Perl\ on Nokia 7710).
-
-Note that the Symbian filesystem is very picky: it strongly prefers
-the \ instead of the /.
-
-When doing XS / Symbian C++ programming include first the Symbian
-headers, then any standard C/POSIX headers, then Perl headers, and finally
-any application headers.
-
-New() and Copy() are unfortunately used by both Symbian and Perl code
-so you'll have to play cpp games if you need them.  PerlBase.h undefines
-the Perl definitions and redefines them as PerlNew() and PerlCopy().
-
-=head1 TO DO
-
-Lots.  See F<symbian/TODO>.
-
-=head1 WARNING
-
-As of Perl Symbian port version 0.4.1 any part of Perl's standard
-regression test suite has not been run on a real Symbian device using
-the ported Perl, so innumerable bugs may lie in wait.  Therefore there
-is absolutely no warranty.
-
-=head1 NOTE
-
-When creating and extending application programming interfaces (APIs)
-for Symbian or Series 60 or Series 80 or Series 90 it is suggested
-that trademarks, registered trademarks, or trade names are not used in
-the API names.  Instead, developers should consider basing the API
-naming in the existing (C++, or maybe Java) public component and API
-naming, modified as appropriate by the rules of the programming
-language the new APIs are for.
-
-Nokia is a registered trademark of Nokia Corporation. Nokia's product
-names are trademarks or registered trademarks of Nokia.  Other product
-and company names mentioned herein may be trademarks or trade names of
-their respective owners.
-
-=head1 AUTHOR
-
-Jarkko Hietaniemi
-
-=head1 COPYRIGHT
-
-Copyright (c) 2004-2005 Nokia.  All rights reserved.
-
-Copyright (c) 2006-2007 Jarkko Hietaniemi.
-
-=head1 LICENSE
-
-The Symbian port is licensed under the same terms as Perl itself.
-
-=head1 HISTORY
-
-=over 4
-
-=item *
-
-0.1.0: April 2005
-
-(This will show as "0.01" in the Symbian Installer.)
-
- - The console window is a very simple console indeed: one can
-   get the newline with "000" and the "C" button is a backspace.
-   Do not expect a terminal capable of vt100 or ANSI sequences.
-   The console is also "ASCII", you cannot input e.g. any accented
-   letters.  Because of obvious physical constraints the console is
-   also very small: (in Nokia 6600) 22 columns, 17 rows.
- - The following libraries are available:
-   AnyDBM_File AutoLoader base Carp Config Cwd constant
-   DynaLoader Exporter File::Spec integer lib strict Symbol
-   vars warnings XSLoader
- - The following extensions are available:
-   attributes Compress::Zlib Cwd Data::Dumper Devel::Peek
-   Digest::MD5 DynaLoader Fcntl File::Glob Filter::Util::Call
-   IO List::Util MIME::Base64
-   PerlIO::scalar PerlIO::via SDBM_File Socket Storable Time::HiRes
- - The following extensions are missing for various technical
-   reasons:
-   B ByteLoader Devel::DProf Devel::PPPort Encode GDBM_File
-   IPC::SysV NDBM_File Opcode PerlIO::encoding POSIX
-   re Safe Sys::Hostname Sys::Syslog
-   threads threads::shared Unicode::Normalize
- - Using MakeMaker or the Module::* to build and install modules
-   is not supported.
- - Building XS other than the ones in the core is not supported.
-
-Since this is 0.something release, any future releases are almost
-guaranteed to be binary incompatible.  As a sign of this the Symbian
-symbol exports are kept unfrozen and the .def files fully rebuilt
-every time.
-
-=item *
-
-0.2.0: October 2005
-
-  - Perl 5.9.3 (patch level 25741)
-  - Compress::Zlib and IO::Zlib supported
-  - sisify.pl added
-
-We maintain the binary incompatibility.
-
-=item *
-
-0.3.0: October 2005
-
-  - Perl 5.9.3 (patch level 25911)
-  - Series 80 2.0 and UIQ 2.1 support
-
-We maintain the binary incompatibility.
-
-=item *
-
-0.4.0: November 2005
-
-  - Perl 5.9.3 (patch level 26052)
-  - adding a sample Symbian extension
-
-We maintain the binary incompatibility.
-
-=item *
-
-0.4.1: December 2006
-
-  - Perl 5.9.5-to-be (patch level 30002)
-  - added extensions: Compress/Raw/Zlib, Digest/SHA,
-    Hash/Util, Math/BigInt/FastCalc, Text/Soundex, Time/Piece
-  - port to S90 1.1 by alexander smishlajev
-
-We maintain the binary incompatibility.
-
-=item *
-
-0.4.2: March 2007
-
-  - catchup with Perl 5.9.5-to-be (patch level 30812)
-  - tested to build with Microsoft Visual C++ 2005 Express Edition
-    (which uses Microsoft Visual C 8, instead of the old VC6),
-    SDK used for testing S60_2nd_FP3 aka 8.1a
-
-We maintain the binary incompatibility.
-
-=back
-
-=cut
index 62f34dd..b51a756 100644 (file)
@@ -142,11 +142,11 @@ You may need to set up a foreign symbol for the unpacking utility of
 choice.  Once you have done so, use a command like the following to
 unpack the archive:
 
-    vmstar -xvf perl-5^.33^.0.tar
+    vmstar -xvf perl-5^.33^.1.tar
 
 Then set default to the top-level source directory like so:
 
-    set default [.perl-5^.33^.0]
+    set default [.perl-5^.33^.1]
 
 and proceed with configuration as described in the next section.
 
diff --git a/XSUB.h b/XSUB.h
index 94e9dad..5f17a5a 100644 (file)
--- a/XSUB.h
+++ b/XSUB.h
@@ -127,9 +127,6 @@ is a lexical C<$_> in scope.
 #if defined(__CYGWIN__) && defined(USE_DYNAMIC_LOADING)
 #  define XS_EXTERNAL(name) __declspec(dllexport) XSPROTO(name)
 #  define XS_INTERNAL(name) STATIC XSPROTO(name)
-#elif defined(__SYMBIAN32__)
-#  define XS_EXTERNAL(name) EXPORT_C XSPROTO(name)
-#  define XS_INTERNAL(name) EXPORT_C STATIC XSPROTO(name)
 #elif defined(__cplusplus)
 #  define XS_EXTERNAL(name) extern "C" XSPROTO(name)
 #  define XS_INTERNAL(name) static XSPROTO(name)
@@ -163,16 +160,16 @@ is a lexical C<$_> in scope.
    PL_xsubfilename. */
 #define dXSBOOTARGSXSAPIVERCHK  \
        I32 ax = XS_BOTHVERSION_SETXSUBFN_POPMARK_BOOTCHECK;    \
-       SV **mark = PL_stack_base + ax; dSP; dITEMS
+       SV **mark = PL_stack_base + ax - 1; dSP; dITEMS
 #define dXSBOOTARGSAPIVERCHK  \
        I32 ax = XS_APIVERSION_SETXSUBFN_POPMARK_BOOTCHECK;     \
-       SV **mark = PL_stack_base + ax; dSP; dITEMS
+       SV **mark = PL_stack_base + ax - 1; dSP; dITEMS
 /* dXSBOOTARGSNOVERCHK has no API in xsubpp to choose it so do
 #undef dXSBOOTARGSXSAPIVERCHK
 #define dXSBOOTARGSXSAPIVERCHK dXSBOOTARGSNOVERCHK */
 #define dXSBOOTARGSNOVERCHK  \
        I32 ax = XS_SETXSUBFN_POPMARK;  \
-       SV **mark = PL_stack_base + ax; dSP; dITEMS
+       SV **mark = PL_stack_base + ax - 1; dSP; dITEMS
 
 #define dXSTARG SV * const targ = ((PL_op->op_private & OPpENTERSUB_HASTARG) \
                             ? PAD_SV(PL_op->op_targ) : sv_newmortal())
@@ -474,8 +471,6 @@ Rethrows a previously caught exception.  See L<perlguts/"Exception Handling">.
 #  define VTBL_amagicelem      &PL_vtbl_amagicelem
 #endif
 
-#include "perlapi.h"
-
 #if defined(PERL_IMPLICIT_CONTEXT) && !defined(PERL_NO_GET_CONTEXT) && !defined(PERL_CORE)
 #  undef aTHX
 #  undef aTHX_
index 58964f9..3b5ce0e 100644 (file)
@@ -645,7 +645,6 @@ static void S_exec_failed(pTHX_ const char *cmd, int fd, int do_report)
 
 static I32 S_do_amigaos_exec3(pTHX_ const char *incmd, int fd, int do_report)
 {
-       dVAR;
        const char **argv, **a;
        char *s;
        char *buf;
@@ -750,7 +749,6 @@ leave:
 I32 S_do_amigaos_aexec5(
     pTHX_ SV *really, SV **mark, SV **sp, int fd, int do_report)
 {
-       dVAR;
        I32 result = -1;
        PERL_ARGS_ASSERT_DO_AEXEC5;
        ENTER;
index 8bf557e..aa45f31 100644 (file)
@@ -234,7 +234,8 @@ sub docout ($$$) { # output the docs for one function
     $name =~ s/\s*$//;
 
     if ($flags =~ /D/) {
-        $docs = "\n\nDEPRECATED!  It is planned to remove this function from a
+        my $function = $flags =~ /n/ ? 'definition' : 'function';
+        $docs = "\n\nDEPRECATED!  It is planned to remove this $function from a
 future release of Perl.  Do not use it for new code; remove it from
 existing code.\n\n$docs";
     }
@@ -244,7 +245,8 @@ removed without notice.\n\n$docs" if $flags =~ /x/;
     }
 
     # Is Perl_, but no #define foo # Perl_foo
-    my $p = $flags =~ /p/ && $flags =~ /o/ && $flags !~ /M/;
+    my $p = (($flags =~ /p/ && $flags =~ /o/ && $flags !~ /M/)
+          || ($flags =~ /f/ && $flags !~ /T/));  # Can't handle threaded varargs
 
     $docs .= "NOTE: the perl_ form of this function is deprecated.\n\n"
          if $flags =~ /O/;
diff --git a/av.c b/av.c
index 27b2f12..b5ddaca 100644 (file)
--- a/av.c
+++ b/av.c
@@ -814,9 +814,10 @@ The Perl equivalent for this is C<$#myarray>.
 =for apidoc av_len
 
 Same as L</av_top_index>.  Note that, unlike what the name implies, it returns
-the highest index in the array, so to get the size of the array you need to use
-S<C<av_len(av) + 1>>.  This is unlike L</sv_len>, which returns what you would
-expect.
+the highest index in the array.  This is unlike L</sv_len>, which returns what
+you would expect.
+
+B<To get the true number of elements in the array, instead use C<L</av_count>>>.
 
 =cut
 */
@@ -1089,6 +1090,16 @@ Perl_av_nonelem(pTHX_ AV *av, SSize_t ix) {
     return sv;
 }
 
+SSize_t
+Perl_av_top_index(pTHX_ AV *av)
+{
+    PERL_ARGS_ASSERT_AV_TOP_INDEX;
+    assert(SvTYPE(av) == SVt_PVAV);
+
+    return AvFILL(av);
+}
+
+
 /*
  * ex: set ts=8 sts=4 sw=4 et:
  */
diff --git a/av.h b/av.h
index 5e39c42..90ebfff 100644 (file)
--- a/av.h
+++ b/av.h
@@ -81,7 +81,8 @@ Same as C<av_top_index()>.
                                           
 #define AvFILL(av)     ((SvRMAGICAL((const SV *) (av))) \
                         ? mg_size(MUTABLE_SV(av)) : AvFILLp(av))
-#define av_tindex(av)   av_top_index(av)
+#define av_top_index(av) AvFILL(av)
+#define av_tindex(av)    av_top_index(av)
 
 /* Note that it doesn't make sense to do this:
  *      SvGETMAGIC(av); IV x = av_tindex_nomg(av);
index d6b4566..526a32c 100644 (file)
@@ -435,7 +435,7 @@ EOT
   print FH ");\n";
   # Print the AUTOLOAD subroutine ExtUtils::Constant generated for us
   print FH autoload ($package, $]);
-  print FH "bootstrap $package \$VERSION;\n1;\n__END__\n";
+  print FH "$package->bootstrap(\$VERSION);\n1;\n__END__\n";
   close FH or die "close $pm: $!\n";
 
   ################ test.pl
diff --git a/cpan/ExtUtils-PL2Bat/lib/ExtUtils/PL2Bat.pm b/cpan/ExtUtils-PL2Bat/lib/ExtUtils/PL2Bat.pm
new file mode 100644 (file)
index 0000000..054b47f
--- /dev/null
@@ -0,0 +1,194 @@
+package ExtUtils::PL2Bat;
+$ExtUtils::PL2Bat::VERSION = '0.002';
+use strict;
+use warnings;
+
+use 5.006;
+
+use Config;
+use Carp qw/croak/;
+
+# In core, we can't use any other modules except those that already live in
+# lib/, so Exporter is not available to us.
+sub import {
+       my ($self, @functions) = @_;
+       @functions = 'pl2bat' if not @functions;
+       my $caller = caller;
+       for my $function (@functions) {
+               no strict 'refs';
+               *{"$caller\::$function"} = \&{$function};
+       }
+}
+
+sub pl2bat {
+       my %opts = @_;
+
+       # NOTE: %0 is already enclosed in doublequotes by cmd.exe, as appropriate
+       $opts{ntargs}    = '-x -S %0 %*' unless exists $opts{ntargs};
+       $opts{otherargs} = '-x -S "%0" %1 %2 %3 %4 %5 %6 %7 %8 %9' unless exists $opts{otherargs};
+
+       $opts{stripsuffix} = qr/\.plx?/ unless exists $opts{stripsuffix};
+
+       if (not exists $opts{out}) {
+               $opts{out} = $opts{in};
+               $opts{out} =~ s/$opts{stripsuffix}$//i;
+               $opts{out} .= '.bat' unless $opts{in} =~ /\.bat$/i or $opts{in} eq '-';
+       }
+
+       my $head = <<"EOT";
+       \@rem = '--*-Perl-*--
+       \@set "ErrorLevel="
+       \@if "%OS%" == "Windows_NT" \@goto WinNT
+       \@perl $opts{otherargs}
+       \@set ErrorLevel=%ErrorLevel%
+       \@goto endofperl
+       :WinNT
+       \@perl $opts{ntargs}
+       \@set ErrorLevel=%ErrorLevel%
+       \@if NOT "%COMSPEC%" == "%SystemRoot%\\system32\\cmd.exe" \@goto endofperl
+       \@if %ErrorLevel% == 9009 \@echo You do not have Perl in your PATH.
+       \@goto endofperl
+       \@rem ';
+EOT
+
+       $head =~ s/^\s+//gm;
+       my $headlines = 2 + ($head =~ tr/\n/\n/);
+       my $tail = <<'EOT';
+       __END__
+       :endofperl
+       @set "ErrorLevel=" & @goto _undefined_label_ 2>NUL || @"%COMSPEC%" /d/c @exit %ErrorLevel%
+EOT
+       $tail =~ s/^\s+//gm;
+
+       my $linedone = 0;
+       my $taildone = 0;
+       my $linenum = 0;
+       my $skiplines = 0;
+
+       my $start = $Config{startperl};
+       $start = '#!perl' unless $start =~ /^#!.*perl/;
+
+       open my $in, '<', $opts{in} or croak "Can't open $opts{in}: $!";
+       my @file = <$in>;
+       close $in;
+
+       foreach my $line ( @file ) {
+               $linenum++;
+               if ( $line =~ /^:endofperl\b/ ) {
+                       if (!exists $opts{update}) {
+                               warn "$opts{in} has already been converted to a batch file!\n";
+                               return;
+                       }
+                       $taildone++;
+               }
+               if ( not $linedone and $line =~ /^#!.*perl/ ) {
+                       if (exists $opts{update}) {
+                               $skiplines = $linenum - 1;
+                               $line .= '#line '.(1+$headlines)."\n";
+                       } else {
+       $line .= '#line '.($linenum+$headlines)."\n";
+                       }
+       $linedone++;
+               }
+               if ( $line =~ /^#\s*line\b/ and $linenum == 2 + $skiplines ) {
+                       $line = '';
+               }
+       }
+
+       open my $out, '>', $opts{out} or croak "Can't open $opts{out}: $!";
+       print $out $head;
+       print $out $start, ( $opts{usewarnings} ? ' -w' : '' ),
+                                                "\n#line ", ($headlines+1), "\n" unless $linedone;
+       print $out @file[$skiplines..$#file];
+       print $out $tail unless $taildone;
+       close $out;
+
+       return $opts{out};
+}
+
+1;
+
+# ABSTRACT: Batch file creation to run perl scripts on Windows
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
+=head1 NAME
+
+ExtUtils::PL2Bat - Batch file creation to run perl scripts on Windows
+
+=head1 VERSION
+
+version 0.002
+
+=head1 OVERVIEW
+
+This module converts a perl script into a batch file that can be executed on Windows/DOS-like operating systems.  This is intended to allow you to use a Perl script like regular programs and batch files where you just enter the name of the script [probably minus the extension] plus any command-line arguments and the script is found in your B<PATH> and run.
+
+=head1 FUNCTIONS
+
+=head2 pl2bat(%opts)
+
+This function takes a perl script and write a batch file that contains the script. This is sometimes necessary
+
+=over 8
+
+=item * C<in>
+
+The name of the script that is to be batchified. This argument is mandatory.
+
+=item * C<out>
+
+The name of the output batch file. If not given, it will be generated using C<in> and C<stripsuffix>.
+
+=item * C<ntargs>
+
+Arguments to invoke perl with in generated batch file when run from
+Windows NT.  Defaults to S<'-x -S %0 %*'>.
+
+=item * C<otherargs>
+
+Arguments to invoke perl with in generated batch file except when
+run from Windows NT (ie. when run from DOS, Windows 3.1, or Windows 95).
+Defaults to S<'-x -S "%0" %1 %2 %3 %4 %5 %6 %7 %8 %9'>.
+
+=item * C<stripsuffix>
+
+Strip a suffix string from file name before appending a ".bat"
+suffix.  The suffix is not case-sensitive.  It can be a regex or a string and a trailing
+C<$> is always assumed).  Defaults to C<qr/\.plx?/>.
+
+=item * C<usewarnings>
+
+With the C<usewarnings>
+option, C<" -w"> is added after the value of C<$Config{startperl}>.
+If a line matching C</^#!.*perl/> already exists in the script,
+then it is not changed and the B<-w> option is ignored.
+
+=item * C<update>
+
+If the script appears to have already been processed by B<pl2bat>,
+then the script is skipped and not processed unless C<update> was
+specified.  If C<update> is specified, the existing preamble is replaced.
+
+=back
+
+=head1 ACKNOWLEDGEMENTS
+
+This code was taken from Module::Build and then modified; which had taken it from perl's pl2bat script. This module is an attempt at unifying all three implementations.
+
+=head1 AUTHOR
+
+Leon Timmermans <leont@cpan.org>
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2015 by Leon Timmermans.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
diff --git a/cpan/ExtUtils-PL2Bat/t/make_executable.t b/cpan/ExtUtils-PL2Bat/t/make_executable.t
new file mode 100644 (file)
index 0000000..fb4ba6a
--- /dev/null
@@ -0,0 +1,33 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings FATAL => 'all';
+
+use Config;
+use Test::More;
+use ExtUtils::PL2Bat;
+use Cwd qw/cwd/;
+
+plan($^O eq 'MSWin32' ? (tests => 7) : skip_all => 'Only usable on Windows');
+
+my $filename = 'test_exec';
+my @files;
+
+open my $out, '>', $filename or die "Couldn't create $filename: $!";
+print $out "#! perl -w\nexit \$ARGV[0];\n";
+close $out;
+
+pl2bat(in => $filename);
+
+foreach my $i (42, 51, 0) {
+       my $cwd = cwd;
+       local $ENV{PATH} = join $Config{path_sep}, $cwd, $ENV{PATH};
+       my $ret = system $filename, $i;
+       is $ret & 0xff, 0, 'test_exec executed successfully';
+       is $ret >> 8, $i, "test_exec $i return value ok";
+}
+
+push @files, grep { -f } map { $filename.$_ } split / $Config{path_sep} /x, $ENV{PATHEXT} || '';
+is scalar(@files), 1, "Executable file exists";
+
+unlink $filename, @files;
index 22e53f8..681bb44 100644 (file)
@@ -18,7 +18,7 @@ BEGIN {
 
 use Exporter ();
 use vars qw($VERSION @ISA @EXPORT @EXPORT_OK);
-$VERSION   = '2.16';
+$VERSION   = '2.17';
 $VERSION   = eval $VERSION;
 @ISA       = qw(Exporter);
 @EXPORT    = qw(mkpath rmtree);
@@ -633,7 +633,7 @@ File::Path - Create or remove directory trees
 
 =head1 VERSION
 
-2.16 - released August 31 2018.
+2.17 - released July 18 2020.
 
 =head1 SYNOPSIS
 
@@ -1277,7 +1277,7 @@ Contributors to File::Path, in alphabetical order by first name.
 =head1 COPYRIGHT
 
 This module is copyright (C) Charles Bailey, Tim Bunce, David Landgren,
-James Keenan and Richard Elberger 1995-2018. All rights reserved.
+James Keenan and Richard Elberger 1995-2020. All rights reserved.
 
 =head1 LICENSE
 
index 8af39f7..6050c2e 100644 (file)
@@ -112,7 +112,6 @@ sub max_g {
   my $max_gid   = 0;
   my $max_group = undef;
   while ( my @g = getgrent() ) {
-    print Dumper @g;
     if ($max_gid < $g[2]) {
       $max_gid = $g[2];
       $max_group = $g[0];
index 0b30c4e..713a93a 100644 (file)
@@ -47,7 +47,8 @@ sub configure
 
   if ($ENV{'PERL_CORE'}) {
     # clean out const-* files in the core
-    push @moreopts, realclean => { FILES => "const-c.inc const-xs.inc" };
+    push @moreopts, realclean => { FILES => "const-c.inc const-xs.inc" },
+                    DEFINE => '-DNO_PPPORT_H';
   }
   else {
     # IPC::SysV is in the core since 5.005
index 490d410..6a0329c 100644 (file)
 #include "perl.h"
 #include "XSUB.h"
 
-#define NEED_sv_2pv_flags
-#define NEED_sv_pvn_force_flags
-#include "ppport.h"
+#ifndef NO_PPPORT_H
+#  define NEED_sv_2pv_flags
+#  define NEED_sv_pvn_force_flags
+#  include "ppport.h"
+#endif
 
 #include <sys/types.h>
 
@@ -346,8 +348,8 @@ void
 memread(addr, sv, pos, size)
     SV *addr
     SV *sv
-    int pos
-    int size
+    UV pos
+    UV size
   CODE:
     char *caddr = (char *) sv2addr(addr);
     char *dst;
@@ -371,8 +373,8 @@ void
 memwrite(addr, sv, pos, size)
     SV *addr
     SV *sv
-    int pos
-    int size
+    UV pos
+    UV size
   CODE:
     char *caddr = (char *) sv2addr(addr);
     STRLEN len;
index db2411d..051539d 100644 (file)
@@ -15,7 +15,7 @@ use strict;
 use vars qw($VERSION);
 use Carp;
 
-$VERSION = '2.07';
+$VERSION = '2.08';
 
 # Figure out if we have support for native sized types
 my $N = do { my $foo = eval { pack "L!", 0 }; $@ ? '' : '!' };
index 2cc5bc5..9284e7a 100644 (file)
@@ -16,7 +16,7 @@ use strict;
 use vars qw($VERSION);
 use Carp;
 
-$VERSION = '2.07';
+$VERSION = '2.08';
 
 # Figure out if we have support for native sized types
 my $N = do { my $foo = eval { pack "L!", 0 }; $@ ? '' : '!' };
index 993b5e6..5ebec7b 100644 (file)
@@ -15,7 +15,7 @@ use strict;
 use vars qw($VERSION);
 use Carp;
 
-$VERSION = '2.07';
+$VERSION = '2.08';
 
 # Figure out if we have support for native sized types
 my $N = do { my $foo = eval { pack "L!", 0 }; $@ ? '' : '!' };
index 4f917b4..0d53172 100644 (file)
@@ -18,7 +18,7 @@ use Config;
 require Exporter;
 @ISA = qw(Exporter);
 
-$VERSION = '2.07';
+$VERSION = '2.08';
 
 # To support new constants, just add them to @EXPORT_OK
 # and the C/XS code will be generated automagically.
@@ -81,14 +81,10 @@ sub AUTOLOAD
 
 BOOT_XS: {
   # If I inherit DynaLoader then I inherit AutoLoader and I DON'T WANT TO
-  require DynaLoader;
+  use XSLoader ();
 
-  # DynaLoader calls dl_load_flags as a static method.
-  *dl_load_flags = DynaLoader->can('dl_load_flags');
+  XSLoader::load( 'IPC::SysV', $VERSION );
 
-  do {
-    __PACKAGE__->can('bootstrap') || \&DynaLoader::bootstrap
-  }->(__PACKAGE__, $VERSION);
 }
 
 1;
index 68d2a05..277490b 100644 (file)
@@ -8,6 +8,10 @@
 #
 ################################################################################
 
+use strict;
+use warnings;
+
+our %Config;
 BEGIN {
   require Test::More; import Test::More;
   require Config; import Config;
@@ -30,7 +34,6 @@ plan(tests => 39);
 # Later the sem* tests will import more for themselves.
 
 use IPC::SysV qw(IPC_PRIVATE IPC_NOWAIT IPC_STAT IPC_RMID S_IRWXU);
-use strict;
 
 {
   my $did_diag = 0;
index 0d289ba..b31beb1 100644 (file)
@@ -8,6 +8,10 @@
 #
 ################################################################################
 
+use strict;
+use warnings;
+
+our %Config;
 BEGIN {
   if ($ENV{'PERL_CORE'}) {
     chdir 't' if -d 't';
@@ -29,7 +33,6 @@ if ($Config{'d_sem'} ne 'define') {
 }
 
 use IPC::SysV qw(IPC_PRIVATE IPC_RMID IPC_NOWAIT IPC_STAT S_IRWXU S_IRWXG S_IRWXO);
-use strict;
 
 use IPC::Msg;
 #Creating a message queue
index 6853526..3cc06d8 100644 (file)
@@ -8,6 +8,10 @@
 #
 ################################################################################
 
+use strict;
+use warnings;
+
+our %Config;
 BEGIN {
   if ($ENV{'PERL_CORE'}) {
     chdir 't' if -d 't';
@@ -22,8 +26,6 @@ BEGIN {
   }
 }
 
-use strict;
-
 my @pods;
 
 # find all potential pod files
index b677764..7aa2da9 100644 (file)
@@ -8,6 +8,10 @@
 #
 ################################################################################
 
+use strict;
+use warnings;
+
+our %Config;
 BEGIN {
   if ($ENV{'PERL_CORE'}) {
     chdir 't' if -d 't';
@@ -22,8 +26,6 @@ BEGIN {
   }
 }
 
-use strict;
-
 my @modules = qw( IPC::SysV IPC::Msg IPC::Semaphore IPC::SharedMem );
 
 eval 'use Pod::Coverage 0.10';
index e0de552..2c0da6b 100644 (file)
@@ -8,6 +8,10 @@
 #
 ################################################################################
 
+use strict;
+use warnings;
+
+our %Config;
 BEGIN {
   if ($ENV{'PERL_CORE'}) {
     chdir 't' if -d 't';
index 447514e..454c186 100644 (file)
@@ -8,6 +8,10 @@
 #
 ################################################################################
 
+use strict;
+use warnings;
+
+our %Config;
 BEGIN {
   if ($ENV{'PERL_CORE'}) {
     chdir 't' if -d 't';
index 9f08354..0507921 100644 (file)
@@ -14,7 +14,7 @@ use JSON::PP::Boolean;
 use Carp ();
 #use Devel::Peek;
 
-$JSON::PP::VERSION = '4.04';
+$JSON::PP::VERSION = '4.05';
 
 @JSON::PP::EXPORT = qw(encode_json decode_json from_json to_json);
 
@@ -1773,7 +1773,7 @@ JSON::PP - JSON::XS compatible pure-Perl module.
 
 =head1 VERSION
 
-    4.04
+    4.05
 
 =head1 DESCRIPTION
 
index 8ef6949..5d5b17c 100644 (file)
@@ -10,7 +10,7 @@ overload::import('overload',
     fallback => 1,
 );
 
-$JSON::PP::Boolean::VERSION = '4.04';
+$JSON::PP::Boolean::VERSION = '4.05';
 
 1;
 
index aa238dc..112b47b 100644 (file)
@@ -1,5 +1,9 @@
 # copied over from JSON::XS and modified to use JSON::PP
 
+use strict;
+use warnings;
+
+my $loaded;
 BEGIN { $| = 1; print "1..1\n"; }
 END {print "not ok 1\n" unless $loaded;}
 BEGIN { $ENV{PERL_JSON_BACKEND} = 0; }
index 95dff59..e160f82 100644 (file)
@@ -1,6 +1,7 @@
 # copied over from JSON::XS and modified to use JSON::PP
 
 use strict;
+use warnings;
 use Test::More;
 BEGIN { plan tests => 9 };
 
index 8d0765d..ae7b773 100644 (file)
@@ -1,6 +1,7 @@
 # copied over from JSON::XS and modified to use JSON::PP
 
 use strict;
+use warnings;
 use Test::More;
 BEGIN { plan tests => 35 };
 
index edf2990..11a73e2 100644 (file)
@@ -1,6 +1,7 @@
 # copied over from JSON::XS and modified to use JSON::PP
 
 use strict;
+use warnings;
 use Test::More;
 BEGIN { plan tests => 76 + 2 };
 
index a332947..32e4500 100644 (file)
@@ -6,6 +6,7 @@
 # Authors: don
 
 use strict;
+use warnings;
 use Test;
 
 # main
index 582f882..c8a5a0a 100644 (file)
@@ -2,6 +2,7 @@
 # copied over from JSON::XS and modified to use JSON::PP
 
 use strict;
+use warnings;
 use Test::More;
 BEGIN { plan tests => 9 };
 
@@ -10,7 +11,7 @@ BEGIN { $ENV{PERL_JSON_BACKEND} = 0; }
 use JSON::PP;
 
 my ($js,$obj,$json);
-my $pc = new JSON::PP;
+my $pc = JSON::PP->new;
 
 $obj = {foo => "bar"};
 $js = $pc->encode($obj);
index cbe6cd6..32fe808 100644 (file)
@@ -7,6 +7,7 @@
 
 use Test::More;
 use strict;
+use warnings;
 use utf8;
 BEGIN { plan tests => 17 };
 BEGIN { $ENV{PERL_JSON_BACKEND} = 0; }
@@ -16,7 +17,7 @@ use JSON::PP;
 #########################
 my ($js,$obj,$str);
 
-my $pc = new JSON::PP;
+my $pc = JSON::PP->new;
 
 $obj = {test => qq|abc"def|};
 $str = $pc->encode($obj);
index d8dc46d..762edfd 100644 (file)
@@ -4,6 +4,7 @@ use Test::More;
 # copied over from JSON::XS and modified to use JSON::PP
 
 use strict;
+use warnings;
 BEGIN { plan tests => 20 };
 BEGIN { $ENV{PERL_JSON_BACKEND} = 0; }
 
@@ -11,7 +12,7 @@ use JSON::PP;
 
 my ($js,$obj);
 
-my $pc = new JSON::PP;
+my $pc = JSON::PP->new;
 
 $js  = q|{}|;
 
index 1712064..d062f03 100644 (file)
@@ -3,6 +3,7 @@
 
 use Test::More;
 use strict;
+use warnings;
 BEGIN { plan tests => 6 };
 BEGIN { $ENV{PERL_JSON_BACKEND} = 0; }
 
@@ -11,7 +12,7 @@ use utf8;
 
 #########################
 my ($js,$obj);
-my $pc = new JSON::PP;
+my $pc = JSON::PP->new;
 
 $js  = '{"foo":0}';
 $obj = $pc->decode($js);
index cec6fe1..2dba569 100644 (file)
@@ -3,6 +3,7 @@
 
 use Test::More;
 use strict;
+use warnings;
 BEGIN { plan tests => 1 };
 BEGIN { $ENV{PERL_JSON_BACKEND} = 0; }
 
index 3167ef9..443b0d8 100644 (file)
@@ -3,6 +3,7 @@
 
 use Test::More;
 use strict;
+use warnings;
 BEGIN { plan tests => 8 + 2 };
 BEGIN { $ENV{PERL_JSON_BACKEND} = 0; }
 
@@ -10,7 +11,7 @@ use JSON::PP;
 
 #########################
 my ($js,$obj);
-my $pc = new JSON::PP;
+my $pc = JSON::PP->new;
 
 $js  = q|[-12.34]|;
 $obj = $pc->decode($js);
index 9329eb8..51f8558 100644 (file)
@@ -1,6 +1,7 @@
 # copied over from JSON::XS and modified to use JSON::PP
 
 use strict;
+use warnings;
 use Test::More;
 BEGIN { plan tests => 16 };
 
index 178a126..6aee693 100644 (file)
@@ -1,6 +1,7 @@
 # copied over from JSON::XS and modified to use JSON::PP
 
 use strict;
+use warnings;
 use Test::More;
 BEGIN { plan tests => 11 };
 
index 3069219..7030db8 100644 (file)
@@ -1,6 +1,7 @@
 # copied over from JSON::XS and modified to use JSON::PP
 
 use strict;
+use warnings;
 use Test::More;
 BEGIN { plan tests => 4 };
 
index d4e8b37..df4f1b8 100644 (file)
@@ -1,6 +1,7 @@
 # copied over from JSON::XS and modified to use JSON::PP
 
 use strict;
+use warnings;
 use Test::More;
 BEGIN { plan tests => 4 };
 
index 63d912e..0561397 100644 (file)
@@ -1,6 +1,7 @@
 # copied over from JSON::XS and modified to use JSON::PP
 
 use strict;
+use warnings;
 use Test::More;
 BEGIN { plan tests => 2 };
 
index 34fb60e..a49a3b4 100644 (file)
@@ -1,6 +1,7 @@
 # copied over from JSON::XS and modified to use JSON::PP
 
 use strict;
+use warnings;
 use Test::More;
 BEGIN { plan tests => 8 };
 
index 4e33982..e8d9c26 100644 (file)
@@ -45,7 +45,7 @@ splitter +JSON::PP->new                  , ' 0.00E+00 ';
 
 {
    my $text = '[5],{"":1} , [ 1,2, 3], {"3":null}';
-   my $coder = new JSON::PP;
+   my $coder = JSON::PP->new;
    for (0 .. length $text) {
       my $a = substr $text, 0, $_;
       my $b = substr $text, $_;
@@ -69,7 +69,7 @@ splitter +JSON::PP->new                  , ' 0.00E+00 ';
 
 {
    my $text = '[x][5]';
-   my $coder = new JSON::PP;
+   my $coder = JSON::PP->new;
    $coder->incr_parse ($text);
    ok (!eval { $coder->incr_parse }, "sparse1");
    ok (!eval { $coder->incr_parse }, "sparse2");
index 98e9528..6ab5b79 100644 (file)
@@ -1,11 +1,10 @@
 use strict;
+use warnings;
 
 use Test::More;
 BEGIN { plan tests => 10 };
 BEGIN { $ENV{PERL_JSON_BACKEND} = 0; }
 
-
-use strict;
 use JSON::PP;
 
 my $json = JSON::PP->new;
index 655f6fc..723d8e2 100644 (file)
@@ -14,7 +14,7 @@ print "1..1\n";
 my $data = ["\x{53f0}\x{6240}\x{306e}\x{6d41}\x{3057}",
             "\x{6c60}\x{306e}\x{30ab}\x{30a8}\x{30eb}"];
 my $js = JSON::PP->new->encode ($data);
-my $j = new JSON::PP;
+my $j = JSON::PP->new;
 my $object = $j->incr_parse ($js);
 
 die "no object" if !$object;
index 020db32..9b478f9 100644 (file)
@@ -1,6 +1,17 @@
 # copied over from JSON::XS and modified to use JSON::PP
 
+package JSON::PP::freeze;
+
+1;
+
+package JSON::PP::tojson;
+
+1;
+
+package main;
+
 use strict;
+use warnings;
 use Test::More;
 BEGIN { plan tests => 20 };
 BEGIN { $^W = 0 } # hate
@@ -47,8 +58,8 @@ sub JSON::PP::freeze::THAW {
    777
 }
 
-my $obj = bless { k => 1 }, JSON::PP::freeze::;
-my $enc = $json->encode ($obj);
+$obj = bless { k => 1 }, JSON::PP::freeze::;
+$enc = $json->encode ($obj);
 ok ($enc eq '("JSON::PP::freeze")[3,1,2]');
 
 my $dec = $json->decode ($enc);
index 2daa5b6..a1bce5d 100644 (file)
@@ -1,6 +1,7 @@
 # copied over from JSON::XS and modified to use JSON::PP
 
 use strict;
+use warnings;
 use Test::More;
 BEGIN { plan tests => 24576 };
 
index 649d7bd..1188e97 100644 (file)
@@ -1,6 +1,7 @@
 
 use Test::More;
 use strict;
+use warnings;
 BEGIN { plan tests => 3 };
 BEGIN { $ENV{PERL_JSON_BACKEND} = 0; }
 use JSON::PP;
index 225186b..56f415c 100644 (file)
@@ -1,6 +1,7 @@
 \r
 use Test::More;\r
-use strict;\r
+use strict;
+use warnings;\r
 BEGIN { plan tests => 2 };\r
 BEGIN { $ENV{PERL_JSON_BACKEND} = 0; }\r
 use JSON::PP;\r
index 85d3035..20918bb 100644 (file)
@@ -1,6 +1,7 @@
 \r
 use Test::More;\r
-use strict;\r
+use strict;
+use warnings;\r
 BEGIN { plan tests => 2 };\r
 BEGIN { $ENV{PERL_JSON_BACKEND} = 0; }\r
 use JSON::PP;\r
index 217caba..b3462f9 100644 (file)
@@ -1,6 +1,7 @@
 \r
 use Test::More;\r
-use strict;\r
+use strict;
+use warnings;\r
 BEGIN { plan tests => 4 };\r
 BEGIN { $ENV{PERL_JSON_BACKEND} = 0; }\r
 use JSON::PP;\r
index 438aeee..e0cec29 100644 (file)
@@ -2,6 +2,7 @@
 # decode on Perl 5.005, 5.6, 5.8 or later
 #
 use strict;
+use warnings;
 use Test::More;
 
 BEGIN { plan tests => 6 };
index ce7f510..95f7764 100644 (file)
@@ -2,6 +2,7 @@
 # decode on Perl 5.005, 5.6, 5.8 or later
 #
 use strict;
+use warnings;
 use Test::More;
 
 BEGIN { plan tests => 7 };
index c4c282f..99305dd 100644 (file)
@@ -1,5 +1,6 @@
 
 use strict;
+use warnings;
 use Test::More;
 BEGIN { plan tests => 9 };
 
@@ -20,7 +21,7 @@ my $fix =  !$v       ? '+'
           : '';
 
 
-my $json = new JSON::PP;
+my $json = JSON::PP->new;
 
 $json->allow_nonref->allow_bignum(1);
 $json->convert_blessed->allow_blessed;
index 1e319dc..853439a 100644 (file)
@@ -1,4 +1,5 @@
 use strict;
+use warnings;
 use Test::More;
 
 BEGIN { plan tests => 3 };
index 1b61c48..d4f7027 100644 (file)
@@ -1,4 +1,5 @@
 use strict;
+use warnings;
 use Test::More tests => 4;
 
 BEGIN {
@@ -26,6 +27,7 @@ ok(!$@);
 package Foo;
 
 use strict;
+use warnings;
 use overload (
     'eq' => sub { 0 },
     '""' => sub { $_[0] },
@@ -39,6 +41,7 @@ sub TO_JSON {
 package Bar;
 
 use strict;
+use warnings;
 use overload (
     'eq' => sub { 0 },
     '""' => sub { $_[0] },
index 10048d3..2b3dfa7 100644 (file)
@@ -1,4 +1,5 @@
 use strict;
+use warnings;
 use Test::More tests => 8;
 
 BEGIN {
index 51b3a4f..a8bed21 100644 (file)
@@ -1,5 +1,6 @@
 
 use strict;
+use warnings;
 use Test::More;
 BEGIN { plan tests => 2 };
 
index c00f023..6ad5d5c 100644 (file)
@@ -1,4 +1,5 @@
 use strict;
+use warnings;
 use Test::More tests => 4;
 
 use JSON::PP;
index a9d3df8..bd80f51 100644 (file)
@@ -1,5 +1,6 @@
 use Test::More;
 use strict;
+use warnings;
 BEGIN { $ENV{PERL_JSON_BACKEND} = 0; }
 BEGIN { $ENV{PERL_JSON_PP_USE_B} = 0 }
 use JSON::PP;
index 1a5d175..5a2c2b3 100644 (file)
@@ -1,4 +1,5 @@
 use strict;
+use warnings;
 use Test::More;
 BEGIN { $ENV{PERL_JSON_BACKEND} = 0; }
 use JSON::PP;
index be53660..ffbe294 100644 (file)
@@ -2,6 +2,7 @@
 # by Nicolas Seriot (https://github.com/nst/JSONTestSuite)
 
 use strict;
+use warnings;
 use Test::More;
 
 BEGIN { plan skip_all => 'this test is for Perl 5.8 or later' if $] < 5.008; }
index bb408e9..e569d29 100644 (file)
@@ -1,4 +1,5 @@
 use strict;
+use warnings;
 use Test::More;
 
 BEGIN { plan tests => 1 };
index b8f4707..e9b88c0 100644 (file)
@@ -1,4 +1,5 @@
 use strict;
+use warnings;
 use Test::More;
 BEGIN { plan tests => 4 };
 BEGIN { $ENV{PERL_JSON_BACKEND} = 0; }
index dc1fd45..cc07216 100644 (file)
@@ -1,4 +1,5 @@
 use strict;
+use warnings;
 use Test::More;
 BEGIN { $ENV{PERL_JSON_BACKEND} = 0; }
 use JSON::PP;
index 0ace370..8d5185d 100644 (file)
@@ -1,4 +1,5 @@
 use strict;
+use warnings;
 use Test::More;
 BEGIN { plan tests => 1 };
 
index ea3e006..6cab268 100644 (file)
@@ -10,7 +10,7 @@ package Math::Complex;
 { use 5.006; }
 use strict;
 
-our $VERSION = 1.59_01;
+our $VERSION = 1.59_02;
 
 use Config;
 
index 9833131..c4fd96f 100644 (file)
@@ -6,12 +6,20 @@
 # -- Jarkko Hietaniemi since Mar 1997
 # -- Daniel S. Lewart  since Sep 1997
 
+use strict;
+use warnings;
+
 use Math::Complex 1.54;
 
+# they are used later in the test and not exported by Math::Complex
+*_stringify_cartesian = \&Math::Complex::_stringify_cartesian;
+*_stringify_polar     = \&Math::Complex::_stringify_polar;
+
 our $vax_float = (pack("d",1) =~ /^[\x80\x10]\x40/);
 our $has_inf   = !$vax_float;
 
 my ($args, $op, $target, $test, $test_set, $try, $val, $zvalue, @set, @val);
+my ($bad, $z);
 
 $test = 0;
 $| = 1;
index 31960bb..a9a1255 100644 (file)
@@ -8,6 +8,8 @@
 # 
 # -- Jarkko Hietaniemi, April 1997
 
+use strict;
+use warnings;
 use Test::More tests => 153;
 
 use Math::Trig 1.18;
@@ -28,7 +30,7 @@ if ($^O eq 'unicos') { # See lib/Math/Complex.pm and t/lib/complex.t.
     $eps = 1e-10;
 }
 
-sub near ($$;$) {
+sub near {
     my $e = defined $_[2] ? $_[2] : $eps;
     my $d = $_[1] ? abs($_[0]/$_[1] - 1) : abs($_[0]);
     print "# near? $_[0] $_[1] : $d : $e\n";
index 643e866..809e880 100644 (file)
@@ -5,12 +5,13 @@
 
 use Test::More;
 
+use strict;
+use warnings;
+
 my @f = qw(abs cos exp log sin sqrt);
 
 plan tests => scalar @f;
 
-use strict;
-
 use Math::Complex;
 
 my %CORE;
index 8f79850..fe5e555 100644 (file)
@@ -12,7 +12,7 @@ package Pod::Usage;
 use strict;
 
 use vars qw($VERSION @ISA @EXPORT);
-$VERSION = '1.69';  ## Current version of this package
+$VERSION = '1.70';  ## Current version of this package
 require  5.006;    ## requires this Perl version or later
 
 #use diagnostics;
@@ -130,8 +130,8 @@ sub pod2usage {
 
     ## Check for perldoc
     my $progpath = $opts{'-perldoc'} ? $opts{'-perldoc'} :
-        File::Spec->catfile($Config{scriptdirexp} 
-       || $Config{scriptdir}, 'perldoc');
+        File::Spec->catfile($Config{scriptdirexp} || $Config{scriptdir},
+            'perldoc');
 
     my $version = sprintf("%vd",$^V);
     if ($Config{versiononly} and $Config{startperl} =~ /\Q$version\E$/ ) {
@@ -159,9 +159,17 @@ sub pod2usage {
         push @perldoc_cmd, ('-F', $f);
          unshift @perldoc_cmd, $opts{'-perlcmd'} if $opts{'-perlcmd'};
          system(@perldoc_cmd);
+         # RT16091: fall back to more if perldoc failed
          if($?) {
-           # RT16091: fall back to more if perldoc failed
-           system(($Config{pager} || $ENV{PAGER} || '/bin/more'), $1);
+           # RT131844: prefer PAGER env
+           my $pager = $ENV{PAGER} || $Config{pager};
+           if(defined($pager) && length($pager)) {
+             my $cmd = $pager . ' ' . ($^O =~ /win/i ? qq("$f") : quotemeta($f));
+             system($cmd);
+           } else {
+             # the most humble fallback; should work (at least) on *nix and Win
+             system('more', $f);
+           }
          }
        } else {
          croak "Unspecified input file or insecure argument.\n";
@@ -275,7 +283,12 @@ sub select {
 sub seq_i { return $_[1] }
 # Override Pod::Text->cmd_i to return just "arg", not "*arg*".
 # newer version based on Pod::Simple
-sub cmd_i { return $_[2] }
+sub cmd_i {
+ my $self = shift;
+ # RT121489: highlighting should be there with Termcap
+ return $self->SUPER::cmd_i(@_) if $self->isa('Pod::Text::Termcap');
+ return $_[1];
+}
 
 # This overrides the Pod::Text method to do something very akin to what
 # Pod::Select did as well as the work done below by preprocess_paragraph.
@@ -379,7 +392,7 @@ Pod::Usage - print a usage message from embedded pod documentation
 
 =head1 SYNOPSIS
 
-  use Pod::Usage
+  use Pod::Usage;
 
   my $message_text  = "This text precedes the usage message.";
   my $exit_status   = 2;          ## The exit status to use
@@ -484,7 +497,7 @@ This will output only the C<=head2 Algorithm> heading and content within
 the C<=head1 DESCRIPTION> section. The regexp binding is stronger than the
 section separator, such that e.g.:
 
-  "DESCRIPTION|OPTIONS|ENVIORNMENT/Caveats"
+  "DESCRIPTION|OPTIONS|ENVIRONMENT/Caveats"
 
 will print any C<=head2 Caveats> section (only) within any of the three
 C<=head1> sections.
@@ -876,6 +889,10 @@ Brad Appleton E<lt>bradapp@enteract.comE<gt>
 Based on code for B<Pod::Text::pod2text()> written by
 Tom Christiansen E<lt>tchrist@mox.perl.comE<gt>
 
+=head1 LICENSE
+
+Pod::Usage (the distribution) is licensed under the same terms as Perl.
+
 =head1 ACKNOWLEDGMENTS
 
 rjbs for refactoring Pod::Usage to not use Pod::Parser any more.
index 4661718..a51df22 100644 (file)
@@ -120,7 +120,9 @@ This option assumes that the formatter (see above) understands the option
 =item I<file>
 
 The pathname of a file containing pod documentation to be output in
-usage message format (defaults to standard input).
+usage message format. If omitted, standard input is read - but the
+output is then formatted with L<Pod::Text> only - unless a specific
+formatter has been specified with B<-formatter>.
 
 =back
 
@@ -135,7 +137,8 @@ module. Please see L<Pod::Usage/pod2usage()>.
 
 =head1 SEE ALSO
 
-L<Pod::Usage>, L<pod2text(1)>
+L<Pod::Usage>, L<pod2text>, L<Pod::Text>, L<Pod::Text::Termcap>,
+L<perldoc>
 
 =head1 AUTHOR
 
@@ -174,14 +177,13 @@ pod2usage(VERBOSE => 2)  if ($options{man});
 ## Dont default to STDIN if connected to a terminal
 pod2usage(2) if ((@ARGV == 0) && (-t STDIN));
 
-@ARGV = ('-')  unless (@ARGV);
 if (@ARGV > 1) {
     print STDERR "pod2usage: Too many filenames given\n\n";
     pod2usage(2);
 }
 
 my %usage = ();
-$usage{-input}    = shift(@ARGV);
+$usage{-input}    = shift(@ARGV) || \*STDIN;
 $usage{-exitval}  = $options{'exit'}      if (defined $options{'exit'});
 $usage{-output}   = $options{'output'}    if (defined $options{'output'});
 $usage{-verbose}  = $options{'verbose'}   if (defined $options{'verbose'});
index 7460a6d..43e811e 100644 (file)
@@ -42,7 +42,10 @@ OPTIONS AND ARGUMENTS
             the option "utf8". It turns on generation of utf8 output.
 
     *file*  The pathname of a file containing pod documentation to be output
-            in usage message format (defaults to standard input).
+            in usage message format. If omitted, standard input is read -
+            but the output is then formatted with the Pod::Text manpage only
+            - unless a specific formatter has been specified with
+            -formatter.
 
 DESCRIPTION
     pod2usage will read the given input file looking for pod documentation
@@ -53,7 +56,8 @@ DESCRIPTION
     Please see the pod2usage() entry in the Pod::Usage manpage.
 
 SEE ALSO
-    the Pod::Usage manpage, the pod2text(1) manpage
+    the Pod::Usage manpage, the pod2text manpage, the Pod::Text manpage, the
+    Pod::Text::Termcap manpage, the perldoc manpage
 
 AUTHOR
     Please report bugs using http://rt.cpan.org.
index 7eb5402..a6552c5 100644 (file)
@@ -226,7 +226,7 @@ $text =~ s{#Using.*/blib.*\n}{}; # older blib's emit something to STDERR
 is ($exit, 0,                 "Exit status pod2usage with self");
 ok (compare ($text, <<'EOT'), "Output test pod2usage with self") or diag "Got:\n$text\n";
 #Usage:
-#      use Pod::Usage
+#      use Pod::Usage;
 #
 #      my $message_text  = "This text precedes the usage message.";
 #      my $exit_status   = 2;          ## The exit status to use
index 7205753..1ba8022 100644 (file)
@@ -11,8 +11,9 @@ BEGIN {
    unshift @INC, $THISDIR;
    require "testcmp.pl";
    import TestCompare;
+   # RT#130418: previous use of dirname() was failing on VMS
    $PARENTDIR = File::Spec->catdir($THISDIR, File::Spec->updir());
-   push @INC, map { File::Spec->catfile($_, 'lib') } ($PARENTDIR, $THISDIR);
+   push @INC, map { File::Spec->catdir($_, 'lib') } ($PARENTDIR, $THISDIR);
 }
 
 #use strict;
@@ -27,8 +28,8 @@ $MYPKG = eval { (caller)[0] };
 @EXPORT = qw(&testpodplaintext);
 BEGIN {
     # we want this for testing only
-    unshift(@INC, File::Spec->catfile($PARENTDIR, 'inc'));
-print "INC=@INC\n";
+    unshift(@INC, File::Spec->catdir($PARENTDIR, 'inc'));
+    #print "INC=@INC\n";
 
     require Pod::PlainText;
     @ISA = qw( Pod::PlainText );
@@ -39,7 +40,7 @@ print "INC=@INC\n";
 ## reproducible results between environments
 @ENV{qw(TERMCAP COLUMNS)} = ('co=76:do=^J', 76);
 
-sub catfile(@) { File::Spec->catfile(@_); }
+sub catdir(@) { File::Spec->catdir(@_); }
 
 my $INSTDIR = abs_path(dirname $0);
 $INSTDIR = VMS::Filespec::unixpath($INSTDIR) if $^O eq 'VMS';
@@ -48,15 +49,15 @@ $INSTDIR =~ s#:$## if $^O eq 'MacOS';
 $INSTDIR = (dirname $INSTDIR) if (basename($INSTDIR) eq 'pod');
 $INSTDIR =~ s#:$## if $^O eq 'MacOS';
 $INSTDIR = (dirname $INSTDIR) if (basename($INSTDIR) eq 't');
-my @PODINCDIRS = ( catfile($INSTDIR, 'lib', 'Pod'),
-                   catfile($INSTDIR, 'scripts'),
-                   catfile($INSTDIR, 'pod'),
-                   catfile($INSTDIR, 't', 'pod')
+my @PODINCDIRS = ( catdir($INSTDIR, 'lib', 'Pod'),
+                   catdir($INSTDIR, 'scripts'),
+                   catdir($INSTDIR, 'pod'),
+                   catdir($INSTDIR, 't', 'pod')
                  );
 
 # FIXME - we should make the core capable of finding utilities built in
 # locations in ext.
-push @PODINCDIRS, catfile((File::Spec->updir()) x 2, 'pod') if $ENV{PERL_CORE};
+push @PODINCDIRS, catdir((File::Spec->updir()) x 2, 'pod') if $ENV{PERL_CORE};
 
 ## Find the path to the file to =include
 sub findinclude {
@@ -74,7 +75,7 @@ sub findinclude {
     my @podincdirs = ($thispoddir, $parentdir, @PODINCDIRS);
 
     for (@podincdirs) {
-       my $incfile = catfile($_, $incname);
+       my $incfile = File::Spec->catfile($_, $incname);
        return $incfile  if (-r $incfile);
     }
     warn("*** Can't find =include file $incname in @podincdirs\n");
index 2c6b5e4..f156699 100644 (file)
@@ -1,9 +1,9 @@
 package Socket;
 
 use strict;
-{ use 5.006001; }
+{ use v5.6.1; }
 
-our $VERSION = '2.029';
+our $VERSION = '2.030';
 
 =head1 NAME
 
index a73f6d4..6e9ca0e 100644 (file)
@@ -1,5 +1,11 @@
 #!./perl
 
+use v5.6.1;
+use strict;
+use warnings;
+
+our %Config;
+my $has_alarm;
 BEGIN {
     require Config; import Config;
     if ($Config{'extensions'} !~ /\bSocket\b/ && 
@@ -13,8 +19,8 @@ BEGIN {
 use Socket qw(:all);
 use Test::More tests => 6;
 
-$has_echo = $^O ne 'MSWin32';
-$alarmed = 0;
+my $has_echo = $^O ne 'MSWin32';
+my $alarmed = 0;
 sub arm      { $alarmed = 0; alarm(shift) if $has_alarm }
 sub alarmed  { $alarmed = 1 }
 $SIG{ALRM} = 'alarmed'                    if $has_alarm;
@@ -48,7 +54,8 @@ SKIP: {
        arm(0);
 
        arm(5);
-       $read = sysread(T,$buff,10);    # Connection may be granted, then closed!
+       my $buff;
+       my $read = sysread(T,$buff,10); # Connection may be granted, then closed!
        arm(0);
 
        while ($read > 0 && length($buff) < 5) {
@@ -87,7 +94,8 @@ SKIP: {
        arm(0);
 
        arm(5);
-       $read = sysread(S,$buff,10);    # Connection may be granted, then closed!
+       my $buff;
+       my $read = sysread(S,$buff,10); # Connection may be granted, then closed!
        arm(0);
 
        while ($read > 0 && length($buff) < 5) {
index b33a3e7..971e516 100644 (file)
@@ -1,3 +1,4 @@
+use v5.6.1;
 use strict;
 use warnings;
 use Test::More tests => 31;
index c5655bc..9441fb4 100644 (file)
@@ -1,3 +1,4 @@
+use v5.6.1;
 use strict;
 use warnings;
 use Test::More tests => 13;
index 2ed7606..8711f99 100644 (file)
@@ -1,3 +1,4 @@
+use v5.6.1;
 use strict;
 use warnings;
 use Test::More;
index 1f0e122..080c332 100644 (file)
@@ -1,3 +1,4 @@
+use v5.6.1;
 use strict;
 use warnings;
 use Test::More;
index 9f17afb..395d96a 100644 (file)
@@ -1,5 +1,6 @@
 #!./perl
 
+use v5.6.1;
 use strict;
 use warnings;
 
index cb11e26..29c5f74 100644 (file)
@@ -1,9 +1,14 @@
 #!./perl -w
 
+use v5.6.1;
+use strict;
+use warnings;
+
 my $child;
 my $can_fork;
 my $has_perlio;
 
+our %Config;
 BEGIN {
     require Config; import Config;
     $can_fork = $Config{'d_fork'} || $Config{'d_pseudofork'};
index 56094b9..3bb5818 100644 (file)
@@ -163,7 +163,6 @@ wide_to_utf8(const wchar_t *wbuf)
     char *buf;
     int wlen = 0;
     char *oldlocale;
-    dVAR;
 
     /* Here and elsewhere in this file, we have a critical section to prevent
      * another thread from changing the locale out from under us.  XXX But why
@@ -193,7 +192,6 @@ utf8_to_wide(const char *buf)
     mbstate_t mbs;
     char *oldlocale;
     int wlen = sizeof(wchar_t)*strlen(buf);
-    dVAR;
 
     LOCALE_LOCK;
 
@@ -308,7 +306,6 @@ XS(XS_Cygwin_win_to_posix_path)
        if (!IN_BYTES) {
            mbstate_t mbs;
             char *oldlocale;
-            dVAR;
 
             LOCALE_LOCK;
 
@@ -400,7 +397,6 @@ XS(XS_Cygwin_posix_to_win_path)
        wchar_t *wpath = (wchar_t *) safemalloc(sizeof(wchar_t)*len);
        wchar_t *wbuf = (wchar_t *) safemalloc(wlen);
        char *oldlocale;
-        dVAR;
 
         LOCALE_LOCK;
 
index 4866af9..f78eae5 100644 (file)
@@ -10,7 +10,7 @@
 package Data::Dumper;
 
 BEGIN {
-    $VERSION = '2.174'; # Don't forget to set version and release
+    $VERSION = '2.175'; # Don't forget to set version and release
 }               # date in POD below!
 
 #$| = 1;
@@ -1467,7 +1467,7 @@ modify it under the same terms as Perl itself.
 
 =head1 VERSION
 
-Version 2.174
+Version 2.175
 
 =head1 SEE ALSO
 
index a324cb6..97aeb03 100644 (file)
@@ -8,7 +8,7 @@
 #  include "ppport.h"
 #endif
 
-#if PERL_VERSION < 8
+#if PERL_VERSION_LT(5,8,0)
 #  define DD_USE_OLD_ID_FORMAT
 #endif
 
@@ -109,7 +109,7 @@ static I32 DD_dump (pTHX_ SV *val, const char *name, STRLEN namelen, SV *retval,
  * length parameter.  This wrongly allowed reading beyond the end of buffer
  * given malformed input */
 
-#if PERL_VERSION <= 6 /* Perl 5.6 and earlier */
+#if PERL_VERSION_LE(5,6,'*') /* Perl 5.6 and earlier */
 
 UV
 Perl_utf8_to_uvchr_buf(pTHX_ U8 *s, U8 *send, STRLEN *retlen)
@@ -125,10 +125,10 @@ Perl_utf8_to_uvchr_buf(pTHX_ U8 *s, U8 *send, STRLEN *retlen)
 #  define utf8_to_uvchr_buf(a,b,c) Perl_utf8_to_uvchr_buf(aTHX_ a,b,c)
 # endif
 
-#endif /* PERL_VERSION <= 6 */
+#endif /* PERL_VERSION_LE(5,6,'*') */
 
 /* Perl 5.7 through part of 5.15 */
-#if PERL_VERSION > 6 && PERL_VERSION <= 15 && ! defined(utf8_to_uvchr_buf)
+#if PERL_VERSION_GE(5,7,0) && PERL_VERSION_LE(5,15,'*') && ! defined(utf8_to_uvchr_buf)
 
 UV
 Perl_utf8_to_uvchr_buf(pTHX_ U8 *s, U8 *send, STRLEN *retlen)
@@ -146,12 +146,12 @@ Perl_utf8_to_uvchr_buf(pTHX_ U8 *s, U8 *send, STRLEN *retlen)
 #  define utf8_to_uvchr_buf(a,b,c) Perl_utf8_to_uvchr_buf(aTHX_ a,b,c)
 # endif
 
-#endif /* PERL_VERSION > 6 && <= 15 */
+#endif /* Perl 5.7 through part of 5.15 */
 
 /* Changes in 5.7 series mean that now IOK is only set if scalar is
    precisely integer but in 5.6 and earlier we need to do a more
    complex test  */
-#if PERL_VERSION <= 6
+#if PERL_VERSION_LT(5,7,0)
 #define DD_is_integer(sv) (SvIOK(sv) && (SvIsUV(val) ? SvUV(sv) == SvNV(sv) : SvIV(sv) == SvNV(sv)))
 #else
 #define DD_is_integer(sv) SvIOK(sv)
@@ -429,7 +429,7 @@ esc_q_utf8(pTHX_ SV* sv, const char *src, STRLEN slen, I32 do_utf8, I32 useqq)
                 * first byte */
                 increment = (k == 0 && *s != '\0') ? 1 : UTF8SKIP(s);
 
-#if PERL_VERSION < 10
+#if PERL_VERSION_LT(5,10,0)
                 sprintf(r, "\\x{%" UVxf "}", k);
                 r += strlen(r);
                 /* my_sprintf is not supported by ppport.h */
@@ -565,13 +565,13 @@ deparsed_output(pTHX_ SV *val)
      * the stack moving underneath anything that directly or indirectly calls
      * Perl_load_module()". If we're in an older Perl, we can't rely on that
      * stack, and must create a fresh sacrificial stack of our own. */
-#if PERL_VERSION < 20
+#if PERL_VERSION_LT(5,20,0)
     PUSHSTACKi(PERLSI_REQUIRE);
 #endif
 
     load_module(PERL_LOADMOD_NOIMPORT, pkg, 0);
 
-#if PERL_VERSION < 20
+#if PERL_VERSION_LT(5,20,0)
     POPSTACK;
     SPAGAIN;
 #endif
@@ -768,9 +768,9 @@ DD_dump(pTHX_ SV *val, const char *name, STRLEN namelen, SV *retval, HV *seenhv,
         /* regexps dont have to be blessed into package "Regexp"
          * they can be blessed into any package. 
          */
-#if PERL_VERSION < 8
+#if PERL_VERSION_LT(5,8,0)
        if (realpack && *realpack == 'R' && strEQ(realpack, "Regexp")) 
-#elif PERL_VERSION < 11
+#elif PERL_VERSION_LT(5,11,0)
         if (realpack && realtype == SVt_PVMG && mg_find(ival, PERL_MAGIC_qr))
 #else        
         if (realpack && realtype == SVt_REGEXP) 
@@ -808,12 +808,13 @@ DD_dump(pTHX_ SV *val, const char *name, STRLEN namelen, SV *retval, HV *seenhv,
            sv_catpvs(retval, "( ");
             if (style->indent >= 2) {
                blesspad = apad;
-               apad = newSVsv(apad);
+               apad = sv_2mortal(newSVsv(apad));
                sv_x(aTHX_ apad, " ", 1, blesslen+2);
            }
        }
 
         ipad = sv_x(aTHX_ Nullsv, SvPVX_const(style->xpad), SvCUR(style->xpad), level+1);
+        sv_2mortal(ipad);
 
         if (is_regex) 
         {
@@ -872,13 +873,13 @@ DD_dump(pTHX_ SV *val, const char *name, STRLEN namelen, SV *retval, HV *seenhv,
              sv_catsv(retval, sv_flags);
        } 
         else if (
-#if PERL_VERSION < 9
+#if PERL_VERSION_LT(5,9,0)
                realtype <= SVt_PVBM
 #else
                realtype <= SVt_PVMG
 #endif
        ) {                          /* scalar ref */
-           SV * const namesv = newSVpvs("${");
+           SV * const namesv = sv_2mortal(newSVpvs("${"));
            sv_catpvn(namesv, name, namelen);
            sv_catpvs(namesv, "}");
            if (realpack) {                                  /* blessed */
@@ -892,7 +893,6 @@ DD_dump(pTHX_ SV *val, const char *name, STRLEN namelen, SV *retval, HV *seenhv,
                DD_dump(aTHX_ ival, SvPVX_const(namesv), SvCUR(namesv), retval, seenhv,
                        postav, level+1, apad, style);
            }
-           SvREFCNT_dec(namesv);
        }
        else if (realtype == SVt_PVGV) {                     /* glob ref */
            SV * const namesv = newSVpvs("*{");
@@ -908,9 +908,10 @@ DD_dump(pTHX_ SV *val, const char *name, STRLEN namelen, SV *retval, HV *seenhv,
            SSize_t ix = 0;
            const SSize_t ixmax = av_len((AV *)ival);
        
-           SV * const ixsv = newSViv(0);
+           SV * const ixsv = sv_2mortal(newSViv(0));
            /* allowing for a 24 char wide array index */
            New(0, iname, namelen+28, char);
+            SAVEFREEPV(iname);
            (void) strlcpy(iname, name, namelen+28);
            inamelen = namelen;
            if (name[0] == '@') {
@@ -940,7 +941,7 @@ DD_dump(pTHX_ SV *val, const char *name, STRLEN namelen, SV *retval, HV *seenhv,
                iname[inamelen++] = '-'; iname[inamelen++] = '>';
            }
            iname[inamelen++] = '['; iname[inamelen] = '\0';
-            totpad = newSVsv(style->sep);
+            totpad = sv_2mortal(newSVsv(style->sep));
             sv_catsv(totpad, style->pad);
            sv_catsv(totpad, apad);
 
@@ -955,7 +956,7 @@ DD_dump(pTHX_ SV *val, const char *name, STRLEN namelen, SV *retval, HV *seenhv,
                
                ilen = inamelen;
                sv_setiv(ixsv, ix);
-#if PERL_VERSION < 10
+#if PERL_VERSION_LT(5,10,0)
                 (void) sprintf(iname+ilen, "%" IVdf, (IV)ix);
                ilen = strlen(iname);
 #else
@@ -970,8 +971,12 @@ DD_dump(pTHX_ SV *val, const char *name, STRLEN namelen, SV *retval, HV *seenhv,
                }
                sv_catsv(retval, totpad);
                sv_catsv(retval, ipad);
+                ENTER;
+                SAVETMPS;
                DD_dump(aTHX_ elem, iname, ilen, retval, seenhv, postav,
                        level+1, apad, style);
+                FREETMPS;
+                LEAVE;
                if (ix < ixmax || (style->trailingcomma && style->indent >= 1))
                    sv_catpvs(retval, ",");
            }
@@ -985,9 +990,6 @@ DD_dump(pTHX_ SV *val, const char *name, STRLEN namelen, SV *retval, HV *seenhv,
                sv_catpvs(retval, ")");
            else
                sv_catpvs(retval, "]");
-           SvREFCNT_dec(ixsv);
-           SvREFCNT_dec(totpad);
-           Safefree(iname);
        }
        else if (realtype == SVt_PVHV) {
            SV *totpad, *newapad;
@@ -997,7 +999,7 @@ DD_dump(pTHX_ SV *val, const char *name, STRLEN namelen, SV *retval, HV *seenhv,
            SV *hval;
            AV *keys = NULL;
        
-           SV * const iname = newSVpvn(name, namelen);
+           SV * const iname = newSVpvn_flags(name, namelen, SVs_TEMP);
            if (name[0] == '%') {
                sv_catpvs(retval, "(");
                (SvPVX(iname))[0] = '$';
@@ -1021,13 +1023,13 @@ DD_dump(pTHX_ SV *val, const char *name, STRLEN namelen, SV *retval, HV *seenhv,
                sv_catpvs(iname, "->");
            }
            sv_catpvs(iname, "{");
-            totpad = newSVsv(style->sep);
+            totpad = sv_2mortal(newSVsv(style->sep));
             sv_catsv(totpad, style->pad);
            sv_catsv(totpad, apad);
        
            /* If requested, get a sorted/filtered array of hash keys */
            if (style->sortkeys) {
-#if PERL_VERSION >= 8
+#if PERL_VERSION_GE(5,8,0)
                if (style->sortkeys == &PL_sv_yes) {
                    keys = newAV();
                    (void)hv_iterinit((HV*)ival);
@@ -1117,6 +1119,10 @@ DD_dump(pTHX_ SV *val, const char *name, STRLEN namelen, SV *retval, HV *seenhv,
 
                 sv_catsv(retval, totpad);
                 sv_catsv(retval, ipad);
+
+                ENTER;
+                SAVETMPS;
+
                 /* The (very)
                    old logic was first to check utf8 flag, and if utf8 always
                    call esc_q_utf8.  This caused test to break under -Mutf8,
@@ -1143,6 +1149,7 @@ DD_dump(pTHX_ SV *val, const char *name, STRLEN namelen, SV *retval, HV *seenhv,
                     else {
                        nticks = num_q(key, klen);
                        New(0, nkey_buffer, klen+nticks+3, char);
+                        SAVEFREEPV(nkey_buffer);
                         nkey = nkey_buffer;
                        nkey[0] = '\'';
                        if (nticks)
@@ -1160,7 +1167,8 @@ DD_dump(pTHX_ SV *val, const char *name, STRLEN namelen, SV *retval, HV *seenhv,
                     nlen = klen;
                     sv_catpvn(retval, nkey, klen);
                }
-                sname = newSVsv(iname);
+
+                sname = sv_2mortal(newSVsv(iname));
                 sv_catpvn(sname, nkey, nlen);
                 sv_catpvs(sname, "}");
 
@@ -1168,7 +1176,7 @@ DD_dump(pTHX_ SV *val, const char *name, STRLEN namelen, SV *retval, HV *seenhv,
                 if (style->indent >= 2) {
                    char *extra;
                     STRLEN elen = 0;
-                   newapad = newSVsv(apad);
+                   newapad = sv_2mortal(newSVsv(apad));
                    New(0, extra, klen+4+1, char);
                    while (elen < (klen+4))
                        extra[elen++] = ' ';
@@ -1181,10 +1189,9 @@ DD_dump(pTHX_ SV *val, const char *name, STRLEN namelen, SV *retval, HV *seenhv,
 
                DD_dump(aTHX_ hval, SvPVX_const(sname), SvCUR(sname), retval, seenhv,
                        postav, level+1, newapad, style);
-               SvREFCNT_dec(sname);
-               Safefree(nkey_buffer);
-                if (style->indent >= 2)
-                   SvREFCNT_dec(newapad);
+
+                FREETMPS;
+                LEAVE;
            }
            if (i) {
                 SV *opad = sv_x(aTHX_ Nullsv, SvPVX_const(style->xpad),
@@ -1199,8 +1206,6 @@ DD_dump(pTHX_ SV *val, const char *name, STRLEN namelen, SV *retval, HV *seenhv,
                sv_catpvs(retval, ")");
            else
                sv_catpvs(retval, "}");
-           SvREFCNT_dec(iname);
-           SvREFCNT_dec(totpad);
        }
        else if (realtype == SVt_PVCV) {
             if (style->deparse) {
@@ -1247,7 +1252,6 @@ DD_dump(pTHX_ SV *val, const char *name, STRLEN namelen, SV *retval, HV *seenhv,
             STRLEN plen, pticks;
 
             if (style->indent >= 2) {
-               SvREFCNT_dec(apad);
                apad = blesspad;
            }
            sv_catpvs(retval, ", '");
@@ -1276,7 +1280,6 @@ DD_dump(pTHX_ SV *val, const char *name, STRLEN namelen, SV *retval, HV *seenhv,
                sv_catpvs(retval, "()");
            }
        }
-       SvREFCNT_dec(ipad);
     }
     else {
        STRLEN i;
@@ -1347,7 +1350,7 @@ DD_dump(pTHX_ SV *val, const char *name, STRLEN namelen, SV *retval, HV *seenhv,
            if(i) ++c, --i;                     /* just get the name */
            if (memBEGINs(c, i, "main::")) {
                c += 4;
-#if PERL_VERSION < 7
+#if PERL_VERSION_LT(5,7,0)
                if (i == 6 || (i == 7 && c[6] == '\0'))
 #else
                if (i == 6)
@@ -1424,9 +1427,9 @@ DD_dump(pTHX_ SV *val, const char *name, STRLEN namelen, SV *retval, HV *seenhv,
        }
 #ifdef SvVOK
        else if (SvMAGICAL(val) && (mg = mg_find(val, 'V'))) {
-# if !defined(PL_vtbl_vstring) && PERL_VERSION < 17
+# if !defined(PL_vtbl_vstring) && PERL_VERSION_LT(5,17,0)
            SV * const vecsv = sv_newmortal();
-#  if PERL_VERSION < 10
+#  if PERL_VERSION_LT(5,10,0)
            scan_vstring(mg->mg_ptr, vecsv);
 #  else
            scan_vstring(mg->mg_ptr, mg->mg_ptr + mg->mg_len, vecsv);
@@ -1541,7 +1544,7 @@ Data_Dumper_Dumpxs(href, ...)
            seenhv = NULL;
            name = sv_newmortal();
        
-           retval = newSVpvs("");
+           retval = newSVpvs_flags("", SVs_TEMP);
            if (SvROK(href)
                && (hv = (HV*)SvRV((SV*)href))
                && SvTYPE(hv) == SVt_PVHV)              {
@@ -1600,7 +1603,8 @@ Data_Dumper_Dumpxs(href, ...)
                         style.sortkeys = NULL;
                     else if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV)
                         style.sortkeys = sv;
-                    else if (PERL_VERSION < 8)
+                    else
+#if PERL_VERSION_LT(5,8,0)
                         /* 5.6 doesn't make sortsv() available to XS code,
                          * so we must use this helper instead. Note that we
                          * always allocate this mortal SV, but it will be
@@ -1608,17 +1612,19 @@ Data_Dumper_Dumpxs(href, ...)
                          * while dumping recursively; an older version
                          * allocated it lazily as needed. */
                         style.sortkeys = sv_2mortal(newSVpvs("Data::Dumper::_sortkeys"));
-                    else
+#else
                         /* flag to use sortsv() for sorting hash keys */
                         style.sortkeys = &PL_sv_yes;
+#endif
                }
                postav = newAV();
+                sv_2mortal((SV*)postav);
 
                if (todumpav)
                    imax = av_len(todumpav);
                else
                    imax = -1;
-               valstr = newSVpvs("");
+               valstr = newSVpvs_flags("", SVs_TEMP);
                for (i = 0; i <= imax; ++i) {
                    SV *newapad;
                
@@ -1670,20 +1676,21 @@ Data_Dumper_Dumpxs(href, ...)
                
                     if (style.indent >= 2 && !terse) {
                        SV * const tmpsv = sv_x(aTHX_ NULL, " ", 1, SvCUR(name)+3);
-                       newapad = newSVsv(apad);
+                       newapad = sv_2mortal(newSVsv(apad));
                        sv_catsv(newapad, tmpsv);
                        SvREFCNT_dec(tmpsv);
                    }
                    else
                        newapad = apad;
                
+                    ENTER;
+                    SAVETMPS;
                    PUTBACK;
                    DD_dump(aTHX_ val, SvPVX_const(name), SvCUR(name), valstr, seenhv,
                             postav, 0, newapad, &style);
                    SPAGAIN;
-
-                    if (style.indent >= 2 && !terse)
-                       SvREFCNT_dec(newapad);
+                    FREETMPS;
+                    LEAVE;
 
                    postlen = av_len(postav);
                    if (postlen >= 0 || !terse) {
@@ -1714,13 +1721,11 @@ Data_Dumper_Dumpxs(href, ...)
                    }
                    SvPVCLEAR(valstr);
                    if (gimme == G_ARRAY) {
-                       XPUSHs(sv_2mortal(retval));
+                       XPUSHs(retval);
                        if (i < imax)   /* not the last time thro ? */
-                           retval = newSVpvs("");
+                           retval = newSVpvs_flags("", SVs_TEMP);
                    }
                }
-               SvREFCNT_dec(postav);
-               SvREFCNT_dec(valstr);
 
                 /* we defer croaking until here so that temporary SVs and
                  * buffers won't be leaked */
@@ -1732,7 +1737,7 @@ Data_Dumper_Dumpxs(href, ...)
            else
                croak("Call to new() method failed to return HASH ref");
            if (gimme != G_ARRAY)
-               XPUSHs(sv_2mortal(retval));
+               XPUSHs(retval);
        }
 
 SV *
index 2c7a164..112469c 100644 (file)
@@ -1,5 +1,30 @@
 Revision history for Devel-PPPort
 
+ 3.60 - 2020-08-11
+ * Restore PERL_BCDVERSION helper which is used on CPAN
+ * A few API elements were not properly found, like IVTYPE
+
+ 3.59 - 2020-08-10
+
+ * Add PERL_VERSION_* compare macros
+ * Rename PERL_BCDVERSION to internal name to discourage future use
+ * Stop versioning generated test files
+ * Enforce strict & warnings
+ * Avoid indirect calls
+ * scanprov: multiple improvements
+ * Use ivers() in tests
+ * Update POD documentation and HACKERS file
+ * Change ppport.h --api-info to not output non-API info unless that is the
+   only match
+ * Find more elements to be listed in the --api-info option (and similar) to
+   ppport.h
+
+ 3.58 - 2020-03-09
+
+ * Safer definition of UVCHR_SKIP
+ * Make sure WIDEST_UTYPE is unsigned
+ * Avoid Pax Header in tarballs
+
  3.57 - 2020-01-31
 
  * Fix eval_sv for Perl versions prior to 5.6.0 (Pali)
index 0343794..98abad2 100644 (file)
@@ -14,13 +14,12 @@ lying around in this distribution.
 =head2 How to backport something
 
 First, make sure that what you want to backport is documented.  If it's worth
-backporting, it surely is worth documenting.  Send a documentation patch to 
-L<perlbug@perl.org|mailto:perlbug@perl.org> if necessary.  Also,
-C<Devel::PPPort> cannot automatically generate proper information about the
-item without at least knowing its API prototype.  It can get this from
-F<embed.fnc> if the item is a function, but if it is a macro, there needs to be
-at least a S<C<=for apidoc>> line for C<Devel::PPPort> to be able to figure
-things out on its own.
+backporting, it surely is worth documenting.  Submit a documentation patch to
+L<https://github.com/Perl/perl5/issues> if necessary.  Also, C<Devel::PPPort>
+cannot automatically generate proper information about the item without at
+least knowing its API prototype.  It can get this from F<embed.fnc> if the item
+is a function, but if it is a macro, there needs to be at least a S<C<=for
+apidoc>> line for C<Devel::PPPort> to be able to figure things out on its own.
 
 Next, figure out where to place your implementation.  Look at all the files in
 F<parts/inc/> for one that fits what you're planning.  If there isn't one,
@@ -134,18 +133,26 @@ object will not get missing symbols when loaded.
 It also means you have to check for and skip tests that aren't relevant to this
 version.  The recommended way to do this is like:
 
- if (ivers($]) < ivers(5.6.2)) {
+ if (ivers($]) < ivers(5.6)) {           # No quotes needed
     skip "reason", $count;
  }
- elsif (if (ivers($]) > ivers(5.5) {
+ elsif (if (ivers($]) > ivers("5.5.4") {
+     # Quotes needed for double-dotted versions prior to 5.6.0
     skip "other reason", $count;
  }
+ else {
+    do_the_test
+ }
 
 C<ivers()> is a function automatically made available to all F<.t> files.  It
 converts any reasonble expression of a version number into an integer, which
 can reliably be compared using numeric comparison operators, with the output of
 a second C<ivers()> call on a different version number, like in the result above.
 
+It's worth emphasizing that, due to bugs in early perl parsing, if you use a
+version number containing two dots on a version befor 5.6.0, it has to be
+quoted.
+
 =back
 
 In all sections, lines that begin with C<##> are completely ignored.
@@ -153,10 +160,29 @@ In all sections, lines that begin with C<##> are completely ignored.
 =head2 Implementation Section Details
 
 You can implement API elements via C functions or macros, or simple variables.
-For a function, just place its body in this C<=implementation> section.  But it
-is preferable to use a macro if feasible.  Otherwise, the user must explicitly
-request that it get loaded, by defining a C<NEED_I<function>> (or I<variable>)
-as described in F<ppport.h>.
+It is preferable to use a macro if feasible.  Otherwise, the user must
+explicitly request that it get loaded, by defining a C<NEED_I<function>> (or
+I<variable>) as described in F<ppport.h>.  If a function, I<foo> is required,
+place its body in this C<=implementation> section, like so:
+
+ #if { NEED foo }
+
+ char *
+ foo(pTHX_ const U8 *arg1, const U32 arg2, ...)
+ {
+    ...
+ }
+
+ #endif
+
+Similarly for a variable.
+
+It's obviously best to use a macro if at all feasible.  Sometimes what once
+was implemented with a macro now requires a function; perhaps an edge case was
+overlooked.  Doing so will cause the new F<ppport.h> to not be drop-in
+compatible with the older version, and can hence cause breakage.  This
+incompatiblity (while easily solved) really needs to be stressed in
+documentation.
 
 =over
 
@@ -204,20 +230,18 @@ Perl public API.
 
 =item Version numbers
 
-Version checking can be tricky to get correct (besides being buggy in some perl
-versions).
-C<ivers()> is used in the C<=tests> section to overcome this, and constructs
+Version checking used to be tricky to get correct (besides being buggy in some
+perl versions).
+C<ivers()> is used in the C<=tests> section to overcome this. and constructs
 like the following in the C language sections.
 
   #if { VERSION < 5.9.3 }
 
-instead of
+You SHOULD be using this construct or the alternatives listed below for ALL
+version checks, and not come up with something on your own.
 
-  #if ((PERL_VERSION < 9) \
-    || (PERL_VERSION == 9 && PERL_SUBVERSION < 3))
-
-The version number can be either of the new form C<5.x.x> or the older
-form C<5.00x_yy>. Both are translated into the correct preprocessor
+In this form, the version number can be either of the new form C<5.x.y> or the
+older form C<5.00x_yy>. Both are translated into the correct preprocessor
 statements. It is also possible to combine this with other statements:
 
   #if { VERSION >= 5.004 } && !defined(sv_vcatpvf)
@@ -229,14 +253,40 @@ statements. It is also possible to combine this with other statements:
 This not only works in the C<=implementation> section, but also in
 the C<=xsubs>, C<=xsinit>, C<=xsmisc>, C<=xshead> and C<=xsboot> sections.
 
+Alternatively, you can use the forms now available in regular Perl:
+
+  #if PERL_VERSION_EQ(5,9,3)
+  #if PERL_VERSION_NE(5,9,3)
+  #if PERL_VERSION_LT(5,9,3)
+  #if PERL_VERSION_GT(5,9,3)
+  #if PERL_VERSION_LE(5,9,3)
+  #if PERL_VERSION_GE(5,9,3)
+
+These forms have the advantage over the '{ VERSION ... }' form in that you may
+use the special value '*' for the final number to mean ALL possible values for
+it.  Thus,
+
+ #if PERL_VERSION_EQ(5,31,'*')
+
+means all perls in the 5.31 series.  And
+
+ #if PERL_VERSION_NE(5,24,'*')
+
+means all perls EXCEPT 5.24 ones.  And
+
+ #if PERL_VERSION_LE(5,9,'*')
+
+is effectively
+
+ #if PERL_VERSION_LT(5,10,0)
+
 =item Hints
 
 If you add a comment like so:
 
  /* Hint: PL_expect, PL_copline, PL_rsfp
-    paragraphs of stuff about foo you want to have
-    shown when ppport.h outputs something about PL_expect or
-    PL_copline or PL_rsfp
+    paragraphs of stuff you want to have shown when ppport.h outputs
+    something about any one of PL_expect, PL_copline, or PL_rsfp
  */
 
 Earlier versions of F<ppport.h> required an asterisk at the beginning of every
@@ -244,12 +294,11 @@ continuation line, or else the content would be silently dropped.
 
 =item Warnings
 
-A more serious caution about C<foo> can be displayed by instead saying
+A more serious caution can be displayed by instead saying
 
  /* Warning: PL_expect, PL_copline, PL_rsfp
-    paragraphs of stuff about foo you want to have
-    shown when ppport.h outputs something about PL_expect or
-    PL_copline or PL_rsfp
+    paragraphs of stuff you want to have shown when ppport.h outputs
+    something about any one of PL_expect, PL_copline, or PL_rsfp
  */
 
 Earlier versions of F<ppport.h> required an asterisk at the beginning of every
@@ -394,12 +443,14 @@ some of these have been in limbo for many years, so should be documented.
 
 And you will need updated API information. Copy the latest F<embed.fnc> file
 from bleadperl to the F<parts> directory and run F<devel/mkapidoc.pl> to
-collect the remaining information in F<parts/apidoc.fnc>.
+collect the remaining information in F<parts/apidoc.fnc>.  This needs to be
+done after the perl has been compiled, as there are generated files that feed
+it.
 
 =item *
 
 The final step before regenerating everything is to run
-F</devel/mkppport_fnc.pl> to update the F</parts/ppport.fnc> file.
+F<devel/mkppport_fnc.pl> to update the F</parts/ppport.fnc> file.
 
 =back
 
@@ -598,7 +649,7 @@ No known bugs.
 
 =head1 COPYRIGHT
 
-Version 3.x, Copyright (C) 2004-2019, Marcus Holland-Moritz
+Version 3.x, Copyright (C) 2004-2020, Marcus Holland-Moritz
 and Perl 5 porters
 
 Version 2.x, Copyright (C) 2001, Paul Marquess.
index bc5f502..a74a57d 100644 (file)
 #  This program is free software; you can redistribute it and/or
 #  modify it under the same terms as Perl itself.
 #
+# CAUTION! that this runs on 5.003.  That means there are certain restrictions
+# apply.  The most likely gotchas are in the HACKERS file under "How to
+# backport something".  Under the tests paragraph, there is a list of things
+# to avoid.
+#
 ################################################################################
 
 require 5.003;
@@ -53,7 +58,7 @@ WriteMakefile(%mf);
 
 sub configure
 {
-  my @clean    = qw{ $(H_FILES) RealPPPort.xs RealPPPort.c PPPort.pm };
+  my @clean    = qw{ $(H_FILES) RealPPPort.xs RealPPPort.c PPPort.pm t/*.t };
   my %depend   = (
     '$(OBJECT)' => '$(H_FILES)',
     'Makefile' => '$(VERSION_FROM)',
@@ -147,6 +152,8 @@ sub MY::postamble
   my $post = shift->SUPER::postamble(@_);
   $post .= <<'POSTAMBLE';
 
+.PHONY: purge_all regen_pm regen_xs regen_tests regen_h regen_release_date
+
 purge_all: realclean
        @$(RM_F) PPPort.pm t/*.t
 
@@ -162,7 +169,10 @@ regen_tests:
 regen_h:
        $(PERL) -I$(INST_ARCHLIB) -I$(INST_LIB) -I$(PERL_ARCHLIB) -I$(PERL_LIB) ppport_h.PL
 
-regen: regen_pm regen_xs regen_tests regen_h
+regen_release_date:
+       $(PERL) -I$(INST_ARCHLIB) -I$(INST_LIB) -I$(PERL_ARCHLIB) -I$(PERL_LIB) devel/update_release_date.pl
+
+regen: regen_pm regen_xs regen_tests regen_h regen_release_date
 
 POSTAMBLE
   return $post;
@@ -207,6 +217,24 @@ TESTS_IN_T
   return $updated;
 }
 
+sub MY::dist_basics
+{
+  package MY;
+  my $original = shift->SUPER::dist_basics(@_);
+
+  my $updated = '';
+  my @rules = split( m{^\s*$}m, $original );
+  my $rule;
+  foreach $rule ( @rules ) {
+    if ( $rule =~ m{^\s*^manifest\s+:}m ) {
+      $rule =~ s{^(\s*^manifest\s+:.*)}{$1 $t_01_test}m; # make sure we regenerate tests
+    }
+    $updated .= $rule;
+  }
+
+  return $updated;
+}
+
 sub MY::dist_core
 {
   package MY;
@@ -217,8 +245,10 @@ sub MY::dist_core
   my $rule;
   foreach $rule ( @rules ) {
     if ( $rule =~ m{^\s*^dist\s+:}m ) {
-        $rule =~ s{:}{: PPPort.pm manifest}; # make sure we update PPPort.pm
+        $rule =~ s{:}{: PPPort.pm manifest regen}; # make sure we update PPPort.pm
         $rule .= qq[\t].q[$(NOECHO) $(ECHO) "Warning: Please check '__MAX_PERL__' value in PPPort_pm.PL"].qq[\n];
+        # checking that the tarball has no Pax Header - avoid false positives by using [P]axHEader
+        $rule .= qq[\t].q[$(NOECHO) zgrep -a -e '[P]axHeader' $(DISTVNAME).tar$(SUFFIX) && ( $(ECHO) "ERROR: Pax Header detected in tarball"; rm -f $(DISTVNAME).tar$(SUFFIX) ) ||:].qq[\n];
     }
     $updated .= $rule;
   }
index f578954..4d8f9f1 100644 (file)
@@ -85,7 +85,25 @@ my %raw_base = %{&parse_todo('parts/base')};
 # determine
 my %raw_todo = %{&parse_todo('parts/todo')};
 
-# Invert so each key is the 7 digit version number, and it's value is an array
+# The items defined by config.h are found instead by scanprov which currently
+# doesn't write them to the todo files.  Instead add them here.  All such have
+# the K code, and we know certain things about them, so set their flags
+# accordingly.
+for (keys %raw_base) {
+    if (   exists $raw_base{$_}{code}
+        && $raw_base{$_}{code} eq 'K')
+    {
+        $embed{$_}->{flags}{'A'} = 1;
+        $embed{$_}->{flags}{'m'} = 1;
+        $embed{$_}->{flags}{'d'} = 1;
+        $embed{$_}->{flags}{'T'} = 1;
+        #
+        # Don't override any existing
+        $raw_todo{$_} = $raw_base{$_} unless exists $raw_todo{$_};
+    }
+}
+
+# Invert so each key is the 7 digit version number, and its value is an array
 # of all symbols within it, like:
 #          '5005003' => [
 #                         'POPpx',
@@ -106,7 +124,7 @@ my @todo_list = reverse sort keys %todo;
 # directories are empty (which should only happen during regeneration of the
 # base and todo files).).  Actually the final element is for blead (at the
 # time things were regenerated), which is 1 beyond the max version supported.
-my $INT_MAX_PERL = (@todo_list) ? $todo_list[0] - 1 : '5030000'; # used for __MAX_PERL__
+my $INT_MAX_PERL = (@todo_list) ? $todo_list[0] - 1 : '5032000'; # used for __MAX_PERL__
 my $MAX_PERL = format_version($INT_MAX_PERL);
 my $INT_MIN_PERL = (@todo_list) ? $todo_list[-1] : 5003007;
 my $MIN_PERL = format_version($INT_MIN_PERL);
@@ -138,21 +156,30 @@ for (@provided) {
   }
 }
 
-my @perl_api;
+my %perl_api;
 for (@provided) {
   next if /^Perl_(.*)/ && exists $embed{$1};
   next if exists $embed{$_};
-  push @perl_api, $_;
+  $perl_api{$_} = 1;
   check(2, "No API definition for provided element $_ found.");
 }
 
-# At this point @perl_api is the list of things we provide that weren't found
-# in the .fnc files.
-my @prototype_unknown = @perl_api;
+# At this point the keys of %perl_api give the list of things we provide that
+# weren't found in the .fnc files.
+my @prototype_unknown = keys %perl_api;
 
 # Add in the .fnc file definitions.
-push @perl_api, keys %embed;
-@perl_api = sort dictionary_order @perl_api;
+for (keys %embed) {
+    $perl_api{$_} = 1;
+}
+
+# Finally, scanprov has found macros of various types
+my @scanprov_found_macros = grep { $raw_base{$_}{code} =~ /[KMZ]/ } keys %raw_base;
+for (@scanprov_found_macros) {
+    $perl_api{$_} = 1;
+}
+
+my @perl_api = sort dictionary_order keys %perl_api;
 
 for (@perl_api) {   # $_ is the item name
   if (exists $provides{$_} && !exists $raw_base{$_}) {
@@ -175,18 +202,19 @@ for (@perl_api) {   # $_ is the item name
   $e = $embed{$_} if exists $embed{$_};
   my $is_documented = 0;
   my $is_accessible = 0;
+  my $has_thread = 1;
   if (defined $e) {
     if (exists $e->{flags}{'p'}) {    # Has 'Perl_' prefix
       my $args = $e->{args};
       $line .= 'v' if @$args && $args->[-1][0] eq '...';
     }
     $line .= 'o' if exists $e->{ppport_fnc};
-    $line .= 'n' if exists $e->{flags}{'T'};  # No thread context parameter
     $line .= 'd' if exists $e->{flags}{'D'};  # deprecated
     $line .= 'x' if exists $e->{flags}{'x'};  # experimental
     $line .= 'c' if        exists $e->{flags}{'C'}      # core-only
                    || (    exists $e->{flags}{'X'}
                        && (exists $e->{flags}{'E'} || ! exists $e->{flags}{'m'}));
+    $has_thread = 0 if exists $e->{flags}{'T'};  # No thread context parameter
     $is_accessible = 1 if exists $e->{flags}{'A'}
                        || exists $e->{flags}{'C'}
                        || (     exists $e->{flags}{'X'}
@@ -195,21 +223,29 @@ for (@perl_api) {   # $_ is the item name
     $is_documented = 1 if exists $e->{flags}{'d'};
   }
 
-  # scanprov adds the M and F flags.  The M is for provided macros; F for
-  # functions we didn't find in testing (usually because they are hidden
-  # behind ifdefs, like PERL_GLOBAL_STRUCT_PRIVATE).  None of them were
-  # verified
+  # scanprov adds several flags:
+  #     F is for functions we didn't find in testing (usually because they are
+  #       hidden behind ifdefs, like USE_THREADS if built on unthreaded perls,
+  #       or vice-versa.
+  #     K for config.h #defines.  These are considered provided and are
+  #       documented in config.h (mnemonic: K is like c in config)
+  #     M for provided, undocumented macros.  If they were documented, they
+  #       would have been found before scanprov was run.
+  #     Z for macros that aren't documented or provided.  (mnemonic:
+  #       'Zecret').  Some of these may be hidden behind an #ifdef PERL_CORE.
+  # None of these were verified by compilation
   if (exists $raw_base{$_}{code}) {
-    $line .= 'V' if $raw_base{$_}{code} =~ /[MFX]/;
+    $line .= 'V' if $raw_base{$_}{code} =~ /[FKMXZ]/;
     $is_accessible = 1 if $raw_base{$_}{code} =~ /M/;
   }
+  $line .= 'n' unless $has_thread;
   $line .= 'i' unless $is_accessible;
   $line .= 'u' unless $is_documented;
 
   $_ = $line;
 }
 
-$data =~ s/^([\t ]*)__PERL_API__(\s*?)$/
+$data =~ s/^([\t ]*)__ALL_ELEMENTS__(\s*?)$/
            join "\n", map "$1$_", sort dictionary_order @perl_api
           /gem;
 
@@ -218,7 +254,7 @@ my $undocumented = "(undocumented)";
 my @todo;
 for (@todo_list) {
   my $ver = format_version($_);
-  $ver .= " (at least)" if $_ == $todo_list[-1];
+  $ver .= " (or maybe earlier)" if $_ == $todo_list[-1];
   my $todo = "=item perl $ver\n\n";
   for (sort dictionary_order @{$todo{$_}}) {
     $todo .= "  $_";
@@ -488,7 +524,7 @@ __DATA__
 #
 #  This file was automatically generated from the definition files in the
 #  parts/inc/ subdirectory by PPPort_pm.PL. To learn more about how all this
-#  works, please read the F<HACKERS> file that came with this distribution.
+#  works, please read the L<HACKERS> file that came with this distribution.
 #
 ################################################################################
 #
@@ -567,7 +603,16 @@ They are most probably not XS writers. Also, don't make F<ppport.h>
 optional. Rather, just take the most recent copy of F<ppport.h> that
 you can find (e.g. by generating it with the latest C<Devel::PPPort>
 release from CPAN), copy it into your project, adjust your project to
-use it, and distribute the header along with your module.
+use it, test it, and distribute the header along with your module.
+
+It is important to use the most recent version of F<ppport.h>.  You do need to
+test before shipping a newer version than you already had.  One possible
+failure is that someone had to convert a backported element from a macro into
+a function, and actual functions must be enabled with a NEED macro to minimize
+the possibility of namespace pollution.  See L<HACKERS> for details.  The
+developers of C<Devel::PPPort> want to hear if there are other problems that
+arise from using a later F<ppport.h>.  Use
+L<https://github.com/Dual-Life/Devel-PPPort/issues> to report any.
 
 =head2 Running ppport.h
 
@@ -691,7 +736,7 @@ Versions >= 3.22 are maintained by perl5 porters
 
 Version 3.x, Copyright (C) 2004-2013, Marcus Holland-Moritz.
 
-             Copyright (C) 2018, The perl5 porters
+             Copyright (C) 2018-2020, The perl5 porters
 
 Version 2.x, Copyright (C) 2001, Paul Marquess.
 
@@ -711,7 +756,7 @@ package Devel::PPPort;
 use strict;
 use vars qw($VERSION $data);
 
-$VERSION = '3.57';
+$VERSION = '3.60';
 
 sub _init_data
 {
@@ -747,7 +792,7 @@ sub WriteFile
 
 __DATA__
 #if 0
-<<'SKIP';
+my $void = <<'SKIP';
 #endif
 /*
 ----------------------------------------------------------------------
index e2437a5..49964ce 100644 (file)
@@ -120,6 +120,7 @@ sub ask($)
   local $| = 1;
   do {
     print "\a\n$q [y/n] ";
+    return unless -t;   # Fail if no tty input
     $a = <>; }
   while ($a !~ /^\s*([yn])\s*$/i);
   return lc $1 eq 'y';
old mode 100644 (file)
new mode 100755 (executable)
index b3a5946..fa49459
@@ -1,3 +1,5 @@
+#!/usr/bin/perl
+
 ################################################################################
 #
 #  mkapidoc.pl -- generate apidoc.fnc from scanning the Perl source
 
 use warnings;
 use strict;
+use File::Find;
 
 my $PERLROOT = $ARGV[0];
-$PERLROOT = '../..' unless $PERLROOT;
+unless ($PERLROOT) {
+    $PERLROOT = '../..';
+    print STDERR "$0: perl directory root argument not specified. Assuming '$PERLROOT'\n";
+}
 
 die "'$PERLROOT' is invalid, or you haven't successfully run 'make' in it"
                                                 unless -e "$PERLROOT/warnings.h";
     
-my $config= "$PERLROOT/config_h.SH";
 my %seen;
 
 # Find the files in MANIFEST that are core, but not embed.fnc, nor .t's
@@ -39,18 +44,54 @@ while (<$m>) {                      # In embed.fnc,
     next if m! ^ embed \. fnc \t !x;
     next if m! ^ ( cpan | dist | t) / !x;
     next if m! [^\t]* \.t \t !x;
-    push @files, $_;
+    s/\t.*//;
+    push @files, "$PERLROOT/$_";
+}
+close $m;
+
+# Examine the SEE ALSO section of perlapi which should contain links to all
+# the pods with apidoc entries in them.  Add them to the MANIFEST list.
+my $file;
+
+sub callback {
+    return unless $_ eq $file;
+    return if $_ eq 'config.h';   # We don't examine this one
+    return if $_ eq 'perlintern.pod';   # We don't examine this one
+    return if $File::Find::dir =~ / \/ ( cpan | dist | t ) \b /x;
+    push @files, $File::Find::name;
 }
 
-# These files are also needed.  This might have to be added to in the future.
-push @files, qw(pod/perlguts.pod lib/perlxs.pod);
+open my $a, '<', "$PERLROOT/pod/perlapi.pod"
+        or die "Can't open perlapi.pod ($PERLROOT needs to have been built): $!";
+while (<$a>) {
+    next unless / ^ =head1\ SEE\ ALSO /x;
+    while (<$a>) {
+        # The lines look like:
+        # F<config.h>, L<perlintern>, L<perlapio>, L<perlcall>, L<perlclib>,
+        last if / ^ = /x;
+        my @tags = split /, \s* | \s+ /x;  # Allow comma- or just space-separated
+        foreach my $tag (@tags) {
+            if ($tag =~ / ^ F< (.*) > $ /x) {
+                $file = $1;
+            }
+            elsif ($tag =~ / ^ L< (.*) > $ /x) {
+                $file = "$1.pod";
+            }
+            else {
+                die "Unknown tag '$tag'";
+            }
+
+            find(\&callback, $PERLROOT);
+        }
+    }
+}
 
-# Find the apidoc entries in all these files
+# Look through all the files that potentially have apidoc entries
 my @entries;
 for (@files) {
 
     s/ \t .* //x;
-    open my $f, '<', "$PERLROOT/$_" or die "Can't open $_: $!";
+    open my $f, '<', "$_" or die "Can't open $_: $!";
 
     my $line;
     while (defined ($line = <$f>)) {
@@ -84,33 +125,9 @@ for (@files) {
     }
 }
 
-# The entries in config_h.SH are also (documented) macros that are
-# accessible to XS code, and ppport.h backports some of them.  We
-# use only the unconditionally compiled parameterless ones (as
-# that"s all that"s backported so far, and we don"t have to know
-# the types of the parameters).
-open(my $c, "<", $config) or die "$config: $!";
-my $if_depth = 0;   # We don"t use the ones within #if statements
-                    # The #ifndef that guards the whole file is not
-                    # noticed by the code below
-while (<$c>) {
-    $if_depth ++ if / ^ \# [[:blank:]]* (ifdef | if\ defined ) /x;
-    $if_depth -- if $if_depth > 0 && / ^ \# [[:blank:]]* endif /x;
-    next unless $if_depth <= 0;
-
-    # We are only interested in #defines with no parameters
-    next unless /^ \# [[:blank:]]* define [[:blank:]]+
-                        ( [A-Za-z][A-Za-z0-9]* )
-                        [[:blank:]]
-                /x;
-    next if $seen{$1}; # Ignore duplicates
-    push @entries, "Amnd||$1\n";
-    $seen{$1}++;
-}
-close $c or die "Close failed: $!";
-
-open my $out, ">", "parts/apidoc.fnc"
-                        or die "Can't open 'parts/apidoc.fnc' for writing: $!";
+my $outfile = "parts/apidoc.fnc";
+open my $out, ">", $outfile
+                        or die "Can't open '$outfile' for writing: $!";
 require "./parts/inc/inctools";
 print $out <<EOF;
 ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
@@ -130,3 +147,4 @@ print $out <<EOF;
 EOF
 print $out sort sort_api_lines @entries;
 close $out or die "Close failed: $!";
+print "$outfile regenerated\n";
index 26adfea..f01853f 100644 (file)
@@ -1,5 +1,3 @@
-use Data::Dumper;
-$Data::Dumper::Sortkeys=1;
 ################################################################################
 #
 #  mkppport_fnc.pl -- generate ppport.fnc
@@ -16,14 +14,14 @@ $Data::Dumper::Sortkeys=1;
 # figures out aren't tested by the other two functions.
 #
 # These otherwise-untested items are those:
-#   1) which D:P provides and are not found in embed.fnc nor apidoc.fnc, or
-#      aren't listed as public API in those files
+#   1) for which D:P provides and are not found in embed.fnc nor apidoc.fnc,
+#      or aren't listed as public API in those files
 #   2) and for which tests can be automatically generated that they at least
 #      compile.
 #
 # The reason that an item isn't in those two files is that it is an
 # undocumented macro.  (If it's not a macro, it has to be in embed.fnc, and if
-# it's documented, mkapidoc.sh would find it and place it in apidoc.fnc.)
+# it's documented, mkapidoc.pl would find it and place it in apidoc.fnc.)
 #
 # And, the reason we can't generate tests for undocumented macros is we don't
 # readily know the types of the parameters, which we need to get a C program
@@ -44,10 +42,8 @@ $Data::Dumper::Sortkeys=1;
 # found therein with the item, and to include the code as the test for the
 # item, but again, it would be better to just document them.
 #
-# Later it was discovered that ppport provides support for non-public items.
-# We can list those here too, so that tests can be generated.  (An alternative
-# would be to invent a new flag that means non-public, but test and use that
-# in apidoc.fnc.)
+# scanprov, run as part of regeneration, will find when all functions, API or
+# not, became defined; but not macros.
 ################################################################################
 #
 #  This program is free software; you can redistribute it and/or
@@ -56,11 +52,10 @@ $Data::Dumper::Sortkeys=1;
 ################################################################################
 
 use strict;
-    use Data::Dumper;
-    $Data::Dumper::Sortkeys=1;
 use warnings;
 
 my $main_dir = $0;
+die "Need base directory as argument" unless $main_dir;
 
 # Up one level
 $main_dir =~ s;[^/]*$;;;
@@ -75,24 +70,39 @@ require "$main_dir/parts/ppptools.pl";
 
 
 my @provided = map { /^(\w+)/ ? $1 : () } `$^X ppport.h --list-provided`;
+die "Nothing provided" unless @provided;
 
-# First, we look for non-API macros that are documented and furnished by us in
-# spite of not being public
-my @non_public_provided;
 my $api_fnc = "$main_dir/parts/apidoc.fnc";
-open F, "<",  $api_fnc or die "Can't open $api_fnc: $!";
-while (<F>) {
-    my $line = $_;
-    next if $line =~ / ^ [^|]* A /x;    # Skip API
-    chomp $line;
-    push @non_public_provided, $line
-        # Look for the name in the third '|' separated field
-        if grep { $line =~ / ^ [^|]* \| [^|]* \| \s* $_ \s* (?: $ |\| ) /x }
-                                                                    @provided;
-}
+my $embed_fnc = "$main_dir/parts/embed.fnc";
 
-my @embeds = parse_embed('parts/embed.fnc', $api_fnc);
+# One of the outputs is a known element provided only by us.
+my @out = 'Am|void|sv_magic_portable|NN SV* sv|NULLOK SV* obj|int how|NULLOK const char* name|I32 namlen';
 
+# First, get the known macros and functions
+my @embeds = parse_embed($api_fnc, $embed_fnc);
+
+# Then look for 1) non-API functions that are furnished by us.
+#               2) documented non-API macros that are furnished by us
+# We want to test for everything furnished by us.  The non-API elements
+# otherwise wouldn't be.  In both these cases, we know the signature of the
+# element, so can create a test for it.
+foreach my $element (@embeds) {
+    my $flags = join "", sort { lc $a cmp lc $b or $a cmp $b }
+                                                    keys %{$element->{'flags'}};
+    next if $flags =~ /A/;   # Skip public; they'll get tested anyway
+    my $name = $element->{'name'};
+    next unless grep { $name eq $_ } @provided;  # Skip unprovided, as that's
+                                                 # not what this program is for
+    my $entry = "$flags|$element->{'ret'}|$name";
+    if ($flags !~ /n/) {
+        $entry .= '|';
+        $entry .= join '|', map { join ' ', @$_ } $element->{'args'}->@*
+    }
+    push @out, $entry;
+}
+
+# Now that we have the things we know the signatures for, we add the
+# no-parameter elements, as the signatures for those are trivial.
 # Look for %include lines in the ppport.h generator
 my $PPPort = "$main_dir/PPPort_pm.PL";
 open F, "<", $PPPort or die "Can't open $PPPort: $!";
@@ -100,32 +110,31 @@ open F, "<", $PPPort or die "Can't open $PPPort: $!";
 my @no_parameters;
 while (<F>) {
     next unless/^%include (\w+)/;
-    my $implementation = parse_partspec("$main_dir/parts/inc/$1")->{'implementation'};
-
-    # Find no-parameter entries using __UNDEFINED__ that aren't in the other.
-    # We know these are provided.
-    while ($implementation =~ /^__UNDEFINED__\s+(\w+)\s/mg) {
-        push @no_parameters, $1 unless grep { $1 eq $_->{'name'} } @embeds;
-    }
-}
-
-# Repeat, but look for ones that are 'provided' that don't use __UNDEFINED__
-seek F, 0, 0;
-while (<F>) {
-    next unless/^%include (\w+)/;
-    my $implementation = parse_partspec("$main_dir/parts/inc/$1")->{'implementation'};
-
-    while ($implementation =~ /^#\s*define\s+(\w+)\s/mg) {
-        next if grep { $1 eq $_ } @no_parameters;
-        next if grep { $1 eq $_->{'name'} } @embeds;
-        next unless grep { $1 eq $_ } @provided;
-        push @no_parameters, $1;
+    my @implementation = split /\n/,
+                parse_partspec("$main_dir/parts/inc/$1")->{'implementation'};
+    while (defined (my $line = shift @implementation)) {
+        #my $type;
+        my $var;
+        if ($line =~ /^ \s* __UNDEFINED__ \s+ (\w+) \s /x) {
+            $var = $1;
+        }
+        elsif ($line =~ /^ \s* __NEED_VAR__ \s+ (\w+) \s+ (\w+) /x) {
+           #$type = $1;     # Another mechanism to create a variable
+            $var = $2;
+        }
+        elsif ($line =~ / ^ \# \s* define \s+ ( \w+ ) \s /x) {
+            $var = $1;
+        }
+
+        next unless defined $var;
+        next if $var =~ / ^ D_PPP_ /x;                  # Skip internal only
+        next if grep { $1 eq $_->{'name'} } @embeds;    # Skip known elements
+        next if grep { $1 eq $_ } @no_parameters;   # Skip if already have it
+        push @no_parameters, $var;
     }
 }
 
-my @out = 'Am|void|sv_magic_portable|NN SV* sv|NULLOK SV* obj|int how|NULLOK const char* name|I32 namlen';
-push @out, @non_public_provided;
-push @out, map { "Amn|void|$_" } @no_parameters;
+push @out, map { "AmnT|void|$_" } @no_parameters;
 
 @out = sort sort_api_lines @out;
 
@@ -150,16 +159,18 @@ print OUT <<EOF;
 :
 ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
 :
-: This file lists all API functions/macros that are provided purely
-: by Devel::PPPort, or that are not public.  It is in the same format as the
-: F<embed.fnc> that ships with the Perl source code.
+: This file lists all functions/macros that are provided by Devel::PPPort that
+: would not be tested otherwise; because either they are not public, or they
+: exist only in D:P.  It is in the same format as the F<embed.fnc> that ships
+: with the Perl source code.
 :
 : Since these are used only to provide the argument types, it's ok to have the
-: return value be void for some where it's an issues
+: return value be void for some where it's a potential issue.
 
 EOF
 
 print OUT join "\n", @out;
 print OUT "\n";
+print "$out regenerated\n";
 
 close OUT;
index 97b7cbe..999354e 100755 (executable)
@@ -102,7 +102,7 @@ if (-e 'ppport.h') {
     my @bad = grep { ! exists $hard_ref->{$_} } @unorthodox;
     if (@bad) {
         print "The following items need to be manually added to the list in",
-            " part/inc/ppptools: known_but_hard_to_test_for(): ",
+            " parts/ppptools.pl: known_but_hard_to_test_for(): ",
             join ", ", @bad, "\n";
         quit_now();
     }
index b8f184d..52c6672 100755 (executable)
@@ -1,22 +1,40 @@
 #!/usr/bin/perl -w
+$|=1;
 ################################################################################
 #
-#  scanprov -- scan Perl headers for provided macros, and add known
-#              exceptions, and functions we weren't able to otherwise find.
-#              Thus the purpose of this file has been expanded beyond what its
-#              name says.
+#  scanprov -- scan Perl headers for macros, and add known exceptions, and
+#              functions we weren't able to otherwise find.  Thus the purpose
+#              of this file has been expanded beyond what its name says.
+#
+#  Besides the normal options, 'mode=clean' is understood as 'write', but
+#  first remove any scanprov lines added in previous runs of this.
 #
 #  The lines added have a code to signify they are added by us:
-#   M means it is a macro
-#   X means it is a known exceptional item
 #   F means it is a function in embed.fnc that the normal routines didn't find
+#   K means it is a macro in config.h, hence is provided, and documented
+#   M means it is a provided by D:P macro
+#   X means it is a known exceptional item
+#   Z means it is an unprovided macro without documentation
 #
 #  The regeneration routines do not know the prototypes for the macros scanned
 #  for, which is gotten from documentation in the source.  (If they were
 #  documented, they would be put in parts/apidoc.fnc, and test cases generated
-#  for them in mktodo.pl).  Therefore these are all undocumented.  It would be
-#  best if people would add document to them in the perl source, and then this
-#  portion of this function would be minimized.
+#  for them in mktodo.pl).  Therefore these are all undocumented, except for
+#  things from config.h which are all documented there, and many of which are
+#  just defined or not defined, and hence can't be tested.  Thus looking for
+#  them here is the most convenient option, which is why it's done here.
+#
+#  The scope of this program has also expanded to look in almost all header
+#  files for almost all macros that aren't documented nor provided.  This
+#  allows ppport.h --api-info=/foo/ to return when a given element actually
+#  came into existence, which can be a time saver for developers of the perl
+#  core.
+#
+#  It would be best if people would add documentation to them in the perl
+#  source, and then this portion of this function would be minimized.
+#
+#  On Linux nm and other uses by D:P, these are the remaining unused capital
+#  flags: HJLOQY
 #
 ################################################################################
 #
@@ -46,7 +64,9 @@ our %opt = (
 
 GetOptions(\%opt, qw( install=s mode=s blead=s debug=i debug-start=s)) or die;
 
-my $write = $opt{mode} eq 'write';
+my $clean = $opt{mode} eq 'clean';
+my $write = $clean || $opt{mode} eq 'write';
+my $debug = $opt{debug};
 
 # Get the list of known macros.  Functions are calculated separately below
 my %embed = map { $_->{flags}{m} ? ( $_->{name} => 1 ) : () }
@@ -63,11 +83,33 @@ push @provided, keys %$hard_to_test_ref;
 my $base_dir = 'parts/base';
 my $todo_dir = 'parts/todo';
 
+# The identifying text placed in every entry by this program
+my $id_text = "added by $0";
+
 if ($write) {
 
-    # Get the list of files, which are returned sorted, and so the min version
-    # is in the 0th element
+    # Get the list of files
     my @files = all_files_in_dir($base_dir);
+
+    # If asked to, first strip out the results of previous incarnations of
+    # this script
+    if ($clean) {
+        print "Cleaning previous $0 runs\n";
+        foreach my $file (@files) {
+            open my $fh, "+<", $file or die "$file: $!\n";
+            my @lines = <$fh>;
+            my $orig_count = @lines;
+            @lines = grep { $_ !~ /$id_text/ } @lines;
+            next if @lines == $orig_count;  # No need to write if unchanged.
+            truncate $fh, 0;
+            seek $fh, 0, 0;
+            print $fh @lines;
+            close $fh or die "$file: $!\n";
+        }
+    }
+
+    # The file list is returned sorted, and so the min version is in the 0th
+    # element
     my $file =  $files[0];
     my $min_perl = $file;
     $min_perl =~ s,.*/,,;    # The name is the integer of __MIN_PERL__
@@ -76,15 +118,25 @@ if ($write) {
     # exist all the way back.  Add them now to avoid throwing later things
     # off.
     print "-- $file --\n";
-    open F, ">>$file" or die "$file: $!\n";
+    open my $fh, "+<", $file or die "$file: $!\n";
+    my @lines = <$fh>;
+    my $count = @lines;
     for (qw(RETVAL CALL THIS)) { # These are also in hard_to_test_for(),
                                  # so can't be in blead, as they are skipped
                                  # in testing, so no real need to check that
                                  # they aren't dups.
+        my $line = format_output_line($_, 'X');
+        next if grep { /$line/ } @lines;
         print "Adding $_ to $file\n";
-        print F format_output_line($_, 'X');
+        push @lines, $line;
+    }
+    if ($count != @lines) {
+        @lines = sort symbol_order @lines;
+        truncate $fh, 0;
+        seek $fh, 0, 0;
+        print $fh @lines;
     }
-    close F;
+    close $fh;
 
     # Now we're going to add the hard to test symbols.  The hash has been
     # manually populated and commited, with the version number ppport supports
@@ -116,15 +168,24 @@ if ($write) {
     foreach my $version (keys %add_by_version) {
         my $file = "$todo_dir/" . int_parse_version($version);
         print "-- Adding known exceptions to $file --\n";
-        my $need_version_line = ! -e $file;
-        open F, ">>$file" or die "$file: $!\n";
-        print F format_version_line($version) . "\n" if $need_version_line;
-        foreach my $symbol (sort dictionary_order @{$add_by_version{$version}})
-        {
-            print "adding $symbol\n";
-            print F format_output_line($symbol, 'X');
+        open my $fh, "+<", $file or die "$file: $!\n";
+        my @lines = <$fh>;
+        my $count = @lines;
+        push @lines, format_version_line($version) . "\n" unless @lines;
+        foreach my $symbol (@{$add_by_version{$version}}) {
+            my $line = format_output_line($symbol, 'X');
+            unless (grep { /$line/ } @lines) {;
+                print "adding $symbol\n";
+                push @lines, $line unless grep { /$line/ } @lines;
+            }
+        }
+        if (@lines != $count) {
+            @lines = sort symbol_order @lines;
+            truncate $fh, 0;
+            seek $fh, 0, 0;
+            print $fh @lines;
         }
-        close F;
+        close $fh;
     }
 }
 
@@ -147,8 +208,7 @@ my $base_ref = parse_todo($base_dir);
 my @functions = parse_embed(qw(parts/embed.fnc));
 
 # We could just gather data for the publicly available ones, but having this
-# information available for everything is useful (for those who know where to
-# look)
+# information available for everything is useful.
 #@functions = grep { exists $_->{flags}{A} } @functions;
 
 # The ones we don't have info on are the ones in embed.fnc that aren't in the
@@ -171,12 +231,23 @@ find_first_mentions($perls_ref,
                    'F'
                    );
 
+sub symbol_order    # Sort based on first word on line
+{
+    my $stripped_a = $a =~ s/ ^ \s* //rx;
+    $stripped_a =~ s/ \s.* //x;
+
+    my $stripped_b = $b =~ s/ ^ \s* //rx;
+    $stripped_b =~ s/ \s.* //x;
+
+    return dictionary_order($stripped_a, $stripped_b);
+}
+
 sub format_output_line
 {
     my $sym = shift;
     my $code = shift;
 
-    return sprintf "%-30s # $code added by $0\n", $sym;
+    return sprintf "%-30s # $code $id_text\n", $sym;
 }
 
 sub find_first_mentions
@@ -187,14 +258,18 @@ sub find_first_mentions
     my $strip_comments = shift;
     my $code           = shift; # Mark entries as having this type
 
+    use feature 'state';
+    state $first_perl = 1;
+
     $hdrs = [ $hdrs ] unless ref $hdrs;
 
-    my @remaining = @$look_for_ref;
+    my %remaining;
+    $remaining{$_} = $code for @$look_for_ref;
 
     my %v;
 
     # We look in descending order of perl versions.  Each time through the
-    # loop @remaining is narrowed.
+    # loop %remaining is narrowed.
     for my $p (@$perls_ref) {
         print "checking perl $p->{version}...\n";
 
@@ -204,23 +279,87 @@ sub find_first_mentions
         local @ARGV;
         push @ARGV, glob "$archlib/CORE/$_" for @$hdrs;
 
+        # %sym's keys are every single thing that looks like an identifier
+        # (beginning with a non-digit \w, followed by \w*) that occurs in any
+        # header, regardless of where (outside of comments).  For macros, it
+        # can't end in an underscore, nor be like 'AbCd', which are marks for
+        # internal.
         my %sym;
 
-        # %sym's keys are every single thing that looks like an identifier
-        # (beginning with a non-digit \w, followed by \w*) that occurs in all
-        # the headers, regardless of where (outside of comments).
         local $/ = undef;
-        while (<>) {  # Read in the next file
+        while (<<>>) {  # Read in the whole next file as one string.
+
+            # This would override function definitions with macro ones
+            next if $code eq 'M' && $ARGV =~ m! / embed\.h $ !x;
+
+            my $is_config_h = $ARGV =~ m! / config\.h $ !x;
+
+            my $contents = $_;
+
+            # Strip initial '/*' in config.h /*#define... lines.  This just
+            # means the item isn't available on the platform this program is
+            # being run on.
+            $contents =~ s! ^ /\* \s* (?=\#\s*define\s) !!mx if $is_config_h;
 
             # Strip comments, from perl faq
             if ($strip_comments) {
-                s#/\*[^*]*\*+([^/*][^*]*\*+)*/|("(\\.|[^"\\])*"|'(\\.|[^'\\])*'|.[^/"'\\]*)#defined $2 ? $2 : ""#gse;
+                $contents =~ s#/\*[^*]*\*+([^/*][^*]*\*+)*/|("(\\.|[^"\\])*"|'(\\.|[^'\\])*'|.[^/"'\\]*)#defined $2 ? $2 : ""#gse;
             }
 
-            $sym{$_}++ for /(\b[^\W\d]\w*)/g;
+            # For macros, we look for #defines
+            if ($code eq 'M') {
+                my %defines;
+
+                while ($contents =~ m/ ^ \s* \# \s* define \s+
+
+                                       # A symbol not ending in underscore
+                                       ( [A-Za-z][_A-Za-z0-9]*[A-Za-z0-9] )
+                                     /mxg)
+                {
+                    my $this_define = $1;
+
+                    # These are internal and not of external interest, so just
+                    # noise if we were to index them
+                    next if $this_define =~ / ^ PERL_ARGS_ASSERT /x;
+
+                    # Names like AbCd are internal
+                    next if $this_define =~ /[[:upper:]][[:lower:]][[:upper:]][[:lower:]]/;
+
+                    $defines{$this_define}++;
+                }
+                $sym{$_}++ for keys %defines;
+
+                # For functions, etc we get all the symbols for the latest
+                # perl passed in, but for macros, it is just the ones for the
+                # known documented ones, and we have to find the rest.  This
+                # allows us to keep the logic for that in just one place:
+                # here.
+                if ($first_perl) {
+
+                    # config.h symbols are documented; the rest aren't, so use
+                    # different flags so downstream processing knows which are
+                    # which.
+                    if ($is_config_h) {
+                        foreach my $define (keys %defines) {
+                            $remaining{$define} = 'K';
+                        }
+                    }
+                    else {
+                        foreach my $define (keys %defines) {
+                            # Don't override input 'M' symbols.
+                            $remaining{$define} = $new_code
+                                            unless defined $remaining{$define};
+                        }
+                    }
+                }
+            }
+            else {  # Look for potential function names; remember comments
+                    # have been stripped off.
+                $sym{$_}++ for /(\b[^\W\d]\w*)/g;
+            }
         }
 
-        # @remaining is narrowed to include only those identifier-like things
+        # %remaining is narrowed to include only those identifier-like things
         # that are mentioned in one of the input hdrs in this release.  (If it
         # isn't even mentioned, it won't exist in the release.)  For those not
         # mentioned, a key is added of the identifier-like thing in %v.  It is
@@ -229,13 +368,20 @@ sub find_first_mentions
         # the provided element was mentioned there, and now it no longer is.
         # We take that to mean that to mean that the element became provided
         # for in n+1.
-        @remaining = map { $sym{$_} or $v{$p->{todo}}{$_}++;
-                            $sym{$_} ? $_ : ()
-                        } @remaining;
+        foreach my $symbol (keys %remaining) {
+            next if defined $sym{$symbol};  # Still exists in this release
 
+            # Gone in this release, must have come into existence in the next
+            # higher one.
+            $v{$p->{todo}}{$symbol} = delete $remaining{$symbol};
+        }
+
+        $first_perl = 0;
     }
 
-    $v{$perls_ref->[-1]{file}}{$_}++ for @remaining;
+    # After all releases, assume that anything still defined came into
+    # existence in that earliest release.
+    $v{$perls_ref->[-1]{file}}{$_} = $remaining{$_} for keys %remaining;
 
     # Read in the parts/base files.  The hash ref has keys being all symbols
     # found in all the files in base/, which are all we are concerned with
@@ -252,30 +398,41 @@ sub find_first_mentions
     #                  'UTF8_MAXBYTES' => 1
     #                },
 
-    for my $v (keys %v) {
+    for my $version (keys %v) {
 
         # Things listed in blead (the most recent file) are special.  They are
         # there by default because we haven't found them anywhere, so they
         # don't really exist as far as we can determine, so shouldn't be
         # listed as existing.
-        next if $v > $perls_ref->[0]->{file};
+        next if $version > $perls_ref->[0]->{file};
 
-        # @new becomes the symbols for version $v not already in the file for
-        # $v
-        my @new = sort dictionary_order grep { !exists $base_ref->{$_} }
-                                                                keys %{$v{$v}};
+        # @new becomes the symbols for $version not already in the file for it
+        my @new = sort symbol_order grep { !exists $base_ref->{$_} }
+                                                                keys %{$v{$version}};
         @new or next; # Nothing new, skip writing
 
-        my $file = $v;
+        my $file = $version;
         $file =~ s/\.//g;
         $file = "$base_dir/$file";
         -e $file or die "non-existent: $file\n";
         print "-- $file --\n";
-        $write and (open F, ">>$file" or die "$file: $!\n");
-        for (@new) {
-            print "adding $_\n";
-            $write and print F format_output_line($_, $code);
+        if ($write) {
+            open my $fh, "+<", $file or die "$file: $!\n";
+            my @lines = <$fh>;
+            my $count = @lines;
+            for my $new (@new) {
+                my $line = format_output_line($new, $v{$version}{$new});
+                next if grep { /$line/ } @lines;
+                print "adding $new\n";
+                push @lines, $line;
+            }
+            if (@lines != $count) {
+                @lines = sort symbol_order @lines;
+                truncate $fh, 0;
+                seek $fh, 0, 0;
+                print $fh @lines;
+            }
+            close $fh;
         }
-        $write and close F;
     }
 }
diff --git a/dist/Devel-PPPort/devel/update_release_date.pl b/dist/Devel-PPPort/devel/update_release_date.pl
new file mode 100755 (executable)
index 0000000..153f9b3
--- /dev/null
@@ -0,0 +1,54 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+use FindBin;
+
+exit( run(@ARGV) || 0 ) unless caller;
+
+sub run {
+    my $now = time();
+
+    my $a_day = 86_400;
+    my $today = $now - $now % $a_day;
+
+    my ( $sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst ) =
+      gmtime($today);
+    ++$mon;
+    $year += 1_900;
+
+    my $human_ts = sprintf( "%04d-%02d-%02d", $year, $mon, $mday );
+
+    print qq[# Updating D_PPP_RELEASE_DATE timestamp to $today /* $human_ts */\n];
+
+    my $f             = q[parts/inc/version];
+    my $file_to_patch = $FindBin::Bin . '/../' . $f;
+    die "Cannot find $f: $!" unless -e $file_to_patch;
+
+    my $content;
+    open( my $fh, '+<', $file_to_patch ) or die "$f: $!\n";
+    {
+        local $/;
+        $content = <$fh>;
+    }
+    die qq[No content for file $f\n] unless $content;
+
+    $content =~
+      s{^(\#\s*define\s+D_PPP_RELEASE_DATE)\b.*$}{$1 $today /* $human_ts */}m
+      or die "Cannot find D_PPP_RELEASE_DATE pattern in file $f";
+
+    {
+        truncate $fh, 0;
+        seek $fh, 0, 0;
+        print {$fh} $content;
+    }
+
+    close($fh);
+
+    print qq[$f patched with D_PPP_RELEASE_DATE\n];
+
+    return;
+}
+
+1;
index 217afef..5637eaf 100644 (file)
@@ -78,7 +78,7 @@ BEGIN {
   if ($ENV{'PERL_CORE'}) {
     chdir 't' if -d 't';
     unshift @INC, '../lib' if -d '../lib' && -d '../ext';
-    require Config; import Config;
+    require Config; Config->import;
     use vars '%Config';
     if (" $Config{'extensions'} " !~ m[ Devel/PPPort ]) {
       print "1..0 # Skip -- Perl configured without Devel::PPPort module\n";
@@ -110,7 +110,7 @@ package Devel::PPPort;
 use vars '@ISA';
 require DynaLoader;
 @ISA = qw(DynaLoader);
-bootstrap Devel::PPPort;
+Devel::PPPort->bootstrap;
 
 package main;
 
index 268ada4..093bbd3 100644 (file)
@@ -55,6 +55,7 @@ my %amap = (
   type => 'int',
   cast => 'int',
   block => '{1;}',
+  number => '1',
 );
 
 # Certain return types are instead considered void
@@ -121,6 +122,7 @@ my %stack = (
   STORE_LC_NUMERIC_FORCE_TO_UNDERLYING => ['DECLARATION_FOR_LC_NUMERIC_MANIPULATION;'],
   STORE_LC_NUMERIC_SET_TO_NEEDED => ['DECLARATION_FOR_LC_NUMERIC_MANIPULATION;'],
   STORE_LC_NUMERIC_SET_TO_NEEDED_IN => ['DECLARATION_FOR_LC_NUMERIC_MANIPULATION;'],
+  TARG           => ['dTARG;'],
   UNDERBAR       => ['dUNDERBAR;'],
   XCPT_CATCH     => ['dXCPT;'],
   XCPT_RETHROW   => ['dXCPT;'],
@@ -186,6 +188,21 @@ static double VARarg3;
 typedef void yy_parser;
 #endif
 
+/* Handle both 5.x.y and 7.x.y and up
+#ifndef PERL_VERSION_MAJOR
+#  define PERL_VERSION_MAJOR PERL_REVISION
+#endif
+#ifndef PERL_VERSION_MINOR
+#  define PERL_VERSION_MINOR PERL_VERSION
+#endif
+#ifndef PERL_VERSION_PATCH
+#  define PERL_VERSION_PATCH PERL_SUBVERSION
+#endif
+
+/* This causes some functions to compile that otherwise wouldn't, so we can
+ * get their info; and doesn't seem to harm anything */
+#define PERL_IMPLICIT_CONTEXT
+
 HEAD
 
 # Caller can restrict what functions tests are generated for
@@ -338,8 +355,14 @@ HEAD
 
   # #ifdef out if marked as todo (not known in) this version
   if (exists $todo{$f->{'name'}}) {
-    my($five, $ver,$sub) = parse_version($todo{$f->{'name'}}{'version'});
-    print OUT "#if PERL_VERSION > $ver || (PERL_VERSION == $ver && PERL_SUBVERSION >= $sub) /* TODO */\n";
+    my($rev, $ver,$sub) = parse_version($todo{$f->{'name'}}{'version'});
+    print OUT <<EOT;
+#if       PERL_VERSION_MAJOR > $rev                         \\
+   || (   PERL_VERSION_MAJOR == $rev                        \\
+       && (   PERL_VERSION_MINOR > $ver                     \\
+           || (   PERL_VERSION_MINOR == $ver                \\
+               && PERL_VERSION_PATCH >= $sub))) /* TODO */
+EOT
   }
 
   my $final = $varargs
index f455038..9ebb27f 100644 (file)
 Amnhd||_aMY_CXT
 Amnhd||aMY_CXT
 Amnhd||aMY_CXT_
-Amnd||ARCHNAME
 Amd|void|__ASSERT_|bool expr
 Amnhd||aTHX
 Amnhd||aTHX_
 Amd|int|AvFILL|AV* av
+md|int|AvFILLp|AV* av
 Amnd|I32|ax
 Amxud|void|BhkDISABLE|BHK *hk|which
 Amxud|void|BhkENABLE|BHK *hk|which
 mxud|void *|BhkENTRY|BHK *hk|which
 Amxud|void|BhkENTRY_set|BHK *hk|which|void *ptr
 mxd|U32|BhkFLAGS|BHK *hk
-Amnd||BIN
 AmnUd|const char *|BOM_UTF8
 Amd|SV *|boolSV|bool b
-Amnd||BYTEORDER
 mxud|void|CALL_BLOCK_HOOKS|which|arg
 Amnhd||CALL_CHECKER_REQUIRE_GV
 Amd|void *|C_ARRAY_END|void *a
 Amd|STRLEN|C_ARRAY_LENGTH|void *a
-Amnd||CASTFLAGS
 Amd|bool|cBOOL|bool expr
-Amnd||CHARBITS
 Amd|bool|ckWARN|U32 w
 Amd|bool|ckWARN2|U32 w1|U32 w2
-Amd|bool|ckWARN2_d|U32 w1|U32 w2
-Amd|bool|ckWARN3|U32 w1|U32 w2|U32 w3
-Amd|bool|ckWARN3_d|U32 w1|U32 w2|U32 w3
-Amd|bool|ckWARN4|U32 w1|U32 w2|U32 w3|U32 w4
-Amd|bool|ckWARN4_d|U32 w1|U32 w2|U32 w3|U32 w4
+Amhd|bool|ckWARN2_d|U32 w1|U32 w2
+Amhd|bool|ckWARN3|U32 w1|U32 w2|U32 w3
+Amhd|bool|ckWARN3_d|U32 w1|U32 w2|U32 w3
+Amhd|bool|ckWARN4|U32 w1|U32 w2|U32 w3|U32 w4
+Amhd|bool|ckWARN4_d|U32 w1|U32 w2|U32 w3|U32 w4
 Amd|bool|ckWARN_d|U32 w
 Amnd|char*|CLASS
 Amd|void|CLEAR_ERRSV
+Amd|const char *|CopFILE|const COP * c
+Amd|AV *|CopFILEAV|const COP * c
+Amd|const char *|CopFILEGV|const COP * c
+Amd|void|CopFILE_set|COP * c|const char * pv
+Amd|SV *|CopFILESV|const COP * c
 Amxd|HV *|cophh_2hv|const COPHH *cophh|U32 flags
 Amxd|COPHH *|cophh_copy|COPHH *cophh
 Amxd|COPHH *|cophh_delete_pv|const COPHH *cophh|const char *key|U32 hash|U32 flags
@@ -72,12 +73,15 @@ Amd|SV *|cop_hints_fetch_sv|const COP *cop|SV *key|U32 hash|U32 flags
 Amd|const char *|CopLABEL|COP *const cop
 Amd|const char *|CopLABEL_len|COP *const cop|STRLEN *len
 Amd|const char *|CopLABEL_len_flags|COP *const cop|STRLEN *len|U32 *flags
+Amd|STRLEN|CopLINE|const COP * c
+Amd|HV *|CopSTASH|const COP * c
+Amd|bool|CopSTASH_eq|const COP * c|const HV * hv
+Amd|char *|CopSTASHPV|const COP * c
+Amd|void|CopSTASHPV_set|COP * c|const char * pv
+Amd|bool|CopSTASH_set|COP * c|const HV * hv
 Amd|void|Copy|void* src|void* dest|int nitems|type
 Amd|void *|CopyD|void* src|void* dest|int nitems|type
-Amnd||CPPLAST
-Amnd||CPPMINUS
-Amnd||CPPRUN
-Amnd||CPPSTDIN
+AmDd|void|CPERLscope|void x
 Amnhd||CV_NAME_NOTQUAL
 Amxd|PADLIST *|CvPADLIST|CV *cv
 Amd|HV*|CvSTASH|CV* cv
@@ -87,57 +91,71 @@ md|SV *|CX_CURPAD_SV|struct context|PADOFFSET po
 Amnsd||dAX
 Amnsd||dAXMARK
 Amnd|void|DECLARATION_FOR_LC_NUMERIC_MANIPULATION
+Amnd|SV *|DEFSV
+Amd|void|DEFSV_set|SV * sv
 Amnsd||dITEMS
 msd||djSP
 Amnsd||dMARK
 Amnsd||dMULTICALL
 Amnhd||dMY_CXT
+Amnsd||dMY_CXT_SV
+Amnsd||dNOOP
 Amnsd||dORIGMARK
-Amnd||DOUBLEINFBYTES
-Amnd||DOUBLEKIND
-Amnd||DOUBLEMANTBITS
-Amnd||DOUBLENANBYTES
-Amnd||DOUBLESIZE
 Amd|bool|DO_UTF8|SV* sv
 mnd|void|dSAVEDERRNO
 mnd|void|dSAVE_ERRNO
 Amnsd||dSP
+Amnsd||dTARGET
 Amnhd||dTHR
 Amnhd||dTHX
+AmUd|void|dTHXa|PerlInterpreter * a
+AmUd|void|dTHXoa|PerlInterpreter * a
 Amnsd||dUNDERBAR
-Amnhd||dVAR
+AmnUd||dVAR
 Amnsd||dXCPT
 Amnsd||dXSARGS
 Amnsd||dXSI32
+AmnUud|void|END_EXTERN_C
 Amnsd||ENTER
 Amsd||ENTER_with_name|"name"
 Amnd|SV *|ERRSV
 Amd|void|EXTEND|SP|SSize_t nitems
+AmnUud|void|EXTERN_C
 Amnsd||FREETMPS
-AmnUd||G_ARRAY
-AmnUd||G_DISCARD
-AmnUd||G_EVAL
-Amnd|U32|GIMME
+AmnUhd||G_ARRAY
+AmnUhd||G_DISCARD
+Amd|CV *|get_cvs|"string"|I32 flags
+AmnUhd||G_EVAL
+AmnDd|U32|GIMME
 Amnd|U32|GIMME_V
+AmnUhd||G_KEEPERR
 Amnhd||G_METHOD
 Amnhd||G_METHOD_NAMED
-AmnUd||G_NOARGS
+AmnUhd||G_NOARGS
 Amnhd||G_RETHROW
 AmdR|bool|GROK_NUMERIC_RADIX|NN const char **sp|NN const char *send
-AmnUd||G_SCALAR
+AmnUhd||G_SCALAR
 Amnhd||GV_ADD
 Amnhd||GV_ADDMG
 Amnhd||GV_ADDMULTI
+Amnhd||GV_ADDWARN
 Amd|AV*|GvAV|GV* gv
+Emnhd||GV_CACHE_ONLY
 Amd|CV*|GvCV|GV* gv
+Amd|GV*|gv_fetchpvn|const char* name|STRLEN len|I32 flags|const svtype sv_type
+Amd|GV*|gv_fetchpvs|"name"|I32 flags|const svtype sv_type
+Amd|GV *|gv_fetchsv_nomg|SV *name|I32 flags|const svtype sv_type
 Amd|HV*|GvHV|GV* gv
 Amnhd||GV_NOADD_NOINIT
 Amnhd||GV_NOEXPAND
 Amnhd||GV_NOINIT
-AmnUd||G_VOID
+Amnhd||GV_NO_SVGMAGIC
+Amnhd||GV_NOTQUAL
+AmnUhd||G_VOID
 Amd|HV*|gv_stashpvs|"name"|I32 create
 Amnhd||GV_SUPER
 Amd|SV*|GvSV|GV* gv
+Amd|SV*|GvSVn|GV* gv
 AmnUd||HEf_SVKEY
 Amd|U32|HeHASH|HE* he
 Amd|void*|HeKEY|HE* he
@@ -155,20 +173,18 @@ Amd|SV**|hv_fetchs|HV* tb|"key"|I32 lval
 Amd|STRLEN|HvFILL|HV *const hv
 Amnhd||HV_ITERNEXT_WANTPLACEHOLDERS
 Amd|char*|HvNAME|HV* stash
+Cmhd|char*|HvNAME_get|HV* stash
 Amd|STRLEN|HvNAMELEN|HV *stash
+Amhd|char*|HvNAMELEN_get|HV* stash
 Amd|unsigned char|HvNAMEUTF8|HV *stash
 Amd|SV**|hv_stores|HV* tb|"key"|SV* val
-Amnd||I16SIZE
-Amnd||I16TYPE
-Amnd||I32SIZE
-Amnd||I32TYPE
-Amnd||I8SIZE
-Amnd||I8TYPE
 Amnd|bool|IN_LOCALE
 Amnd|bool|IN_LOCALE_COMPILETIME
 Amnd|bool|IN_LOCALE_RUNTIME
+Amnd|bool|IN_PERL_COMPILETIME
+Amnd|bool|IN_PERL_RUNTIME
 Amhd|void *|INT2PTR|type|int value
-Amnd||INTSIZE
+Amd||INTMAX_C|number
 Amhd|bool|isALNUM|int ch
 Amhd|bool|isALNUM_A|int ch
 Amhd|bool|isALNUMC|int ch
@@ -241,6 +257,7 @@ Amhd|bool|isGRAPH_LC_uvchr|int ch
 Amhd|bool|isGRAPH_utf8|U8 * s|U8 * end
 Amhd|bool|isGRAPH_utf8_safe|U8 * s|U8 * end
 Amhd|bool|isGRAPH_uvchr|int ch
+Amd|bool|isGV_with_GP|SV * sv
 Amd|bool|isIDCONT|char ch
 Amhd|bool|isIDCONT_A|int ch
 Amhd|bool|isIDCONT_L1|int ch
@@ -344,8 +361,6 @@ Amhd|bool|isXDIGIT_utf8_safe|U8 * s|U8 * end
 Amhd|bool|isXDIGIT_uvchr|int ch
 Amnd|I32|items
 Amnhd||IVdf
-Amnd||IVSIZE
-Amnd||IVTYPE
 Amnd|I32|ix
 Amd|U8|LATIN1_TO_NATIVE|U8 ch
 Amnsd||LEAVE
@@ -355,11 +370,6 @@ Amxd|void|lex_stuff_pvs|"pv"|U32 flags
 Amnhd||LEX_STUFF_UTF8
 AmUd|bool|LIKELY|const bool expr
 Amd|OP*|LINKLIST|OP *o
-Amnd||LONGDBLINFBYTES
-Amnd||LONGDBLMANTBITS
-Amnd||LONGDBLNANBYTES
-Amnd||LONGSIZE
-Amnd||LSEEKSIZE
 mnUd||LVRET
 AmnUd||MARK
 Amd|bool|memCHRs|"list"|char c
@@ -375,6 +385,13 @@ Amd|void|mPUSHp|char* str|STRLEN len
 Amd|void|mPUSHs|SV* sv
 Amd|void|mPUSHu|UV uv
 Amnsd||MULTICALL
+Amhd|AV *|MUTABLE_AV|AV * p
+Amhd|CV *|MUTABLE_CV|CV * p
+Amhd|GV *|MUTABLE_GV|GV * p
+Amhd|HV *|MUTABLE_HV|HV * p
+Amhd|IO *|MUTABLE_IO|IO * p
+Amd|void *|MUTABLE_PTR|void * p
+Amhd|SV *|MUTABLE_SV|SV * p
 Amd|void|mXPUSHi|IV iv
 Amd|void|mXPUSHn|NV nv
 Amd|void|mXPUSHp|char* str|STRLEN len
@@ -396,17 +413,16 @@ Amd|void|Newx|void* ptr|int nitems|type
 Amd|void|Newxc|void* ptr|int nitems|type|cast
 AmUd||newXSproto|char* name|XSUBADDR_t f|char* filename|const char *proto
 Amd|void|Newxz|void* ptr|int nitems|type
+Amnsd||NOOP
 ADmnUd||Nullav
 AmnUd||Nullch
 ADmnUd||Nullcv
 ADmnUd||Nullhv
 AmnUd||Nullsv
+Cmhd|void *|NUM2PTR|type|int value
 Amnhd||NVef
 Amnhd||NVff
 Amnhd||NVgf
-Amnd||NVMANTBITS
-Amnd||NVSIZE
-Amnd||NVTYPE
 Amd|U32|OP_CLASS|OP *o
 Amd|const char *|OP_DESC|OP *o
 Amnhd||OPf_KIDS
@@ -421,8 +437,10 @@ Amd|OP*|OpSIBLING|OP *o
 Amd|bool|OP_TYPE_IS|OP *o|Optype type
 Amd|bool|OP_TYPE_IS_OR_WAS|OP *o|Optype type
 AmnUd||ORIGMARK
-Amnd||OSNAME
-Amnd||OSVERS
+Amd|U32|packWARN|U32 w1
+Amhd|bool|packWARN2|U32 w1|U32 w2
+Amhd|bool|packWARN3|U32 w1|U32 w2|U32 w3
+Amhd|bool|packWARN4|U32 w1|U32 w2|U32 w3|U32 w4
 Amd|PADOFFSET|pad_add_name_pvs|"name"|U32 flags|HV *typestash|HV *ourstash
 Amxd|SV **|PadARRAY|PAD * pad
 md|SV *|PAD_BASE_SV    |PADLIST padlist|PADOFFSET po
@@ -482,6 +500,8 @@ ATmhd|FILE  *|PerlIO_exportFILE|PerlIO *f|const char *mode
 ATmhd|int    |PerlIO_fast_gets|PerlIO *f
 ATmhd|PerlIO*|PerlIO_fdopen|int fd|const char *mode
 ATmhd|FILE  *|PerlIO_findFILE|PerlIO *f
+Amd|PerlIO_funcs *|PERLIO_FUNCS_CAST|PerlIO * func
+Amd||PERLIO_FUNCS_DECL|PerlIO * func
 ATmhd|int    |PerlIO_getc|PerlIO *d
 ATmhd|int    |PerlIO_getpos|PerlIO *f|SV *save
 ATmhd|int    |PerlIO_has_base|PerlIO *f
@@ -556,12 +576,15 @@ Amnhd||PERL_PV_ESCAPE_QUOTE
 Amnhd||PERL_PV_ESCAPE_RE
 Amnhd||PERL_PV_ESCAPE_UNI
 Amnhd||PERL_PV_ESCAPE_UNI_DETECT
+Cmnhd||PERL_PV_PRETTY_DUMP
 Amnhd||PERL_PV_PRETTY_ELLIPSES
 Amnhd||PERL_PV_PRETTY_LTGT
+Cmnhd||PERL_PV_PRETTY_NOCLEAR
 Amnhd||PERL_PV_PRETTY_QUOTE
+Cmnhd||PERL_PV_PRETTY_REGPROP
 AmnUhd||PERL_QUAD_MAX
 AmnUhd||PERL_QUAD_MIN
-hAmnd|int|PERL_REVISION
+AmDnUd|U8|PERL_REVISION
 Amnhd||PERL_SCAN_ALLOW_UNDERSCORES
 Amnhd||PERL_SCAN_DISALLOW_PREFIX
 Amnhd||PERL_SCAN_GREATER_THAN_UV_MAX
@@ -569,29 +592,48 @@ Amnhd||PERL_SCAN_SILENT_ILLDIGIT
 Amnhd||PERL_SCAN_TRAILING
 AmnUhd||PERL_SHORT_MAX
 AmnUhd||PERL_SHORT_MIN
-hAmnd|int|PERL_SUBVERSION
+Amnd|U32|PERL_SIGNALS_UNSAFE_FLAG
+AmDnUd|U8|PERL_SUBVERSION
 Amd|void|PERL_SYS_INIT|int *argc|char*** argv
 Amd|void|PERL_SYS_INIT3|int *argc|char*** argv|char*** env
 Amd|void|PERL_SYS_TERM|
 AmnUhd||PERL_UCHAR_MAX
 AmnUhd||PERL_UCHAR_MIN
 AmnUhd||PERL_UINT_MAX
+AmnUhd||PERL_UINT_MIN
 AmnUhd||PERL_ULONG_MAX
 AmnUhd||PERL_ULONG_MIN
+Amd||PERL_UNUSED_ARG|void x
+Amnd||PERL_UNUSED_CONTEXT
+AmnUd||PERL_UNUSED_DECL
+Amd||PERL_UNUSED_RESULT|void x
+Amd||PERL_UNUSED_VAR|void x
 AmnUhd||PERL_UQUAD_MAX
 AmnUhd||PERL_UQUAD_MIN
+AmnuUd|bool|PERL_USE_GCC_BRACE_GROUPS
 AmnUhd||PERL_USHORT_MAX
 AmnUhd||PERL_USHORT_MIN
-hAmnd|int|PERL_VERSION
+AmDnUd|U8|PERL_VERSION
+AmRd|bool|PERL_VERSION_EQ|const U8 major|const U8 minor|const U8 patch
+AmRhd|bool|PERL_VERSION_GE|const U8 major|const U8 minor|const U8 patch
+AmRhd|bool|PERL_VERSION_GT|const U8 major|const U8 minor|const U8 patch
+AmRhd|bool|PERL_VERSION_LE|const U8 major|const U8 minor|const U8 patch
+AmRhd|bool|PERL_VERSION_LT|const U8 major|const U8 minor|const U8 patch
+AmRhd|bool|PERL_VERSION_NE|const U8 major|const U8 minor|const U8 patch
 AmnUd|Perl_check_t *|PL_check
 AmnxUd|PAD *|PL_comppad
 AmnxUd|PADNAMELIST *|PL_comppad_name
 Amnd|COP*|PL_curcop
 AmnxUd|SV **|PL_curpad
 Amnd|HV*|PL_curstash
+mnd|SV *|PL_DBsingle
+mnd|GV *|PL_DBsub
+mnd|SV *|PL_DBtrace
 Amnd|GV *|PL_defgv
-Amnhd|GV *|PL_errgv
+mnd|U8|PL_dowarn
+AmnUhd|GV *|PL_errgv
 Amnd|U8|PL_exit_flags
+AmTuUd|const char *|PL_hexdigit|U8 value
 AmnUxd|Perl_keyword_plugin_t|PL_keyword_plugin
 mnd|GV*|PL_last_in_gv
 Amnd|HV*|PL_modglobal
@@ -609,6 +651,7 @@ Amnd|enum perl_phase|PL_phase
 Amnd|peep_t|PL_rpeepp
 mnd|SV*|PL_rs
 Amnd|runops_proc_t|PL_runops
+Amnd||PL_Sv
 Amnd|SV|PL_sv_no
 Amnd|SV|PL_sv_undef
 Amnd|SV|PL_sv_yes
@@ -630,13 +673,14 @@ Amnd|char*|POPpx
 Amnd|SV*|POPs
 Amnd|UV|POPu
 Amnd|long|POPul
-Amnd||PRIVLIB
 Amnhd||pTHX
 Amnhd||pTHX_
 Amhd|IV|PTR2IV|void *
+Amhd|IV|PTR2nat|void *
 Amhd|NV|PTR2NV|void *
+Amhd|unsigned long|PTR2ul|void *
 Amhd|UV|PTR2UV|void *
-Amnd||PTRSIZE
+AmhuUd|type|PTRV
 Amd|void|PUSHi|IV iv
 Amd|void|PUSHMARK|SP
 Amnd|void|PUSHmortal
@@ -646,7 +690,6 @@ Amd|void|PUSHp|char* str|STRLEN len
 Amd|void|PUSHs|SV* sv
 Amd|void|PUSHu|UV uv
 Amnsd||PUTBACK
-Amnd||RANDBITS
 Amd|U8|READ_XDIGIT|char str*
 md|SV *|refcounted_he_fetch_pvs|const struct refcounted_he *chain|"key"|U32 flags
 md|struct refcounted_he *|refcounted_he_new_pvs|struct refcounted_he *parent|"key"|SV *value|U32 flags
@@ -660,22 +703,36 @@ Amnhd||RV2CVOPCV_MARK_EARLY
 Amnhd||RV2CVOPCV_RETURN_NAME_GV
 Amd|void|Safefree|void* ptr
 Amd|void|SANE_ERRSV
+Amhd||SAVEBOOL|int i
 md|void|SAVECLEARSV    |SV **svp
 md|void|SAVECOMPPAD
+Amnd|void|SAVE_DEFSV
+Amhd||SAVEDELETE|HV * hv|char * key|I32 length
+Amhd||SAVEDESTRUCTOR|DESTRUCTORFUNC_NOCONTEXT_t f|void *p
 mnd|void|SAVE_ERRNO
+Amhd||SAVEFREEOP|OP *op
+Amhd||SAVEFREEPV|void * p
+Amhd||SAVEFREESV|SV* sv
+Amhd||SAVEI16|I16 i
+Amhd||SAVEI32|I32 i
+Amhd||SAVEI8|I8 i
+Amhd||SAVEINT|int i
+Amhd||SAVEIV|IV i
+Amhd||SAVELONG|long i
+Amhd||SAVEMORTALIZESV|SV* sv
 md|void|SAVEPADSV      |PADOFFSET po
+Amhd||SAVEPPTR|char * p
 Amad|char*|savepvs|"literal string"
 Amad|char*|savesharedpvs|"literal string"
+Amhd||SAVESPTR|SV * s
+Amhd||SAVESTACK_POS
 Amnsd||SAVETMPS
 md|void|SETERRNO|int errcode|int vmserrcode
-Amnd||SHORTSIZE
-Amnd||SITELIB
 AmnUd||SP
 Amnsd||SPAGAIN
 Amd|SV*|ST|int ix
+AmnUud|void|START_EXTERN_C
 Amnhd||START_MY_CXT
-Amnd||STARTPERL
-Amnd||STDCHAR
 AmnUhud|void|STMT_END
 AmnUud|void|STMT_START
 Amd|void|STORE_LC_NUMERIC_FORCE_TO_UNDERLYING
@@ -711,7 +768,6 @@ Amnhd||SVf
 Amhd||SVfARG|SV *sv
 Amnhd||SVf_UTF8
 Amd|U32|SvGAMAGIC|SV* sv
-Amd|void|SvGETMAGIC|SV* sv
 Amnhd||SV_GMAGIC
 Amd|char *|SvGROW|SV* sv|STRLEN len
 Amnhd||SV_HAS_TRAILING_NUL
@@ -726,8 +782,6 @@ Amd|U32|SvIOKp|SV* sv
 Amd|bool|SvIOK_UV|SV* sv
 Amd|U32|SvIsCOW|SV* sv
 Amd|bool|SvIsCOW_shared_hash|SV* sv
-Amd|IV|SvIV|SV* sv
-Amd|IV|SvIV_nomg|SV* sv
 Amd|void|SvIV_set|SV* sv|IV val
 Amd|IV|SvIVX|SV* sv
 Amd|IV|SvIVx|SV* sv
@@ -744,13 +798,12 @@ Amd|void|SvNOK_on|SV* sv
 Amd|void|SvNOK_only|SV* sv
 Amd|U32|SvNOKp|SV* sv
 Amnhd||SV_NOSTEAL
-Amd|NV|SvNV|SV* sv
-Amd|NV|SvNV_nomg|SV* sv
 Amd|void|SvNV_set|SV* sv|NV val
 Amd|NV|SvNVX|SV* sv
 Amd|NV|SvNVx|SV* sv
 Amd|U32|SvOK|SV* sv
 Amd|U32|SvOOK|SV* sv
+Amd|void|SvOOK_off|SV * sv
 Amd|void|SvOOK_offset|SV*sv|STRLEN len
 Amd|U32|SvPOK|SV* sv
 Amd|void|SvPOK_off|SV* sv
@@ -768,12 +821,29 @@ Amd|char*|SvPVbyte_or_null_nomg|SV* sv|STRLEN len
 Amd|char*|SvPVbytex|SV* sv|STRLEN len
 Amd|char*|SvPVbytex_force|SV* sv|STRLEN len
 Amd|char *|SvPVCLEAR|SV* sv
+Amhd|const char*|SvPV_const|SV* sv|STRLEN len
+Amd|char *|SvPV_flags|SV * sv|STRLEN len|U32 flags
+Amhd|const char *|SvPV_flags_const|SV * sv|STRLEN len|U32 flags
+Amd|const char *|SvPV_flags_const_nolen|SV * sv|U32 flags
+Amhd|char *|SvPV_flags_mutable|SV * sv|STRLEN len|U32 flags
 Amd|char*|SvPV_force|SV* sv|STRLEN len
-Amd|char*|SvPV_force_nomg|SV* sv|STRLEN len
+Amd|char *|SvPV_force_flags|SV * sv|STRLEN len|U32 flags
+Amhd|char*|SvPV_force_flags_mutable|SV* sv|STRLEN len|U32 flags
+Amd|char*|SvPV_force_flags_nolen|SV* sv|U32 flags
+Amhd|char*|SvPV_force_mutable|SV* sv|STRLEN len
+Amd|char*|SvPV_force_nolen|SV* sv
+Amhd|char*|SvPV_force_nomg|SV* sv|STRLEN len
+Amhd|char*|SvPV_force_nomg_nolen|SV* sv
+Amhd|const char*|SvPV_mutable|SV* sv|STRLEN len
 Amd|char*|SvPV_nolen|SV* sv
-Amd|char*|SvPV_nomg|SV* sv|STRLEN len
-Amd|char*|SvPV_nomg_nolen|SV* sv
+Amhd|const char*|SvPV_nolen_const|SV* sv
+Amhd|char*|SvPV_nomg|SV* sv|STRLEN len
+Amhd|const char*|SvPV_nomg_const|SV* sv|STRLEN len
+Amhd|const char*|SvPV_nomg_const_nolen|SV* sv
+Amhd|char*|SvPV_nomg_nolen|SV* sv
+Amd|void|SvPV_renew|SV* sv|STRLEN len
 Amd|void|SvPV_set|SV* sv|char* val
+Amd|void|SvPV_shrink_to_cur|SV* sv
 Amd|char*|SvPVutf8|SV* sv|STRLEN len
 Amd|char*|SvPVutf8_force|SV* sv|STRLEN len
 Amd|char*|SvPVutf8_nolen|SV* sv
@@ -783,7 +853,9 @@ Amd|char*|SvPVutf8_or_null_nomg|SV* sv|STRLEN len
 Amd|char*|SvPVutf8x|SV* sv|STRLEN len
 Amd|char*|SvPVutf8x_force|SV* sv|STRLEN len
 Amd|char*|SvPVX|SV* sv
-Amd|char*|SvPVx|SV* sv|STRLEN len
+Amhd|char*|SvPVx|SV* sv|STRLEN len
+Amd|const char*|SvPVX_const|SV* sv
+Amd|const char*|SvPVX_mutable|SV* sv
 Amd|U32|SvREADONLY|SV* sv
 Amd|U32|SvREADONLY_off|SV* sv
 Amd|U32|SvREADONLY_on|SV* sv
@@ -810,6 +882,7 @@ Amd|void|SvSetSV|SV* dsv|SV* ssv
 Amd|void|sv_setsv_nomg|SV* dsv|SV* ssv
 Amd|void|SvSetSV_nosteal|SV* dsv|SV* ssv
 Amd|void|SvSHARE|SV* sv
+Amd|struct hek*|SvSHARED_HASH|SV * sv
 Amnhd||SV_SMAGIC
 Amnhd||SVs_PADSTALE
 Amd|HV*|SvSTASH|SV* sv
@@ -836,8 +909,7 @@ AmnUd||SVt_PVLV
 AmnUd||SVt_PVMG
 AmnUd||SVt_PVNV
 AmnUd||SVt_REGEXP
-Amd|bool|SvTRUE|SV* sv
-Amd|bool|SvTRUE_nomg|SV* sv
+Amd|bool|SvTRUE_nomg_NN|SV* sv
 Amd|bool|SvTRUEx|SV* sv
 Amd|svtype|SvTYPE|SV* sv
 AmnUd||svtype
@@ -845,15 +917,16 @@ Amd|void|SvUNLOCK|SV* sv
 Amd|bool|SvUOK|SV* sv
 Amd|void|SvUPGRADE|SV* sv|svtype type
 Amd|U32|SvUTF8|SV* sv
+AmnhDd||SV_UTF8_NO_ENCODING
 Amd|void|SvUTF8_off|SV *sv
 Amd|void|SvUTF8_on|SV *sv
-Amd|UV|SvUV|SV* sv
-Amd|UV|SvUV_nomg|SV* sv
 Amd|void|SvUV_set|SV* sv|UV val
 Amd|UV|SvUVX|SV* sv
 Amd|UV|SvUVx|SV* sv
 AmDd|UV|SvUVXx|SV* sv
 Amd|bool|SvVOK|SV* sv
+Amd|MAGIC*|SvVSTRING_mg|SV * sv
+Amnsd||TARG
 Amnd|(whatever)|THIS
 Amd|U8|toFOLD|U8 ch
 Amd|UV|toFOLD_utf8|U8* p|U8* e|U8* s|STRLEN* lenp
@@ -873,12 +946,7 @@ Amd|U8|toUPPER|int ch
 Amd|UV|toUPPER_utf8|U8* p|U8* e|U8* s|STRLEN* lenp
 Amd|UV|toUPPER_utf8_safe|U8* p|U8* e|U8* s|STRLEN* lenp
 Amd|UV|toUPPER_uvchr|UV cp|U8* s|STRLEN* lenp
-Amnd||U16SIZE
-Amnd||U16TYPE
-Amnd||U32SIZE
-Amnd||U32TYPE
-Amnd||U8SIZE
-Amnd||U8TYPE
+Amd||UINTMAX_C|number
 AmnUd||UNDERBAR
 AmnUd|UV|UNICODE_REPLACEMENT
 Amd|UV|UNI_TO_NATIVE|UV ch
@@ -911,10 +979,7 @@ Amnhd||UTF8_WARN_SURROGATE
 Amd|bool|UVCHR_IS_INVARIANT|UV cp
 Amd|STRLEN|UVCHR_SKIP|UV cp
 Amnhd||UVof
-Amnd||UVSIZE
-Amnd||UVTYPE
 Amnhd||UVuf
-Amnd||UVXf
 Amnhd||UVxf
 Amnhd||WARN_ALL
 Amnhd||WARN_AMBIGUOUS
@@ -1009,10 +1074,11 @@ Amd|void|XPUSHn|NV nv
 Amd|void|XPUSHp|char* str|STRLEN len
 Amd|void|XPUSHs|SV* sv
 Amd|void|XPUSHu|UV uv
-AmnUd||XS
+AmUd||XS
 Amnsd||XS_APIVERSION_BOOTCHECK
-AmnUd||XS_EXTERNAL
+AmUd||XS_EXTERNAL
 AmUd||XS_INTERNAL
+AmUd||XSPROTO
 Amd|void|XSRETURN|int nitems
 Amnsd||XSRETURN_EMPTY
 Amd|void|XSRETURN_IV|IV iv
index 11fdae8..a399578 100644 (file)
@@ -1,5 +1,25 @@
 5.003007
+ABORT                          # Z added by devel/scanprov
 amagic_call                    # T
+AMG_CALLun                     # Z added by devel/scanprov
+AMGfallNEVER                   # Z added by devel/scanprov
+AMGfallNO                      # Z added by devel/scanprov
+AMGfallYES                     # Z added by devel/scanprov
+AMGf_assign                    # Z added by devel/scanprov
+AMGf_noleft                    # Z added by devel/scanprov
+AMGf_noright                   # Z added by devel/scanprov
+AMGf_unary                     # Z added by devel/scanprov
+ANYOF                          # Z added by devel/scanprov
+apply                          # F added by devel/scanprov
+ARCHLIB                        # K added by devel/scanprov
+ARCHLIB_EXP                    # K added by devel/scanprov
+ARG1                           # Z added by devel/scanprov
+ARG2                           # Z added by devel/scanprov
+ARGTARG                        # Z added by devel/scanprov
+assert                         # Z added by devel/scanprov
+AvALLOC                        # Z added by devel/scanprov
+AvARRAY                        # Z added by devel/scanprov
+AvARYLEN                       # Z added by devel/scanprov
 av_clear                       # T
 av_extend                      # T
 av_fetch                       # T
@@ -7,84 +27,474 @@ av_fill                        # T
 AvFILL                         # T
 av_len                         # T
 av_make                        # T
+AvMAX                          # Z added by devel/scanprov
 av_pop                         # T
 av_push                        # T
+AvREAL                         # Z added by devel/scanprov
+AvREALISH                      # Z added by devel/scanprov
+AvREAL_off                     # Z added by devel/scanprov
+AvREAL_on                      # Z added by devel/scanprov
+AvREIFY                        # Z added by devel/scanprov
+AvREIFY_off                    # Z added by devel/scanprov
+AvREIFY_on                     # Z added by devel/scanprov
 av_shift                       # T
 av_store                       # T
 av_undef                       # T
 av_unshift                     # T
 ax                             # T
-BIN                            # T
-BYTEORDER                      # T
-CASTFLAGS                      # T
+BASEOP                         # Z added by devel/scanprov
+BIN                            # K added by devel/scanprov
+bind_match                     # F added by devel/scanprov
+BIT_BUCKET                     # Z added by devel/scanprov
+blk_eval                       # Z added by devel/scanprov
+blk_gimme                      # Z added by devel/scanprov
+blk_loop                       # Z added by devel/scanprov
+blk_oldcop                     # Z added by devel/scanprov
+blk_oldmarksp                  # Z added by devel/scanprov
+blk_oldpm                      # Z added by devel/scanprov
+blk_oldscopesp                 # Z added by devel/scanprov
+blk_oldsp                      # Z added by devel/scanprov
+blk_sub                        # Z added by devel/scanprov
+BmPREVIOUS                     # Z added by devel/scanprov
+BmRARE                         # Z added by devel/scanprov
+BmUSEFUL                       # Z added by devel/scanprov
+BOL                            # Z added by devel/scanprov
+bool                           # Z added by devel/scanprov
+boot_core_UNIVERSAL            # F added by devel/scanprov
+BOUND                          # Z added by devel/scanprov
+BRANCH                         # Z added by devel/scanprov
+BSD_GETPGRP                    # Z added by devel/scanprov
+BSD_SETPGRP                    # Z added by devel/scanprov
+BUFSIZ                         # Z added by devel/scanprov
+BYTEORDER                      # K added by devel/scanprov
+CALL                           # X added by devel/scanprov
+cando                          # F added by devel/scanprov
+CAN_PROTOTYPE                  # Z added by devel/scanprov
+CASTFLAGS                      # K added by devel/scanprov
+CASTNEGFLOAT                   # K added by devel/scanprov
+cast_ulong                     # F added by devel/scanprov
+CAT2                           # K added by devel/scanprov
+cBINOP                         # Z added by devel/scanprov
+cCOP                           # Z added by devel/scanprov
+checkcomma                     # F added by devel/scanprov
+check_uni                      # F added by devel/scanprov
+clearerr                       # Z added by devel/scanprov
+cLISTOP                        # Z added by devel/scanprov
+cLOGOP                         # Z added by devel/scanprov
+cLOOP                          # Z added by devel/scanprov
+CLOSE                          # Z added by devel/scanprov
 Copy                           # T
-CPPMINUS                       # T
-CPPSTDIN                       # T
+cPMOP                          # Z added by devel/scanprov
+CPPMINUS                       # K added by devel/scanprov
+CPPSTDIN                       # K added by devel/scanprov
+cPVOP                          # Z added by devel/scanprov
+CSH                            # K added by devel/scanprov
+cSVOP                          # Z added by devel/scanprov
+Ctl                            # Z added by devel/scanprov
+CTYPE256                       # Z added by devel/scanprov
+cUNOP                          # Z added by devel/scanprov
+CURLY                          # Z added by devel/scanprov
+CURLYX                         # Z added by devel/scanprov
+CvANON                         # Z added by devel/scanprov
+CvANON_off                     # Z added by devel/scanprov
+CvANON_on                      # Z added by devel/scanprov
 cv_clone                       # T
+CvCLONE                        # Z added by devel/scanprov
+CvCLONED                       # Z added by devel/scanprov
+CvCLONED_off                   # Z added by devel/scanprov
+CvCLONED_on                    # Z added by devel/scanprov
+CvCLONE_off                    # Z added by devel/scanprov
+CvCLONE_on                     # Z added by devel/scanprov
 cv_const_sv                    # T
 CvDEPTH                        # T
+CVf_ANON                       # Z added by devel/scanprov
+CVf_CLONE                      # Z added by devel/scanprov
+CVf_CLONED                     # Z added by devel/scanprov
+CvFILEGV                       # Z added by devel/scanprov
+CvFLAGS                        # Z added by devel/scanprov
 CvGV                           # T
+CvOUTSIDE                      # Z added by devel/scanprov
+CvROOT                         # Z added by devel/scanprov
+CvSTART                        # Z added by devel/scanprov
 CvSTASH                        # T
 cv_undef                       # T
-cxinc                          # T
+CvXSUB                         # Z added by devel/scanprov
+CvXSUBANY                      # Z added by devel/scanprov
+cx_dump                        # F added by devel/scanprov
+CXINC                          # Z added by devel/scanprov
+cxinc                          # F added by devel/scanprov
+CXt_BLOCK                      # Z added by devel/scanprov
+CXt_EVAL                       # Z added by devel/scanprov
+CXt_NULL                       # Z added by devel/scanprov
+CXt_SUB                        # Z added by devel/scanprov
+CXt_SUBST                      # Z added by devel/scanprov
+dATARGET                       # Z added by devel/scanprov
+DB_Hash_t                      # K added by devel/scanprov
+DB_Prefix_t                    # K added by devel/scanprov
+DEBUG                          # Z added by devel/scanprov
+DEBUG_c                        # Z added by devel/scanprov
+DEBUG_D                        # Z added by devel/scanprov
+DEBUG_f                        # Z added by devel/scanprov
+DEBUG_l                        # Z added by devel/scanprov
+DEBUG_m                        # Z added by devel/scanprov
+DEBUG_o                        # Z added by devel/scanprov
+DEBUG_P                        # Z added by devel/scanprov
+DEBUG_p                        # Z added by devel/scanprov
+DEBUG_r                        # Z added by devel/scanprov
+DEBUG_s                        # Z added by devel/scanprov
+DEBUG_t                        # Z added by devel/scanprov
+DEBUG_u                        # Z added by devel/scanprov
+DEBUG_X                        # Z added by devel/scanprov
+DEBUG_x                        # Z added by devel/scanprov
+dEXT                           # Z added by devel/scanprov
+DIE                            # Z added by devel/scanprov
+Direntry_t                     # K added by devel/scanprov
 dMARK                          # T
+DM_DELAY                       # Z added by devel/scanprov
+DM_EGID                        # Z added by devel/scanprov
+DM_EUID                        # Z added by devel/scanprov
+DM_GID                         # Z added by devel/scanprov
+DM_RGID                        # Z added by devel/scanprov
+DM_RUID                        # Z added by devel/scanprov
+DM_UID                         # Z added by devel/scanprov
+do_chomp                       # F added by devel/scanprov
 do_close                       # T
+do_eof                         # F added by devel/scanprov
+dofindlabel                    # F added by devel/scanprov
+DOINIT                         # Z added by devel/scanprov
+do_ipcctl                      # F added by devel/scanprov
+do_ipcget                      # F added by devel/scanprov
 do_join                        # T
+do_msgrcv                      # F added by devel/scanprov
+do_msgsnd                      # F added by devel/scanprov
 do_open                        # T
+dopoptoeval                    # F added by devel/scanprov
+do_print                       # F added by devel/scanprov
+do_readline                    # F added by devel/scanprov
 dORIGMARK                      # T
-do_sprintf                     # T
-dounwind                       # T
+do_seek                        # F added by devel/scanprov
+do_semop                       # F added by devel/scanprov
+do_shmio                       # F added by devel/scanprov
+DOSISH                         # Z added by devel/scanprov
+do_sprintf                     # F added by devel/scanprov
+do_tell                        # F added by devel/scanprov
+do_trans                       # F added by devel/scanprov
+dounwind                       # F added by devel/scanprov
+do_vecset                      # F added by devel/scanprov
+do_vop                         # F added by devel/scanprov
 dowantarray                    # T
+dPOPiv                         # Z added by devel/scanprov
+dPOPnv                         # Z added by devel/scanprov
+dPOPPOPiirl                    # Z added by devel/scanprov
+dPOPPOPnnrl                    # Z added by devel/scanprov
+dPOPPOPssrl                    # Z added by devel/scanprov
+dPOPss                         # Z added by devel/scanprov
+dPOPTOPiirl                    # Z added by devel/scanprov
+dPOPTOPnnrl                    # Z added by devel/scanprov
+dPOPTOPssrl                    # Z added by devel/scanprov
 dSP                            # T
+dTARG                          # Z added by devel/scanprov
+dTARGET                        # T
+dTARGETSTACKED                 # Z added by devel/scanprov
 dTHX                           # T
+dTOPiv                         # Z added by devel/scanprov
+dTOPnv                         # Z added by devel/scanprov
+dTOPss                         # Z added by devel/scanprov
+dump_mstats                    # F added by devel/scanprov
 dXSARGS                        # T
+dXSI32                         # M added by devel/scanprov
+dXSUB_SYS                      # Z added by devel/scanprov
+END                            # Z added by devel/scanprov
 ENTER                          # T
+environ                        # Z added by devel/scanprov
+EOF                            # Z added by devel/scanprov
+EOF_NONBLOCK                   # K added by devel/scanprov
+EOL                            # Z added by devel/scanprov
+EXT                            # Z added by devel/scanprov
 EXTEND                         # T
+FALSE                          # Z added by devel/scanprov
+fclose                         # Z added by devel/scanprov
+fdopen                         # Z added by devel/scanprov
+feof                           # Z added by devel/scanprov
+ferror                         # Z added by devel/scanprov
+FF_BLANK                       # Z added by devel/scanprov
+FF_CHECKCHOP                   # Z added by devel/scanprov
+FF_CHECKNL                     # Z added by devel/scanprov
+FF_CHOP                        # Z added by devel/scanprov
+FF_DECIMAL                     # Z added by devel/scanprov
+FF_END                         # Z added by devel/scanprov
+FF_FETCH                       # Z added by devel/scanprov
+FF_HALFSPACE                   # Z added by devel/scanprov
+FF_ITEM                        # Z added by devel/scanprov
+FF_LINEGLOB                    # Z added by devel/scanprov
+FF_LINEMARK                    # Z added by devel/scanprov
+FF_LITERAL                     # Z added by devel/scanprov
+Fflush                         # Z added by devel/scanprov
+fflush                         # Z added by devel/scanprov
+FF_MORE                        # Z added by devel/scanprov
+FF_NEWLINE                     # Z added by devel/scanprov
+FF_SKIP                        # Z added by devel/scanprov
+FF_SPACE                       # Z added by devel/scanprov
+fgetc                          # Z added by devel/scanprov
+fgetpos                        # Z added by devel/scanprov
+fgets                          # Z added by devel/scanprov
+FILE                           # Z added by devel/scanprov
+FILE_base                      # K added by devel/scanprov
+FILE_bufsiz                    # K added by devel/scanprov
+FILE_cnt                       # K added by devel/scanprov
+fileno                         # Z added by devel/scanprov
+FILE_ptr                       # K added by devel/scanprov
 filter_add                     # T
+FILTER_DATA                    # Z added by devel/scanprov
 filter_del                     # T
+FILTER_ISREADER                # Z added by devel/scanprov
+FILTER_READ                    # Z added by devel/scanprov
 filter_read                    # T
-free_tmps                      # T
+FLEXFILENAMES                  # K added by devel/scanprov
+flockfile                      # Z added by devel/scanprov
+FmLINES                        # Z added by devel/scanprov
+fold_constants                 # F added by devel/scanprov
+fopen                          # Z added by devel/scanprov
+force_ident                    # F added by devel/scanprov
+force_list                     # F added by devel/scanprov
+force_next                     # F added by devel/scanprov
+force_word                     # F added by devel/scanprov
+Fpos_t                         # K added by devel/scanprov
+fprintf                        # Z added by devel/scanprov
+fputc                          # Z added by devel/scanprov
+fputs                          # Z added by devel/scanprov
+fread                          # Z added by devel/scanprov
+free                           # Z added by devel/scanprov
+Free_t                         # K added by devel/scanprov
+free_tmps                      # F added by devel/scanprov
 FREETMPS                       # T
+freopen                        # Z added by devel/scanprov
+fscanf                         # Z added by devel/scanprov
+fseek                          # Z added by devel/scanprov
+fsetpos                        # Z added by devel/scanprov
+Fstat                          # Z added by devel/scanprov
+ftell                          # Z added by devel/scanprov
+ftrylockfile                   # Z added by devel/scanprov
+funlockfile                    # Z added by devel/scanprov
+fwrite                         # Z added by devel/scanprov
+fwrite1                        # Z added by devel/scanprov
 G_ARRAY                        # T
+Gconvert                       # K added by devel/scanprov
 G_DISCARD                      # T
+gen_constant_list              # F added by devel/scanprov
+GETATARGET                     # Z added by devel/scanprov
+getc                           # Z added by devel/scanprov
+getc_unlocked                  # Z added by devel/scanprov
+GETTARGET                      # Z added by devel/scanprov
+GETTARGETSTACKED               # Z added by devel/scanprov
+getw                           # Z added by devel/scanprov
 G_EVAL                         # T
+Gid_t                          # K added by devel/scanprov
 GIMME                          # T
+G_KEEPERR                      # T
 G_NOARGS                       # T
 gp_free                        # T
 gp_ref                         # T
+Groups_t                       # K added by devel/scanprov
 G_SCALAR                       # T
 GV_ADD                         # T
 GV_ADDMULTI                    # T
+GV_ADDWARN                     # T
+Gv_AMG                         # Z added by devel/scanprov
+GvASSUMECV                     # Z added by devel/scanprov
+GvASSUMECV_off                 # Z added by devel/scanprov
+GvASSUMECV_on                  # Z added by devel/scanprov
 GvAV                           # T
 gv_AVadd                       # T
-gv_check                       # T
+GvAVn                          # Z added by devel/scanprov
+gv_check                       # F added by devel/scanprov
 GvCV                           # T
+GvCVGEN                        # Z added by devel/scanprov
 gv_efullname                   # T
 gv_efullname3                  # T
+GvEGV                          # Z added by devel/scanprov
+GvENAME                        # Z added by devel/scanprov
+GvESTASH                       # Z added by devel/scanprov
+GVf_ASSUMECV                   # Z added by devel/scanprov
 gv_fetchfile                   # T
 gv_fetchmeth                   # T
 gv_fetchmethod                 # T
 gv_fetchpv                     # T
+GvFILEGV                       # Z added by devel/scanprov
+GVf_IMPORTED                   # Z added by devel/scanprov
+GVf_IMPORTED_AV                # Z added by devel/scanprov
+GVf_IMPORTED_CV                # Z added by devel/scanprov
+GVf_IMPORTED_HV                # Z added by devel/scanprov
+GVf_IMPORTED_SV                # Z added by devel/scanprov
+GVf_INTRO                      # Z added by devel/scanprov
+GvFLAGS                        # Z added by devel/scanprov
+GVf_MULTI                      # Z added by devel/scanprov
+GvFORM                         # Z added by devel/scanprov
 gv_fullname                    # T
 gv_fullname3                   # T
+GvGP                           # Z added by devel/scanprov
 GvHV                           # T
 gv_HVadd                       # T
+GvHVn                          # Z added by devel/scanprov
+GvIMPORTED                     # Z added by devel/scanprov
+GvIMPORTED_AV                  # Z added by devel/scanprov
+GvIMPORTED_AV_off              # Z added by devel/scanprov
+GvIMPORTED_AV_on               # Z added by devel/scanprov
+GvIMPORTED_CV                  # Z added by devel/scanprov
+GvIMPORTED_CV_off              # Z added by devel/scanprov
+GvIMPORTED_CV_on               # Z added by devel/scanprov
+GvIMPORTED_HV                  # Z added by devel/scanprov
+GvIMPORTED_HV_off              # Z added by devel/scanprov
+GvIMPORTED_HV_on               # Z added by devel/scanprov
+GvIMPORTED_off                 # Z added by devel/scanprov
+GvIMPORTED_on                  # Z added by devel/scanprov
+GvIMPORTED_SV                  # Z added by devel/scanprov
+GvIMPORTED_SV_off              # Z added by devel/scanprov
+GvIMPORTED_SV_on               # Z added by devel/scanprov
 gv_init                        # T
+GvINTRO                        # Z added by devel/scanprov
+GvINTRO_off                    # Z added by devel/scanprov
+GvINTRO_on                     # Z added by devel/scanprov
+GvIO                           # Z added by devel/scanprov
 gv_IOadd                       # T
+GvIOn                          # Z added by devel/scanprov
+GvIOp                          # Z added by devel/scanprov
+GvLINE                         # Z added by devel/scanprov
+GvMULTI                        # Z added by devel/scanprov
+GvMULTI_off                    # Z added by devel/scanprov
+GvMULTI_on                     # Z added by devel/scanprov
+GvNAME                         # Z added by devel/scanprov
+GvNAMELEN                      # Z added by devel/scanprov
+GvREFCNT                       # Z added by devel/scanprov
+GvSTASH                        # Z added by devel/scanprov
 gv_stashpv                     # T
 gv_stashpvn                    # T
 gv_stashsv                     # T
 GvSV                           # T
+GvXPVGV                        # Z added by devel/scanprov
+HAS_ALARM                      # K added by devel/scanprov
+HAS_BOOL                       # Z added by devel/scanprov
+HAS_CHOWN                      # K added by devel/scanprov
+HAS_CHROOT                     # K added by devel/scanprov
+HAS_CRYPT                      # K added by devel/scanprov
+HAS_CUSERID                    # K added by devel/scanprov
+HAS_DIFFTIME                   # K added by devel/scanprov
+HAS_DLERROR                    # K added by devel/scanprov
+HAS_DUP2                       # K added by devel/scanprov
+HAS_FCHMOD                     # K added by devel/scanprov
+HAS_FCHOWN                     # K added by devel/scanprov
+HAS_FCNTL                      # K added by devel/scanprov
+HAS_FGETPOS                    # K added by devel/scanprov
+HAS_FLOCK                      # K added by devel/scanprov
+HAS_FORK                       # K added by devel/scanprov
+HAS_FPATHCONF                  # K added by devel/scanprov
+HAS_FSETPOS                    # K added by devel/scanprov
+HAS_GETGROUPS                  # K added by devel/scanprov
+HAS_GETHOSTENT                 # K added by devel/scanprov
+HAS_GETLOGIN                   # K added by devel/scanprov
+HAS_GETPGID                    # K added by devel/scanprov
+HAS_GETPGRP                    # K added by devel/scanprov
+HAS_GETPPID                    # K added by devel/scanprov
+HAS_GETPRIORITY                # K added by devel/scanprov
+HAS_GROUP                      # Z added by devel/scanprov
+HAS_HTONL                      # K added by devel/scanprov
+HAS_HTONS                      # K added by devel/scanprov
+HAS_IOCTL                      # Z added by devel/scanprov
+HAS_ISASCII                    # K added by devel/scanprov
+HAS_KILL                       # Z added by devel/scanprov
+HAS_KILLPG                     # K added by devel/scanprov
+HAS_LINK                       # K added by devel/scanprov
+HAS_LOCALECONV                 # K added by devel/scanprov
+HAS_LOCKF                      # K added by devel/scanprov
+HAS_LSTAT                      # K added by devel/scanprov
+HAS_MBLEN                      # K added by devel/scanprov
+HAS_MBSTOWCS                   # K added by devel/scanprov
+HAS_MBTOWC                     # K added by devel/scanprov
+HAS_MKDIR                      # K added by devel/scanprov
+HAS_MKFIFO                     # K added by devel/scanprov
+HAS_MKTIME                     # K added by devel/scanprov
+HAS_MSG                        # K added by devel/scanprov
+HAS_NICE                       # K added by devel/scanprov
+HAS_NTOHL                      # K added by devel/scanprov
+HAS_NTOHS                      # K added by devel/scanprov
+HAS_OPEN3                      # K added by devel/scanprov
+HAS_PASSWD                     # Z added by devel/scanprov
+HAS_PATHCONF                   # K added by devel/scanprov
+HAS_PAUSE                      # K added by devel/scanprov
+HAS_PIPE                       # K added by devel/scanprov
+HAS_POLL                       # K added by devel/scanprov
+HAS_QUAD                       # K added by devel/scanprov
+HAS_READDIR                    # K added by devel/scanprov
+HAS_READLINK                   # K added by devel/scanprov
+HAS_RENAME                     # K added by devel/scanprov
+HAS_REWINDDIR                  # K added by devel/scanprov
+HAS_RMDIR                      # K added by devel/scanprov
+HAS_SEEKDIR                    # K added by devel/scanprov
+HAS_SELECT                     # K added by devel/scanprov
+HAS_SEM                        # K added by devel/scanprov
+HAS_SETEGID                    # K added by devel/scanprov
+HAS_SETEUID                    # K added by devel/scanprov
+HAS_SETLINEBUF                 # K added by devel/scanprov
+HAS_SETLOCALE                  # K added by devel/scanprov
+HAS_SETPGID                    # K added by devel/scanprov
+HAS_SETPGRP                    # K added by devel/scanprov
+HAS_SETPRIORITY                # K added by devel/scanprov
+HAS_SETREGID                   # K added by devel/scanprov
+HAS_SETRESGID                  # K added by devel/scanprov
+HAS_SETRESUID                  # K added by devel/scanprov
+HAS_SETREUID                   # K added by devel/scanprov
+HAS_SETSID                     # K added by devel/scanprov
+HAS_SHM                        # K added by devel/scanprov
+HAS_SHMAT_PROTOTYPE            # K added by devel/scanprov
+HAS_SIGACTION                  # K added by devel/scanprov
+HAS_SIGSETJMP                  # K added by devel/scanprov
+HAS_SOCKET                     # K added by devel/scanprov
+HAS_SOCKETPAIR                 # K added by devel/scanprov
+HAS_STRCOLL                    # K added by devel/scanprov
+HAS_STRXFRM                    # K added by devel/scanprov
+HAS_SYMLINK                    # K added by devel/scanprov
+HAS_SYSCALL                    # K added by devel/scanprov
+HAS_SYSCONF                    # K added by devel/scanprov
+HAS_SYS_ERRLIST                # K added by devel/scanprov
+HAS_SYSTEM                     # K added by devel/scanprov
+HAS_TCGETPGRP                  # K added by devel/scanprov
+HAS_TCSETPGRP                  # K added by devel/scanprov
+HAS_TELLDIR                    # K added by devel/scanprov
+HAS_TIMES                      # K added by devel/scanprov
+HAS_TRUNCATE                   # K added by devel/scanprov
+HAS_TZNAME                     # K added by devel/scanprov
+HAS_UMASK                      # K added by devel/scanprov
+HAS_UNAME                      # K added by devel/scanprov
+HAS_UTIME                      # Z added by devel/scanprov
+HAS_WAIT                       # Z added by devel/scanprov
+HAS_WAIT4                      # K added by devel/scanprov
+HAS_WAITPID                    # K added by devel/scanprov
+HAS_WCSTOMBS                   # K added by devel/scanprov
+HAS_WCTOMB                     # K added by devel/scanprov
 HEf_SVKEY                      # T
 HeHASH                         # T
 HeKEY                          # T
 HeKLEN                         # T
+HeNEXT                         # Z added by devel/scanprov
 HeSVKEY                        # T
 HeSVKEY_force                  # T
 HeVAL                          # T
+HINT_BLOCK_SCOPE               # Z added by devel/scanprov
+HINT_INTEGER                   # Z added by devel/scanprov
+HINT_STRICT_REFS               # Z added by devel/scanprov
+HINT_STRICT_SUBS               # Z added by devel/scanprov
+HINT_STRICT_VARS               # Z added by devel/scanprov
+H_PERL                         # Z added by devel/scanprov
+htoni                          # Z added by devel/scanprov
+htonl                          # Z added by devel/scanprov
+htons                          # Z added by devel/scanprov
+htovl                          # Z added by devel/scanprov
+htovs                          # Z added by devel/scanprov
+HvARRAY                        # Z added by devel/scanprov
 hv_clear                       # T
 hv_delete                      # T
 hv_delete_ent                  # T
+HvEITER                        # Z added by devel/scanprov
 hv_exists                      # T
 hv_exists_ent                  # T
 hv_fetch                       # T
@@ -96,39 +506,422 @@ hv_iterkeysv                   # T
 hv_iternext                    # T
 hv_iternextsv                  # T
 hv_iterval                     # T
+HvKEYS                         # Z added by devel/scanprov
 hv_ksplit                      # T
+HvLAZYDEL                      # Z added by devel/scanprov
+HvLAZYDEL_off                  # Z added by devel/scanprov
+HvLAZYDEL_on                   # Z added by devel/scanprov
 hv_magic                       # T
+HvMAX                          # Z added by devel/scanprov
 HvNAME                         # T
+HvRITER                        # Z added by devel/scanprov
+HvSHAREKEYS                    # Z added by devel/scanprov
+HvSHAREKEYS_off                # Z added by devel/scanprov
+HvSHAREKEYS_on                 # Z added by devel/scanprov
 hv_store                       # T
 hv_store_ent                   # T
 hv_undef                       # T
+I16_MAX                        # Z added by devel/scanprov
+I16_MIN                        # Z added by devel/scanprov
+I_32                           # Z added by devel/scanprov
+I32_MAX                        # Z added by devel/scanprov
+I32_MIN                        # Z added by devel/scanprov
 ibcmp                          # T
+I_DIRENT                       # K added by devel/scanprov
+I_DLFCN                        # K added by devel/scanprov
+IFMATCH                        # Z added by devel/scanprov
+I_GRP                          # K added by devel/scanprov
+I_LIMITS                       # Z added by devel/scanprov
+I_LOCALE                       # K added by devel/scanprov
+I_NETINET_IN                   # K added by devel/scanprov
+ingroup                        # F added by devel/scanprov
+INIT                           # Z added by devel/scanprov
 instr                          # T
-INTSIZE                        # T
+INTMAX_C                       # T
+INTSIZE                        # K added by devel/scanprov
+intuit_more                    # F added by devel/scanprov
+invert                         # F added by devel/scanprov
+IoBOTTOM_GV                    # Z added by devel/scanprov
+IoBOTTOM_NAME                  # Z added by devel/scanprov
+io_close                       # F added by devel/scanprov
+IOCPARM_LEN                    # Z added by devel/scanprov
+IoDIRP                         # Z added by devel/scanprov
+IOf_ARGV                       # Z added by devel/scanprov
+IOf_DIDTOP                     # Z added by devel/scanprov
+IOf_FLUSH                      # Z added by devel/scanprov
+IoFLAGS                        # Z added by devel/scanprov
+IoFMT_GV                       # Z added by devel/scanprov
+IoFMT_NAME                     # Z added by devel/scanprov
+IOf_START                      # Z added by devel/scanprov
+IOf_UNTAINT                    # Z added by devel/scanprov
+IoIFP                          # Z added by devel/scanprov
+IoLINES                        # Z added by devel/scanprov
+IoLINES_LEFT                   # Z added by devel/scanprov
+IoOFP                          # Z added by devel/scanprov
+IoPAGE                         # Z added by devel/scanprov
+IoPAGE_LEN                     # Z added by devel/scanprov
+IoTOP_GV                       # Z added by devel/scanprov
+IoTOP_NAME                     # Z added by devel/scanprov
+IoTYPE                         # Z added by devel/scanprov
+I_PWD                          # K added by devel/scanprov
 isALNUM                        # T
 isALPHA                        # T
 isDIGIT                        # T
+isGV                           # Z added by devel/scanprov
 isIDFIRST                      # T
 isLOWER                        # T
 isSPACE                        # T
+I_STDARG                       # Z added by devel/scanprov
 isUPPER                        # T
+I_SYS_DIR                      # K added by devel/scanprov
+I_SYS_FILE                     # K added by devel/scanprov
+I_SYS_IOCTL                    # K added by devel/scanprov
+I_SYS_PARAM                    # K added by devel/scanprov
+I_SYS_RESOURCE                 # K added by devel/scanprov
+I_SYS_SELECT                   # K added by devel/scanprov
+I_SYS_STAT                     # K added by devel/scanprov
+I_SYS_TIME                     # K added by devel/scanprov
+I_SYS_TIMES                    # K added by devel/scanprov
+I_SYS_TYPES                    # K added by devel/scanprov
+I_SYS_UN                       # K added by devel/scanprov
+I_SYS_WAIT                     # K added by devel/scanprov
+I_TERMIOS                      # K added by devel/scanprov
+I_TIME                         # K added by devel/scanprov
+I_UNISTD                       # K added by devel/scanprov
+I_UTIME                        # K added by devel/scanprov
+I_V                            # Z added by devel/scanprov
+IV_MAX                         # Z added by devel/scanprov
+IV_MIN                         # Z added by devel/scanprov
+jmaybe                         # F added by devel/scanprov
+kBINOP                         # Z added by devel/scanprov
+kCOP                           # Z added by devel/scanprov
+KERNEL                         # Z added by devel/scanprov
+KEY_abs                        # Z added by devel/scanprov
+KEY_accept                     # Z added by devel/scanprov
+KEY_alarm                      # Z added by devel/scanprov
+KEY_and                        # Z added by devel/scanprov
+KEY_atan2                      # Z added by devel/scanprov
+KEY_AUTOLOAD                   # Z added by devel/scanprov
+KEY_BEGIN                      # Z added by devel/scanprov
+KEY_bind                       # Z added by devel/scanprov
+KEY_binmode                    # Z added by devel/scanprov
+KEY_bless                      # Z added by devel/scanprov
+KEY_caller                     # Z added by devel/scanprov
+KEY_chdir                      # Z added by devel/scanprov
+KEY_chmod                      # Z added by devel/scanprov
+KEY_chomp                      # Z added by devel/scanprov
+KEY_chop                       # Z added by devel/scanprov
+KEY_chown                      # Z added by devel/scanprov
+KEY_chr                        # Z added by devel/scanprov
+KEY_chroot                     # Z added by devel/scanprov
+KEY_close                      # Z added by devel/scanprov
+KEY_closedir                   # Z added by devel/scanprov
+KEY_cmp                        # Z added by devel/scanprov
+KEY_connect                    # Z added by devel/scanprov
+KEY_continue                   # Z added by devel/scanprov
+KEY_cos                        # Z added by devel/scanprov
+KEY_crypt                      # Z added by devel/scanprov
+KEY___DATA                     # Z added by devel/scanprov
+KEY_dbmclose                   # Z added by devel/scanprov
+KEY_dbmopen                    # Z added by devel/scanprov
+KEY_defined                    # Z added by devel/scanprov
+KEY_delete                     # Z added by devel/scanprov
+KEY_DESTROY                    # Z added by devel/scanprov
+KEY_die                        # Z added by devel/scanprov
+KEY_do                         # Z added by devel/scanprov
+KEY_dump                       # Z added by devel/scanprov
+KEY_each                       # Z added by devel/scanprov
+KEY_else                       # Z added by devel/scanprov
+KEY_elsif                      # Z added by devel/scanprov
+KEY___END                      # Z added by devel/scanprov
+KEY_END                        # Z added by devel/scanprov
+KEY_endgrent                   # Z added by devel/scanprov
+KEY_endhostent                 # Z added by devel/scanprov
+KEY_endnetent                  # Z added by devel/scanprov
+KEY_endprotoent                # Z added by devel/scanprov
+KEY_endpwent                   # Z added by devel/scanprov
+KEY_endservent                 # Z added by devel/scanprov
+KEY_eof                        # Z added by devel/scanprov
+KEY_eq                         # Z added by devel/scanprov
+KEY_eval                       # Z added by devel/scanprov
+KEY_exec                       # Z added by devel/scanprov
+KEY_exists                     # Z added by devel/scanprov
+KEY_exit                       # Z added by devel/scanprov
+KEY_exp                        # Z added by devel/scanprov
+KEY_fcntl                      # Z added by devel/scanprov
+KEY___FILE                     # Z added by devel/scanprov
+KEY_fileno                     # Z added by devel/scanprov
+KEY_flock                      # Z added by devel/scanprov
+KEY_for                        # Z added by devel/scanprov
+KEY_foreach                    # Z added by devel/scanprov
+KEY_fork                       # Z added by devel/scanprov
+KEY_format                     # Z added by devel/scanprov
+KEY_formline                   # Z added by devel/scanprov
+KEY_ge                         # Z added by devel/scanprov
+KEY_getc                       # Z added by devel/scanprov
+KEY_getgrent                   # Z added by devel/scanprov
+KEY_getgrgid                   # Z added by devel/scanprov
+KEY_getgrnam                   # Z added by devel/scanprov
+KEY_gethostbyaddr              # Z added by devel/scanprov
+KEY_gethostbyname              # Z added by devel/scanprov
+KEY_gethostent                 # Z added by devel/scanprov
+KEY_getlogin                   # Z added by devel/scanprov
+KEY_getnetbyaddr               # Z added by devel/scanprov
+KEY_getnetbyname               # Z added by devel/scanprov
+KEY_getnetent                  # Z added by devel/scanprov
+KEY_getpeername                # Z added by devel/scanprov
+KEY_getpgrp                    # Z added by devel/scanprov
+KEY_getppid                    # Z added by devel/scanprov
+KEY_getpriority                # Z added by devel/scanprov
+KEY_getprotobyname             # Z added by devel/scanprov
+KEY_getprotobynumber           # Z added by devel/scanprov
+KEY_getprotoent                # Z added by devel/scanprov
+KEY_getpwent                   # Z added by devel/scanprov
+KEY_getpwnam                   # Z added by devel/scanprov
+KEY_getpwuid                   # Z added by devel/scanprov
+KEY_getservbyname              # Z added by devel/scanprov
+KEY_getservbyport              # Z added by devel/scanprov
+KEY_getservent                 # Z added by devel/scanprov
+KEY_getsockname                # Z added by devel/scanprov
+KEY_getsockopt                 # Z added by devel/scanprov
+KEY_glob                       # Z added by devel/scanprov
+KEY_gmtime                     # Z added by devel/scanprov
+KEY_goto                       # Z added by devel/scanprov
+KEY_grep                       # Z added by devel/scanprov
+KEY_gt                         # Z added by devel/scanprov
+KEY_hex                        # Z added by devel/scanprov
+KEY_if                         # Z added by devel/scanprov
+KEY_index                      # Z added by devel/scanprov
+KEY_int                        # Z added by devel/scanprov
+KEY_ioctl                      # Z added by devel/scanprov
+KEY_join                       # Z added by devel/scanprov
+KEY_keys                       # Z added by devel/scanprov
+KEY_kill                       # Z added by devel/scanprov
+KEY_last                       # Z added by devel/scanprov
+KEY_lc                         # Z added by devel/scanprov
+KEY_lcfirst                    # Z added by devel/scanprov
+KEY_le                         # Z added by devel/scanprov
+KEY_length                     # Z added by devel/scanprov
+KEY___LINE                     # Z added by devel/scanprov
+KEY_link                       # Z added by devel/scanprov
+KEY_listen                     # Z added by devel/scanprov
+KEY_local                      # Z added by devel/scanprov
+KEY_localtime                  # Z added by devel/scanprov
+KEY_log                        # Z added by devel/scanprov
+KEY_lstat                      # Z added by devel/scanprov
+KEY_lt                         # Z added by devel/scanprov
+KEY_m                          # Z added by devel/scanprov
+KEY_map                        # Z added by devel/scanprov
+KEY_mkdir                      # Z added by devel/scanprov
+KEY_msgctl                     # Z added by devel/scanprov
+KEY_msgget                     # Z added by devel/scanprov
+KEY_msgrcv                     # Z added by devel/scanprov
+KEY_msgsnd                     # Z added by devel/scanprov
+KEY_my                         # Z added by devel/scanprov
+KEY_ne                         # Z added by devel/scanprov
+KEY_next                       # Z added by devel/scanprov
+KEY_no                         # Z added by devel/scanprov
+KEY_not                        # Z added by devel/scanprov
+KEY_NULL                       # Z added by devel/scanprov
+KEY_oct                        # Z added by devel/scanprov
+KEY_open                       # Z added by devel/scanprov
+KEY_opendir                    # Z added by devel/scanprov
+KEY_or                         # Z added by devel/scanprov
+KEY_ord                        # Z added by devel/scanprov
+KEY_pack                       # Z added by devel/scanprov
+KEY_package                    # Z added by devel/scanprov
+KEY_pipe                       # Z added by devel/scanprov
+KEY_pop                        # Z added by devel/scanprov
+KEY_pos                        # Z added by devel/scanprov
+KEY_print                      # Z added by devel/scanprov
+KEY_printf                     # Z added by devel/scanprov
+KEY_prototype                  # Z added by devel/scanprov
+KEY_push                       # Z added by devel/scanprov
+KEY_q                          # Z added by devel/scanprov
+KEY_qq                         # Z added by devel/scanprov
+KEY_quotemeta                  # Z added by devel/scanprov
+KEY_qw                         # Z added by devel/scanprov
+KEY_qx                         # Z added by devel/scanprov
+KEY_rand                       # Z added by devel/scanprov
+KEY_read                       # Z added by devel/scanprov
+KEY_readdir                    # Z added by devel/scanprov
+KEY_readline                   # Z added by devel/scanprov
+KEY_readlink                   # Z added by devel/scanprov
+KEY_readpipe                   # Z added by devel/scanprov
+KEY_recv                       # Z added by devel/scanprov
+KEY_redo                       # Z added by devel/scanprov
+KEY_ref                        # Z added by devel/scanprov
+KEY_rename                     # Z added by devel/scanprov
+KEY_require                    # Z added by devel/scanprov
+KEY_reset                      # Z added by devel/scanprov
+KEY_return                     # Z added by devel/scanprov
+KEY_reverse                    # Z added by devel/scanprov
+KEY_rewinddir                  # Z added by devel/scanprov
+KEY_rindex                     # Z added by devel/scanprov
+KEY_rmdir                      # Z added by devel/scanprov
+KEY_s                          # Z added by devel/scanprov
+KEY_scalar                     # Z added by devel/scanprov
+KEY_seek                       # Z added by devel/scanprov
+KEY_seekdir                    # Z added by devel/scanprov
+KEY_select                     # Z added by devel/scanprov
+KEY_semctl                     # Z added by devel/scanprov
+KEY_semget                     # Z added by devel/scanprov
+KEY_semop                      # Z added by devel/scanprov
+KEY_send                       # Z added by devel/scanprov
+KEY_setgrent                   # Z added by devel/scanprov
+KEY_sethostent                 # Z added by devel/scanprov
+KEY_setnetent                  # Z added by devel/scanprov
+KEY_setpgrp                    # Z added by devel/scanprov
+KEY_setpriority                # Z added by devel/scanprov
+KEY_setprotoent                # Z added by devel/scanprov
+KEY_setpwent                   # Z added by devel/scanprov
+KEY_setservent                 # Z added by devel/scanprov
+KEY_setsockopt                 # Z added by devel/scanprov
+KEY_shift                      # Z added by devel/scanprov
+KEY_shmctl                     # Z added by devel/scanprov
+KEY_shmget                     # Z added by devel/scanprov
+KEY_shmread                    # Z added by devel/scanprov
+KEY_shmwrite                   # Z added by devel/scanprov
+KEY_shutdown                   # Z added by devel/scanprov
+KEY_sin                        # Z added by devel/scanprov
+KEY_sleep                      # Z added by devel/scanprov
+KEY_socket                     # Z added by devel/scanprov
+KEY_socketpair                 # Z added by devel/scanprov
+KEY_sort                       # Z added by devel/scanprov
+KEY_splice                     # Z added by devel/scanprov
+KEY_split                      # Z added by devel/scanprov
+KEY_sprintf                    # Z added by devel/scanprov
+KEY_sqrt                       # Z added by devel/scanprov
+KEY_srand                      # Z added by devel/scanprov
+KEY_stat                       # Z added by devel/scanprov
+KEY_study                      # Z added by devel/scanprov
+KEY_sub                        # Z added by devel/scanprov
+KEY_substr                     # Z added by devel/scanprov
+KEY_symlink                    # Z added by devel/scanprov
+KEY_syscall                    # Z added by devel/scanprov
+KEY_sysopen                    # Z added by devel/scanprov
+KEY_sysread                    # Z added by devel/scanprov
+KEY_system                     # Z added by devel/scanprov
+KEY_syswrite                   # Z added by devel/scanprov
+KEY_tell                       # Z added by devel/scanprov
+KEY_telldir                    # Z added by devel/scanprov
+KEY_tie                        # Z added by devel/scanprov
+KEY_tied                       # Z added by devel/scanprov
+KEY_time                       # Z added by devel/scanprov
+KEY_times                      # Z added by devel/scanprov
+KEY_tr                         # Z added by devel/scanprov
+KEY_truncate                   # Z added by devel/scanprov
+KEY_uc                         # Z added by devel/scanprov
+KEY_ucfirst                    # Z added by devel/scanprov
+KEY_umask                      # Z added by devel/scanprov
+KEY_undef                      # Z added by devel/scanprov
+KEY_unless                     # Z added by devel/scanprov
+KEY_unlink                     # Z added by devel/scanprov
+KEY_unpack                     # Z added by devel/scanprov
+KEY_unshift                    # Z added by devel/scanprov
+KEY_untie                      # Z added by devel/scanprov
+KEY_until                      # Z added by devel/scanprov
+KEY_use                        # Z added by devel/scanprov
+KEY_utime                      # Z added by devel/scanprov
+KEY_values                     # Z added by devel/scanprov
+KEY_vec                        # Z added by devel/scanprov
+KEY_wait                       # Z added by devel/scanprov
+KEY_waitpid                    # Z added by devel/scanprov
+KEY_wantarray                  # Z added by devel/scanprov
+KEY_warn                       # Z added by devel/scanprov
+KEY_while                      # Z added by devel/scanprov
+keyword                        # F added by devel/scanprov
+KEY_write                      # Z added by devel/scanprov
+KEY_x                          # Z added by devel/scanprov
+KEY_xor                        # Z added by devel/scanprov
+KEY_y                          # Z added by devel/scanprov
+kLISTOP                        # Z added by devel/scanprov
+kLOGOP                         # Z added by devel/scanprov
+kLOOP                          # Z added by devel/scanprov
+kPMOP                          # Z added by devel/scanprov
+kPVOP                          # Z added by devel/scanprov
+kSVOP                          # Z added by devel/scanprov
+kUNOP                          # Z added by devel/scanprov
 LEAVE                          # T
+LEAVE_SCOPE                    # Z added by devel/scanprov
 leave_scope                    # T
+list                           # F added by devel/scanprov
+listkids                       # F added by devel/scanprov
+localize                       # F added by devel/scanprov
+LOCAL_PATCH_COUNT              # Z added by devel/scanprov
+LOC_SED                        # K added by devel/scanprov
 looks_like_number              # T
+LvTARG                         # Z added by devel/scanprov
+LvTARGLEN                      # Z added by devel/scanprov
+LvTARGOFF                      # Z added by devel/scanprov
+LvTYPE                         # Z added by devel/scanprov
+magic_clearenv                 # F added by devel/scanprov
+magic_clearpack                # F added by devel/scanprov
+magic_clearsig                 # F added by devel/scanprov
+magic_existspack               # F added by devel/scanprov
+magic_get                      # F added by devel/scanprov
+magic_getarylen                # F added by devel/scanprov
+magic_getpack                  # F added by devel/scanprov
+magic_getpos                   # F added by devel/scanprov
+magic_getsig                   # F added by devel/scanprov
+magic_gettaint                 # F added by devel/scanprov
+magic_getuvar                  # F added by devel/scanprov
+magic_nextpack                 # F added by devel/scanprov
+magic_set                      # F added by devel/scanprov
+magic_setarylen                # F added by devel/scanprov
+magic_setdbline                # F added by devel/scanprov
+magic_setenv                   # F added by devel/scanprov
+magic_setisa                   # F added by devel/scanprov
+magic_setmglob                 # F added by devel/scanprov
+magic_setnkeys                 # F added by devel/scanprov
+magic_setpack                  # F added by devel/scanprov
+magic_setpos                   # F added by devel/scanprov
+magic_setsig                   # F added by devel/scanprov
+magic_setsubstr                # F added by devel/scanprov
+magic_settaint                 # F added by devel/scanprov
+magic_setuvar                  # F added by devel/scanprov
+magic_setvec                   # F added by devel/scanprov
+magic_wipepack                 # F added by devel/scanprov
+Malloc_t                       # K added by devel/scanprov
 MARK                           # T
+MAXARG                         # Z added by devel/scanprov
+MAXO                           # Z added by devel/scanprov
+MAXSYSFD                       # Z added by devel/scanprov
+MBOL                           # Z added by devel/scanprov
+MEM_ALIGNBYTES                 # K added by devel/scanprov
+mem_collxfrm                   # F added by devel/scanprov
+MEM_SIZE                       # Z added by devel/scanprov
+memzero                        # Z added by devel/scanprov
+MEOL                           # Z added by devel/scanprov
+MEXTEND                        # Z added by devel/scanprov
 mg_clear                       # T
 mg_copy                        # T
+MGf_GSKIP                      # Z added by devel/scanprov
 mg_find                        # T
+MGf_MINMATCH                   # Z added by devel/scanprov
 mg_free                        # T
+MGf_REFCOUNTED                 # Z added by devel/scanprov
+MGf_TAINTEDDIR                 # Z added by devel/scanprov
 mg_get                         # T
 mg_magical                     # T
+MgPV                           # Z added by devel/scanprov
 mg_set                         # T
-moreswitches                   # T
+MgTAINTEDDIR                   # Z added by devel/scanprov
+MgTAINTEDDIR_on                # Z added by devel/scanprov
+MINMOD                         # Z added by devel/scanprov
+Mode_t                         # K added by devel/scanprov
+modkids                        # F added by devel/scanprov
+moreswitches                   # F added by devel/scanprov
 Move                           # T
+MSPAGAIN                       # Z added by devel/scanprov
+my_chsize                      # F added by devel/scanprov
 my_exit                        # T
 my_pclose                      # T
 my_popen                       # T
 my_setenv                      # T
+my_unexec                      # F added by devel/scanprov
+NBOUND                         # Z added by devel/scanprov
+New                            # Z added by devel/scanprov
 newANONHASH                    # T
 newANONLIST                    # T
 newANONSUB                     # T
@@ -136,6 +929,7 @@ newASSIGNOP                    # T
 newAV                          # T
 newAVREF                       # T
 newBINOP                       # T
+Newc                           # Z added by devel/scanprov
 newCONDOP                      # T
 newCVREF                       # T
 newFORM                        # T
@@ -159,6 +953,7 @@ newRV                          # T
 newSLICEOP                     # T
 newSTATEOP                     # T
 newSUB                         # T
+NEWSV                          # Z added by devel/scanprov
 newSV                          # T
 newSViv                        # T
 newSVOP                        # T
@@ -167,24 +962,98 @@ newSVREF                       # T
 newSVrv                        # T
 newSVsv                        # T
 newUNOP                        # T
+Newz                           # Z added by devel/scanprov
+nextargv                       # F added by devel/scanprov
+NEXTOPER                       # Z added by devel/scanprov
 ninstr                         # T
+NofAMmeth                      # Z added by devel/scanprov
+no_fh_allowed                  # F added by devel/scanprov
+NOLINE                         # Z added by devel/scanprov
+no_op                          # F added by devel/scanprov
+NORMAL                         # Z added by devel/scanprov
+NOTHING                        # Z added by devel/scanprov
+ntohi                          # Z added by devel/scanprov
+ntohl                          # Z added by devel/scanprov
+ntohs                          # Z added by devel/scanprov
+Null                           # Z added by devel/scanprov
 Nullav                         # T
 Nullch                         # T
 Nullcv                         # T
+Nullfp                         # Z added by devel/scanprov
+Nullgv                         # Z added by devel/scanprov
+Nullhe                         # Z added by devel/scanprov
 Nullhv                         # T
+Nullop                         # Z added by devel/scanprov
 Nullsv                         # T
+OA_AVREF                       # Z added by devel/scanprov
+OA_CVREF                       # Z added by devel/scanprov
+OA_DANGEROUS                   # Z added by devel/scanprov
+OA_DEFGV                       # Z added by devel/scanprov
+OA_FILEREF                     # Z added by devel/scanprov
+OA_FOLDCONST                   # Z added by devel/scanprov
+OA_HVREF                       # Z added by devel/scanprov
+OA_LIST                        # Z added by devel/scanprov
+OA_MARK                        # Z added by devel/scanprov
+OA_OPTIONAL                    # Z added by devel/scanprov
+OA_OTHERINT                    # Z added by devel/scanprov
+OA_RETSCALAR                   # Z added by devel/scanprov
+OA_SCALAR                      # Z added by devel/scanprov
+OA_SCALARREF                   # Z added by devel/scanprov
+OASHIFT                        # Z added by devel/scanprov
+OA_TARGET                      # Z added by devel/scanprov
+Off_t                          # K added by devel/scanprov
+oopsAV                         # F added by devel/scanprov
+oopsHV                         # F added by devel/scanprov
+OP                             # Z added by devel/scanprov
+opASSIGN                       # Z added by devel/scanprov
+OPCODE                         # Z added by devel/scanprov
+OPEN                           # Z added by devel/scanprov
+OPERAND                        # Z added by devel/scanprov
 OPf_KIDS                       # T
+OPf_KNOW                       # Z added by devel/scanprov
+OPf_LIST                       # Z added by devel/scanprov
+OPf_MOD                        # Z added by devel/scanprov
+OPf_PARENS                     # Z added by devel/scanprov
 op_free                        # T
+OPf_REF                        # Z added by devel/scanprov
+OPf_SPECIAL                    # Z added by devel/scanprov
+OPf_STACKED                    # Z added by devel/scanprov
+OPpASSIGN_BACKWARDS            # Z added by devel/scanprov
+OPpCONST_BARE                  # Z added by devel/scanprov
+OPpCONST_ENTERED               # Z added by devel/scanprov
+OPpDEREF_AV                    # Z added by devel/scanprov
+OPpDEREF_HV                    # Z added by devel/scanprov
 OPpENTERSUB_AMPER              # T
+OPpENTERSUB_DB                 # Z added by devel/scanprov
+OPpFLIP_LINENUM                # Z added by devel/scanprov
+OPpLIST_GUESSED                # Z added by devel/scanprov
+OPpLVAL_INTRO                  # Z added by devel/scanprov
+OPpREPEAT_DOLIST               # Z added by devel/scanprov
+OPpTRANS_COMPLEMENT            # Z added by devel/scanprov
+OPpTRANS_DELETE                # Z added by devel/scanprov
+OPpTRANS_SQUASH                # Z added by devel/scanprov
 ORIGMARK                       # T
-OSNAME                         # T
+OSNAME                         # K added by devel/scanprov
+package                        # F added by devel/scanprov
 pad_alloc                      # T
+pad_free                       # F added by devel/scanprov
+pad_leavemy                    # F added by devel/scanprov
+pad_reset                      # F added by devel/scanprov
+PAD_SV                         # Z added by devel/scanprov
+pad_sv                         # F added by devel/scanprov
+pad_swipe                      # F added by devel/scanprov
+PATCHLEVEL                     # Z added by devel/scanprov
+Pause                          # Z added by devel/scanprov
+pclose                         # Z added by devel/scanprov
+peep                           # F added by devel/scanprov
 perl_alloc                     # T
 perl_construct                 # T
+Perl_debug_log                 # Z added by devel/scanprov
 perl_free                      # T
 PERL_HASH                      # T
 PERL_INT_MAX                   # T
 PERL_INT_MIN                   # T
+PerlIO                         # Z added by devel/scanprov
 PerlIO_canset_cnt              # T
 PerlIO_exportFILE              # T
 PerlIO_fast_gets               # T
@@ -195,6 +1064,7 @@ PerlIO_getpos                  # T
 PerlIO_has_base                # T
 PerlIO_has_cntptr              # T
 PerlIO_importFILE              # T
+PERLIO_NOT_STDIO               # Z added by devel/scanprov
 PerlIO_open                    # T
 PerlIO_putc                    # T
 PerlIO_puts                    # T
@@ -216,93 +1086,308 @@ PERL_SYS_TERM                  # T
 PERL_UCHAR_MAX                 # T
 PERL_UCHAR_MIN                 # T
 PERL_UINT_MAX                  # T
+PERL_UINT_MIN                  # T
 PERL_ULONG_MAX                 # T
 PERL_ULONG_MIN                 # T
 PERL_UQUAD_MAX                 # T
 PERL_UQUAD_MIN                 # T
 PERL_USHORT_MAX                # T
 PERL_USHORT_MIN                # T
+pidgone                        # F added by devel/scanprov
+PLUS                           # Z added by devel/scanprov
+PMf_CONST                      # Z added by devel/scanprov
+PMf_EVAL                       # Z added by devel/scanprov
+PMf_EXTENDED                   # Z added by devel/scanprov
+PMf_FOLD                       # Z added by devel/scanprov
+PMf_GLOBAL                     # Z added by devel/scanprov
+PMf_KEEP                       # Z added by devel/scanprov
+PMf_MULTILINE                  # Z added by devel/scanprov
+PMf_ONCE                       # Z added by devel/scanprov
+PMf_SINGLELINE                 # Z added by devel/scanprov
+pmruntime                      # F added by devel/scanprov
+pmtrans                        # F added by devel/scanprov
+popen                          # Z added by devel/scanprov
 POPi                           # T
 POPl                           # T
+POPMARK                        # Z added by devel/scanprov
 POPp                           # T
 POPs                           # T
 pop_scope                      # T
+PP                             # Z added by devel/scanprov
 pregexec                       # T
 pregfree                       # T
-PRIVLIB                        # T
+PREVOPER                       # Z added by devel/scanprov
+printf                         # Z added by devel/scanprov
+PRIVLIB                        # K added by devel/scanprov
+PRIVLIB_EXP                    # K added by devel/scanprov
+PRIVSHIFT                      # Z added by devel/scanprov
 PUSHi                          # T
 PUSHMARK                       # T
 PUSHp                          # T
 PUSHs                          # T
 push_scope                     # T
+PUSHTARG                       # Z added by devel/scanprov
 PUTBACK                        # T
-RANDBITS                       # T
+putc                           # Z added by devel/scanprov
+putc_unlocked                  # Z added by devel/scanprov
+putw                           # Z added by devel/scanprov
+Quad_t                         # K added by devel/scanprov
+RANDBITS                       # K added by devel/scanprov
+RD_NODATA                      # K added by devel/scanprov
+REF                            # Z added by devel/scanprov
+refkids                        # F added by devel/scanprov
+regdump                        # F added by devel/scanprov
+register                       # Z added by devel/scanprov
+regnext                        # F added by devel/scanprov
+regprop                        # F added by devel/scanprov
 Renew                          # T
 Renewc                         # T
 repeatcpy                      # T
+RETPUSHNO                      # Z added by devel/scanprov
+RETPUSHUNDEF                   # Z added by devel/scanprov
+RETPUSHYES                     # Z added by devel/scanprov
+RETSETNO                       # Z added by devel/scanprov
+RETSETUNDEF                    # Z added by devel/scanprov
+RETSETYES                      # Z added by devel/scanprov
+RETURN                         # Z added by devel/scanprov
+RETURNOP                       # Z added by devel/scanprov
+RETURNX                        # Z added by devel/scanprov
+RETVAL                         # X added by devel/scanprov
+rewind                         # Z added by devel/scanprov
 rninstr                        # T
+RsPARA                         # Z added by devel/scanprov
+RsSIMPLE                       # Z added by devel/scanprov
+RsSNARF                        # Z added by devel/scanprov
+safecalloc                     # Z added by devel/scanprov
 Safefree                       # T
+safefree                       # Z added by devel/scanprov
+safemalloc                     # Z added by devel/scanprov
+saferealloc                    # Z added by devel/scanprov
+same_dirent                    # F added by devel/scanprov
+SANY                           # Z added by devel/scanprov
 save_aptr                      # T
 save_ary                       # T
-save_clearsv                   # T
-save_delete                    # T
-save_freepv                    # T
-save_freesv                    # T
+save_clearsv                   # F added by devel/scanprov
+SAVECLEARSV                    # Z added by devel/scanprov
+save_delete                    # F added by devel/scanprov
+SAVEDELETE                     # T
+save_destructor                # F added by devel/scanprov
+SAVEFREEPV                     # T
+SAVEFREESV                     # T
 save_hash                      # T
 save_hptr                      # T
-save_I32                       # T
-save_int                       # T
+save_I32                       # F added by devel/scanprov
+SAVEI32                        # T
+save_int                       # F added by devel/scanprov
+SAVEINT                        # T
 save_item                      # T
+SAVEIV                         # T
 save_list                      # T
-save_long                      # T
+save_long                      # F added by devel/scanprov
+SAVELONG                       # T
 save_nogv                      # T
-save_pptr                      # T
+save_pptr                      # F added by devel/scanprov
+SAVEPPTR                       # T
 savepv                         # T
 savepvn                        # T
 save_scalar                    # T
-save_sptr                      # T
+save_sptr                      # F added by devel/scanprov
+SAVESPTR                       # T
 savestack_grow                 # T
 save_svref                     # T
+SAVEt_APTR                     # Z added by devel/scanprov
+SAVEt_AV                       # Z added by devel/scanprov
+SAVEt_CLEARSV                  # Z added by devel/scanprov
+SAVEt_DELETE                   # Z added by devel/scanprov
+SAVEt_DESTRUCTOR               # Z added by devel/scanprov
+SAVEt_FREEOP                   # Z added by devel/scanprov
+SAVEt_FREEPV                   # Z added by devel/scanprov
+SAVEt_FREESV                   # Z added by devel/scanprov
+SAVEt_GP                       # Z added by devel/scanprov
+SAVEt_HPTR                     # Z added by devel/scanprov
+SAVEt_HV                       # Z added by devel/scanprov
+SAVEt_I32                      # Z added by devel/scanprov
+SAVEt_INT                      # Z added by devel/scanprov
+SAVEt_ITEM                     # Z added by devel/scanprov
+SAVEt_IV                       # Z added by devel/scanprov
+SAVEt_LONG                     # Z added by devel/scanprov
 SAVETMPS                       # T
+SAVEt_NSTAB                    # Z added by devel/scanprov
+SAVEt_PPTR                     # Z added by devel/scanprov
+SAVEt_REGCONTEXT               # Z added by devel/scanprov
+SAVEt_SPTR                     # Z added by devel/scanprov
+SAVEt_SV                       # Z added by devel/scanprov
+SAVEt_SVREF                    # Z added by devel/scanprov
+sawparens                      # F added by devel/scanprov
+sb_dstr                        # Z added by devel/scanprov
+sb_iters                       # Z added by devel/scanprov
+sb_m                           # Z added by devel/scanprov
+sb_maxiters                    # Z added by devel/scanprov
+SBOL                           # Z added by devel/scanprov
+sb_orig                        # Z added by devel/scanprov
+sb_rx                          # Z added by devel/scanprov
+sb_s                           # Z added by devel/scanprov
+sb_strend                      # Z added by devel/scanprov
+sb_targ                        # Z added by devel/scanprov
+scalar                         # F added by devel/scanprov
+scalarkids                     # F added by devel/scanprov
+scalarseq                      # F added by devel/scanprov
+scalarvoid                     # F added by devel/scanprov
+scan_const                     # F added by devel/scanprov
+SCAN_DEF                       # Z added by devel/scanprov
+scan_formline                  # F added by devel/scanprov
+scan_heredoc                   # F added by devel/scanprov
+scan_ident                     # F added by devel/scanprov
+scan_inputsymbol               # F added by devel/scanprov
+scan_num                       # F added by devel/scanprov
+scan_pat                       # F added by devel/scanprov
+SCAN_REPL                      # Z added by devel/scanprov
+scan_str                       # F added by devel/scanprov
+scan_subst                     # F added by devel/scanprov
+SCAN_TR                        # Z added by devel/scanprov
+scan_trans                     # F added by devel/scanprov
+scan_word                      # F added by devel/scanprov
+SEEK_CUR                       # Z added by devel/scanprov
+SEEK_END                       # Z added by devel/scanprov
+SEEK_SET                       # Z added by devel/scanprov
+Select_fd_set_t                # K added by devel/scanprov
+SEOL                           # Z added by devel/scanprov
+setbuf                         # Z added by devel/scanprov
 setdefout                      # T
-SITELIB                        # T
+SETERRNO                       # Z added by devel/scanprov
+SETi                           # Z added by devel/scanprov
+SETn                           # Z added by devel/scanprov
+SETp                           # Z added by devel/scanprov
+setregid                       # Z added by devel/scanprov
+setreuid                       # Z added by devel/scanprov
+SETs                           # Z added by devel/scanprov
+SETTARG                        # Z added by devel/scanprov
+setvbuf                        # Z added by devel/scanprov
+Shmat_t                        # K added by devel/scanprov
+SH_PATH                        # K added by devel/scanprov
+S_IFMT                         # Z added by devel/scanprov
+SIGABRT                        # Z added by devel/scanprov
+sighandler                     # F added by devel/scanprov
+SIGILL                         # Z added by devel/scanprov
+Sigjmp_buf                     # K added by devel/scanprov
+Siglongjmp                     # K added by devel/scanprov
+Signal_t                       # K added by devel/scanprov
+SIG_NAME                       # K added by devel/scanprov
+SIG_NUM                        # K added by devel/scanprov
+Sigsetjmp                      # K added by devel/scanprov
+S_IRGRP                        # Z added by devel/scanprov
+S_IROTH                        # Z added by devel/scanprov
+S_IRUSR                        # Z added by devel/scanprov
+S_ISBLK                        # Z added by devel/scanprov
+S_ISCHR                        # Z added by devel/scanprov
+S_ISDIR                        # Z added by devel/scanprov
+S_ISFIFO                       # Z added by devel/scanprov
+S_ISGID                        # Z added by devel/scanprov
+S_ISLNK                        # Z added by devel/scanprov
+S_ISREG                        # Z added by devel/scanprov
+S_ISSOCK                       # Z added by devel/scanprov
+S_ISUID                        # Z added by devel/scanprov
+SITEARCH                       # K added by devel/scanprov
+SITEARCH_EXP                   # K added by devel/scanprov
+SITELIB                        # K added by devel/scanprov
+SITELIB_EXP                    # K added by devel/scanprov
+S_IWGRP                        # Z added by devel/scanprov
+S_IWOTH                        # Z added by devel/scanprov
+S_IWUSR                        # Z added by devel/scanprov
+S_IXGRP                        # Z added by devel/scanprov
+S_IXOTH                        # Z added by devel/scanprov
+S_IXUSR                        # Z added by devel/scanprov
+Size_t                         # K added by devel/scanprov
+SLOPPYDIVIDE                   # Z added by devel/scanprov
 SP                             # T
 SPAGAIN                        # T
+SSCHECK                        # Z added by devel/scanprov
+SSize_t                        # K added by devel/scanprov
+SSPOPDPTR                      # Z added by devel/scanprov
+SSPOPINT                       # Z added by devel/scanprov
+SSPOPIV                        # Z added by devel/scanprov
+SSPOPLONG                      # Z added by devel/scanprov
+SSPOPPTR                       # Z added by devel/scanprov
+SSPUSHDPTR                     # Z added by devel/scanprov
+SSPUSHINT                      # Z added by devel/scanprov
+SSPUSHIV                       # Z added by devel/scanprov
+SSPUSHLONG                     # Z added by devel/scanprov
+SSPUSHPTR                      # Z added by devel/scanprov
 ST                             # T
-stack_grow                     # T
-STARTPERL                      # T
-STDCHAR                        # T
+stack_grow                     # F added by devel/scanprov
+STANDARD_C                     # Z added by devel/scanprov
+STAR                           # Z added by devel/scanprov
+STARTPERL                      # K added by devel/scanprov
+Stat                           # Z added by devel/scanprov
+STDCHAR                        # K added by devel/scanprov
+stderr                         # Z added by devel/scanprov
+stdin                          # Z added by devel/scanprov
+stdout                         # Z added by devel/scanprov
+STMT_END                       # M added by devel/scanprov
+STMT_START                     # M added by devel/scanprov
 strEQ                          # T
+Strerror                       # Z added by devel/scanprov
 strGE                          # T
 strGT                          # T
+STRINGIFY                      # K added by devel/scanprov
 strLE                          # T
 strLT                          # T
 strNE                          # T
 strnEQ                         # T
 strnNE                         # T
-sv_2bool                       # T
+StructCopy                     # M added by devel/scanprov
+SUBVERSION                     # Z added by devel/scanprov
+SUCCEED                        # Z added by devel/scanprov
 sv_2cv                         # T
 sv_2io                         # T
-sv_2iv                         # T
 sv_2mortal                     # T
-sv_2pv                         # T
+sv_add_arena                   # F added by devel/scanprov
+SvAMAGIC                       # Z added by devel/scanprov
+SvANY                          # Z added by devel/scanprov
 sv_backoff                     # T
 sv_bless                       # T
 sv_catpv                       # T
 sv_catpvn                      # T
 sv_catsv                       # T
 sv_chop                        # T
+sv_clean_all                   # F added by devel/scanprov
+sv_clean_objs                  # F added by devel/scanprov
 sv_clear                       # T
 sv_cmp                         # T
+SvCOMPILED                     # Z added by devel/scanprov
+SvCOMPILED_off                 # Z added by devel/scanprov
+SvCOMPILED_on                  # Z added by devel/scanprov
 SvCUR                          # T
 SvCUR_set                      # T
 sv_dec                         # T
 sv_dump                        # T
 SvEND                          # T
+SvEND_set                      # Z added by devel/scanprov
+SvENDx                         # Z added by devel/scanprov
 sv_eq                          # T
+SvFAKE                         # Z added by devel/scanprov
+SvFAKE_off                     # Z added by devel/scanprov
+SvFAKE_on                      # Z added by devel/scanprov
+SVf_AMAGIC                     # Z added by devel/scanprov
+SVf_BREAK                      # Z added by devel/scanprov
+SVf_FAKE                       # Z added by devel/scanprov
+SVf_IOK                        # Z added by devel/scanprov
+SvFLAGS                        # Z added by devel/scanprov
+SVf_NOK                        # Z added by devel/scanprov
+SVf_OK                         # Z added by devel/scanprov
+SVf_OOK                        # Z added by devel/scanprov
+SVf_POK                        # Z added by devel/scanprov
+SVf_READONLY                   # Z added by devel/scanprov
 sv_free                        # T
+sv_free_arenas                 # F added by devel/scanprov
+SVf_ROK                        # Z added by devel/scanprov
+SVf_THINKFIRST                 # Z added by devel/scanprov
 sv_gets                        # T
-sv_grow                        # T
+SvGMAGICAL                     # Z added by devel/scanprov
+SvGMAGICAL_off                 # Z added by devel/scanprov
+SvGMAGICAL_on                  # Z added by devel/scanprov
+Sv_Grow                        # Z added by devel/scanprov
+sv_grow                        # F added by devel/scanprov
 SvGROW                         # T
 sv_inc                         # T
 sv_insert                      # T
@@ -311,19 +1396,26 @@ SvIOK_off                      # T
 SvIOK_on                       # T
 SvIOK_only                     # T
 SvIOKp                         # T
+SvIOKp_on                      # Z added by devel/scanprov
 sv_isa                         # T
 sv_isobject                    # T
 SvIV                           # T
 SvIV_set                       # T
 SvIVX                          # T
 SvIVx                          # T
+SvIVXx                         # Z added by devel/scanprov
 sv_len                         # T
 SvLEN                          # T
 SvLEN_set                      # T
+SvLENx                         # Z added by devel/scanprov
 sv_magic                       # T
+SvMAGIC                        # Z added by devel/scanprov
+SvMAGICAL                      # Z added by devel/scanprov
+SvMAGICAL_off                  # Z added by devel/scanprov
+SvMAGICAL_on                   # Z added by devel/scanprov
 sv_mortalcopy                  # T
 sv_newmortal                   # T
-sv_newref                      # T
+sv_newref                      # F added by devel/scanprov
 SvNIOK                         # T
 SvNIOK_off                     # T
 SvNIOKp                        # T
@@ -332,19 +1424,42 @@ SvNOK_off                      # T
 SvNOK_on                       # T
 SvNOK_only                     # T
 SvNOKp                         # T
+SvNOKp_on                      # Z added by devel/scanprov
+SvNVXx                         # Z added by devel/scanprov
+SvOBJECT                       # Z added by devel/scanprov
+SvOBJECT_off                   # Z added by devel/scanprov
+SvOBJECT_on                    # Z added by devel/scanprov
 SvOK                           # T
+SvOK_off                       # Z added by devel/scanprov
+SvOKp                          # Z added by devel/scanprov
 SvOOK                          # T
+SvOOK_off                      # T
+SvOOK_on                       # Z added by devel/scanprov
+SvPADMY                        # Z added by devel/scanprov
+SvPADMY_on                     # Z added by devel/scanprov
+SvPADTMP                       # Z added by devel/scanprov
+SvPADTMP_off                   # Z added by devel/scanprov
+SvPADTMP_on                    # Z added by devel/scanprov
+SvPEEK                         # Z added by devel/scanprov
+SVphv_LAZYDEL                  # Z added by devel/scanprov
+SVphv_SHAREKEYS                # Z added by devel/scanprov
+SVp_IOK                        # Z added by devel/scanprov
+SVp_NOK                        # Z added by devel/scanprov
 SvPOK                          # T
 SvPOK_off                      # T
 SvPOK_on                       # T
 SvPOK_only                     # T
 SvPOKp                         # T
+SvPOKp_on                      # Z added by devel/scanprov
+SVp_POK                        # Z added by devel/scanprov
+SVp_SCREAM                     # Z added by devel/scanprov
 SvPV                           # T
 SvPV_force                     # T
-sv_pvn_force                   # T
 SvPV_set                       # T
 SvPVX                          # T
 SvPVx                          # T
+SvPVx_force                    # Z added by devel/scanprov
+SvPVXx                         # Z added by devel/scanprov
 SvREADONLY                     # T
 SvREADONLY_off                 # T
 SvREADONLY_on                  # T
@@ -355,10 +1470,17 @@ sv_reftype                     # T
 sv_replace                     # T
 sv_report_used                 # T
 sv_reset                       # T
+SvRMAGICAL                     # Z added by devel/scanprov
+SvRMAGICAL_off                 # Z added by devel/scanprov
+SvRMAGICAL_on                  # Z added by devel/scanprov
 SvROK                          # T
 SvROK_off                      # T
 SvROK_on                       # T
 SvRV                           # T
+SvRVx                          # Z added by devel/scanprov
+SvSCREAM                       # Z added by devel/scanprov
+SvSCREAM_off                   # Z added by devel/scanprov
+SvSCREAM_on                    # Z added by devel/scanprov
 sv_setiv                       # T
 SvSETMAGIC                     # T
 sv_setpv                       # T
@@ -368,9 +1490,23 @@ sv_setref_pv                   # T
 sv_setref_pvn                  # T
 sv_setsv                       # T
 SvSetSV                        # T
+SVs_GMG                        # Z added by devel/scanprov
+SvSMAGICAL                     # Z added by devel/scanprov
+SvSMAGICAL_off                 # Z added by devel/scanprov
+SvSMAGICAL_on                  # Z added by devel/scanprov
+SVs_OBJECT                     # Z added by devel/scanprov
+SVs_PADMY                      # Z added by devel/scanprov
+SVs_PADTMP                     # Z added by devel/scanprov
+SVs_RMG                        # Z added by devel/scanprov
+SVs_SMG                        # Z added by devel/scanprov
 SvSTASH                        # T
 SVs_TEMP                       # T
+SvTAIL                         # Z added by devel/scanprov
 SvTAINT                        # T
+SvTEMP                         # Z added by devel/scanprov
+SvTEMP_off                     # Z added by devel/scanprov
+SvTEMP_on                      # Z added by devel/scanprov
+SvTHINKFIRST                   # Z added by devel/scanprov
 SVt_IV                         # T
 SVt_NULL                       # T
 SVt_NV                         # T
@@ -388,20 +1524,74 @@ SVt_PVNV                       # T
 SvTRUE                         # T
 SvTRUEx                        # T
 SvTYPE                         # T
+SVTYPEMASK                     # Z added by devel/scanprov
 sv_unmagic                     # T
 sv_unref                       # T
 sv_upgrade                     # T
 SvUPGRADE                      # T
 sv_usepvn                      # T
-taint_env                      # T
-taint_proper                   # T
+SvVALID                        # Z added by devel/scanprov
+SWITCHSTACK                    # Z added by devel/scanprov
+TAINT_ENV                      # Z added by devel/scanprov
+taint_env                      # F added by devel/scanprov
+TAINT_IF                       # Z added by devel/scanprov
+TAINT_NOT                      # Z added by devel/scanprov
+TAINT_PROPER                   # Z added by devel/scanprov
+taint_proper                   # F added by devel/scanprov
+TARG                           # T
+THIS                           # X added by devel/scanprov
+Time_t                         # K added by devel/scanprov
+tmpfile                        # Z added by devel/scanprov
 toLOWER                        # T
+TOPi                           # Z added by devel/scanprov
+TOPl                           # Z added by devel/scanprov
+TOPMARK                        # Z added by devel/scanprov
+TOPn                           # Z added by devel/scanprov
+TOPp                           # Z added by devel/scanprov
+TOPs                           # Z added by devel/scanprov
 toUPPER                        # T
+TRUE                           # Z added by devel/scanprov
+U16_MAX                        # Z added by devel/scanprov
+U16_MIN                        # Z added by devel/scanprov
+U32_MAX                        # Z added by devel/scanprov
+U32_MIN                        # Z added by devel/scanprov
+U8_MAX                         # Z added by devel/scanprov
+U8_MIN                         # Z added by devel/scanprov
+UCHARAT                        # Z added by devel/scanprov
+U_I                            # Z added by devel/scanprov
+Uid_t                          # K added by devel/scanprov
+UINTMAX_C                      # T
+U_L                            # Z added by devel/scanprov
+ungetc                         # Z added by devel/scanprov
+UNLESSM                        # Z added by devel/scanprov
+UNLINK                         # Z added by devel/scanprov
+unlnk                          # F added by devel/scanprov
 unsharepvn                     # T
+U_S                            # Z added by devel/scanprov
+USE_BSDPGRP                    # Z added by devel/scanprov
+USE_DYNAMIC_LOADING            # K added by devel/scanprov
+USE_STAT_RDEV                  # Z added by devel/scanprov
+USE_STDIO                      # Z added by devel/scanprov
+utilize                        # F added by devel/scanprov
+U_V                            # Z added by devel/scanprov
+UV_MAX                         # Z added by devel/scanprov
+UV_MIN                         # Z added by devel/scanprov
+VAL_EAGAIN                     # K added by devel/scanprov
+VAL_O_NONBLOCK                 # K added by devel/scanprov
+vfprintf                       # Z added by devel/scanprov
+VOL                            # Z added by devel/scanprov
+vtohl                          # Z added by devel/scanprov
+vtohs                          # Z added by devel/scanprov
+wait4pid                       # F added by devel/scanprov
+watch                          # F added by devel/scanprov
 whichsig                       # T
+WHILEM                         # Z added by devel/scanprov
 XPUSHi                         # T
 XPUSHp                         # T
 XPUSHs                         # T
+XPUSHTARG                      # Z added by devel/scanprov
+XS                             # M added by devel/scanprov
+XSANY                          # Z added by devel/scanprov
 XSRETURN                       # T
 XSRETURN_EMPTY                 # T
 XSRETURN_IV                    # T
@@ -416,134 +1606,8 @@ XST_mUNDEF                     # T
 XST_mYES                       # T
 XS_VERSION                     # T
 XS_VERSION_BOOTCHECK           # T
-Zero                           # T
-RETVAL                         # X added by devel/scanprov
-CALL                           # X added by devel/scanprov
-THIS                           # X added by devel/scanprov
-dXSI32                         # M added by devel/scanprov
-items                          # M added by devel/scanprov
-ix                             # M added by devel/scanprov
-PERL_UINT_MIN                  # M added by devel/scanprov
-STMT_END                       # M added by devel/scanprov
-STMT_START                     # M added by devel/scanprov
-StructCopy                     # M added by devel/scanprov
-svtype                         # M added by devel/scanprov
-XS                             # M added by devel/scanprov
-apply                          # F added by devel/scanprov
-bind_match                     # F added by devel/scanprov
-boot_core_UNIVERSAL            # F added by devel/scanprov
-cando                          # F added by devel/scanprov
-checkcomma                     # F added by devel/scanprov
-check_uni                      # F added by devel/scanprov
-do_chomp                       # F added by devel/scanprov
-do_eof                         # F added by devel/scanprov
-do_exec                        # F added by devel/scanprov
-dofindlabel                    # F added by devel/scanprov
-do_ipcctl                      # F added by devel/scanprov
-do_ipcget                      # F added by devel/scanprov
-do_msgrcv                      # F added by devel/scanprov
-do_msgsnd                      # F added by devel/scanprov
-dopoptoeval                    # F added by devel/scanprov
-do_print                       # F added by devel/scanprov
-do_readline                    # F added by devel/scanprov
-do_seek                        # F added by devel/scanprov
-do_semop                       # F added by devel/scanprov
-do_shmio                       # F added by devel/scanprov
-do_tell                        # F added by devel/scanprov
-do_trans                       # F added by devel/scanprov
-do_vecset                      # F added by devel/scanprov
-do_vop                         # F added by devel/scanprov
-dump_mstats                    # F added by devel/scanprov
-fold_constants                 # F added by devel/scanprov
-force_ident                    # F added by devel/scanprov
-force_list                     # F added by devel/scanprov
-force_next                     # F added by devel/scanprov
-force_word                     # F added by devel/scanprov
-gen_constant_list              # F added by devel/scanprov
-ingroup                        # F added by devel/scanprov
-intuit_more                    # F added by devel/scanprov
-invert                         # F added by devel/scanprov
-io_close                       # F added by devel/scanprov
-jmaybe                         # F added by devel/scanprov
-keyword                        # F added by devel/scanprov
-list                           # F added by devel/scanprov
-listkids                       # F added by devel/scanprov
-localize                       # F added by devel/scanprov
-magic_clearenv                 # F added by devel/scanprov
-magic_clearpack                # F added by devel/scanprov
-magic_clearsig                 # F added by devel/scanprov
-magic_existspack               # F added by devel/scanprov
-magic_get                      # F added by devel/scanprov
-magic_getarylen                # F added by devel/scanprov
-magic_getpack                  # F added by devel/scanprov
-magic_getpos                   # F added by devel/scanprov
-magic_getsig                   # F added by devel/scanprov
-magic_gettaint                 # F added by devel/scanprov
-magic_getuvar                  # F added by devel/scanprov
-magic_nextpack                 # F added by devel/scanprov
-magic_set                      # F added by devel/scanprov
-magic_setarylen                # F added by devel/scanprov
-magic_setdbline                # F added by devel/scanprov
-magic_setenv                   # F added by devel/scanprov
-magic_setisa                   # F added by devel/scanprov
-magic_setmglob                 # F added by devel/scanprov
-magic_setnkeys                 # F added by devel/scanprov
-magic_setpack                  # F added by devel/scanprov
-magic_setpos                   # F added by devel/scanprov
-magic_setsig                   # F added by devel/scanprov
-magic_setsubstr                # F added by devel/scanprov
-magic_settaint                 # F added by devel/scanprov
-magic_setuvar                  # F added by devel/scanprov
-magic_setvec                   # F added by devel/scanprov
-magic_wipepack                 # F added by devel/scanprov
-mem_collxfrm                   # F added by devel/scanprov
-modkids                        # F added by devel/scanprov
-my_chsize                      # F added by devel/scanprov
-my_unexec                      # F added by devel/scanprov
-nextargv                       # F added by devel/scanprov
-no_fh_allowed                  # F added by devel/scanprov
-no_op                          # F added by devel/scanprov
-oopsAV                         # F added by devel/scanprov
-oopsHV                         # F added by devel/scanprov
-package                        # F added by devel/scanprov
-pad_free                       # F added by devel/scanprov
-pad_leavemy                    # F added by devel/scanprov
-pad_reset                      # F added by devel/scanprov
-pad_sv                         # F added by devel/scanprov
-pad_swipe                      # F added by devel/scanprov
-peep                           # F added by devel/scanprov
-pidgone                        # F added by devel/scanprov
-pmruntime                      # F added by devel/scanprov
-pmtrans                        # F added by devel/scanprov
-ref                            # F added by devel/scanprov
-refkids                        # F added by devel/scanprov
-regprop                        # F added by devel/scanprov
-same_dirent                    # F added by devel/scanprov
-sawparens                      # F added by devel/scanprov
-scalar                         # F added by devel/scanprov
-scalarkids                     # F added by devel/scanprov
-scalarseq                      # F added by devel/scanprov
-scalarvoid                     # F added by devel/scanprov
-scan_const                     # F added by devel/scanprov
-scan_formline                  # F added by devel/scanprov
-scan_heredoc                   # F added by devel/scanprov
-scan_ident                     # F added by devel/scanprov
-scan_inputsymbol               # F added by devel/scanprov
-scan_pat                       # F added by devel/scanprov
-scan_str                       # F added by devel/scanprov
-scan_subst                     # F added by devel/scanprov
-scan_trans                     # F added by devel/scanprov
-scan_word                      # F added by devel/scanprov
-sighandler                     # F added by devel/scanprov
-sv_add_arena                   # F added by devel/scanprov
-sv_clean_all                   # F added by devel/scanprov
-sv_clean_objs                  # F added by devel/scanprov
-sv_free_arenas                 # F added by devel/scanprov
-unlnk                          # F added by devel/scanprov
-utilize                        # F added by devel/scanprov
-wait4pid                       # F added by devel/scanprov
-watch                          # F added by devel/scanprov
 yyerror                        # F added by devel/scanprov
 yylex                          # F added by devel/scanprov
 yyparse                        # F added by devel/scanprov
 yywarn                         # F added by devel/scanprov
+Zero                           # T
index 7d77ab1..0ad9a0a 100644 (file)
@@ -1,17 +1,74 @@
 5.004000
-ARCHNAME                       # E
+AMT_AMAGIC                     # Z added by devel/scanprov
+AMT_AMAGIC_off                 # Z added by devel/scanprov
+AMT_AMAGIC_on                  # Z added by devel/scanprov
+AMTf_AMAGIC                    # Z added by devel/scanprov
+ANYOF_ALNUML                   # Z added by devel/scanprov
+ANYOF_INVERT                   # Z added by devel/scanprov
+ANYOF_NALNUML                  # Z added by devel/scanprov
+ANYOF_NSPACEL                  # Z added by devel/scanprov
+ANYOF_SPACEL                   # Z added by devel/scanprov
+ARCHNAME                       # K added by devel/scanprov
+BIN_EXP                        # K added by devel/scanprov
+BIT_DIGITS                     # Z added by devel/scanprov
 block_end                      # E (Perl_block_end)
 block_gimme                    # E
 block_start                    # E (Perl_block_start)
 boolSV                         # E
+BOUNDL                         # Z added by devel/scanprov
 call_list                      # E
+CATCH_GET                      # Z added by devel/scanprov
+CATCH_SET                      # Z added by devel/scanprov
+CVf_NODEBUG                    # Z added by devel/scanprov
+CVf_UNIQUE                     # Z added by devel/scanprov
+CvNODEBUG                      # Z added by devel/scanprov
+CvNODEBUG_off                  # Z added by devel/scanprov
+CvNODEBUG_on                   # Z added by devel/scanprov
+CvUNIQUE                       # Z added by devel/scanprov
+CvUNIQUE_off                   # Z added by devel/scanprov
+CvUNIQUE_on                    # Z added by devel/scanprov
 delimcpy                       # U
+dEXTCONST                      # Z added by devel/scanprov
+dJMPENV                        # Z added by devel/scanprov
+do_sysseek                     # F added by devel/scanprov
+dPOPuv                         # Z added by devel/scanprov
+dPOPXiirl                      # Z added by devel/scanprov
+dPOPXnnrl                      # Z added by devel/scanprov
+dPOPXssrl                      # Z added by devel/scanprov
+dTOPuv                         # Z added by devel/scanprov
+EXACT                          # Z added by devel/scanprov
+EXACTF                         # Z added by devel/scanprov
+EXACTFL                        # Z added by devel/scanprov
+EXTCONST                       # Z added by devel/scanprov
+EXTEND_MORTAL                  # Z added by devel/scanprov
+F_atan2_amg                    # Z added by devel/scanprov
+F_cos_amg                      # Z added by devel/scanprov
+F_exp_amg                      # Z added by devel/scanprov
+F_log_amg                      # Z added by devel/scanprov
+F_pow_amg                      # Z added by devel/scanprov
+F_sin_amg                      # Z added by devel/scanprov
+F_sqrt_amg                     # Z added by devel/scanprov
 GIMME_V                        # E
+GPOS                           # Z added by devel/scanprov
 gv_autoload4                   # E
+GvCVu                          # Z added by devel/scanprov
 gv_fetchmethod_autoload        # E
 G_VOID                         # E
+HAS_GETTIMEOFDAY               # K added by devel/scanprov
+HAS_INET_ATON                  # K added by devel/scanprov
+HAS_SETGROUPS                  # K added by devel/scanprov
+HAS_STRTOD                     # K added by devel/scanprov
+HAS_STRTOL                     # K added by devel/scanprov
+HAS_STRTOUL                    # K added by devel/scanprov
+HEK_BASESIZE                   # Z added by devel/scanprov
+HeKEY_hek                      # Z added by devel/scanprov
+HeKEY_sv                       # Z added by devel/scanprov
+HEK_HASH                       # Z added by devel/scanprov
+HEK_KEY                        # Z added by devel/scanprov
+HEK_LEN                        # Z added by devel/scanprov
 HePV                           # A
 HeSVKEY_set                    # E
+HINT_LOCALE                    # Z added by devel/scanprov
 hv_delayfree_ent               # E
 hv_free_ent                    # E
 ibcmp_locale                   # E
@@ -25,52 +82,97 @@ isPRINT                        # E
 isPRINT_LC                     # E
 isSPACE_LC                     # E
 isUPPER_LC                     # E
-LONGSIZE                       # E
+JMPENV_JUMP                    # Z added by devel/scanprov
+JMPENV_POP                     # Z added by devel/scanprov
+JMPENV_PUSH                    # Z added by devel/scanprov
+KEY___PACKAGE                  # Z added by devel/scanprov
+KEY_sysseek                    # Z added by devel/scanprov
+LONGSIZE                       # K added by devel/scanprov
+magic_getdefelem               # F added by devel/scanprov
+magic_setcollxfrm              # F added by devel/scanprov
+magic_setdefelem               # F added by devel/scanprov
 memEQ                          # E
 memNE                          # E
+MgTAINTEDDIR_off               # Z added by devel/scanprov
+Mkdir                          # Z added by devel/scanprov
 my_failure_exit                # E
+NBOUNDL                        # Z added by devel/scanprov
 newRV_inc                      # E
 newRV_noinc                    # E
+Nullhek                        # Z added by devel/scanprov
+OP_BINARY                      # Z added by devel/scanprov
+OPf_WANT                       # Z added by devel/scanprov
+OPf_WANT_LIST                  # Z added by devel/scanprov
+OPf_WANT_SCALAR                # Z added by devel/scanprov
+OPf_WANT_VOID                  # Z added by devel/scanprov
+OP_GIMME                       # Z added by devel/scanprov
+OPpDEREF                       # Z added by devel/scanprov
+OPpDEREF_SV                    # Z added by devel/scanprov
+OPpLVAL_DEFER                  # Z added by devel/scanprov
+OPpSLICE                       # Z added by devel/scanprov
+PMf_CONTINUE                   # Z added by devel/scanprov
 POPu                           # E
 PUSHu                          # E
 rsignal                        # E
+rsignal_restore                # F added by devel/scanprov
+rsignal_save                   # F added by devel/scanprov
 rsignal_state                  # E
+rxres_free                     # F added by devel/scanprov
+rxres_restore                  # F added by devel/scanprov
+rxres_save                     # F added by devel/scanprov
 save_gp                        # E
-save_I16                       # E
+save_I16                       # F added by devel/scanprov
+SAVEI16                        # E
+save_iv                        # F added by devel/scanprov
+SAVESTACK_POS                  # E
+SAVEt_I16                      # Z added by devel/scanprov
+SAVEt_STACK_POS                # Z added by devel/scanprov
+sb_rxres                       # Z added by devel/scanprov
+sb_rxtainted                   # Z added by devel/scanprov
+SET_NUMERIC_STANDARD           # Z added by devel/scanprov
+SETu                           # Z added by devel/scanprov
 share_hek                      # E
-SHORTSIZE                      # E
+SHORTSIZE                      # K added by devel/scanprov
 start_subparse                 # E (Perl_start_subparse)
-sv_2uv                         # U
+STATUS_ALL_FAILURE             # Z added by devel/scanprov
+STATUS_ALL_SUCCESS             # Z added by devel/scanprov
+STATUS_CURRENT                 # Z added by devel/scanprov
+STATUS_NATIVE                  # Z added by devel/scanprov
+STRUCT_OFFSET                  # Z added by devel/scanprov
+sub_crush_depth                # F added by devel/scanprov
 sv_cmp_locale                  # U
 sv_derived_from                # E
+SvIMMORTAL                     # Z added by devel/scanprov
+sv_pvn                         # F added by devel/scanprov
 SvSetMagicSV                   # E
 SvSetMagicSV_nosteal           # E
 SvSetSV_nosteal                # E
 sv_setuv                       # E
-sv_taint                       # U
-sv_tainted                     # E
+sv_tainted                     # F added by devel/scanprov
 SvTAINTED                      # E
 SvTAINTED_off                  # E
 SvTAINTED_on                   # E
-sv_untaint                     # E
+sv_untaint                     # F added by devel/scanprov
 SvUV                           # E
 SvUVX                          # E
 SvUVx                          # E
 SvUVXx                         # E
 sv_vcatpvfn                    # E
 sv_vsetpvfn                    # E
+TAINT                          # Z added by devel/scanprov
+Timeval                        # K added by devel/scanprov
+toCTRL                         # Z added by devel/scanprov
 toLOWER_LC                     # E
-XPUSHu                         # E
-do_sysseek                     # F added by devel/scanprov
-magic_getdefelem               # F added by devel/scanprov
-magic_setcollxfrm              # F added by devel/scanprov
-magic_setdefelem               # F added by devel/scanprov
-rsignal_restore                # F added by devel/scanprov
-rsignal_save                   # F added by devel/scanprov
-rxres_free                     # F added by devel/scanprov
-rxres_restore                  # F added by devel/scanprov
-rxres_save                     # F added by devel/scanprov
-sub_crush_depth                # F added by devel/scanprov
+TOPu                           # Z added by devel/scanprov
+toUPPER_LC                     # Z added by devel/scanprov
+TYPE_CHARS                     # Z added by devel/scanprov
+TYPE_DIGITS                    # Z added by devel/scanprov
 unshare_hek                    # F added by devel/scanprov
+USE_LEFT                       # Z added by devel/scanprov
+USE_LOCALE                     # Z added by devel/scanprov
+USE_LOCALE_COLLATE             # Z added by devel/scanprov
+USE_LOCALE_CTYPE               # Z added by devel/scanprov
+USE_LOCALE_NUMERIC             # Z added by devel/scanprov
 vivify_defelem                 # F added by devel/scanprov
 vivify_ref                     # F added by devel/scanprov
+XPUSHu                         # E
index 1a7f0b7..bcbea89 100644 (file)
@@ -1,2 +1,4 @@
 5.004001
 magic_clear_all_env            # F added by devel/scanprov
+REFF                           # Z added by devel/scanprov
+REFFL                          # Z added by devel/scanprov
index 88ea401..53e055a 100644 (file)
@@ -1 +1,14 @@
 5.004002
+PERLDB_ALL                     # Z added by devel/scanprov
+PERLDBf_INTER                  # Z added by devel/scanprov
+PERLDBf_LINE                   # Z added by devel/scanprov
+PERLDBf_NOOPT                  # Z added by devel/scanprov
+PERLDBf_SINGLE                 # Z added by devel/scanprov
+PERLDBf_SUB                    # Z added by devel/scanprov
+PERLDBf_SUBLINE                # Z added by devel/scanprov
+PERLDB_INTER                   # Z added by devel/scanprov
+PERLDB_LINE                    # Z added by devel/scanprov
+PERLDB_NOOPT                   # Z added by devel/scanprov
+PERLDB_SINGLE                  # Z added by devel/scanprov
+PERLDB_SUB                     # Z added by devel/scanprov
+PERLDB_SUBLINE                 # Z added by devel/scanprov
index 6437c3e..bb93a90 100644 (file)
@@ -1,3 +1,4 @@
 5.004004
 av_reify                       # F added by devel/scanprov
+LEX_NOTPARSING                 # Z added by devel/scanprov
 magic_set_all_env              # F added by devel/scanprov
index 5abbf16..bfb9643 100644 (file)
@@ -1,10 +1,36 @@
 5.004005
+ANYOF_BIT                      # Z added by devel/scanprov
+AvFILLp                        # M added by devel/scanprov
+cBINOPo                        # Z added by devel/scanprov
+cCOPo                          # Z added by devel/scanprov
+cLISTOPo                       # Z added by devel/scanprov
+cLOGOPo                        # Z added by devel/scanprov
+cLOOPo                         # Z added by devel/scanprov
+cPMOPo                         # Z added by devel/scanprov
+cPVOPo                         # Z added by devel/scanprov
+cSVOPo                         # Z added by devel/scanprov
+cUNOPo                         # Z added by devel/scanprov
+DEFSV                          # E
+djSP                           # Z added by devel/scanprov
 do_binmode                     # E
 dTHR                           # E
 ERRSV                          # E
+find_script                    # F added by devel/scanprov
+G_NODEBUG                      # Z added by devel/scanprov
 GV_NOINIT                      # E
+HAS_CHSIZE                     # K added by devel/scanprov
+HAS_GNULIBC                    # K added by devel/scanprov
+HINT_RE_TAINT                  # Z added by devel/scanprov
+magic_getnkeys                 # F added by devel/scanprov
+magic_getsubstr                # F added by devel/scanprov
+magic_getvec                   # F added by devel/scanprov
 newCONSTSUB                    # E
 newSVpvn                       # E
+PERLDBf_GOTO                   # Z added by devel/scanprov
+PERLDBf_NONAME                 # Z added by devel/scanprov
+PERLDB_GOTO                    # Z added by devel/scanprov
+PERLDB_SUB_NN                  # Z added by devel/scanprov
+PERL_SCRIPT_MODE               # Z added by devel/scanprov
 PL_curcop                      # E
 PL_curstash                    # E
 PL_defgv                       # E
@@ -14,8 +40,16 @@ PL_perl_destruct_level         # E
 PL_sv_no                       # E
 PL_sv_undef                    # E
 PL_sv_yes                      # E
+PMf_RETAINT                    # Z added by devel/scanprov
+PWGECOS                        # K added by devel/scanprov
+REG_INFTY                      # Z added by devel/scanprov
 save_aelem                     # E
+SAVE_DEFSV                     # E
 save_helem                     # E
+SAVEt_AELEM                    # Z added by devel/scanprov
+SAVEt_HELEM                    # Z added by devel/scanprov
+Semctl                         # Z added by devel/scanprov
+Stat_t                         # Z added by devel/scanprov
 sv_catpv_mg                    # E
 sv_catpvn_mg                   # U
 sv_catsv_mg                    # U
@@ -26,24 +60,5 @@ sv_setpvn_mg                   # E
 sv_setsv_mg                    # E
 sv_setuv_mg                    # E
 sv_usepvn_mg                   # U
-AvFILLp                        # M added by devel/scanprov
-DEFSV                          # M added by devel/scanprov
-PL_compiling                   # M added by devel/scanprov
-PL_DBsingle                    # M added by devel/scanprov
-PL_DBsub                       # M added by devel/scanprov
-PL_debstash                    # M added by devel/scanprov
-PL_diehook                     # M added by devel/scanprov
-PL_dirty                       # M added by devel/scanprov
-PL_dowarn                      # M added by devel/scanprov
-PL_perldb                      # M added by devel/scanprov
-PL_stack_base                  # M added by devel/scanprov
-PL_stack_sp                    # M added by devel/scanprov
-PL_stdingv                     # M added by devel/scanprov
-PL_sv_arenaroot                # M added by devel/scanprov
-PL_tainted                     # M added by devel/scanprov
-PL_tainting                    # M added by devel/scanprov
-SAVE_DEFSV                     # M added by devel/scanprov
-find_script                    # F added by devel/scanprov
-magic_getnkeys                 # F added by devel/scanprov
-magic_getsubstr                # F added by devel/scanprov
-magic_getvec                   # F added by devel/scanprov
+USE_SEMCTL_SEMID_DS            # K added by devel/scanprov
+USE_SEMCTL_SEMUN               # K added by devel/scanprov
index a9d989f..e51abe6 100644 (file)
@@ -1,49 +1,55 @@
 5.005000
-cx_dump                        # U
-debop                          # U
-debprofdump                    # U
-DOUBLESIZE                     # E
-fbm_compile                    # E (Perl_fbm_compile)
-fbm_instr                      # E (Perl_fbm_instr)
-get_op_descs                   # E
-get_op_names                   # E
-init_stacks                    # E
-mg_length                      # E
-mg_size                        # E
-newHVhv                        # E
-new_stackinfo                  # E
-PL_curpad                      # E
-PL_modglobal                   # E
-PTRSIZE                        # E
-regdump                        # U
-regexec_flags                  # E
-regnext                        # E (Perl_regnext)
-runops_debug                   # E
-runops_standard                # E
-save_iv                        # E (save_iv)
-sv_iv                          # E
-sv_peek                        # U
-sv_pvn                         # E
-sv_true                        # E
-sv_uv                          # E
-CPERLscope                     # M added by devel/scanprov
-END_EXTERN_C                   # M added by devel/scanprov
-EXTERN_C                       # M added by devel/scanprov
-NOOP                           # M added by devel/scanprov
-PL_DBsignal                    # M added by devel/scanprov
-PL_DBtrace                     # M added by devel/scanprov
-PL_hexdigit                    # M added by devel/scanprov
-PL_hints                       # M added by devel/scanprov
-PL_laststatval                 # M added by devel/scanprov
-PL_mess_sv                     # M added by devel/scanprov
-PL_statcache                   # M added by devel/scanprov
-PL_Sv                          # M added by devel/scanprov
-PL_Xpv                         # M added by devel/scanprov
-START_EXTERN_C                 # M added by devel/scanprov
+abort                          # Z added by devel/scanprov
+accept                         # Z added by devel/scanprov
+access                         # Z added by devel/scanprov
 add_data                       # F added by devel/scanprov
+anchored_offset                # Z added by devel/scanprov
+anchored_substr                # Z added by devel/scanprov
 ao                             # F added by devel/scanprov
+ARG                            # Z added by devel/scanprov
+ARG1_LOC                       # Z added by devel/scanprov
+ARG1_SET                       # Z added by devel/scanprov
+ARG2_LOC                       # Z added by devel/scanprov
+ARG2_SET                       # Z added by devel/scanprov
+ARG_LOC                        # Z added by devel/scanprov
+ARG__SET                       # Z added by devel/scanprov
+ARG_SET                        # Z added by devel/scanprov
+ARG_VALUE                      # Z added by devel/scanprov
+bind                           # Z added by devel/scanprov
+BRANCHJ                        # Z added by devel/scanprov
+CALLREGCOMP                    # Z added by devel/scanprov
+CALLREGEXEC                    # Z added by devel/scanprov
+CALLRUNOPS                     # Z added by devel/scanprov
+chdir                          # Z added by devel/scanprov
+check_offset_max               # Z added by devel/scanprov
+check_offset_min               # Z added by devel/scanprov
+check_substr                   # Z added by devel/scanprov
+chmod                          # Z added by devel/scanprov
+chsize                         # Z added by devel/scanprov
+close                          # Z added by devel/scanprov
+closedir                       # Z added by devel/scanprov
+COND_BROADCAST                 # Z added by devel/scanprov
+COND_DESTROY                   # Z added by devel/scanprov
+COND_INIT                      # Z added by devel/scanprov
+COND_SIGNAL                    # Z added by devel/scanprov
+COND_WAIT                      # Z added by devel/scanprov
+connect                        # Z added by devel/scanprov
+CPERLarg                       # Z added by devel/scanprov
+CPERLscope                     # M added by devel/scanprov
+CURLYM                         # Z added by devel/scanprov
+CURLYN                         # Z added by devel/scanprov
+CVf_METHOD                     # Z added by devel/scanprov
+CvMETHOD                       # Z added by devel/scanprov
+CvMETHOD_off                   # Z added by devel/scanprov
+CvMETHOD_on                    # Z added by devel/scanprov
+cxstack                        # Z added by devel/scanprov
+cxstack_ix                     # Z added by devel/scanprov
+cxstack_max                    # Z added by devel/scanprov
+debop                          # U
 debprof                        # F added by devel/scanprov
+debprofdump                    # U
 del_sv                         # F added by devel/scanprov
+DETACH                         # Z added by devel/scanprov
 div128                         # F added by devel/scanprov
 docatch                        # F added by devel/scanprov
 doform                         # F added by devel/scanprov
@@ -51,41 +57,509 @@ doparseform                    # F added by devel/scanprov
 dopoptolabel                   # F added by devel/scanprov
 dopoptoloop                    # F added by devel/scanprov
 dopoptosub_at                  # F added by devel/scanprov
+DOUBLESIZE                     # K added by devel/scanprov
 dumpuntil                      # F added by devel/scanprov
+dup                            # Z added by devel/scanprov
+dup2                           # Z added by devel/scanprov
+dXSFUNCTION                    # Z added by devel/scanprov
+END_EXTERN_C                   # M added by devel/scanprov
+endhostent                     # Z added by devel/scanprov
+endnetent                      # Z added by devel/scanprov
+endprotoent                    # Z added by devel/scanprov
+endservent                     # Z added by devel/scanprov
+EOS                            # Z added by devel/scanprov
+EVAL                           # Z added by devel/scanprov
+execl                          # Z added by devel/scanprov
+execv                          # Z added by devel/scanprov
+execvp                         # Z added by devel/scanprov
+exit                           # Z added by devel/scanprov
+EXTERN_C                       # M added by devel/scanprov
+EXTRA_SIZE                     # Z added by devel/scanprov
+EXTRA_STEP_2ARGS               # Z added by devel/scanprov
+fbm_compile                    # E (Perl_fbm_compile)
+fbm_instr                      # E (Perl_fbm_instr)
+FILL_ADVANCE_NODE              # Z added by devel/scanprov
+FILL_ADVANCE_NODE_ARG          # Z added by devel/scanprov
 filter_gets                    # F added by devel/scanprov
 find_beginning                 # F added by devel/scanprov
+float_max_offset               # Z added by devel/scanprov
+float_min_offset               # Z added by devel/scanprov
+float_substr                   # Z added by devel/scanprov
+flock                          # Z added by devel/scanprov
 forbid_setid                   # F added by devel/scanprov
 force_version                  # F added by devel/scanprov
+frewind                        # Z added by devel/scanprov
+fstat                          # Z added by devel/scanprov
+getegid                        # Z added by devel/scanprov
+getenv                         # Z added by devel/scanprov
+geteuid                        # Z added by devel/scanprov
+getgid                         # Z added by devel/scanprov
+gethostbyaddr                  # Z added by devel/scanprov
+gethostbyname                  # Z added by devel/scanprov
+gethostent                     # Z added by devel/scanprov
+gethostname                    # Z added by devel/scanprov
+getlogin                       # Z added by devel/scanprov
+getnetbyaddr                   # Z added by devel/scanprov
+getnetbyname                   # Z added by devel/scanprov
+getnetent                      # Z added by devel/scanprov
 get_no_modify                  # F added by devel/scanprov
 get_opargs                     # F added by devel/scanprov
+get_op_descs                   # E
+get_op_names                   # E
+getpeername                    # Z added by devel/scanprov
+getprotobyname                 # Z added by devel/scanprov
+getprotobynumber               # Z added by devel/scanprov
+getprotoent                    # Z added by devel/scanprov
+getservbyname                  # Z added by devel/scanprov
+getservbyport                  # Z added by devel/scanprov
+getservent                     # Z added by devel/scanprov
+getsockname                    # Z added by devel/scanprov
+getsockopt                     # Z added by devel/scanprov
+getuid                         # Z added by devel/scanprov
+GROUPP                         # Z added by devel/scanprov
+GRPASSWD                       # K added by devel/scanprov
+HAS_CSH                        # K added by devel/scanprov
+HAS_ENDGRENT                   # K added by devel/scanprov
+HAS_ENDHOSTENT                 # K added by devel/scanprov
+HAS_ENDNETENT                  # K added by devel/scanprov
+HAS_ENDPROTOENT                # K added by devel/scanprov
+HAS_ENDPWENT                   # K added by devel/scanprov
+HAS_ENDSERVENT                 # K added by devel/scanprov
+HAS_GETGRENT                   # K added by devel/scanprov
+HAS_GETHOSTBYADDR              # K added by devel/scanprov
+HAS_GETHOSTBYNAME              # K added by devel/scanprov
+HAS_GETHOST_PROTOS             # K added by devel/scanprov
+HAS_GETNETBYADDR               # K added by devel/scanprov
+HAS_GETNETBYNAME               # K added by devel/scanprov
+HAS_GETNETENT                  # K added by devel/scanprov
+HAS_GETNET_PROTOS              # K added by devel/scanprov
+HAS_GETPROTOBYNAME             # K added by devel/scanprov
+HAS_GETPROTOBYNUMBER           # K added by devel/scanprov
+HAS_GETPROTOENT                # K added by devel/scanprov
+HAS_GETPROTO_PROTOS            # K added by devel/scanprov
+HAS_GETPWENT                   # K added by devel/scanprov
+HAS_GETSERVBYNAME              # K added by devel/scanprov
+HAS_GETSERVBYPORT              # K added by devel/scanprov
+HAS_GETSERVENT                 # K added by devel/scanprov
+HAS_GETSERV_PROTOS             # K added by devel/scanprov
+HAS_LCHOWN                     # K added by devel/scanprov
+HAS_LONG_DOUBLE                # K added by devel/scanprov
+HAS_LONG_LONG                  # K added by devel/scanprov
+HAS_SCHED_YIELD                # K added by devel/scanprov
+HAS_SETGRENT                   # K added by devel/scanprov
+HAS_SETHOSTENT                 # K added by devel/scanprov
+HAS_SETNETENT                  # K added by devel/scanprov
+HAS_SETPROTOENT                # K added by devel/scanprov
+HAS_SETPWENT                   # K added by devel/scanprov
+HAS_SETSERVENT                 # K added by devel/scanprov
+HAS_SETVBUF                    # K added by devel/scanprov
+HINT_LOCALIZE_HH               # Z added by devel/scanprov
+HINT_NEW_BINARY                # Z added by devel/scanprov
+HINT_NEW_FLOAT                 # Z added by devel/scanprov
+HINT_NEW_INTEGER               # Z added by devel/scanprov
+HINT_NEW_RE                    # Z added by devel/scanprov
+HINT_NEW_STRING                # Z added by devel/scanprov
+HINT_RE_EVAL                   # Z added by devel/scanprov
 hsplit                         # F added by devel/scanprov
+I_ARPA_INET                    # K added by devel/scanprov
+IFTHEN                         # Z added by devel/scanprov
 incline                        # F added by devel/scanprov
 incpush                        # F added by devel/scanprov
+inet_addr                      # Z added by devel/scanprov
+I_NETDB                        # K added by devel/scanprov
+inet_ntoa                      # Z added by devel/scanprov
 init_debugger                  # F added by devel/scanprov
 init_ids                       # F added by devel/scanprov
 init_interp                    # F added by devel/scanprov
 init_main_stash                # F added by devel/scanprov
+init_os_extras                 # Z added by devel/scanprov
 init_perllib                   # F added by devel/scanprov
 init_postdump_symbols          # F added by devel/scanprov
 init_predump_symbols           # F added by devel/scanprov
+init_stacks                    # E
+INIT_THREADS                   # Z added by devel/scanprov
 intuit_method                  # F added by devel/scanprov
+ioctl                          # Z added by devel/scanprov
 isa_lookup                     # F added by devel/scanprov
 is_an_int                      # F added by devel/scanprov
+isatty                         # Z added by devel/scanprov
+JOIN                           # Z added by devel/scanprov
+KEY_INIT                       # Z added by devel/scanprov
+KEY_lock                       # Z added by devel/scanprov
+KEY_qr                         # Z added by devel/scanprov
+kill                           # Z added by devel/scanprov
+killpg                         # Z added by devel/scanprov
+listen                         # Z added by devel/scanprov
+LOGICAL                        # Z added by devel/scanprov
+LONG_DOUBLESIZE                # K added by devel/scanprov
+LONGJMP                        # Z added by devel/scanprov
+longjmp                        # Z added by devel/scanprov
+LONGLONGSIZE                   # K added by devel/scanprov
 lop                            # F added by devel/scanprov
+lseek                          # Z added by devel/scanprov
+lstat                          # Z added by devel/scanprov
 magic_methpack                 # F added by devel/scanprov
 magic_sizepack                 # F added by devel/scanprov
 malloced_size                  # F added by devel/scanprov
+MALLOC_INIT                    # Z added by devel/scanprov
+MALLOC_TERM                    # Z added by devel/scanprov
 mess_alloc                     # F added by devel/scanprov
+mg_length                      # E
+mg_size                        # E
 missingterm                    # F added by devel/scanprov
+mkdir                          # Z added by devel/scanprov
+mktemp                         # Z added by devel/scanprov
 mul128                         # F added by devel/scanprov
+MUTEX_DESTROY                  # Z added by devel/scanprov
+MUTEX_INIT                     # Z added by devel/scanprov
+MUTEX_LOCK                     # Z added by devel/scanprov
+MUTEX_UNLOCK                   # Z added by devel/scanprov
 my_exit_jump                   # F added by devel/scanprov
+NEED_PTHREAD_INIT              # Z added by devel/scanprov
+Netdb_hlen_t                   # K added by devel/scanprov
+Netdb_host_t                   # K added by devel/scanprov
+Netdb_name_t                   # K added by devel/scanprov
+Netdb_net_t                    # K added by devel/scanprov
 new_he                         # F added by devel/scanprov
+newHVhv                        # E
 new_logop                      # F added by devel/scanprov
+new_stackinfo                  # E
 nextchar                       # F added by devel/scanprov
+NEXT_OFF                       # Z added by devel/scanprov
+NODE_ALIGN                     # Z added by devel/scanprov
+NODE_ALIGN_FILL                # Z added by devel/scanprov
+NODE_STEP_REGNODE              # Z added by devel/scanprov
+NO_LOCALECONV_MON_THOUSANDS_SEP # Z added by devel/scanprov
+NOOP                           # E
 not_a_number                   # F added by devel/scanprov
+NOT_IN_PAD                     # Z added by devel/scanprov
 nuke_stacks                    # F added by devel/scanprov
+OA_BASEOP                      # Z added by devel/scanprov
+OA_BASEOP_OR_UNOP              # Z added by devel/scanprov
+OA_BINOP                       # Z added by devel/scanprov
+OA_CLASS_MASK                  # Z added by devel/scanprov
+OA_COP                         # Z added by devel/scanprov
+OA_FILESTATOP                  # Z added by devel/scanprov
+OA_LISTOP                      # Z added by devel/scanprov
+OA_LOGOP                       # Z added by devel/scanprov
+OA_LOOP                        # Z added by devel/scanprov
+OA_LOOPEXOP                    # Z added by devel/scanprov
+OA_PMOP                        # Z added by devel/scanprov
+OA_SVOP                        # Z added by devel/scanprov
+OA_UNOP                        # Z added by devel/scanprov
+open                           # Z added by devel/scanprov
+opendir                        # Z added by devel/scanprov
 open_script                    # F added by devel/scanprov
+OPTIMIZED                      # Z added by devel/scanprov
 pad_findlex                    # F added by devel/scanprov
+pause                          # Z added by devel/scanprov
+PerlDir_chdir                  # Z added by devel/scanprov
+PerlDir_close                  # Z added by devel/scanprov
+PerlDir_mkdir                  # Z added by devel/scanprov
+PerlDir_open                   # Z added by devel/scanprov
+PerlDir_read                   # Z added by devel/scanprov
+PerlDir_rewind                 # Z added by devel/scanprov
+PerlDir_rmdir                  # Z added by devel/scanprov
+PerlDir_seek                   # Z added by devel/scanprov
+PerlDir_tell                   # Z added by devel/scanprov
+PerlEnv_getenv                 # Z added by devel/scanprov
+PerlEnv_lib_path               # Z added by devel/scanprov
+PerlEnv_putenv                 # Z added by devel/scanprov
+PerlEnv_sitelib_path           # Z added by devel/scanprov
+PerlLIO_access                 # Z added by devel/scanprov
+PerlLIO_chmod                  # Z added by devel/scanprov
+PerlLIO_chown                  # Z added by devel/scanprov
+PerlLIO_chsize                 # Z added by devel/scanprov
+PerlLIO_close                  # Z added by devel/scanprov
+PerlLIO_dup                    # Z added by devel/scanprov
+PerlLIO_dup2                   # Z added by devel/scanprov
+PerlLIO_flock                  # Z added by devel/scanprov
+PerlLIO_fstat                  # Z added by devel/scanprov
+PerlLIO_ioctl                  # Z added by devel/scanprov
+PerlLIO_isatty                 # Z added by devel/scanprov
+PerlLIO_lseek                  # Z added by devel/scanprov
+PerlLIO_lstat                  # Z added by devel/scanprov
+PerlLIO_mktemp                 # Z added by devel/scanprov
+PerlLIO_open                   # Z added by devel/scanprov
+PerlLIO_open3                  # Z added by devel/scanprov
+PerlLIO_read                   # Z added by devel/scanprov
+PerlLIO_rename                 # Z added by devel/scanprov
+PerlLIO_setmode                # Z added by devel/scanprov
+PerlLIO_stat                   # Z added by devel/scanprov
+PerlLIO_tmpnam                 # Z added by devel/scanprov
+PerlLIO_umask                  # Z added by devel/scanprov
+PerlLIO_unlink                 # Z added by devel/scanprov
+PerlLIO_utime                  # Z added by devel/scanprov
+PerlLIO_write                  # Z added by devel/scanprov
+PerlMem_free                   # Z added by devel/scanprov
+PerlMem_malloc                 # Z added by devel/scanprov
+PerlMem_realloc                # Z added by devel/scanprov
+PERL_OBJECT_THIS               # Z added by devel/scanprov
+PerlProc_abort                 # Z added by devel/scanprov
+PerlProc_crypt                 # Z added by devel/scanprov
+PerlProc_execl                 # Z added by devel/scanprov
+PerlProc_execv                 # Z added by devel/scanprov
+PerlProc_execvp                # Z added by devel/scanprov
+PerlProc__exit                 # Z added by devel/scanprov
+PerlProc_exit                  # Z added by devel/scanprov
+PerlProc_getegid               # Z added by devel/scanprov
+PerlProc_geteuid               # Z added by devel/scanprov
+PerlProc_getgid                # Z added by devel/scanprov
+PerlProc_getlogin              # Z added by devel/scanprov
+PerlProc_getuid                # Z added by devel/scanprov
+PerlProc_kill                  # Z added by devel/scanprov
+PerlProc_killpg                # Z added by devel/scanprov
+PerlProc_longjmp               # Z added by devel/scanprov
+PerlProc_pause                 # Z added by devel/scanprov
+PerlProc_pclose                # Z added by devel/scanprov
+PerlProc_pipe                  # Z added by devel/scanprov
+PerlProc_popen                 # Z added by devel/scanprov
+PerlProc_setgid                # Z added by devel/scanprov
+PerlProc_setjmp                # Z added by devel/scanprov
+PerlProc_setuid                # Z added by devel/scanprov
+PerlProc_signal                # Z added by devel/scanprov
+PerlProc_sleep                 # Z added by devel/scanprov
+PerlProc_times                 # Z added by devel/scanprov
+PerlProc_wait                  # Z added by devel/scanprov
+PerlProc_waitpid               # Z added by devel/scanprov
+PERLSI_DESTROY                 # Z added by devel/scanprov
+PERLSI_DIEHOOK                 # Z added by devel/scanprov
+PERLSI_MAGIC                   # Z added by devel/scanprov
+PERLSI_MAIN                    # Z added by devel/scanprov
+PERLSI_OVERLOAD                # Z added by devel/scanprov
+PERLSI_REQUIRE                 # Z added by devel/scanprov
+PERLSI_SIGNAL                  # Z added by devel/scanprov
+PERLSI_SORT                    # Z added by devel/scanprov
+PERLSI_UNDEF                   # Z added by devel/scanprov
+PERLSI_UNKNOWN                 # Z added by devel/scanprov
+PERLSI_WARNHOOK                # Z added by devel/scanprov
+PerlSock_accept                # Z added by devel/scanprov
+PerlSock_bind                  # Z added by devel/scanprov
+PerlSock_connect               # Z added by devel/scanprov
+PerlSock_endhostent            # Z added by devel/scanprov
+PerlSock_endnetent             # Z added by devel/scanprov
+PerlSock_endprotoent           # Z added by devel/scanprov
+PerlSock_endservent            # Z added by devel/scanprov
+PerlSock_gethostbyaddr         # Z added by devel/scanprov
+PerlSock_gethostbyname         # Z added by devel/scanprov
+PerlSock_gethostent            # Z added by devel/scanprov
+PerlSock_gethostname           # Z added by devel/scanprov
+PerlSock_getnetbyaddr          # Z added by devel/scanprov
+PerlSock_getnetbyname          # Z added by devel/scanprov
+PerlSock_getnetent             # Z added by devel/scanprov
+PerlSock_getpeername           # Z added by devel/scanprov
+PerlSock_getprotobyname        # Z added by devel/scanprov
+PerlSock_getprotobynumber      # Z added by devel/scanprov
+PerlSock_getprotoent           # Z added by devel/scanprov
+PerlSock_getservbyname         # Z added by devel/scanprov
+PerlSock_getservbyport         # Z added by devel/scanprov
+PerlSock_getservent            # Z added by devel/scanprov
+PerlSock_getsockname           # Z added by devel/scanprov
+PerlSock_getsockopt            # Z added by devel/scanprov
+PerlSock_htonl                 # Z added by devel/scanprov
+PerlSock_htons                 # Z added by devel/scanprov
+PerlSock_inet_addr             # Z added by devel/scanprov
+PerlSock_inet_ntoa             # Z added by devel/scanprov
+PerlSock_listen                # Z added by devel/scanprov
+PerlSock_ntohl                 # Z added by devel/scanprov
+PerlSock_ntohs                 # Z added by devel/scanprov
+PerlSock_recv                  # Z added by devel/scanprov
+PerlSock_recvfrom              # Z added by devel/scanprov
+PerlSock_select                # Z added by devel/scanprov
+PerlSock_send                  # Z added by devel/scanprov
+PerlSock_sendto                # Z added by devel/scanprov
+PerlSock_sethostent            # Z added by devel/scanprov
+PerlSock_setnetent             # Z added by devel/scanprov
+PerlSock_setprotoent           # Z added by devel/scanprov
+PerlSock_setservent            # Z added by devel/scanprov
+PerlSock_setsockopt            # Z added by devel/scanprov
+PerlSock_shutdown              # Z added by devel/scanprov
+PerlSock_socket                # Z added by devel/scanprov
+PerlSock_socketpair            # Z added by devel/scanprov
+PERLVAR                        # Z added by devel/scanprov
+PERLVARI                       # Z added by devel/scanprov
+PERLVARIC                      # Z added by devel/scanprov
+Pid_t                          # K added by devel/scanprov
+pipe                           # Z added by devel/scanprov
+PL_amagic_generation           # Z added by devel/scanprov
+PL_an                          # Z added by devel/scanprov
+PL_argvgv                      # Z added by devel/scanprov
+PL_argvoutgv                   # Z added by devel/scanprov
+PL_basetime                    # Z added by devel/scanprov
+PL_beginav                     # Z added by devel/scanprov
+PL_bodytarget                  # Z added by devel/scanprov
+PL_chopset                     # Z added by devel/scanprov
+PL_collation_ix                # Z added by devel/scanprov
+PL_collation_name              # Z added by devel/scanprov
+PL_collation_standard          # Z added by devel/scanprov
+PL_collxfrm_base               # Z added by devel/scanprov
+PL_collxfrm_mult               # Z added by devel/scanprov
+PL_colors                      # Z added by devel/scanprov
+PL_colorset                    # Z added by devel/scanprov
+PL_compcv                      # Z added by devel/scanprov
+PL_compiling                   # M added by devel/scanprov
+PL_comppad_name_fill           # Z added by devel/scanprov
+PL_comppad_name_floor          # Z added by devel/scanprov
+PL_cop_seqmax                  # Z added by devel/scanprov
+PL_cryptseen                   # Z added by devel/scanprov
+PL_cshlen                      # Z added by devel/scanprov
+PL_curcopdb                    # Z added by devel/scanprov
+PL_curpad                      # E
+PL_curpm                       # Z added by devel/scanprov
+PL_curstack                    # Z added by devel/scanprov
+PL_curstackinfo                # Z added by devel/scanprov
+PL_curstname                   # Z added by devel/scanprov
+PL_dbargs                      # Z added by devel/scanprov
+PL_DBcv                        # Z added by devel/scanprov
+PL_DBgv                        # Z added by devel/scanprov
+PL_DBline                      # Z added by devel/scanprov
+PL_DBsignal                    # M added by devel/scanprov
+PL_DBsingle                    # M added by devel/scanprov
+PL_DBsub                       # M added by devel/scanprov
+PL_DBtrace                     # M added by devel/scanprov
+PL_debstash                    # M added by devel/scanprov
+PL_debug                       # Z added by devel/scanprov
+PL_defoutgv                    # Z added by devel/scanprov
+PL_defstash                    # Z added by devel/scanprov
+PL_delaymagic                  # Z added by devel/scanprov
+PL_diehook                     # M added by devel/scanprov
+PL_dirty                       # M added by devel/scanprov
+PL_doswitches                  # Z added by devel/scanprov
+PL_dowarn                      # M added by devel/scanprov
+PL_endav                       # Z added by devel/scanprov
+PL_envgv                       # Z added by devel/scanprov
+PL_e_script                    # Z added by devel/scanprov
+PL_eval_root                   # Z added by devel/scanprov
+PL_evalseq                     # Z added by devel/scanprov
+PL_eval_start                  # Z added by devel/scanprov
+PL_exitlist                    # Z added by devel/scanprov
+PL_exitlistlen                 # Z added by devel/scanprov
+PL_fdpid                       # Z added by devel/scanprov
+PL_filemode                    # Z added by devel/scanprov
+PL_firstgv                     # Z added by devel/scanprov
+PL_forkprocess                 # Z added by devel/scanprov
+PL_formtarget                  # Z added by devel/scanprov
+PL_generation                  # Z added by devel/scanprov
+PL_gensym                      # Z added by devel/scanprov
+PL_globalstash                 # Z added by devel/scanprov
+PL_hintgv                      # Z added by devel/scanprov
+PL_hints                       # M added by devel/scanprov
+PL_hv_fetch_ent_mh             # Z added by devel/scanprov
+PL_incgv                       # Z added by devel/scanprov
+PL_in_clean_all                # Z added by devel/scanprov
+PL_in_clean_objs               # Z added by devel/scanprov
+PL_in_eval                     # Z added by devel/scanprov
+PL_initav                      # Z added by devel/scanprov
+PL_inplace                     # Z added by devel/scanprov
+PL_lastfd                      # Z added by devel/scanprov
+PL_lastgotoprobe               # Z added by devel/scanprov
+PL_last_in_gv                  # Z added by devel/scanprov
+PL_laststatval                 # M added by devel/scanprov
+PL_laststype                   # Z added by devel/scanprov
+PL_localizing                  # Z added by devel/scanprov
+PL_localpatches                # Z added by devel/scanprov
+PL_main_cv                     # Z added by devel/scanprov
+PL_main_root                   # Z added by devel/scanprov
+PL_mainstack                   # Z added by devel/scanprov
+PL_main_start                  # Z added by devel/scanprov
+PL_markstack                   # Z added by devel/scanprov
+PL_markstack_max               # Z added by devel/scanprov
+PL_markstack_ptr               # Z added by devel/scanprov
+PL_max_intro_pending           # Z added by devel/scanprov
+PL_maxo                        # Z added by devel/scanprov
+PL_maxsysfd                    # Z added by devel/scanprov
+PL_mess_sv                     # M added by devel/scanprov
+PL_min_intro_pending           # Z added by devel/scanprov
+PL_minus_a                     # Z added by devel/scanprov
+PL_minus_c                     # Z added by devel/scanprov
+PL_minus_F                     # Z added by devel/scanprov
+PL_minus_l                     # Z added by devel/scanprov
+PL_minus_n                     # Z added by devel/scanprov
+PL_minus_p                     # Z added by devel/scanprov
+PL_modcount                    # Z added by devel/scanprov
+PL_modglobal                   # E
+PL_nomemok                     # Z added by devel/scanprov
+PL_numeric_name                # Z added by devel/scanprov
+PL_numeric_standard            # Z added by devel/scanprov
+PL_oldname                     # Z added by devel/scanprov
+PL_op                          # Z added by devel/scanprov
+PL_op_mask                     # Z added by devel/scanprov
+PL_origalen                    # Z added by devel/scanprov
+PL_origargc                    # Z added by devel/scanprov
+PL_origargv                    # Z added by devel/scanprov
+PL_origenviron                 # Z added by devel/scanprov
+PL_origfilename                # Z added by devel/scanprov
+PL_osname                      # Z added by devel/scanprov
+PL_padix                       # Z added by devel/scanprov
+PL_padix_floor                 # Z added by devel/scanprov
+PL_pad_reset_pending           # Z added by devel/scanprov
+PL_patchlevel                  # Z added by devel/scanprov
+PL_perldb                      # M added by devel/scanprov
+PL_pidstatus                   # Z added by devel/scanprov
+PL_preambleav                  # Z added by devel/scanprov
+PL_profiledata                 # Z added by devel/scanprov
+PL_replgv                      # Z added by devel/scanprov
+PL_restartop                   # Z added by devel/scanprov
+PL_rs                          # Z added by devel/scanprov
+PL_savestack                   # Z added by devel/scanprov
+PL_savestack_ix                # Z added by devel/scanprov
+PL_savestack_max               # Z added by devel/scanprov
+PL_sawampersand                # Z added by devel/scanprov
+PL_scopestack                  # Z added by devel/scanprov
+PL_scopestack_ix               # Z added by devel/scanprov
+PL_scopestack_max              # Z added by devel/scanprov
+PL_secondgv                    # Z added by devel/scanprov
+PL_sighandlerp                 # Z added by devel/scanprov
+PL_sortcop                     # Z added by devel/scanprov
+PL_sortstash                   # Z added by devel/scanprov
+PL_splitstr                    # Z added by devel/scanprov
+PL_stack_base                  # M added by devel/scanprov
+PL_stack_max                   # Z added by devel/scanprov
+PL_stack_sp                    # M added by devel/scanprov
+PL_start_env                   # Z added by devel/scanprov
+PL_statcache                   # M added by devel/scanprov
+PL_statgv                      # Z added by devel/scanprov
+PL_statname                    # Z added by devel/scanprov
+PL_statusvalue                 # Z added by devel/scanprov
+PL_statusvalue_vms             # Z added by devel/scanprov
+PL_stdingv                     # M added by devel/scanprov
+PL_strtab                      # Z added by devel/scanprov
+PL_sub_generation              # Z added by devel/scanprov
+PL_subline                     # Z added by devel/scanprov
+PL_subname                     # Z added by devel/scanprov
+PL_Sv                          # E
+PL_sv_arenaroot                # M added by devel/scanprov
+PL_sv_count                    # Z added by devel/scanprov
+PL_sv_root                     # Z added by devel/scanprov
+PL_sys_intern                  # Z added by devel/scanprov
+PL_tainted                     # M added by devel/scanprov
+PL_tainting                    # M added by devel/scanprov
+PL_tmps_floor                  # Z added by devel/scanprov
+PL_tmps_ix                     # Z added by devel/scanprov
+PL_tmps_max                    # Z added by devel/scanprov
+PL_tmps_stack                  # Z added by devel/scanprov
+PL_top_env                     # Z added by devel/scanprov
+PL_toptarget                   # Z added by devel/scanprov
+PL_unsafe                      # Z added by devel/scanprov
+PL_warnhook                    # Z added by devel/scanprov
+PL_Xpv                         # M added by devel/scanprov
+POPSTACK                       # Z added by devel/scanprov
+POPSTACK_TO                    # Z added by devel/scanprov
+pthread_addr_t                 # Z added by devel/scanprov
+pthread_condattr_default       # Z added by devel/scanprov
+PTHREAD_CREATE_JOINABLE        # Z added by devel/scanprov
+pthread_key_create             # Z added by devel/scanprov
+pthread_mutexattr_default      # Z added by devel/scanprov
+pthread_mutexattr_init         # Z added by devel/scanprov
+pthread_mutexattr_settype      # Z added by devel/scanprov
+PTRSIZE                        # K added by devel/scanprov
+PUSHSTACK                      # Z added by devel/scanprov
+PUSHSTACKi                     # Z added by devel/scanprov
+putenv                         # Z added by devel/scanprov
+PWPASSWD                       # K added by devel/scanprov
+read                           # Z added by devel/scanprov
+readdir                        # Z added by devel/scanprov
+recvfrom                       # Z added by devel/scanprov
 refto                          # F added by devel/scanprov
 reg                            # F added by devel/scanprov
 reganode                       # F added by devel/scanprov
@@ -94,6 +568,7 @@ regbranch                      # F added by devel/scanprov
 regclass                       # F added by devel/scanprov
 regcppop                       # F added by devel/scanprov
 regcppush                      # F added by devel/scanprov
+regexec_flags                  # F added by devel/scanprov
 reginclass                     # F added by devel/scanprov
 reginsert                      # F added by devel/scanprov
 regmatch                       # F added by devel/scanprov
@@ -102,15 +577,84 @@ regpiece                       # F added by devel/scanprov
 regrepeat                      # F added by devel/scanprov
 regtail                        # F added by devel/scanprov
 regtry                         # F added by devel/scanprov
+rename                         # Z added by devel/scanprov
+RENUM                          # Z added by devel/scanprov
+ReREFCNT_dec                   # Z added by devel/scanprov
+ReREFCNT_inc                   # Z added by devel/scanprov
+rewinddir                      # Z added by devel/scanprov
+REXEC_CHECKED                  # Z added by devel/scanprov
+REXEC_COPY_STR                 # Z added by devel/scanprov
+rmdir                          # Z added by devel/scanprov
+RsRECORD                       # Z added by devel/scanprov
+runops_debug                   # F added by devel/scanprov
+RUNOPS_DEFAULT                 # Z added by devel/scanprov
+runops_standard                # F added by devel/scanprov
+RX_MATCH_TAINTED               # Z added by devel/scanprov
+RX_MATCH_TAINTED_off           # Z added by devel/scanprov
+RX_MATCH_TAINTED_on            # Z added by devel/scanprov
+RX_MATCH_TAINTED_set           # Z added by devel/scanprov
+SAVEHINTS                      # Z added by devel/scanprov
 save_lines                     # F added by devel/scanprov
+SAVEOP                         # Z added by devel/scanprov
 save_scalar_at                 # F added by devel/scanprov
+SAVEt_HINTS                    # Z added by devel/scanprov
+SAVEt_OP                       # Z added by devel/scanprov
 scalarboolean                  # F added by devel/scanprov
 scan_commit                    # F added by devel/scanprov
+seekdir                        # Z added by devel/scanprov
+select                         # Z added by devel/scanprov
+send                           # Z added by devel/scanprov
+sendto                         # Z added by devel/scanprov
+setgid                         # Z added by devel/scanprov
+sethostent                     # Z added by devel/scanprov
+setjmp                         # Z added by devel/scanprov
+setlinebuf                     # Z added by devel/scanprov
+setmode                        # Z added by devel/scanprov
+setnetent                      # Z added by devel/scanprov
+setprotoent                    # Z added by devel/scanprov
+setservent                     # Z added by devel/scanprov
+setsockopt                     # Z added by devel/scanprov
+SET_THR                        # Z added by devel/scanprov
+setuid                         # Z added by devel/scanprov
+sharepvn                       # Z added by devel/scanprov
+shutdown                       # Z added by devel/scanprov
+signal                         # Z added by devel/scanprov
+SIZE_ALIGN                     # Z added by devel/scanprov
+sleep                          # Z added by devel/scanprov
+socket                         # Z added by devel/scanprov
+socketpair                     # Z added by devel/scanprov
+START_EXTERN_C                 # M added by devel/scanprov
+stat                           # Z added by devel/scanprov
+STATIC                         # Z added by devel/scanprov
+stdoutf                        # Z added by devel/scanprov
 study_chunk                    # F added by devel/scanprov
 sublex_done                    # F added by devel/scanprov
 sublex_push                    # F added by devel/scanprov
 sublex_start                   # F added by devel/scanprov
+SUSPEND                        # Z added by devel/scanprov
+sv_2pv                         # Z added by devel/scanprov
+sv_iv                          # F added by devel/scanprov
+sv_nv                          # F added by devel/scanprov
+sv_peek                        # U
+sv_pvn_force                   # Z added by devel/scanprov
+sv_true                        # F added by devel/scanprov
 sv_unglob                      # F added by devel/scanprov
+sv_uv                          # F added by devel/scanprov
+TAIL                           # Z added by devel/scanprov
+telldir                        # Z added by devel/scanprov
+THR                            # Z added by devel/scanprov
+THREAD_RET_TYPE                # Z added by devel/scanprov
+times                          # Z added by devel/scanprov
+tmpnam                         # Z added by devel/scanprov
 tokeq                          # F added by devel/scanprov
+umask                          # Z added by devel/scanprov
+unlink                         # Z added by devel/scanprov
 usage                          # F added by devel/scanprov
+utime                          # Z added by devel/scanprov
 visit                          # F added by devel/scanprov
+wait                           # Z added by devel/scanprov
+write                          # Z added by devel/scanprov
+XSINTERFACE_CVT                # Z added by devel/scanprov
+XSINTERFACE_FUNC               # Z added by devel/scanprov
+XSINTERFACE_FUNC_SET           # Z added by devel/scanprov
+YIELD                          # Z added by devel/scanprov
index 35d08b2..a15a670 100644 (file)
@@ -1 +1,2 @@
 5.005002
+PERL_CALLCONV                  # Z added by devel/scanprov
index 354427d..740c4f6 100644 (file)
@@ -1,5 +1,53 @@
 5.005003
+ALLOC_THREAD_KEY               # Z added by devel/scanprov
+ASCIIish                       # Z added by devel/scanprov
+CvEVAL                         # Z added by devel/scanprov
+CvEVAL_off                     # Z added by devel/scanprov
+CvEVAL_on                      # Z added by devel/scanprov
+CvSPECIAL                      # Z added by devel/scanprov
+CvSPECIAL_off                  # Z added by devel/scanprov
+CvSPECIAL_on                   # Z added by devel/scanprov
+CXp_REAL                       # Z added by devel/scanprov
+CxREALEVAL                     # Z added by devel/scanprov
+CxTYPE                         # Z added by devel/scanprov
+CXTYPEMASK                     # Z added by devel/scanprov
+dofile                         # F added by devel/scanprov
 get_vtbl                       # E
+IOf_NOLINE                     # Z added by devel/scanprov
+I_PTHREAD                      # K added by devel/scanprov
+MUTEX_INIT_NEEDS_MUTEX_ZEROED  # Z added by devel/scanprov
 POPpx                          # E
+SAVEGENERICSV                  # Z added by devel/scanprov
 save_generic_svref             # E
-dofile                         # F added by devel/scanprov
+SAVEt_GENERIC_SVREF            # Z added by devel/scanprov
+SELECT_MIN_BITS                # K added by devel/scanprov
+SET_THREAD_SELF                # Z added by devel/scanprov
+SvTIED_mg                      # Z added by devel/scanprov
+SvTIED_obj                     # Z added by devel/scanprov
+TOPpx                          # Z added by devel/scanprov
+USE_STAT_BLOCKS                # K added by devel/scanprov
+VTBL_amagic                    # Z added by devel/scanprov
+VTBL_amagicelem                # Z added by devel/scanprov
+VTBL_arylen                    # Z added by devel/scanprov
+VTBL_bm                        # Z added by devel/scanprov
+VTBL_collxfrm                  # Z added by devel/scanprov
+VTBL_dbline                    # Z added by devel/scanprov
+VTBL_defelem                   # Z added by devel/scanprov
+VTBL_env                       # Z added by devel/scanprov
+VTBL_envelem                   # Z added by devel/scanprov
+VTBL_fm                        # Z added by devel/scanprov
+VTBL_glob                      # Z added by devel/scanprov
+VTBL_isa                       # Z added by devel/scanprov
+VTBL_isaelem                   # Z added by devel/scanprov
+VTBL_mglob                     # Z added by devel/scanprov
+VTBL_nkeys                     # Z added by devel/scanprov
+VTBL_pack                      # Z added by devel/scanprov
+VTBL_packelem                  # Z added by devel/scanprov
+VTBL_pos                       # Z added by devel/scanprov
+VTBL_regexp                    # Z added by devel/scanprov
+VTBL_sigelem                   # Z added by devel/scanprov
+VTBL_substr                    # Z added by devel/scanprov
+VTBL_sv                        # Z added by devel/scanprov
+VTBL_taint                     # Z added by devel/scanprov
+VTBL_uvar                      # Z added by devel/scanprov
+VTBL_vec                       # Z added by devel/scanprov
index a63720a..4b2da7f 100644 (file)
@@ -1,2 +1,6 @@
 5.005004
 no_bareword_allowed            # F added by devel/scanprov
+OPpCONST_STRICT                # Z added by devel/scanprov
+OPpENTERSUB_NOPAREN            # Z added by devel/scanprov
+PerlEnv_uname                  # Z added by devel/scanprov
+uname                          # Z added by devel/scanprov
index 268579a..54eb040 100644 (file)
 5.006000
+any_dup                        # F added by devel/scanprov
+ANYOF_ALNUM                    # Z added by devel/scanprov
+ANYOF_ALPHA                    # Z added by devel/scanprov
+ANYOF_ASCII                    # Z added by devel/scanprov
+ANYOF_BITMAP                   # Z added by devel/scanprov
+ANYOF_BITMAP_BYTE              # Z added by devel/scanprov
+ANYOF_BITMAP_CLEAR             # Z added by devel/scanprov
+ANYOF_BITMAP_SET               # Z added by devel/scanprov
+ANYOF_BITMAP_SIZE              # Z added by devel/scanprov
+ANYOF_BITMAP_TEST              # Z added by devel/scanprov
+ANYOF_BITMAP_ZERO              # Z added by devel/scanprov
+ANYOF_CNTRL                    # Z added by devel/scanprov
+ANYOF_DIGIT                    # Z added by devel/scanprov
+ANYOF_FLAGS                    # Z added by devel/scanprov
+ANYOF_FLAGS_ALL                # Z added by devel/scanprov
+ANYOF_GRAPH                    # Z added by devel/scanprov
+ANYOF_LOWER                    # Z added by devel/scanprov
+ANYOF_MAX                      # Z added by devel/scanprov
+ANYOF_NALNUM                   # Z added by devel/scanprov
+ANYOF_NALPHA                   # Z added by devel/scanprov
+ANYOF_NASCII                   # Z added by devel/scanprov
+ANYOF_NCNTRL                   # Z added by devel/scanprov
+ANYOF_NDIGIT                   # Z added by devel/scanprov
+ANYOF_NGRAPH                   # Z added by devel/scanprov
+ANYOF_NLOWER                   # Z added by devel/scanprov
+ANYOF_NPRINT                   # Z added by devel/scanprov
+ANYOF_NPUNCT                   # Z added by devel/scanprov
+ANYOF_NSPACE                   # Z added by devel/scanprov
+ANYOF_NUPPER                   # Z added by devel/scanprov
+ANYOF_NXDIGIT                  # Z added by devel/scanprov
+ANYOF_PRINT                    # Z added by devel/scanprov
+ANYOF_PUNCT                    # Z added by devel/scanprov
+ANYOF_SPACE                    # Z added by devel/scanprov
+ANYOF_UPPER                    # Z added by devel/scanprov
+ANYOF_XDIGIT                   # Z added by devel/scanprov
+apply_attrs                    # F added by devel/scanprov
 aTHX                           # E
 aTHX_                          # E
+aTHXo                          # Z added by devel/scanprov
+aTHXx                          # Z added by devel/scanprov
+Atof                           # Z added by devel/scanprov
+Atol                           # Z added by devel/scanprov
+Atoul                          # Z added by devel/scanprov
 av_delete                      # E
 av_exists                      # E
+Bit                            # Z added by devel/scanprov
 call_argv                      # E (perl_call_argv)
 call_atexit                    # E
+CALL_FPTR                      # Z added by devel/scanprov
 call_method                    # E (perl_call_method)
 call_pv                        # E (perl_call_pv)
+CALLREGFREE                    # Z added by devel/scanprov
+CALLREG_INTUIT_START           # Z added by devel/scanprov
+CALLREG_INTUIT_STRING          # Z added by devel/scanprov
 call_sv                        # E (perl_call_sv)
-cast_i32                       # E (cast_i32)
-cast_iv                        # E (cast_iv)
-cast_ulong                     # E
-cast_uv                        # E (cast_uv)
+cast_i32                       # F added by devel/scanprov
+cast_iv                        # F added by devel/scanprov
+cast_uv                        # F added by devel/scanprov
+cBINOPx                        # Z added by devel/scanprov
+cCOPx                          # Z added by devel/scanprov
+cGVOP_gv                       # Z added by devel/scanprov
+cGVOPo_gv                      # Z added by devel/scanprov
+cGVOPx_gv                      # Z added by devel/scanprov
+ckDEAD                         # Z added by devel/scanprov
 ckWARN                         # E
 ckWARN2                        # E
 ckWARN2_d                      # E
 ckWARN_d                       # E
-CPPLAST                        # E
-CPPRUN                         # E
+CLEAR_ARGARRAY                 # Z added by devel/scanprov
+cLISTOPx                       # Z added by devel/scanprov
+cLOGOPx                        # Z added by devel/scanprov
+cLOOPx                         # Z added by devel/scanprov
+CLUMP                          # Z added by devel/scanprov
+CLUMP_2IV                      # Z added by devel/scanprov
+CLUMP_2UV                      # Z added by devel/scanprov
+CopFILE                        # E
+CopFILEAV                      # E
+CopFILEGV                      # E
+CopFILEGV_set                  # E
+CopFILE_set                    # E
+CopFILESV                      # E
+cop_free                       # F added by devel/scanprov
+CopLINE                        # E
+CopLINE_dec                    # Z added by devel/scanprov
+CopLINE_inc                    # Z added by devel/scanprov
+CopLINE_set                    # Z added by devel/scanprov
+CopSTASH                       # E
+CopSTASH_eq                    # E
+CopSTASH_ne                    # Z added by devel/scanprov
+CopSTASHPV                     # E
+CopSTASH_set                   # E
+cPADOP                         # Z added by devel/scanprov
+cPADOPo                        # Z added by devel/scanprov
+cPADOPx                        # Z added by devel/scanprov
+cPMOPx                         # Z added by devel/scanprov
+CPPLAST                        # K added by devel/scanprov
+CPPRUN                         # K added by devel/scanprov
+cPVOPx                         # Z added by devel/scanprov
 croak                          # E (Perl_croak)
+croak_nocontext                # U
+cr_textfilter                  # F added by devel/scanprov
+cSVOPo_sv                      # Z added by devel/scanprov
+cSVOP_sv                       # Z added by devel/scanprov
+cSVOPx                         # Z added by devel/scanprov
+cSVOPx_sv                      # Z added by devel/scanprov
+cSVOPx_svp                     # Z added by devel/scanprov
+cUNOPx                         # Z added by devel/scanprov
+cv_dump                        # F added by devel/scanprov
+CvFILE                         # Z added by devel/scanprov
+CVf_LVALUE                     # Z added by devel/scanprov
+CvLVALUE                       # Z added by devel/scanprov
+CvLVALUE_off                   # Z added by devel/scanprov
+CvLVALUE_on                    # Z added by devel/scanprov
+cx_dup                         # F added by devel/scanprov
+CxITERVAR                      # Z added by devel/scanprov
+CxPADLOOP                      # Z added by devel/scanprov
+CXp_TRYBLOCK                   # Z added by devel/scanprov
+CXt_FORMAT                     # Z added by devel/scanprov
+CxTRYBLOCK                     # Z added by devel/scanprov
 die                            # E (Perl_die)
-do_gv_dump                     # E
-do_gvgv_dump                   # E
-do_hv_dump                     # E
-do_magic_dump                  # E
-do_op_dump                     # E
+die_nocontext                  # U
+dNOOP                          # E
+do_aexec5                      # F added by devel/scanprov
+do_exec3                       # F added by devel/scanprov
+do_gv_dump                     # F added by devel/scanprov
+do_gvgv_dump                   # F added by devel/scanprov
+do_hv_dump                     # F added by devel/scanprov
+do_magic_dump                  # F added by devel/scanprov
+do_oddball                     # F added by devel/scanprov
+dooneliner                     # F added by devel/scanprov
+do_op_dump                     # F added by devel/scanprov
 do_open9                       # E
-do_pmop_dump                   # E
-do_sv_dump                     # E
+do_pmop_dump                   # F added by devel/scanprov
+do_sv_dump                     # F added by devel/scanprov
 DO_UTF8                        # E
+do_vecget                      # F added by devel/scanprov
+Drand01                        # K added by devel/scanprov
+dTHXa                          # E
+dTHXo                          # Z added by devel/scanprov
+dTHXx                          # Z added by devel/scanprov
 dump_all                       # U
 dump_eval                      # U
 dump_form                      # U
-dump_indent                    # E
+dump_indent                    # F added by devel/scanprov
 dump_packsubs                  # U
 dump_sub                       # U
-dump_vindent                   # E
+dump_vindent                   # F added by devel/scanprov
+dup_attrlist                   # F added by devel/scanprov
+dXSTARG                        # M added by devel/scanprov
+EMBEDMYMALLOC                  # Z added by devel/scanprov
+EVAL_INEVAL                    # Z added by devel/scanprov
+EVAL_KEEPERR                   # Z added by devel/scanprov
+EVAL_NULL                      # Z added by devel/scanprov
 eval_pv                        # E (perl_eval_pv)
 eval_sv                        # E (perl_eval_sv)
+EVAL_WARNONLY                  # Z added by devel/scanprov
+FBMcf_TAIL                     # Z added by devel/scanprov
+FBMcf_TAIL_DOLLAR              # Z added by devel/scanprov
+FBMcf_TAIL_DOLLARM             # Z added by devel/scanprov
+FBMcf_TAIL_Z                   # Z added by devel/scanprov
+FBMcf_TAIL_z                   # Z added by devel/scanprov
+FBMrf_MULTILINE                # Z added by devel/scanprov
+fcntl                          # Z added by devel/scanprov
+FFLUSH_NULL                    # K added by devel/scanprov
+find_byclass                   # F added by devel/scanprov
 form                           # E (Perl_form)
+form_nocontext                 # U
+fprintf_nocontext              # U
+FSEEKSIZE                      # Z added by devel/scanprov
+ftruncate                      # Z added by devel/scanprov
 get_av                         # E (perl_get_av)
 get_context                    # U
 get_cv                         # E (perl_get_cv)
+getenv_len                     # F added by devel/scanprov
 get_hv                         # E (perl_get_hv)
+get_mstats                     # F added by devel/scanprov
+getpid                         # Z added by devel/scanprov
 get_ppaddr                     # E
 get_sv                         # E (perl_get_sv)
+Gid_t_f                        # K added by devel/scanprov
+Gid_t_sign                     # K added by devel/scanprov
+Gid_t_size                     # K added by devel/scanprov
 gv_dump                        # E
-I16SIZE                        # E
-I16TYPE                        # E
-I32SIZE                        # E
-I32TYPE                        # E
-I8SIZE                         # E
-I8TYPE                         # E
+GvFILE                         # Z added by devel/scanprov
+GvIN_PAD                       # Z added by devel/scanprov
+GvIN_PAD_off                   # Z added by devel/scanprov
+GvIN_PAD_on                    # Z added by devel/scanprov
+G_WARN_ALL_MASK                # Z added by devel/scanprov
+G_WARN_ALL_OFF                 # Z added by devel/scanprov
+G_WARN_ALL_ON                  # Z added by devel/scanprov
+G_WARN_OFF                     # Z added by devel/scanprov
+G_WARN_ON                      # Z added by devel/scanprov
+G_WARN_ONCE                    # Z added by devel/scanprov
+HAS_ACCESS                     # K added by devel/scanprov
+HAS_ATOLL                      # K added by devel/scanprov
+HAS_DRAND48_PROTO              # K added by devel/scanprov
+HAS_EACCESS                    # K added by devel/scanprov
+HAS_FD_SET                     # K added by devel/scanprov
+HAS_FSEEKO                     # K added by devel/scanprov
+HAS_FTELLO                     # K added by devel/scanprov
+HAS_GETCWD                     # K added by devel/scanprov
+HAS_GETHOSTNAME                # K added by devel/scanprov
+HAS_GETSPNAM                   # K added by devel/scanprov
+HAS_INT64_T                    # K added by devel/scanprov
+HAS_LDBL_DIG                   # K added by devel/scanprov
+HAS_LSEEK_PROTO                # K added by devel/scanprov
+HAS_MADVISE                    # K added by devel/scanprov
+HAS_MKDTEMP                    # K added by devel/scanprov
+HAS_MKSTEMP                    # K added by devel/scanprov
+HAS_MKSTEMPS                   # K added by devel/scanprov
+HAS_MMAP                       # K added by devel/scanprov
+HAS_MPROTECT                   # K added by devel/scanprov
+HAS_MSYNC                      # K added by devel/scanprov
+HAS_MUNMAP                     # K added by devel/scanprov
+HAS_SQRTL                      # K added by devel/scanprov
+HAS_STRTOLD                    # K added by devel/scanprov
+HAS_STRTOLL                    # K added by devel/scanprov
+HAS_STRTOULL                   # K added by devel/scanprov
+HAS_STRTOUQ                    # K added by devel/scanprov
+HAS_TELLDIR_PROTO              # K added by devel/scanprov
+HINT_FILETEST_ACCESS           # Z added by devel/scanprov
+HINT_UTF8                      # Z added by devel/scanprov
+hv_magic_check                 # F added by devel/scanprov
+I16SIZE                        # K added by devel/scanprov
+I16TYPE                        # K added by devel/scanprov
+I32SIZE                        # K added by devel/scanprov
+I32TYPE                        # K added by devel/scanprov
+I64SIZE                        # K added by devel/scanprov
+I64TYPE                        # K added by devel/scanprov
+I8SIZE                         # K added by devel/scanprov
+I8TYPE                         # K added by devel/scanprov
+I_INTTYPES                     # K added by devel/scanprov
+I_NETINET_TCP                  # K added by devel/scanprov
+init_i18nl10n                  # F added by devel/scanprov
+init_i18nl14n                  # F added by devel/scanprov
 INT2PTR                        # E
+IOf_FAKE_DIRP                  # Z added by devel/scanprov
+I_POLL                         # K added by devel/scanprov
 isALNUMC                       # E
 isALNUMC_LC                    # E
+isALNUM_LC_utf8                # Z added by devel/scanprov
+isALNUM_uni                    # Z added by devel/scanprov
+isALNUM_utf8                   # Z added by devel/scanprov
+isALPHA_LC_utf8                # Z added by devel/scanprov
+isALPHA_uni                    # Z added by devel/scanprov
 isASCII                        # E
+isASCII_uni                    # Z added by devel/scanprov
 isCNTRL                        # E
 isCNTRL_LC                     # E
+isCNTRL_LC_utf8                # Z added by devel/scanprov
+isCNTRL_uni                    # Z added by devel/scanprov
+isDIGIT_LC_utf8                # Z added by devel/scanprov
+isDIGIT_uni                    # Z added by devel/scanprov
 isGRAPH                        # E
 isGRAPH_LC                     # E
+isGRAPH_LC_utf8                # Z added by devel/scanprov
+isGRAPH_uni                    # Z added by devel/scanprov
+I_SHADOW                       # K added by devel/scanprov
+is_handle_constructor          # F added by devel/scanprov
+isIDFIRST_LC_utf8              # Z added by devel/scanprov
+isIDFIRST_uni                  # Z added by devel/scanprov
+isLEXWARN_off                  # Z added by devel/scanprov
+isLEXWARN_on                   # Z added by devel/scanprov
+isLOWER_LC_utf8                # Z added by devel/scanprov
+isLOWER_uni                    # Z added by devel/scanprov
+IS_NUMERIC_RADIX               # Z added by devel/scanprov
+IS_PADCONST                    # Z added by devel/scanprov
+IS_PADGV                       # Z added by devel/scanprov
+isPRINT_LC_utf8                # Z added by devel/scanprov
+isPRINT_uni                    # Z added by devel/scanprov
 isPUNCT                        # E
 isPUNCT_LC                     # E
+isPUNCT_LC_utf8                # Z added by devel/scanprov
+isPUNCT_uni                    # Z added by devel/scanprov
+isSPACE_LC_utf8                # Z added by devel/scanprov
+isSPACE_uni                    # Z added by devel/scanprov
+isUPPER_LC_utf8                # Z added by devel/scanprov
+isUPPER_uni                    # Z added by devel/scanprov
 is_utf8_char                   # U
+isWARN_on                      # Z added by devel/scanprov
+isWARN_ONCE                    # Z added by devel/scanprov
 isXDIGIT                       # E
+isXDIGIT_uni                   # Z added by devel/scanprov
+I_SYSLOG                       # K added by devel/scanprov
+I_SYSUIO                       # K added by devel/scanprov
+I_SYSUTSNAME                   # K added by devel/scanprov
 IVdf                           # E
-IVSIZE                         # E
-IVTYPE                         # E
+IV_DIG                         # Z added by devel/scanprov
+IV_IS_QUAD                     # Z added by devel/scanprov
+IVSIZE                         # K added by devel/scanprov
+IVTYPE                         # K added by devel/scanprov
+JMPENV_BOOTSTRAP               # Z added by devel/scanprov
+KEY_CHECK                      # Z added by devel/scanprov
+KEY_our                        # Z added by devel/scanprov
+kGVOP_gv                       # Z added by devel/scanprov
+kPADOP                         # Z added by devel/scanprov
+kSVOP_sv                       # Z added by devel/scanprov
+LDBL_DIG                       # Z added by devel/scanprov
+link                           # Z added by devel/scanprov
 load_module                    # E
-LSEEKSIZE                      # E
+load_module_nocontext          # U
+lockf                          # Z added by devel/scanprov
+LSEEKSIZE                      # K added by devel/scanprov
 magic_dump                     # E
+magic_killbackrefs             # F added by devel/scanprov
+magic_regdata_cnt              # F added by devel/scanprov
+magic_regdatum_get             # F added by devel/scanprov
+MALLOC_OVERHEAD                # Z added by devel/scanprov
+MAXPATHLEN                     # Z added by devel/scanprov
+MEMBER_TO_FPTR                 # Z added by devel/scanprov
 mess                           # E (Perl_mess)
+mess_nocontext                 # U
+Mmap_t                         # K added by devel/scanprov
+mode_from_discipline           # F added by devel/scanprov
+MULTIPLICITY                   # K added by devel/scanprov
 my_atof                        # E
+my_attrs                       # F added by devel/scanprov
+my_binmode                     # Z added by devel/scanprov
 my_fflush_all                  # E
+my_kid                         # F added by devel/scanprov
 newANONATTRSUB                 # E
 newATTRSUB                     # E
+new_collate                    # F added by devel/scanprov
+new_ctype                      # F added by devel/scanprov
+new_numeric                    # F added by devel/scanprov
+newPADOP                       # F added by devel/scanprov
 newSVnv                        # E (Perl_newSVnv)
 newSVpvf                       # E (Perl_newSVpvf)
+newSVpvf_nocontext             # U
 newSVuv                        # E
 newXS                          # E (Perl_newXS)
 newXSproto                     # E
-NVTYPE                         # E
+NODE_SZ_STR                    # Z added by devel/scanprov
+NUM2PTR                        # M added by devel/scanprov
+NV_DIG                         # Z added by devel/scanprov
+NVTYPE                         # K added by devel/scanprov
+NV_WITHIN_IV                   # Z added by devel/scanprov
+NV_WITHIN_UV                   # Z added by devel/scanprov
+OA_PADOP                       # Z added by devel/scanprov
+OA_PVOP_OR_SVOP                # Z added by devel/scanprov
+OA_TARGLEX                     # Z added by devel/scanprov
+O_BINARY                       # Z added by devel/scanprov
+O_CREAT                        # Z added by devel/scanprov
+OCSHIFT                        # Z added by devel/scanprov
+Off                            # Z added by devel/scanprov
+Off_t_size                     # K added by devel/scanprov
+op_clear                       # F added by devel/scanprov
 op_dump                        # E
 OPpEARLY_CV                    # E
+OPpENTERSUB_HASTARG            # Z added by devel/scanprov
+OPpENTERSUB_INARGS             # Z added by devel/scanprov
+OPpEXISTS_SUB                  # Z added by devel/scanprov
+OPpOPEN_IN_CRLF                # Z added by devel/scanprov
+OPpOPEN_IN_RAW                 # Z added by devel/scanprov
+OPpOPEN_OUT_CRLF               # Z added by devel/scanprov
+OPpOPEN_OUT_RAW                # Z added by devel/scanprov
+OPpOUR_INTRO                   # Z added by devel/scanprov
+OPpREFCOUNTED                  # Z added by devel/scanprov
+OPpSORT_INTEGER                # Z added by devel/scanprov
+OPpSORT_NUMERIC                # Z added by devel/scanprov
+OPpSORT_REVERSE                # Z added by devel/scanprov
+OPpTARGET_MY                   # Z added by devel/scanprov
+OPpTRANS_FROM_UTF              # Z added by devel/scanprov
+OPpTRANS_GROWS                 # Z added by devel/scanprov
+OPpTRANS_IDENTICAL             # Z added by devel/scanprov
+OPpTRANS_TO_UTF                # Z added by devel/scanprov
+OpREFCNT_dec                   # Z added by devel/scanprov
+OpREFCNT_inc                   # Z added by devel/scanprov
+OP_REFCNT_INIT                 # Z added by devel/scanprov
+OP_REFCNT_LOCK                 # Z added by devel/scanprov
+OpREFCNT_set                   # Z added by devel/scanprov
+OP_REFCNT_TERM                 # Z added by devel/scanprov
+OP_REFCNT_UNLOCK               # Z added by devel/scanprov
+O_RDONLY                       # Z added by devel/scanprov
+O_RDWR                         # Z added by devel/scanprov
+O_TEXT                         # Z added by devel/scanprov
+O_WRONLY                       # Z added by devel/scanprov
+parse_body                     # F added by devel/scanprov
+PERL_ALLOC_CHECK               # Z added by devel/scanprov
+perl_alloc_using               # F added by devel/scanprov
+PERL_API_REVISION              # Z added by devel/scanprov
+PERL_API_SUBVERSION            # Z added by devel/scanprov
+PERL_API_VERSION               # Z added by devel/scanprov
+PERL_ASYNC_CHECK               # Z added by devel/scanprov
+Perl_atan2                     # Z added by devel/scanprov
+Perl_atof                      # Z added by devel/scanprov
+Perl_calloc                    # Z added by devel/scanprov
+PERL_CKDEF                     # Z added by devel/scanprov
+perl_clone                     # F added by devel/scanprov
+perl_clone_using               # F added by devel/scanprov
+Perl_cos                       # Z added by devel/scanprov
+PERLDBf_NAMEANON               # Z added by devel/scanprov
+PERLDBf_NAMEEVAL               # Z added by devel/scanprov
+PERLDB_NAMEANON                # Z added by devel/scanprov
+PERLDB_NAMEEVAL                # Z added by devel/scanprov
+PerlDir_mapA                   # Z added by devel/scanprov
+PerlDir_mapW                   # Z added by devel/scanprov
+PerlEnv_clearenv               # Z added by devel/scanprov
+PerlEnv_ENVgetenv              # Z added by devel/scanprov
+PerlEnv_ENVgetenv_len          # Z added by devel/scanprov
+PerlEnv_free_childdir          # Z added by devel/scanprov
+PerlEnv_free_childenv          # Z added by devel/scanprov
+PerlEnv_get_childdir           # Z added by devel/scanprov
+PerlEnv_get_childenv           # Z added by devel/scanprov
+PerlEnv_get_child_IO           # Z added by devel/scanprov
+PerlEnv_getenv_len             # Z added by devel/scanprov
+PerlEnv_os_id                  # Z added by devel/scanprov
+PerlEnv_vendorlib_path         # Z added by devel/scanprov
+Perl_error_log                 # Z added by devel/scanprov
 PERL_EXIT_EXPECTED             # E
+Perl_exp                       # Z added by devel/scanprov
+PERL_FILE_IS_ABSOLUTE          # Z added by devel/scanprov
+Perl_floor                     # Z added by devel/scanprov
+PERL_FLUSHALL_FOR_CHILD        # Z added by devel/scanprov
+Perl_fmod                      # Z added by devel/scanprov
+Perl_frexp                     # Z added by devel/scanprov
+PERL_FS_VER_FMT                # Z added by devel/scanprov
+PERL_GET_CONTEXT               # Z added by devel/scanprov
+PERL_GET_INTERP                # Z added by devel/scanprov
+PERL_GET_THX                   # Z added by devel/scanprov
+PERL_HV_ARRAY_ALLOC_BYTES      # Z added by devel/scanprov
+PERL_IMPLICIT_CONTEXT          # Z added by devel/scanprov
 PerlIO_printf                  # E
 PerlIO_stdoutf                 # E
+PerlLIO_link                   # Z added by devel/scanprov
 PERL_LOADMOD_DENY              # E
 PERL_LOADMOD_IMPORT_OPS        # E
 PERL_LOADMOD_NOIMPORT          # E
+Perl_log                       # Z added by devel/scanprov
+Perl_malloc                    # Z added by devel/scanprov
+PerlMem_calloc                 # Z added by devel/scanprov
+PerlMem_free_lock              # Z added by devel/scanprov
+PerlMem_get_lock               # Z added by devel/scanprov
+PerlMem_is_locked              # Z added by devel/scanprov
+PerlMemParse_calloc            # Z added by devel/scanprov
+PerlMemParse_free              # Z added by devel/scanprov
+PerlMemParse_free_lock         # Z added by devel/scanprov
+PerlMemParse_get_lock          # Z added by devel/scanprov
+PerlMemParse_is_locked         # Z added by devel/scanprov
+PerlMemParse_malloc            # Z added by devel/scanprov
+PerlMemParse_realloc           # Z added by devel/scanprov
+PerlMemShared_calloc           # Z added by devel/scanprov
+PerlMemShared_free             # Z added by devel/scanprov
+PerlMemShared_free_lock        # Z added by devel/scanprov
+PerlMemShared_get_lock         # Z added by devel/scanprov
+PerlMemShared_is_locked        # Z added by devel/scanprov
+PerlMemShared_malloc           # Z added by devel/scanprov
+PerlMemShared_realloc          # Z added by devel/scanprov
+Perl_mfree                     # Z added by devel/scanprov
+Perl_modf                      # Z added by devel/scanprov
 perl_parse                     # E (perl_parse)
+PERL_PATCHLEVEL_H_IMPLICIT     # Z added by devel/scanprov
+Perl_pow                       # Z added by devel/scanprov
+PERL_PPDEF                     # Z added by devel/scanprov
+Perl_pp_i_postdec              # Z added by devel/scanprov
+Perl_pp_i_postinc              # Z added by devel/scanprov
+Perl_pp_i_predec               # Z added by devel/scanprov
+Perl_pp_i_preinc               # Z added by devel/scanprov
+PERL_PRIfldbl                  # K added by devel/scanprov
+PERL_PRIgldbl                  # K added by devel/scanprov
+PerlProc_DynaLoad              # Z added by devel/scanprov
+PerlProc_fork                  # Z added by devel/scanprov
+PerlProc_GetOSError            # Z added by devel/scanprov
+PerlProc_getpid                # Z added by devel/scanprov
+Perl_realloc                   # Z added by devel/scanprov
 PERL_REVISION                  # E
+PERL_SET_CONTEXT               # Z added by devel/scanprov
+PERL_SET_INTERP                # Z added by devel/scanprov
+PERL_SET_THX                   # Z added by devel/scanprov
+Perl_sharepvn                  # Z added by devel/scanprov
+Perl_sin                       # Z added by devel/scanprov
+PerlSock_closesocket           # Z added by devel/scanprov
+Perl_sqrt                      # Z added by devel/scanprov
+PERL_STACK_OVERFLOW_CHECK      # Z added by devel/scanprov
 PERL_SUBVERSION                # E
 PERL_SYS_INIT3                 # E
+PERLVARA                       # Z added by devel/scanprov
 PERL_VERSION                   # E
+PERL_WAIT_FOR_CHILDREN         # Z added by devel/scanprov
+PHOSTNAME                      # K added by devel/scanprov
+PL_argvout_stack               # Z added by devel/scanprov
+PL_checkav                     # Z added by devel/scanprov
+PL_Dir                         # Z added by devel/scanprov
+PL_dumpindent                  # Z added by devel/scanprov
+PL_efloatbuf                   # Z added by devel/scanprov
+PL_efloatsize                  # Z added by devel/scanprov
+PL_Env                         # Z added by devel/scanprov
+PL_errors                      # Z added by devel/scanprov
 PL_exit_flags                  # E
+PL_LIO                         # Z added by devel/scanprov
+PL_Mem                         # Z added by devel/scanprov
+PL_MemParse                    # Z added by devel/scanprov
+PL_MemShared                   # Z added by devel/scanprov
+PL_Proc                        # Z added by devel/scanprov
+PL_psig_name                   # Z added by devel/scanprov
+PL_psig_ptr                    # Z added by devel/scanprov
+PL_ptr_table                   # Z added by devel/scanprov
+PL_reg_curpm                   # Z added by devel/scanprov
 PL_runops                      # E
+PL_Sock                        # Z added by devel/scanprov
+PL_srand_called                # Z added by devel/scanprov
+PL_stderrgv                    # Z added by devel/scanprov
+PL_StdIO                       # Z added by devel/scanprov
+PL_utf8_mark                   # Z added by devel/scanprov
+PL_utf8_tolower                # Z added by devel/scanprov
+PL_utf8_totitle                # Z added by devel/scanprov
+PL_utf8_toupper                # Z added by devel/scanprov
+PL_watchaddr                   # Z added by devel/scanprov
+PL_watchok                     # Z added by devel/scanprov
 pmop_dump                      # E
 POPn                           # E
 POPul                          # E
+pthread_attr_init              # Z added by devel/scanprov
+PTHREAD_ATTR_SETDETACHSTATE    # Z added by devel/scanprov
+PTHREAD_CREATE                 # Z added by devel/scanprov
+PTHREAD_GETSPECIFIC_INT        # Z added by devel/scanprov
 pTHX                           # E
+pTHX_1                         # Z added by devel/scanprov
+pTHX_2                         # Z added by devel/scanprov
+pTHX_3                         # Z added by devel/scanprov
+pTHX_4                         # Z added by devel/scanprov
+pTHXo                          # Z added by devel/scanprov
+pTHXx                          # Z added by devel/scanprov
 PTR2IV                         # E
 PTR2NV                         # E
 PTR2UV                         # E
+PTRV                           # M added by devel/scanprov
 PUSHn                          # E
 pv_display                     # E
-reginitcolors                  # E
+pWARN_ALL                      # Z added by devel/scanprov
+pWARN_NONE                     # Z added by devel/scanprov
+pWARN_STD                      # Z added by devel/scanprov
+qerror                         # F added by devel/scanprov
+QUAD_IS_INT                    # K added by devel/scanprov
+QUAD_IS_INT64_T                # K added by devel/scanprov
+QUAD_IS_LONG                   # K added by devel/scanprov
+QUAD_IS_LONG_LONG              # K added by devel/scanprov
+QUADKIND                       # K added by devel/scanprov
+Rand_seed_t                    # K added by devel/scanprov
+recv                           # Z added by devel/scanprov
+REG_ANY                        # Z added by devel/scanprov
+reginitcolors                  # F added by devel/scanprov
+REG_MAGIC                      # Z added by devel/scanprov
+re_intuit_start                # F added by devel/scanprov
+re_intuit_string               # F added by devel/scanprov
+report_uninit                  # F added by devel/scanprov
 require_pv                     # E (perl_require_pv)
+REXEC_IGNOREPOS                # Z added by devel/scanprov
+REXEC_NOT_FIRST                # Z added by devel/scanprov
+REXEC_SCREAM                   # Z added by devel/scanprov
+run_body                       # F added by devel/scanprov
+RX_MATCH_COPIED                # Z added by devel/scanprov
+RX_MATCH_COPIED_off            # Z added by devel/scanprov
+RX_MATCH_COPIED_on             # Z added by devel/scanprov
+RX_MATCH_COPIED_set            # Z added by devel/scanprov
 safesyscalloc                  # U
 safesysfree                    # U
 safesysmalloc                  # U
 safesysrealloc                 # U
 save_alloc                     # E
-save_destructor                # E (Perl_save_destructor)
-save_destructor_x              # E
-save_I8                        # E
-save_re_context                # E
+SAVECOMPPAD                    # Z added by devel/scanprov
+SAVECOPFILE                    # Z added by devel/scanprov
+SAVECOPLINE                    # Z added by devel/scanprov
+SAVEDESTRUCTOR                 # E
+save_destructor_x              # F added by devel/scanprov
+SAVEDESTRUCTOR_X               # Z added by devel/scanprov
+save_I8                        # F added by devel/scanprov
+SAVEI8                         # E
+save_re_context                # F added by devel/scanprov
+SAVEt_ALLOC                    # Z added by devel/scanprov
+SAVEt_COMPPAD                  # Z added by devel/scanprov
+SAVEt_DESTRUCTOR_X             # Z added by devel/scanprov
+SAVEt_I8                       # Z added by devel/scanprov
+SAVEt_VPTR                     # Z added by devel/scanprov
 save_vptr                      # E
+SAVEVPTR                       # Z added by devel/scanprov
+sb_rflags                      # Z added by devel/scanprov
+scalar_mod_type                # F added by devel/scanprov
 scan_bin                       # E
 scan_hex                       # E (Perl_scan_hex)
 scan_oct                       # E (Perl_scan_oct)
+SCHED_YIELD                    # K added by devel/scanprov
+seedDrand01                    # K added by devel/scanprov
+semun                          # Z added by devel/scanprov
 set_context                    # U
+SET_MARK_OFFSET                # Z added by devel/scanprov
+set_numeric_radix              # F added by devel/scanprov
+set_numeric_standard           # F added by devel/scanprov
+S_IEXEC                        # Z added by devel/scanprov
+simplify_sort                  # F added by devel/scanprov
+S_IREAD                        # Z added by devel/scanprov
+S_IRWXG                        # Z added by devel/scanprov
+S_IRWXO                        # Z added by devel/scanprov
+S_IRWXU                        # Z added by devel/scanprov
+SITELIB_STEM                   # K added by devel/scanprov
+S_IWRITE                       # Z added by devel/scanprov
+Size_t_size                    # K added by devel/scanprov
+Slab_Alloc                     # F added by devel/scanprov
+Sock_size_t                    # K added by devel/scanprov
+specialWARN                    # Z added by devel/scanprov
+SSNEW                          # Z added by devel/scanprov
+SSNEWa                         # Z added by devel/scanprov
+SSPOPDXPTR                     # Z added by devel/scanprov
+SSPTR                          # Z added by devel/scanprov
+SSPUSHDXPTR                    # Z added by devel/scanprov
+STDIO_PTR_LVALUE               # K added by devel/scanprov
+STDIO_STREAM_ARRAY             # K added by devel/scanprov
+STRING                         # Z added by devel/scanprov
+STR_LEN                        # Z added by devel/scanprov
+STR_SZ                         # Z added by devel/scanprov
 Strtol                         # E
+strtoll                        # Z added by devel/scanprov
 Strtoul                        # E
-str_to_version                 # E
+strtoull                       # Z added by devel/scanprov
+str_to_version                 # F added by devel/scanprov
 sv_2pvbyte                     # U
-sv_2pvbyte_nolen               # U
-sv_2pv_nolen                   # U
 sv_2pvutf8                     # U
-sv_2pvutf8_nolen               # U
 sv_catpvf                      # E (Perl_sv_catpvf)
 sv_catpvf_mg                   # E (Perl_sv_catpvf_mg)
+sv_catpvf_mg_nocontext         # U
+sv_catpvf_nocontext            # U
+sv_del_backref                 # F added by devel/scanprov
 SVf                            # E
+SVf_IVisUV                     # Z added by devel/scanprov
 sv_force_normal                # U
 SVf_UTF8                       # E
 SvIOK_notUV                    # E
 SvIOK_only_UV                  # E
 SvIOK_UV                       # E
 sv_len_utf8                    # E
-sv_nv                          # E (Perl_sv_nv)
 SvNV                           # E
 SvNV_set                       # E
 SvNVX                          # E
 SvNVx                          # E
+SvOK_off_exc_UV                # Z added by devel/scanprov
+SVpad_OUR                      # Z added by devel/scanprov
 SvPOK_only_UTF8                # E
 sv_pos_b2u                     # E
 sv_pos_u2b                     # E
-sv_pv                          # U
-sv_pvbyte                      # U
+SVprv_WEAKREF                  # Z added by devel/scanprov
 SvPVbyte                       # E
-sv_pvbyten                     # E
-sv_pvbyten_force               # E
+sv_pvbyten                     # F added by devel/scanprov
+sv_pvbyten_force               # F added by devel/scanprov
 SvPVbyte_nolen                 # E
 SvPVbytex                      # E
 SvPVbytex_force                # E
 SvPV_nolen                     # E
-sv_pvutf8                      # U
 SvPVutf8                       # E
 SvPVutf8_force                 # E
-sv_pvutf8n                     # E
-sv_pvutf8n_force               # E
+sv_pvutf8n                     # F added by devel/scanprov
+sv_pvutf8n_force               # F added by devel/scanprov
 SvPVutf8_nolen                 # E
 SvPVutf8x                      # E
 SvPVutf8x_force                # E
@@ -168,6 +658,8 @@ sv_setnv                       # E (Perl_sv_setnv)
 sv_setnv_mg                    # E (Perl_sv_setnv_mg)
 sv_setpvf                      # E (Perl_sv_setpvf)
 sv_setpvf_mg                   # E (Perl_sv_setpvf_mg)
+sv_setpvf_mg_nocontext         # U
+sv_setpvf_nocontext            # U
 sv_setref_nv                   # E (Perl_sv_setref_nv)
 SvUTF8                         # E
 sv_utf8_decode                 # E
@@ -179,18 +671,53 @@ sv_vcatpvf                     # E
 sv_vcatpvf_mg                  # E
 sv_vsetpvf                     # E
 sv_vsetpvf_mg                  # E
-U16SIZE                        # E
-U16TYPE                        # E
-U32SIZE                        # E
-U32TYPE                        # E
-U8SIZE                         # E
-U8TYPE                         # E
+SvWEAKREF                      # Z added by devel/scanprov
+SvWEAKREF_off                  # Z added by devel/scanprov
+SvWEAKREF_on                   # Z added by devel/scanprov
+sys_intern_dup                 # F added by devel/scanprov
+toLOWER_uni                    # Z added by devel/scanprov
+TOPul                          # Z added by devel/scanprov
+toTITLE_uni                    # Z added by devel/scanprov
+to_uni_lower                   # F added by devel/scanprov
+to_uni_title                   # F added by devel/scanprov
+to_uni_upper                   # F added by devel/scanprov
+toUPPER_uni                    # Z added by devel/scanprov
+truncate                       # Z added by devel/scanprov
+tryAMAGICunDEREF               # Z added by devel/scanprov
+U16SIZE                        # K added by devel/scanprov
+U16TYPE                        # K added by devel/scanprov
+U32SIZE                        # K added by devel/scanprov
+U32TYPE                        # K added by devel/scanprov
+U64SIZE                        # K added by devel/scanprov
+U64TYPE                        # K added by devel/scanprov
+U8SIZE                         # K added by devel/scanprov
+U8TYPE                         # K added by devel/scanprov
+Uid_t_f                        # K added by devel/scanprov
+Uid_t_sign                     # K added by devel/scanprov
+Uid_t_size                     # K added by devel/scanprov
+UINT32_MIN                     # Z added by devel/scanprov
+UINT64_MIN                     # Z added by devel/scanprov
+Uquad_t                        # K added by devel/scanprov
+USE_64_BIT_ALL                 # K added by devel/scanprov
+USE_64_BIT_INT                 # K added by devel/scanprov
+USE_64_BIT_RAWIO               # Z added by devel/scanprov
+USE_64_BIT_STDIO               # Z added by devel/scanprov
+USE_LARGE_FILES                # K added by devel/scanprov
+USEMYBINMODE                   # Z added by devel/scanprov
+USE_STDIO_BASE                 # K added by devel/scanprov
+USE_STDIO_PTR                  # K added by devel/scanprov
+USE_THREADS                    # K added by devel/scanprov
+utf16_to_utf8                  # F added by devel/scanprov
+utf16_to_utf8_reversed         # F added by devel/scanprov
 utf8_distance                  # E
 utf8_hop                       # U
+UTF8_MAXLEN                    # Z added by devel/scanprov
 UTF8SKIP                       # E
+UV_DIG                         # Z added by devel/scanprov
+UV_IS_QUAD                     # Z added by devel/scanprov
 UVof                           # E
-UVSIZE                         # E
-UVTYPE                         # E
+UVSIZE                         # K added by devel/scanprov
+UVTYPE                         # K added by devel/scanprov
 UVuf                           # E
 UVxf                           # E
 vcroak                         # E
@@ -198,10 +725,14 @@ vform                          # E
 vload_module                   # E
 vmess                          # E
 vnewSVpvf                      # E
+VTBL_regdata                   # Z added by devel/scanprov
+VTBL_regdatum                  # Z added by devel/scanprov
+vTHX                           # Z added by devel/scanprov
 vwarn                          # E
 vwarner                        # E
 warn                           # E (Perl_warn)
 WARN_ALL                       # E
+WARN_ALLstring                 # Z added by devel/scanprov
 WARN_AMBIGUOUS                 # E
 WARN_BAREWORD                  # E
 WARN_CLOSED                    # E
@@ -210,6 +741,7 @@ WARN_DEBUGGING                 # E
 WARN_DEPRECATED                # E
 WARN_DIGIT                     # E
 warner                         # E
+warner_nocontext               # U
 WARN_EXEC                      # E
 WARN_EXITING                   # E
 WARN_GLOB                      # E
@@ -219,6 +751,8 @@ WARN_IO                        # E
 WARN_MALLOC                    # E
 WARN_MISC                      # E
 WARN_NEWLINE                   # E
+warn_nocontext                 # U
+WARN_NONEstring                # Z added by devel/scanprov
 WARN_NUMERIC                   # E
 WARN_ONCE                      # E
 WARN_OVERFLOW                  # E
@@ -237,6 +771,7 @@ WARN_RESERVED                  # E
 WARN_SEMICOLON                 # E
 WARN_SEVERE                    # E
 WARN_SIGNAL                    # E
+WARNsize                       # Z added by devel/scanprov
 WARN_SUBSTR                    # E
 WARN_SYNTAX                    # E
 WARN_TAINT                     # E
@@ -247,90 +782,9 @@ WARN_UNTIE                     # E
 WARN_UTF8                      # E
 WARN_VOID                      # E
 XPUSHn                         # E
+XPUSHundef                     # Z added by devel/scanprov
+XSprePUSH                      # M added by devel/scanprov
 XSRETURN_NV                    # E
+XSRETURN_PVN                   # Z added by devel/scanprov
 XST_mNV                        # E
-CopFILE                        # M added by devel/scanprov
-CopFILEAV                      # M added by devel/scanprov
-CopFILEGV                      # M added by devel/scanprov
-CopFILEGV_set                  # M added by devel/scanprov
-CopFILE_set                    # M added by devel/scanprov
-CopFILESV                      # M added by devel/scanprov
-CopSTASH                       # M added by devel/scanprov
-CopSTASH_eq                    # M added by devel/scanprov
-CopSTASHPV                     # M added by devel/scanprov
-CopSTASHPV_set                 # M added by devel/scanprov
-CopSTASH_set                   # M added by devel/scanprov
-croak_nocontext                # M added by devel/scanprov
-dNOOP                          # M added by devel/scanprov
-dTHXa                          # M added by devel/scanprov
-dTHXoa                         # M added by devel/scanprov
-dXSTARG                        # M added by devel/scanprov
-mess_nocontext                 # M added by devel/scanprov
-NUM2PTR                        # M added by devel/scanprov
-PL_no_modify                   # M added by devel/scanprov
-PL_ppaddr                      # M added by devel/scanprov
-pTHX_                          # M added by devel/scanprov
-PTRV                           # M added by devel/scanprov
-sv_catpvf_mg_nocontext         # M added by devel/scanprov
-sv_setpvf_mg_nocontext         # M added by devel/scanprov
-warn_nocontext                 # M added by devel/scanprov
-XSprePUSH                      # M added by devel/scanprov
-any_dup                        # F added by devel/scanprov
-apply_attrs                    # F added by devel/scanprov
-cop_free                       # F added by devel/scanprov
-cr_textfilter                  # F added by devel/scanprov
-cv_dump                        # F added by devel/scanprov
-die_nocontext                  # F added by devel/scanprov
-do_aexec5                      # F added by devel/scanprov
-do_exec3                       # F added by devel/scanprov
-do_oddball                     # F added by devel/scanprov
-dooneliner                     # F added by devel/scanprov
-do_vecget                      # F added by devel/scanprov
-dup_attrlist                   # F added by devel/scanprov
-find_byclass                   # F added by devel/scanprov
-form_nocontext                 # F added by devel/scanprov
-fprintf_nocontext              # F added by devel/scanprov
-getenv_len                     # F added by devel/scanprov
-get_mstats                     # F added by devel/scanprov
-GetVars                        # F added by devel/scanprov
-hv_magic_check                 # F added by devel/scanprov
-init_i18nl10n                  # F added by devel/scanprov
-init_i18nl14n                  # F added by devel/scanprov
-is_handle_constructor          # F added by devel/scanprov
-load_module_nocontext          # F added by devel/scanprov
-magic_killbackrefs             # F added by devel/scanprov
-magic_regdata_cnt              # F added by devel/scanprov
-magic_regdatum_get             # F added by devel/scanprov
-mode_from_discipline           # F added by devel/scanprov
-my_attrs                       # F added by devel/scanprov
-my_kid                         # F added by devel/scanprov
-new_collate                    # F added by devel/scanprov
-new_ctype                      # F added by devel/scanprov
-new_numeric                    # F added by devel/scanprov
-newPADOP                       # F added by devel/scanprov
-newSVpvf_nocontext             # F added by devel/scanprov
-op_clear                       # F added by devel/scanprov
-parse_body                     # F added by devel/scanprov
-perl_alloc_using               # F added by devel/scanprov
-perl_clone                     # F added by devel/scanprov
-perl_clone_using               # F added by devel/scanprov
-qerror                         # F added by devel/scanprov
-re_intuit_start                # F added by devel/scanprov
-re_intuit_string               # F added by devel/scanprov
-report_uninit                  # F added by devel/scanprov
-run_body                       # F added by devel/scanprov
-scalar_mod_type                # F added by devel/scanprov
-set_numeric_radix              # F added by devel/scanprov
-set_numeric_standard           # F added by devel/scanprov
-simplify_sort                  # F added by devel/scanprov
-Slab_Alloc                     # F added by devel/scanprov
-sv_catpvf_nocontext            # F added by devel/scanprov
-sv_del_backref                 # F added by devel/scanprov
-sv_setpvf_nocontext            # F added by devel/scanprov
-sys_intern_dup                 # F added by devel/scanprov
-to_uni_lower                   # F added by devel/scanprov
-to_uni_title                   # F added by devel/scanprov
-to_uni_upper                   # F added by devel/scanprov
-utf16_to_utf8                  # F added by devel/scanprov
-utf16_to_utf8_reversed         # F added by devel/scanprov
-warner_nocontext               # F added by devel/scanprov
+XST_mPVN                       # Z added by devel/scanprov
index 6205d50..8e00ccd 100644 (file)
@@ -1,27 +1,67 @@
 5.006001
+ANYOF_BLANK                    # Z added by devel/scanprov
+ANYOF_NBLANK                   # Z added by devel/scanprov
 apply_attrs_string             # U
 bytes_to_utf8                  # U
+do_trans_complex               # F added by devel/scanprov
+do_trans_count                 # F added by devel/scanprov
+do_trans_simple                # F added by devel/scanprov
+dTHXoa                         # U
+find_in_my_stash               # F added by devel/scanprov
+FREE_THREAD_KEY                # Z added by devel/scanprov
 G_METHOD                       # E
 gv_efullname4                  # U
 gv_fullname4                   # U
+HAS_FREXPL                     # K added by devel/scanprov
+HAS_ISNAN                      # K added by devel/scanprov
+HAS_ISNANL                     # K added by devel/scanprov
+HAS_MODFL                      # K added by devel/scanprov
+IoANY                          # Z added by devel/scanprov
+IoTYPE_APPEND                  # Z added by devel/scanprov
+IoTYPE_CLOSED                  # Z added by devel/scanprov
+IoTYPE_PIPE                    # Z added by devel/scanprov
+IoTYPE_RDONLY                  # Z added by devel/scanprov
+IoTYPE_RDWR                    # Z added by devel/scanprov
+IoTYPE_SOCKET                  # Z added by devel/scanprov
+IoTYPE_STD                     # Z added by devel/scanprov
+IoTYPE_WRONLY                  # Z added by devel/scanprov
 isBLANK                        # U
 isBLANK_LC                     # U
+isBLANK_LC_uni                 # Z added by devel/scanprov
+isBLANK_LC_utf8                # Z added by devel/scanprov
+isBLANK_uni                    # Z added by devel/scanprov
 isPSXSPC                       # U
 isPSXSPC_LC                    # U
+isPSXSPC_LC_utf8               # Z added by devel/scanprov
+isPSXSPC_uni                   # Z added by devel/scanprov
 is_utf8_string                 # U
+isWARNf_on                     # Z added by devel/scanprov
+magic_regdatum_set             # F added by devel/scanprov
 NVef                           # E
 NVff                           # E
 NVgf                           # E
-NVSIZE                         # E
+NV_MANT_DIG                    # Z added by devel/scanprov
+NV_MAX                         # Z added by devel/scanprov
+NV_MIN                         # Z added by devel/scanprov
+NV_PRESERVES_UV_BITS           # K added by devel/scanprov
+NVSIZE                         # K added by devel/scanprov
+OP_IS_FILETEST                 # Z added by devel/scanprov
+OP_IS_SOCKET                   # Z added by devel/scanprov
+Perl_atof2                     # Z added by devel/scanprov
+Perl_isnan                     # Z added by devel/scanprov
+PERL_PRIeldbl                  # K added by devel/scanprov
+PERL_SCNfldbl                  # K added by devel/scanprov
+PL_beginav_save                # Z added by devel/scanprov
+report_evil_fh                 # F added by devel/scanprov
+SAVECOPFILE_FREE               # Z added by devel/scanprov
+SAVECOPSTASH_FREE              # Z added by devel/scanprov
+SAVEGENERICPV                  # Z added by devel/scanprov
 save_generic_pvref             # U
+SAVEt_GENERIC_PVREF            # Z added by devel/scanprov
 SvGAMAGIC                      # U
-utf8_to_bytes                  # U
-do_trans_complex               # F added by devel/scanprov
-do_trans_count                 # F added by devel/scanprov
-do_trans_simple                # F added by devel/scanprov
-find_in_my_stash               # F added by devel/scanprov
-magic_regdatum_set             # F added by devel/scanprov
-report_evil_fh                 # F added by devel/scanprov
 swallow_bom                    # F added by devel/scanprov
 sys_intern_clear               # F added by devel/scanprov
 sys_intern_init                # F added by devel/scanprov
+utf8_to_bytes                  # U
+xio_any                        # Z added by devel/scanprov
+xio_dirp                       # Z added by devel/scanprov
index 49d0846..9a969e5 100644 (file)
@@ -1 +1,2 @@
 5.007000
+NO_LOCALE                      # Z added by devel/scanprov
index 14a9a27..95d41e5 100644 (file)
@@ -1,8 +1,78 @@
 5.007001
+ASCII_TO_NATIVE                # Z added by devel/scanprov
 bytes_from_utf8                # U
-despatch_signals               # U
+CLONEf_COPY_STACKS             # Z added by devel/scanprov
+CLONEf_KEEP_PTR_TABLE          # Z added by devel/scanprov
+CvCONST                        # Z added by devel/scanprov
+CvCONST_off                    # Z added by devel/scanprov
+CvCONST_on                     # Z added by devel/scanprov
+CVf_CONST                      # Z added by devel/scanprov
+DEBUG_c_FLAG                   # Z added by devel/scanprov
+DEBUG_c_TEST                   # Z added by devel/scanprov
+DEBUG_DB_RECURSE_FLAG          # Z added by devel/scanprov
+DEBUG_D_FLAG                   # Z added by devel/scanprov
+DEBUG_D_TEST                   # Z added by devel/scanprov
+DEBUG_f_FLAG                   # Z added by devel/scanprov
+DEBUG_f_TEST                   # Z added by devel/scanprov
+DEBUG_l_FLAG                   # Z added by devel/scanprov
+DEBUG_l_TEST                   # Z added by devel/scanprov
+DEBUG_MASK                     # Z added by devel/scanprov
+DEBUG_m_FLAG                   # Z added by devel/scanprov
+DEBUG_m_TEST                   # Z added by devel/scanprov
+DEBUG_o_FLAG                   # Z added by devel/scanprov
+DEBUG_o_TEST                   # Z added by devel/scanprov
+DEBUG_P_FLAG                   # Z added by devel/scanprov
+DEBUG_p_FLAG                   # Z added by devel/scanprov
+DEBUG_P_TEST                   # Z added by devel/scanprov
+DEBUG_p_TEST                   # Z added by devel/scanprov
+DEBUG_R                        # Z added by devel/scanprov
+DEBUG_R_FLAG                   # Z added by devel/scanprov
+DEBUG_r_FLAG                   # Z added by devel/scanprov
+DEBUG_R_TEST                   # Z added by devel/scanprov
+DEBUG_r_TEST                   # Z added by devel/scanprov
+DEBUG_s_FLAG                   # Z added by devel/scanprov
+DEBUG_s_TEST                   # Z added by devel/scanprov
+DEBUG_T                        # Z added by devel/scanprov
+DEBUG_T_FLAG                   # Z added by devel/scanprov
+DEBUG_t_FLAG                   # Z added by devel/scanprov
+DEBUG_TOP_FLAG                 # Z added by devel/scanprov
+DEBUG_T_TEST                   # Z added by devel/scanprov
+DEBUG_t_TEST                   # Z added by devel/scanprov
+DEBUG_u_FLAG                   # Z added by devel/scanprov
+DEBUG_u_TEST                   # Z added by devel/scanprov
+DEBUG_X_FLAG                   # Z added by devel/scanprov
+DEBUG_x_FLAG                   # Z added by devel/scanprov
+DEBUG_X_TEST                   # Z added by devel/scanprov
+DEBUG_x_TEST                   # Z added by devel/scanprov
+despatch_signals               # F added by devel/scanprov
 do_openn                       # U
+EVAL_INREQUIRE                 # Z added by devel/scanprov
+EXEC_ARGV_CAST                 # Z added by devel/scanprov
+expect_number                  # F added by devel/scanprov
+FCNTL_CAN_LOCK                 # K added by devel/scanprov
+FF_0DECIMAL                    # Z added by devel/scanprov
 gv_handler                     # U
+HAS_FSYNC                      # K added by devel/scanprov
+HAS_GETITIMER                  # K added by devel/scanprov
+HAS_GETPAGESIZE                # K added by devel/scanprov
+HAS_READV                      # K added by devel/scanprov
+HAS_RECVMSG                    # K added by devel/scanprov
+HAS_SBRK_PROTO                 # K added by devel/scanprov
+HAS_SENDMSG                    # K added by devel/scanprov
+HAS_SETITIMER                  # K added by devel/scanprov
+HAS_SIGPROCMASK                # K added by devel/scanprov
+HAS_SOCKATMARK                 # K added by devel/scanprov
+HAS_STRTOQ                     # K added by devel/scanprov
+HAS_STRUCT_CMSGHDR             # K added by devel/scanprov
+HAS_STRUCT_MSGHDR              # K added by devel/scanprov
+HAS_UALARM                     # K added by devel/scanprov
+HAS_USLEEP                     # K added by devel/scanprov
+HAS_WRITEV                     # K added by devel/scanprov
+HeKLEN_UTF8                    # Z added by devel/scanprov
+HEK_UTF8                       # Z added by devel/scanprov
+HeKUTF8                        # Z added by devel/scanprov
+INCLUDE_PROTOTYPES             # Z added by devel/scanprov
+INT64_C                        # Z added by devel/scanprov
 isALNUM_LC_uvchr               # U
 isALPHA_LC_uvchr               # U
 isCNTRL_LC_uvchr               # U
@@ -15,39 +85,175 @@ isPRINT_LC_uvchr               # U
 isPUNCT_LC_uvchr               # U
 isSPACE_LC_uvchr               # U
 isUPPER_LC_uvchr               # U
+LONG_DOUBLE_EQUALS_DOUBLE      # Z added by devel/scanprov
+LVRET                          # Z added by devel/scanprov
+magic_freeovrld                # F added by devel/scanprov
 my_popen_list                  # U
+NATIVE_TO_ASCII                # Z added by devel/scanprov
 NATIVE_TO_UNI                  # U
+NATIVE_TO_UTF                  # Z added by devel/scanprov
+NEED_VA_COPY                   # K added by devel/scanprov
 newSVpvn_share                 # U
+OPpMAYBE_LVSUB                 # Z added by devel/scanprov
 PerlIO_apply_layers            # U
+PerlIOArg                      # Z added by devel/scanprov
+PerlIOBase                     # Z added by devel/scanprov
 PerlIO_binmode                 # U
 PerlIO_debug                   # U
+PERLIO_F_APPEND                # Z added by devel/scanprov
+PERLIO_F_CANREAD               # Z added by devel/scanprov
+PERLIO_F_CANWRITE              # Z added by devel/scanprov
+PERLIO_F_CRLF                  # Z added by devel/scanprov
+PERLIO_F_EOF                   # Z added by devel/scanprov
+PERLIO_F_ERROR                 # Z added by devel/scanprov
+PERLIO_F_FASTGETS              # Z added by devel/scanprov
+PERLIO_F_LINEBUF               # Z added by devel/scanprov
+PERLIO_F_OPEN                  # Z added by devel/scanprov
+PERLIO_F_RDBUF                 # Z added by devel/scanprov
+PERLIO_F_TEMP                  # Z added by devel/scanprov
+PERLIO_F_TRUNCATE              # Z added by devel/scanprov
+PERLIO_F_TTY                   # Z added by devel/scanprov
+PERLIO_F_UNBUF                 # Z added by devel/scanprov
+PERLIO_F_UTF8                  # Z added by devel/scanprov
+PERLIO_F_WRBUF                 # Z added by devel/scanprov
+PERLIO_K_BUFFERED              # Z added by devel/scanprov
+PERLIO_K_CANCRLF               # Z added by devel/scanprov
+PERLIO_K_DESTRUCT              # Z added by devel/scanprov
+PERLIO_K_DUMMY                 # Z added by devel/scanprov
+PERLIO_K_FASTGETS              # Z added by devel/scanprov
+PERLIO_K_RAW                   # Z added by devel/scanprov
+PERLIO_K_UTF8                  # Z added by devel/scanprov
+PERLIO_LAYERS                  # Z added by devel/scanprov
+PerlIONext                     # Z added by devel/scanprov
+PerlIOSelf                     # Z added by devel/scanprov
+PERLIO_STDTEXT                 # Z added by devel/scanprov
+PERL_MG_UFUNC                  # Z added by devel/scanprov
+PERL_PRESERVE_IVUV             # Z added by devel/scanprov
+PerlProc_lasthost              # Z added by devel/scanprov
+PerlProc_popen_list            # Z added by devel/scanprov
+PerlSIO_canset_cnt             # Z added by devel/scanprov
+PerlSIO_clearerr               # Z added by devel/scanprov
+PerlSIO_fast_gets              # Z added by devel/scanprov
+PerlSIO_fclose                 # Z added by devel/scanprov
+PerlSIO_fdopen                 # Z added by devel/scanprov
+PerlSIO_fdupopen               # Z added by devel/scanprov
+PerlSIO_feof                   # Z added by devel/scanprov
+PerlSIO_ferror                 # Z added by devel/scanprov
+PerlSIO_fflush                 # Z added by devel/scanprov
+PerlSIO_fgetc                  # Z added by devel/scanprov
+PerlSIO_fgetpos                # Z added by devel/scanprov
+PerlSIO_fgets                  # Z added by devel/scanprov
+PerlSIO_fileno                 # Z added by devel/scanprov
+PerlSIO_fopen                  # Z added by devel/scanprov
+PerlSIO_fputc                  # Z added by devel/scanprov
+PerlSIO_fputs                  # Z added by devel/scanprov
+PerlSIO_fread                  # Z added by devel/scanprov
+PerlSIO_freopen                # Z added by devel/scanprov
+PerlSIO_fseek                  # Z added by devel/scanprov
+PerlSIO_fsetpos                # Z added by devel/scanprov
+PerlSIO_ftell                  # Z added by devel/scanprov
+PerlSIO_fwrite                 # Z added by devel/scanprov
+PerlSIO_get_base               # Z added by devel/scanprov
+PerlSIO_get_bufsiz             # Z added by devel/scanprov
+PerlSIO_get_cnt                # Z added by devel/scanprov
+PerlSIO_get_ptr                # Z added by devel/scanprov
+PerlSIO_has_base               # Z added by devel/scanprov
+PerlSIO_has_cntptr             # Z added by devel/scanprov
+PerlSIO_init                   # Z added by devel/scanprov
+PerlSIO_printf                 # Z added by devel/scanprov
+PerlSIO_rewind                 # Z added by devel/scanprov
+PerlSIO_setbuf                 # Z added by devel/scanprov
+PerlSIO_set_cnt                # Z added by devel/scanprov
+PerlSIO_setlinebuf             # Z added by devel/scanprov
+PerlSIO_set_ptr                # Z added by devel/scanprov
+PerlSIO_setvbuf                # Z added by devel/scanprov
+PerlSIO_stderr                 # Z added by devel/scanprov
+PerlSIO_stdin                  # Z added by devel/scanprov
+PerlSIO_stdout                 # Z added by devel/scanprov
+PerlSIO_stdoutf                # Z added by devel/scanprov
+PerlSIO_tmpfile                # Z added by devel/scanprov
+PerlSIO_ungetc                 # Z added by devel/scanprov
+PerlSIO_vprintf                # Z added by devel/scanprov
+PERL_SOCKS_NEED_PROTOTYPES     # Z added by devel/scanprov
+Perl_start_glob                # F added by devel/scanprov
+Perl_va_copy                   # Z added by devel/scanprov
+PL_ors_sv                      # Z added by devel/scanprov
+PL_psig_pend                   # Z added by devel/scanprov
+PL_sig_pending                 # Z added by devel/scanprov
+PmopSTASH                      # Z added by devel/scanprov
+PmopSTASHPV                    # Z added by devel/scanprov
+PmopSTASHPV_set                # Z added by devel/scanprov
+PmopSTASH_set                  # Z added by devel/scanprov
 POPpbytex                      # E
 printf_nocontext               # U
-save_mortalizesv               # U
-scan_num                       # A
+PTR2ul                         # U
+reghop3                        # F added by devel/scanprov
+reghopmaybe3                   # F added by devel/scanprov
+SAVEMORTALIZESV                # U
+SAVEt_MORTALIZESV              # Z added by devel/scanprov
+SCOPE_SAVES_SIGNAL_MASK        # Z added by devel/scanprov
+SIG_SIZE                       # K added by devel/scanprov
+SSNEWat                        # Z added by devel/scanprov
+SSNEWt                         # Z added by devel/scanprov
+SSPTRt                         # Z added by devel/scanprov
+StashHANDLER                   # Z added by devel/scanprov
+STDIO_PTR_LVAL_SETS_CNT        # K added by devel/scanprov
+stdize_locale                  # F added by devel/scanprov
+STRUCT_SV                      # Z added by devel/scanprov
+sv_2iuv_non_preserve           # F added by devel/scanprov
 sv_force_normal_flags          # U
 SV_IMMEDIATE_UNREF             # E
+SvIV_please                    # Z added by devel/scanprov
 sv_setref_uv                   # U
 sv_unref_flags                 # U
 SvUOK                          # U
 sv_utf8_upgrade                # E (Perl_sv_utf8_upgrade)
+tokereport                     # F added by devel/scanprov
+TOPm1s                         # Z added by devel/scanprov
+TOPp1s                         # Z added by devel/scanprov
+U32_ALIGNMENT_REQUIRED         # K added by devel/scanprov
+UINT64_C                       # Z added by devel/scanprov
+UNICODE_IS_BYTE_ORDER_MARK     # Z added by devel/scanprov
+UNICODE_IS_REPLACEMENT         # Z added by devel/scanprov
+UNICODE_IS_SURROGATE           # Z added by devel/scanprov
 UNICODE_REPLACEMENT            # E
+UNICODE_SURROGATE_FIRST        # Z added by devel/scanprov
+UNICODE_SURROGATE_LAST         # Z added by devel/scanprov
+UNI_IS_INVARIANT               # Z added by devel/scanprov
+UNISKIP                        # Z added by devel/scanprov
 UNI_TO_NATIVE                  # U
+USE_ENVIRON_ARRAY              # Z added by devel/scanprov
+USE_PERLIO                     # K added by devel/scanprov
+UTF8_ACCUMULATE                # Z added by devel/scanprov
+UTF8_ALLOW_ANY                 # Z added by devel/scanprov
+UTF8_ALLOW_ANYUV               # Z added by devel/scanprov
+UTF8_ALLOW_CONTINUATION        # Z added by devel/scanprov
+UTF8_ALLOW_EMPTY               # Z added by devel/scanprov
+UTF8_ALLOW_FFFF                # Z added by devel/scanprov
+UTF8_ALLOW_LONG                # Z added by devel/scanprov
+UTF8_ALLOW_NON_CONTINUATION    # Z added by devel/scanprov
+UTF8_ALLOW_SHORT               # Z added by devel/scanprov
+UTF8_ALLOW_SURROGATE           # Z added by devel/scanprov
 UTF8_CHECK_ONLY                # E
+UTF8_EIGHT_BIT_HI              # Z added by devel/scanprov
+UTF8_EIGHT_BIT_LO              # Z added by devel/scanprov
+UTF8_IS_CONTINUATION           # Z added by devel/scanprov
+UTF8_IS_CONTINUED              # Z added by devel/scanprov
+UTF8_IS_DOWNGRADEABLE_START    # Z added by devel/scanprov
 UTF8_IS_INVARIANT              # U
+UTF8_IS_START                  # Z added by devel/scanprov
 utf8_length                    # U
 utf8n_to_uvchr                 # U
-utf8_to_uvchr                  # U
-uvchr_to_utf8                  # U
-UVXf                           # E
-PTR2ul                         # M added by devel/scanprov
-expect_number                  # F added by devel/scanprov
-magic_freeovrld                # F added by devel/scanprov
-Perl_start_glob                # F added by devel/scanprov
-reghop3                        # F added by devel/scanprov
-reghopmaybe3                   # F added by devel/scanprov
-stdize_locale                  # F added by devel/scanprov
-sv_2iuv_non_preserve           # F added by devel/scanprov
-tokereport                     # F added by devel/scanprov
 utf8n_to_uvuni                 # F added by devel/scanprov
+utf8_to_uvchr                  # U
 utf8_to_uvuni                  # F added by devel/scanprov
+UTF_ACCUMULATION_SHIFT         # Z added by devel/scanprov
+UTF_CONTINUATION_MARK          # Z added by devel/scanprov
+UTF_CONTINUATION_MASK          # Z added by devel/scanprov
+UTF_START_MARK                 # Z added by devel/scanprov
+UTF_START_MASK                 # Z added by devel/scanprov
+UTF_TO_NATIVE                  # Z added by devel/scanprov
+uvchr_to_utf8                  # U
+UVf                            # Z added by devel/scanprov
+UVXf                           # K added by devel/scanprov
+WIN32SCK_IS_STDSCK             # Z added by devel/scanprov
index fafecdf..04ef745 100644 (file)
@@ -1,28 +1,54 @@
 5.007002
 atfork_lock                    # U
 atfork_unlock                  # U
+boot_core_PerlIO               # F added by devel/scanprov
 calloc                         # U
+CLONEf_CLONE_HOST              # Z added by devel/scanprov
+closest_cop                    # F added by devel/scanprov
+CvFILE_set_from_cop            # Z added by devel/scanprov
 dAX                            # E
+DB_VERSION_MAJOR_CFG           # K added by devel/scanprov
+DB_VERSION_MINOR_CFG           # K added by devel/scanprov
+DB_VERSION_PATCH_CFG           # K added by devel/scanprov
+deb_curcv                      # F added by devel/scanprov
 dITEMS                         # E
+dTHXs                          # Z added by devel/scanprov
 getcwd_sv                      # U
 grok_number                    # U
 GROK_NUMERIC_RADIX             # U
 grok_numeric_radix             # U
+HAS_FCHDIR                     # K added by devel/scanprov
+HAS_FLOCK_PROTO                # K added by devel/scanprov
+HAS_NL_LANGINFO                # K added by devel/scanprov
+HAS_PTHREAD_UNCHECKED_GETSPECIFIC_NP # Z added by devel/scanprov
+HAS_SOCKATMARK_PROTO           # K added by devel/scanprov
+HAS_STRFTIME                   # K added by devel/scanprov
+HAS_SYSCALL_PROTO              # K added by devel/scanprov
+HAS_USLEEP_PROTO               # K added by devel/scanprov
+HINT_BYTES                     # Z added by devel/scanprov
+I32_MAX_P1                     # Z added by devel/scanprov
+I_LANGINFO                     # K added by devel/scanprov
+IN_BYTES                       # Z added by devel/scanprov
 init_tm                        # U
 IN_LOCALE                      # E
 IN_LOCALE_COMPILETIME          # E
 IN_LOCALE_RUNTIME              # E
+INT32_MIN                      # Z added by devel/scanprov
+INT64_MIN                      # Z added by devel/scanprov
 IS_NUMBER_GREATER_THAN_UV_MAX  # E
 IS_NUMBER_INFINITY             # E
 IS_NUMBER_IN_UV                # E
 IS_NUMBER_NEG                  # E
 IS_NUMBER_NOT_INT              # E
+IV_MAX_P1                      # Z added by devel/scanprov
 malloc                         # U
 mfree                          # U
 mini_mktime                    # U
 my_strftime                    # U
 op_null                        # U
-OSVERS                         # E
+OSVERS                         # K added by devel/scanprov
+PERL_FPU_INIT                  # Z added by devel/scanprov
+PERL_GPROF_MONCONTROL          # Z added by devel/scanprov
 PERL_MAGIC_arylen              # E
 PERL_MAGIC_backref             # E
 PERL_MAGIC_bm                  # E
@@ -53,25 +79,39 @@ PERL_MAGIC_tiedelem            # E
 PERL_MAGIC_tiedscalar          # E
 PERL_MAGIC_uvar                # E
 PERL_MAGIC_vec                 # E
+PERL_TARGETARCH                # K added by devel/scanprov
+PERL_UNUSED_DECL               # E
+PERL_UNUSED_VAR                # U
+PL_numeric_radix_sv            # Z added by devel/scanprov
+PL_reentrant_buffer            # Z added by devel/scanprov
+PL_regex_pad                   # Z added by devel/scanprov
+PL_regex_padav                 # Z added by devel/scanprov
+PM_GETRE                       # Z added by devel/scanprov
+PM_SETRE                       # Z added by devel/scanprov
+PTHREAD_ATFORK                 # Z added by devel/scanprov
+PTHREAD_GETSPECIFIC            # Z added by devel/scanprov
 realloc                        # U
-sv_2pv_flags                   # U
+sv_2pv_flags                   # F added by devel/scanprov
+sv_2pv_nomg                    # Z added by devel/scanprov
 sv_catpvn_flags                # U
 sv_catpvn_nomg                 # U
 sv_catsv_flags                 # U
 sv_catsv_nomg                  # U
 SV_GMAGIC                      # E
+SVpad_TYPED                    # Z added by devel/scanprov
+SvPV_flags                     # U
+SvPV_force_flags               # U
 SvPV_force_nomg                # U
 sv_pvn_force_flags             # U
+sv_pvn_force_nomg              # Z added by devel/scanprov
 SvPV_nomg                      # U
 sv_setsv_flags                 # U
 sv_setsv_nomg                  # U
 sv_utf8_upgrade_flags          # U
 sv_utf8_upgrade_nomg           # U
-PERL_UNUSED_DECL               # M added by devel/scanprov
-PERL_UNUSED_VAR                # M added by devel/scanprov
-SvPV_flags                     # M added by devel/scanprov
-SvPV_force_flags               # M added by devel/scanprov
-boot_core_PerlIO               # F added by devel/scanprov
-closest_cop                    # F added by devel/scanprov
-deb_curcv                      # F added by devel/scanprov
-Perl_my_atof2                  # F added by devel/scanprov
+THREAD_CREATE_NEEDS_STACK      # Z added by devel/scanprov
+U_32                           # Z added by devel/scanprov
+U32_MAX_P1                     # Z added by devel/scanprov
+U32_MAX_P1_HALF                # Z added by devel/scanprov
+UV_MAX_P1                      # Z added by devel/scanprov
+UV_MAX_P1_HALF                 # Z added by devel/scanprov
index 6360b28..41bcb41 100644 (file)
@@ -1,33 +1,87 @@
 5.007003
+ANYOF_BITMAP_CLEARALL          # Z added by devel/scanprov
+ANYOF_BITMAP_SETALL            # Z added by devel/scanprov
+ANYOF_FOLD_SHARP_S             # Z added by devel/scanprov
+apply_attrs_my                 # F added by devel/scanprov
 ckWARN3                        # U
 ckWARN3_d                      # U
 ckWARN4                        # U
 ckWARN4_d                      # U
+CopFILE_free                   # Z added by devel/scanprov
 custom_op_desc                 # U
 custom_op_name                 # U
-cx_dup                         # E (Perl_cx_dup)
 deb                            # U
 deb_nocontext                  # U
 debstack                       # U
 debstackptrs                   # U
+DEBUG_J_FLAG                   # Z added by devel/scanprov
+DEBUG_J_TEST                   # Z added by devel/scanprov
 fp_dup                         # A
 gp_dup                         # E (Perl_gp_dup)
 grok_bin                       # U
 grok_hex                       # U
 grok_oct                       # U
+group_end                      # F added by devel/scanprov
 gv_fetchmeth_autoload          # U
+HAS_DIRFD                      # K added by devel/scanprov
+HAS_FINITE                     # K added by devel/scanprov
+HAS_FINITEL                    # K added by devel/scanprov
+HAS_ISINF                      # K added by devel/scanprov
+HAS_PROCSELFEXE                # K added by devel/scanprov
 he_dup                         # E (Perl_he_dup)
+HINT_SORT_STABLE               # Z added by devel/scanprov
+HvPLACEHOLDERS                 # Z added by devel/scanprov
+HvTOTALKEYS                    # Z added by devel/scanprov
+HvUSEDKEYS                     # Z added by devel/scanprov
 ibcmp_utf8                     # U
+init_argv_symbols              # F added by devel/scanprov
 IS_NUMBER_NAN                  # E
+measure_struct                 # F added by devel/scanprov
 mg_dup                         # E (Perl_mg_dup)
+MGf_COPY                       # Z added by devel/scanprov
+MGf_DUP                        # Z added by devel/scanprov
 my_fork                        # U
 my_socketpair                  # U
+NEXT_LINE_CHAR                 # Z added by devel/scanprov
+next_symbol                    # F added by devel/scanprov
+NV_EPSILON                     # Z added by devel/scanprov
+NV_INF                         # Z added by devel/scanprov
+NV_MAX_10_EXP                  # Z added by devel/scanprov
+NV_MIN_10_EXP                  # Z added by devel/scanprov
+NV_NAN                         # Z added by devel/scanprov
 OP_DESC                        # U
 OP_NAME                        # U
+OPpHUSH_VMSISH                 # Z added by devel/scanprov
+OutCopFILE                     # Z added by devel/scanprov
+pack_cat                       # U
+packWARN                       # U
+packWARN2                      # U
+packWARN3                      # U
+packWARN4                      # U
+PERL_DEBUG_PAD                 # Z added by devel/scanprov
+PERL_DEBUG_PAD_ZERO            # Z added by devel/scanprov
 perl_destruct                  # E (perl_destruct)
 PERL_EXIT_DESTRUCT_END         # E
+Perl_fp_class                  # Z added by devel/scanprov
+Perl_fp_class_denorm           # Z added by devel/scanprov
+Perl_fp_class_inf              # Z added by devel/scanprov
+Perl_fp_class_nan              # Z added by devel/scanprov
+Perl_fp_class_ndenorm          # Z added by devel/scanprov
+Perl_fp_class_ninf             # Z added by devel/scanprov
+Perl_fp_class_nnorm            # Z added by devel/scanprov
+Perl_fp_class_norm             # Z added by devel/scanprov
+Perl_fp_class_nzero            # Z added by devel/scanprov
+Perl_fp_class_pdenorm          # Z added by devel/scanprov
+Perl_fp_class_pinf             # Z added by devel/scanprov
+Perl_fp_class_pnorm            # Z added by devel/scanprov
+Perl_fp_class_pzero            # Z added by devel/scanprov
+Perl_fp_class_qnan             # Z added by devel/scanprov
+Perl_fp_class_snan             # Z added by devel/scanprov
+Perl_fp_class_zero             # Z added by devel/scanprov
 PerlIO_clearerr                # U (PerlIO_clearerr)
 PerlIO_close                   # U (PerlIO_close)
+PERLIO_DUP_CLONE               # Z added by devel/scanprov
+PERLIO_DUP_FD                  # Z added by devel/scanprov
 PerlIO_eof                     # U (PerlIO_eof)
 PerlIO_error                   # U (PerlIO_error)
 PerlIO_fileno                  # U (PerlIO_fileno)
@@ -37,6 +91,7 @@ PerlIO_get_base                # U (PerlIO_get_base)
 PerlIO_get_bufsiz              # U (PerlIO_get_bufsiz)
 PerlIO_get_cnt                 # U (PerlIO_get_cnt)
 PerlIO_get_ptr                 # U (PerlIO_get_ptr)
+PERLIO_K_MULTIARG              # Z added by devel/scanprov
 PerlIO_read                    # U (PerlIO_read)
 PerlIO_seek                    # U (PerlIO_seek)
 PerlIO_set_cnt                 # U (PerlIO_set_cnt)
@@ -47,19 +102,43 @@ PerlIO_stdin                   # U (PerlIO_stdin)
 PerlIO_stdout                  # U (PerlIO_stdout)
 PerlIO_tell                    # U (PerlIO_tell)
 PerlIO_unread                  # U (PerlIO_unread)
+PERLIO_USING_CRLF              # Z added by devel/scanprov
+PerlIOValid                    # Z added by devel/scanprov
 PerlIO_write                   # U (PerlIO_write)
+Perl_isfinite                  # Z added by devel/scanprov
+Perl_isinf                     # Z added by devel/scanprov
 PERL_MAGIC_shared              # E
 PERL_MAGIC_shared_scalar       # E
 PERL_MAGIC_uvar_elem           # E
 PERL_SCAN_ALLOW_UNDERSCORES    # E
 PERL_SCAN_DISALLOW_PREFIX      # E
 PERL_SCAN_GREATER_THAN_UV_MAX  # E
+PERL_UNICODE_MAX               # Z added by devel/scanprov
+PERL_WRITE_MSG_TO_CONSOLE      # Z added by devel/scanprov
+PL_custom_op_descs             # Z added by devel/scanprov
+PL_custom_op_names             # Z added by devel/scanprov
+PL_debug_pad                   # Z added by devel/scanprov
+PL_def_layerlist               # Z added by devel/scanprov
+PL_encoding                    # Z added by devel/scanprov
+PL_known_layers                # Z added by devel/scanprov
+PL_lockhook                    # Z added by devel/scanprov
 PL_peepp                       # E
+PL_perlio                      # Z added by devel/scanprov
+PL_savebegin                   # Z added by devel/scanprov
+PL_sharehook                   # Z added by devel/scanprov
+PL_taint_warn                  # Z added by devel/scanprov
+PL_unlockhook                  # Z added by devel/scanprov
+PL_utf8_tofold                 # Z added by devel/scanprov
+PROCSELFEXE_PATH               # K added by devel/scanprov
 pv_uni_display                 # U
 rvpv_dup                       # E
+SAVESHAREDPV                   # Z added by devel/scanprov
 savesharedpv                   # U
 save_shared_pvref              # U
+SAVEt_SHARED_PVREF             # Z added by devel/scanprov
+SHARP_S_SKIP                   # Z added by devel/scanprov
 si_dup                         # E (Perl_si_dup)
+Slab_Free                      # F added by devel/scanprov
 sortsv                         # U
 ss_dup                         # E (Perl_ss_dup)
 sv_copypv                      # U
@@ -74,17 +153,25 @@ sv_recode_to_utf8              # U
 SvSHARE                        # U
 sv_uni_display                 # U
 SvUNLOCK                       # U
+toFOLD_uni                     # Z added by devel/scanprov
+UNICODE_ALLOW_ANY              # Z added by devel/scanprov
+UNICODE_ALLOW_SUPER            # Z added by devel/scanprov
+UNICODE_ALLOW_SURROGATE        # Z added by devel/scanprov
+UNICODE_GREEK_CAPITAL_LETTER_SIGMA # Z added by devel/scanprov
+UNICODE_GREEK_SMALL_LETTER_FINAL_SIGMA # Z added by devel/scanprov
+UNICODE_GREEK_SMALL_LETTER_SIGMA # Z added by devel/scanprov
+UNI_DISPLAY_BACKSLASH          # Z added by devel/scanprov
+UNI_DISPLAY_ISPRINT            # Z added by devel/scanprov
+UNI_DISPLAY_QQ                 # Z added by devel/scanprov
+UNI_DISPLAY_REGEX              # Z added by devel/scanprov
 unpack_str                     # U
+unpackWARN1                    # Z added by devel/scanprov
+unpackWARN2                    # Z added by devel/scanprov
+unpackWARN3                    # Z added by devel/scanprov
+unpackWARN4                    # Z added by devel/scanprov
+USE_REENTRANT_API              # Z added by devel/scanprov
+USE_UTF8_IN_NAMES              # Z added by devel/scanprov
 uvchr_to_utf8_flags            # U
-vdeb                           # U
-dMY_CXT_SV                     # M added by devel/scanprov
-packWARN                       # M added by devel/scanprov
-_pMY_CXT                       # M added by devel/scanprov
-pMY_CXT_                       # M added by devel/scanprov
-apply_attrs_my                 # F added by devel/scanprov
-group_end                      # F added by devel/scanprov
-init_argv_symbols              # F added by devel/scanprov
-measure_struct                 # F added by devel/scanprov
-next_symbol                    # F added by devel/scanprov
-Slab_Free                      # F added by devel/scanprov
 uvuni_to_utf8_flags            # F added by devel/scanprov
+vdeb                           # U
+XHvTOTALKEYS                   # Z added by devel/scanprov
index 53b7686..821035b 100644 (file)
 5.008000
+anchored_utf8                  # Z added by devel/scanprov
+ASCTIME_R_PROTO                # K added by devel/scanprov
+atoll                          # Z added by devel/scanprov
+check_utf8                     # Z added by devel/scanprov
+CRYPT_R_PROTO                  # K added by devel/scanprov
+CTERMID_R_PROTO                # K added by devel/scanprov
+CTIME_R_PROTO                  # K added by devel/scanprov
+CVf_BUILTIN_ATTRS              # Z added by devel/scanprov
+do_aspawn                      # F added by devel/scanprov
+do_spawn                       # F added by devel/scanprov
+do_spawn_nowait                # F added by devel/scanprov
+DRAND48_R_PROTO                # K added by devel/scanprov
+ENDGRENT_R_HAS_FPTR            # Z added by devel/scanprov
+ENDGRENT_R_PROTO               # K added by devel/scanprov
+ENDHOSTENT_R_PROTO             # K added by devel/scanprov
+ENDNETENT_R_PROTO              # K added by devel/scanprov
+ENDPROTOENT_R_PROTO            # K added by devel/scanprov
+ENDPWENT_R_HAS_FPTR            # Z added by devel/scanprov
+ENDPWENT_R_PROTO               # K added by devel/scanprov
+ENDSERVENT_R_PROTO             # K added by devel/scanprov
+FD_CLR                         # Z added by devel/scanprov
+FD_ISSET                       # Z added by devel/scanprov
+FD_SET                         # Z added by devel/scanprov
+fd_set                         # Z added by devel/scanprov
+FD_ZERO                        # Z added by devel/scanprov
+float_utf8                     # Z added by devel/scanprov
+GETGRENT_R_HAS_BUFFER          # Z added by devel/scanprov
+GETGRENT_R_HAS_FPTR            # Z added by devel/scanprov
+GETGRENT_R_HAS_PTR             # Z added by devel/scanprov
+GETGRENT_R_PROTO               # K added by devel/scanprov
+GETGRGID_R_HAS_BUFFER          # Z added by devel/scanprov
+GETGRGID_R_HAS_PTR             # Z added by devel/scanprov
+GETGRGID_R_PROTO               # K added by devel/scanprov
+GETGRNAM_R_HAS_BUFFER          # Z added by devel/scanprov
+GETGRNAM_R_HAS_PTR             # Z added by devel/scanprov
+GETGRNAM_R_PROTO               # K added by devel/scanprov
+GETHOSTBYADDR_R_HAS_BUFFER     # Z added by devel/scanprov
+GETHOSTBYADDR_R_HAS_ERRNO      # Z added by devel/scanprov
+GETHOSTBYADDR_R_HAS_PTR        # Z added by devel/scanprov
+GETHOSTBYADDR_R_PROTO          # K added by devel/scanprov
+GETHOSTBYNAME_R_HAS_BUFFER     # Z added by devel/scanprov
+GETHOSTBYNAME_R_HAS_ERRNO      # Z added by devel/scanprov
+GETHOSTBYNAME_R_HAS_PTR        # Z added by devel/scanprov
+GETHOSTBYNAME_R_PROTO          # K added by devel/scanprov
+GETHOSTENT_R_HAS_BUFFER        # Z added by devel/scanprov
+GETHOSTENT_R_HAS_ERRNO         # Z added by devel/scanprov
+GETHOSTENT_R_HAS_PTR           # Z added by devel/scanprov
+GETHOSTENT_R_PROTO             # K added by devel/scanprov
+GETLOGIN_R_PROTO               # K added by devel/scanprov
+GETNETBYADDR_R_HAS_BUFFER      # Z added by devel/scanprov
+GETNETBYADDR_R_HAS_ERRNO       # Z added by devel/scanprov
+GETNETBYADDR_R_HAS_PTR         # Z added by devel/scanprov
+GETNETBYADDR_R_PROTO           # K added by devel/scanprov
+GETNETBYNAME_R_HAS_BUFFER      # Z added by devel/scanprov
+GETNETBYNAME_R_HAS_ERRNO       # Z added by devel/scanprov
+GETNETBYNAME_R_HAS_PTR         # Z added by devel/scanprov
+GETNETBYNAME_R_PROTO           # K added by devel/scanprov
+GETNETENT_R_HAS_BUFFER         # Z added by devel/scanprov
+GETNETENT_R_HAS_ERRNO          # Z added by devel/scanprov
+GETNETENT_R_HAS_PTR            # Z added by devel/scanprov
+GETNETENT_R_PROTO              # K added by devel/scanprov
+GETPROTOBYNAME_R_HAS_BUFFER    # Z added by devel/scanprov
+GETPROTOBYNAME_R_HAS_PTR       # Z added by devel/scanprov
+GETPROTOBYNAME_R_PROTO         # K added by devel/scanprov
+GETPROTOBYNUMBER_R_HAS_BUFFER  # Z added by devel/scanprov
+GETPROTOBYNUMBER_R_HAS_PTR     # Z added by devel/scanprov
+GETPROTOBYNUMBER_R_PROTO       # K added by devel/scanprov
+GETPROTOENT_R_HAS_BUFFER       # Z added by devel/scanprov
+GETPROTOENT_R_HAS_PTR          # Z added by devel/scanprov
+GETPROTOENT_R_PROTO            # K added by devel/scanprov
+GETPWENT_R_HAS_BUFFER          # Z added by devel/scanprov
+GETPWENT_R_HAS_FPTR            # Z added by devel/scanprov
+GETPWENT_R_HAS_PTR             # Z added by devel/scanprov
+GETPWENT_R_PROTO               # K added by devel/scanprov
+GETPWNAM_R_HAS_BUFFER          # Z added by devel/scanprov
+GETPWNAM_R_HAS_PTR             # Z added by devel/scanprov
+GETPWNAM_R_PROTO               # K added by devel/scanprov
+GETPWUID_R_HAS_PTR             # Z added by devel/scanprov
+GETPWUID_R_PROTO               # K added by devel/scanprov
+GETSERVBYNAME_R_HAS_BUFFER     # Z added by devel/scanprov
+GETSERVBYNAME_R_HAS_PTR        # Z added by devel/scanprov
+GETSERVBYNAME_R_PROTO          # K added by devel/scanprov
+GETSERVBYPORT_R_HAS_BUFFER     # Z added by devel/scanprov
+GETSERVBYPORT_R_HAS_PTR        # Z added by devel/scanprov
+GETSERVBYPORT_R_PROTO          # K added by devel/scanprov
+GETSERVENT_R_HAS_BUFFER        # Z added by devel/scanprov
+GETSERVENT_R_HAS_PTR           # Z added by devel/scanprov
+GETSERVENT_R_PROTO             # K added by devel/scanprov
+GETSPNAM_R_HAS_PTR             # Z added by devel/scanprov
+GETSPNAM_R_PROTO               # K added by devel/scanprov
+gettimeofday                   # Z added by devel/scanprov
+GMTIME_R_PROTO                 # K added by devel/scanprov
+HAS_TIME                       # K added by devel/scanprov
+HAS_TM_TM_ZONE                 # K added by devel/scanprov
+HEK_FLAGS                      # Z added by devel/scanprov
+HeKFLAGS                       # Z added by devel/scanprov
+HEK_UTF8_off                   # Z added by devel/scanprov
+HEK_UTF8_on                    # Z added by devel/scanprov
+HEK_WASUTF8                    # Z added by devel/scanprov
+HeKWASUTF8                     # Z added by devel/scanprov
+HEK_WASUTF8_off                # Z added by devel/scanprov
+HEK_WASUTF8_on                 # Z added by devel/scanprov
+HvHASKFLAGS                    # Z added by devel/scanprov
+HvHASKFLAGS_off                # Z added by devel/scanprov
+HvHASKFLAGS_on                 # Z added by devel/scanprov
+HVhek_FREEKEY                  # Z added by devel/scanprov
+HVhek_MASK                     # Z added by devel/scanprov
+HVhek_PLACEHOLD                # Z added by devel/scanprov
+HVhek_UTF8                     # Z added by devel/scanprov
+HVhek_WASUTF8                  # Z added by devel/scanprov
 hv_iternext_flags              # U
 HV_ITERNEXT_WANTPLACEHOLDERS   # E
+hv_notallowed                  # F added by devel/scanprov
 hv_store_flags                 # U
+I_CRYPT                        # K added by devel/scanprov
+LOCALTIME_R_PROTO              # K added by devel/scanprov
+NETDB_R_OBSOLETE               # Z added by devel/scanprov
 nothreadhook                   # U
+PerlProc_gettimeofday          # Z added by devel/scanprov
+PerlProc_spawnvp               # Z added by devel/scanprov
+PL_threadhook                  # Z added by devel/scanprov
+PL_utf8_idcont                 # Z added by devel/scanprov
+PL_utf8_idstart                # Z added by devel/scanprov
 Poison                         # E
-WARN_LAYER                     # E
-WARN_THREADS                   # E
-do_aspawn                      # F added by devel/scanprov
-do_spawn                       # F added by devel/scanprov
-do_spawn_nowait                # F added by devel/scanprov
-hv_notallowed                  # F added by devel/scanprov
+RANDOM_R_PROTO                 # K added by devel/scanprov
+READDIR64_R_PROTO              # K added by devel/scanprov
+READDIR_R_PROTO                # K added by devel/scanprov
+reentrant_free                 # F added by devel/scanprov
+reentrant_init                 # F added by devel/scanprov
+REENTRANT_PROTO_B_B            # Z added by devel/scanprov
+REENTRANT_PROTO_B_BI           # Z added by devel/scanprov
+REENTRANT_PROTO_B_BW           # Z added by devel/scanprov
+REENTRANT_PROTO_B_CCD          # Z added by devel/scanprov
+REENTRANT_PROTO_B_CCS          # Z added by devel/scanprov
+REENTRANT_PROTO_B_IBI          # Z added by devel/scanprov
+REENTRANT_PROTO_B_IBW          # Z added by devel/scanprov
+REENTRANT_PROTO_B_SB           # Z added by devel/scanprov
+REENTRANT_PROTO_B_SBI          # Z added by devel/scanprov
+REENTRANT_PROTO_I_BI           # Z added by devel/scanprov
+REENTRANT_PROTO_I_BW           # Z added by devel/scanprov
+REENTRANT_PROTO_I_CCSBWR       # Z added by devel/scanprov
+REENTRANT_PROTO_I_CCSD         # Z added by devel/scanprov
+REENTRANT_PROTO_I_CII          # Z added by devel/scanprov
+REENTRANT_PROTO_I_CIISD        # Z added by devel/scanprov
+REENTRANT_PROTO_I_CSBI         # Z added by devel/scanprov
+REENTRANT_PROTO_I_CSBIR        # Z added by devel/scanprov
+REENTRANT_PROTO_I_CSBWR        # Z added by devel/scanprov
+REENTRANT_PROTO_I_CSBWRE       # Z added by devel/scanprov
+REENTRANT_PROTO_I_CSD          # Z added by devel/scanprov
+REENTRANT_PROTO_I_CWISBWRE     # Z added by devel/scanprov
+REENTRANT_PROTO_I_CWISD        # Z added by devel/scanprov
+REENTRANT_PROTO_I_D            # Z added by devel/scanprov
+REENTRANT_PROTO_I_H            # Z added by devel/scanprov
+REENTRANT_PROTO_I_IBI          # Z added by devel/scanprov
+REENTRANT_PROTO_I_IBW          # Z added by devel/scanprov
+REENTRANT_PROTO_I_ICBI         # Z added by devel/scanprov
+REENTRANT_PROTO_I_ICSBWR       # Z added by devel/scanprov
+REENTRANT_PROTO_I_ICSD         # Z added by devel/scanprov
+REENTRANT_PROTO_I_ID           # Z added by devel/scanprov
+REENTRANT_PROTO_I_IISD         # Z added by devel/scanprov
+REENTRANT_PROTO_I_ISBWR        # Z added by devel/scanprov
+REENTRANT_PROTO_I_ISD          # Z added by devel/scanprov
+REENTRANT_PROTO_I_LISBI        # Z added by devel/scanprov
+REENTRANT_PROTO_I_LISD         # Z added by devel/scanprov
+REENTRANT_PROTO_I_SB           # Z added by devel/scanprov
+REENTRANT_PROTO_I_SBI          # Z added by devel/scanprov
+REENTRANT_PROTO_I_SBIE         # Z added by devel/scanprov
+REENTRANT_PROTO_I_SBIH         # Z added by devel/scanprov
+REENTRANT_PROTO_I_SBIR         # Z added by devel/scanprov
+REENTRANT_PROTO_I_SBWR         # Z added by devel/scanprov
+REENTRANT_PROTO_I_SBWRE        # Z added by devel/scanprov
+REENTRANT_PROTO_I_SD           # Z added by devel/scanprov
+REENTRANT_PROTO_I_TISD         # Z added by devel/scanprov
+REENTRANT_PROTO_I_TS           # Z added by devel/scanprov
+REENTRANT_PROTO_I_TSBI         # Z added by devel/scanprov
+REENTRANT_PROTO_I_TSBIR        # Z added by devel/scanprov
+REENTRANT_PROTO_I_TSBWR        # Z added by devel/scanprov
+REENTRANT_PROTO_I_TSR          # Z added by devel/scanprov
+REENTRANT_PROTO_I_UISBWRE      # Z added by devel/scanprov
+REENTRANT_PROTO_S_CBI          # Z added by devel/scanprov
+REENTRANT_PROTO_S_CCSBI        # Z added by devel/scanprov
+REENTRANT_PROTO_S_CIISBIE      # Z added by devel/scanprov
+REENTRANT_PROTO_S_CSBI         # Z added by devel/scanprov
+REENTRANT_PROTO_S_CSBIE        # Z added by devel/scanprov
+REENTRANT_PROTO_S_CWISBIE      # Z added by devel/scanprov
+REENTRANT_PROTO_S_CWISBWIE     # Z added by devel/scanprov
+REENTRANT_PROTO_S_ICSBI        # Z added by devel/scanprov
+REENTRANT_PROTO_S_ISBI         # Z added by devel/scanprov
+REENTRANT_PROTO_S_LISBI        # Z added by devel/scanprov
+REENTRANT_PROTO_S_SBI          # Z added by devel/scanprov
+REENTRANT_PROTO_S_SBIE         # Z added by devel/scanprov
+REENTRANT_PROTO_S_SBW          # Z added by devel/scanprov
+REENTRANT_PROTO_S_TISBI        # Z added by devel/scanprov
+REENTRANT_PROTO_S_TSBI         # Z added by devel/scanprov
+REENTRANT_PROTO_S_TSBIE        # Z added by devel/scanprov
+REENTRANT_PROTO_S_TWISBIE      # Z added by devel/scanprov
+REENTRANT_PROTO_V_D            # Z added by devel/scanprov
+REENTRANT_PROTO_V_H            # Z added by devel/scanprov
+REENTRANT_PROTO_V_ID           # Z added by devel/scanprov
+reentrant_retry                # F added by devel/scanprov
+reentrant_size                 # F added by devel/scanprov
 save_hek_flags                 # F added by devel/scanprov
+SETGRENT_R_HAS_FPTR            # Z added by devel/scanprov
+SETGRENT_R_PROTO               # K added by devel/scanprov
+SETHOSTENT_R_PROTO             # K added by devel/scanprov
+SETLOCALE_R_PROTO              # K added by devel/scanprov
+SETNETENT_R_PROTO              # K added by devel/scanprov
+SETPROTOENT_R_PROTO            # K added by devel/scanprov
+SETPWENT_R_HAS_FPTR            # Z added by devel/scanprov
+SETPWENT_R_PROTO               # K added by devel/scanprov
+SETSERVENT_R_PROTO             # K added by devel/scanprov
 share_hek_flags                # F added by devel/scanprov
+SRAND48_R_PROTO                # K added by devel/scanprov
+SRANDOM_R_PROTO                # K added by devel/scanprov
+STRERROR_R_PROTO               # K added by devel/scanprov
+SVphv_HASKFLAGS                # Z added by devel/scanprov
+sv_pv                          # Z added by devel/scanprov
+sv_pvbyte                      # Z added by devel/scanprov
+sv_pvutf8                      # Z added by devel/scanprov
+TMPNAM_R_PROTO                 # K added by devel/scanprov
 to_byte_substr                 # F added by devel/scanprov
 to_utf8_substr                 # F added by devel/scanprov
+TTYNAME_R_PROTO                # K added by devel/scanprov
+UNICODE_BYTE_ORDER_MARK        # Z added by devel/scanprov
 unshare_hek_or_pvn             # F added by devel/scanprov
+USE_GRENT_BUFFER               # Z added by devel/scanprov
+USE_GRENT_FPTR                 # Z added by devel/scanprov
+USE_GRENT_PTR                  # Z added by devel/scanprov
+USE_HOSTENT_BUFFER             # Z added by devel/scanprov
+USE_HOSTENT_ERRNO              # Z added by devel/scanprov
+USE_HOSTENT_PTR                # Z added by devel/scanprov
+USE_NETENT_BUFFER              # Z added by devel/scanprov
+USE_NETENT_ERRNO               # Z added by devel/scanprov
+USE_NETENT_PTR                 # Z added by devel/scanprov
+USE_PERL_ATOF                  # Z added by devel/scanprov
+USE_PROTOENT_BUFFER            # Z added by devel/scanprov
+USE_PROTOENT_PTR               # Z added by devel/scanprov
+USE_PWENT_BUFFER               # Z added by devel/scanprov
+USE_PWENT_FPTR                 # Z added by devel/scanprov
+USE_PWENT_PTR                  # Z added by devel/scanprov
+USE_SERVENT_BUFFER             # Z added by devel/scanprov
+USE_SERVENT_PTR                # Z added by devel/scanprov
+USE_SPENT_PTR                  # Z added by devel/scanprov
+WARN_LAYER                     # E
+WARN_THREADS                   # E
index 6dfa718..10883d6 100644 (file)
 5.008001
+allocmy                        # F added by devel/scanprov
+ASSERT_CURPAD_ACTIVE           # Z added by devel/scanprov
+ASSERT_CURPAD_LEGAL            # Z added by devel/scanprov
+assert_not_ROK                 # Z added by devel/scanprov
+BSDish                         # Z added by devel/scanprov
 C_ARRAY_LENGTH                 # U
+CHECK_MALLOC_TAINT             # Z added by devel/scanprov
+CHECK_MALLOC_TOO_LATE_FOR      # Z added by devel/scanprov
+CLONEf_JOIN_IN                 # Z added by devel/scanprov
+csighandler                    # F added by devel/scanprov
+CVf_WEAKOUTSIDE                # Z added by devel/scanprov
+CvOUTSIDE_SEQ                  # Z added by devel/scanprov
 CvPADLIST                      # E
-doing_taint                    # U
+CvWEAKOUTSIDE                  # Z added by devel/scanprov
+CvWEAKOUTSIDE_off              # Z added by devel/scanprov
+CvWEAKOUTSIDE_on               # Z added by devel/scanprov
+CX_CURPAD_SAVE                 # Z added by devel/scanprov
+CX_CURPAD_SV                   # Z added by devel/scanprov
+DBM_ckFilter                   # Z added by devel/scanprov
+DBM_setFilter                  # Z added by devel/scanprov
+deb_stack_all                  # F added by devel/scanprov
+deb_stack_n                    # F added by devel/scanprov
+DEBUG_SCOPE                    # Z added by devel/scanprov
+DEBUG_v                        # Z added by devel/scanprov
+DEBUG_v_FLAG                   # Z added by devel/scanprov
+DEBUG_v_TEST                   # Z added by devel/scanprov
+DEBUG_Xv                       # Z added by devel/scanprov
+DEBUG_Xv_TEST                  # Z added by devel/scanprov
+do_dump_pad                    # F added by devel/scanprov
+doing_taint                    # F added by devel/scanprov
+doopen_pm                      # F added by devel/scanprov
 find_runcv                     # U
+FreeOp                         # Z added by devel/scanprov
+free_tied_hv_pool              # F added by devel/scanprov
+get_debug_opts                 # F added by devel/scanprov
+get_hash_seed                  # F added by devel/scanprov
+get_num                        # F added by devel/scanprov
+HAS_COPYSIGNL                  # K added by devel/scanprov
+HAS_FAST_STDIO                 # K added by devel/scanprov
+HAS_ILOGBL                     # K added by devel/scanprov
+HAS_PTHREAD_ATTR_SETSCOPE      # K added by devel/scanprov
+HAS_SCALBNL                    # K added by devel/scanprov
+HAS_TM_TM_GMTOFF               # K added by devel/scanprov
+IN_PERL_COMPILETIME            # E
+IN_PERL_RUNTIME                # E
+IoTYPE_IMPLICIT                # Z added by devel/scanprov
+IoTYPE_NUMERIC                 # Z added by devel/scanprov
 is_utf8_string_loc             # U
+LIB_INVARG                     # Z added by devel/scanprov
+LOCK_DOLLARZERO_MUTEX          # Z added by devel/scanprov
+magic_setregexp                # F added by devel/scanprov
+magic_setutf8                  # F added by devel/scanprov
+MALLOC_CHECK_TAINT             # Z added by devel/scanprov
+MALLOC_CHECK_TAINT2            # Z added by devel/scanprov
+MALLOC_TOO_LATE_FOR            # Z added by devel/scanprov
+NEGATIVE_INDICES_VAR           # Z added by devel/scanprov
+NewOp                          # Z added by devel/scanprov
+OP_IS_FILETEST_ACCESS          # Z added by devel/scanprov
+OPpFT_ACCESS                   # Z added by devel/scanprov
 packlist                       # U
+pack_rec                       # F added by devel/scanprov
 pad_add_anon                   # U
+PAD_BASE_SV                    # Z added by devel/scanprov
+pad_block_start                # F added by devel/scanprov
+pad_check_dup                  # F added by devel/scanprov
+PAD_CLONE_VARS                 # Z added by devel/scanprov
+PAD_COMPNAME_FLAGS             # Z added by devel/scanprov
+PAD_COMPNAME_GEN               # Z added by devel/scanprov
+PAD_COMPNAME_OURSTASH          # Z added by devel/scanprov
+PAD_COMPNAME_PV                # Z added by devel/scanprov
+PAD_COMPNAME_TYPE              # Z added by devel/scanprov
+pad_fixup_inner_anons          # F added by devel/scanprov
 pad_new                        # E
-pad_setsv                      # U
+padnew_CLONE                   # Z added by devel/scanprov
+padnew_SAVE                    # Z added by devel/scanprov
+padnew_SAVESUB                 # Z added by devel/scanprov
+pad_push                       # F added by devel/scanprov
+PAD_RESTORE_LOCAL              # Z added by devel/scanprov
+PAD_SAVE_LOCAL                 # Z added by devel/scanprov
+PAD_SAVE_SETNULLPAD            # Z added by devel/scanprov
+PAD_SET_CUR                    # Z added by devel/scanprov
+PAD_SETSV                      # Z added by devel/scanprov
+pad_setsv                      # F added by devel/scanprov
+PAD_SVl                        # Z added by devel/scanprov
 pad_tidy                       # E
+panic_write2                   # Z added by devel/scanprov
+parse_unicode_opts             # F added by devel/scanprov
 PERL_ABS                       # U
+PERL_DEB                       # Z added by devel/scanprov
+PERL_DEBUG                     # Z added by devel/scanprov
+PERL_FPU_POST_EXEC             # Z added by devel/scanprov
+PERL_FPU_PRE_EXEC              # Z added by devel/scanprov
+PERL_GCC_BRACE_GROUPS_FORBIDDEN # Z added by devel/scanprov
+PERL_HASH_SEED                 # Z added by devel/scanprov
+PERLIO_F_NOTREG                # Z added by devel/scanprov
 PERL_MAGIC_utf8                # E
+PERL_MAGIC_UTF8_CACHESIZE      # Z added by devel/scanprov
 PERL_MAGIC_vstring             # E
 PERL_SCAN_SILENT_ILLDIGIT      # E
+PERL_SIGNALS_UNSAFE_FLAG       # E
+PERL_UNICODE_ALL_FLAGS         # Z added by devel/scanprov
+PERL_UNICODE_ARGV              # Z added by devel/scanprov
+PERL_UNICODE_ARGV_FLAG         # Z added by devel/scanprov
+PERL_UNICODE_DEFAULT_FLAGS     # Z added by devel/scanprov
+PERL_UNICODE_IN                # Z added by devel/scanprov
+PERL_UNICODE_IN_FLAG           # Z added by devel/scanprov
+PERL_UNICODE_INOUT             # Z added by devel/scanprov
+PERL_UNICODE_INOUT_FLAG        # Z added by devel/scanprov
+PERL_UNICODE_LOCALE            # Z added by devel/scanprov
+PERL_UNICODE_LOCALE_FLAG       # Z added by devel/scanprov
+PERL_UNICODE_OUT               # Z added by devel/scanprov
+PERL_UNICODE_OUT_FLAG          # Z added by devel/scanprov
+PERL_UNICODE_STD               # Z added by devel/scanprov
+PERL_UNICODE_STDERR            # Z added by devel/scanprov
+PERL_UNICODE_STDERR_FLAG       # Z added by devel/scanprov
+PERL_UNICODE_STD_FLAG          # Z added by devel/scanprov
+PERL_UNICODE_STDIN             # Z added by devel/scanprov
+PERL_UNICODE_STDIN_FLAG        # Z added by devel/scanprov
+PERL_UNICODE_STDOUT            # Z added by devel/scanprov
+PERL_UNICODE_STDOUT_FLAG       # Z added by devel/scanprov
+PERL_UNICODE_WIDESYSCALLS      # Z added by devel/scanprov
+PERL_UNICODE_WIDESYSCALLS_FLAG # Z added by devel/scanprov
+PIPESOCK_MODE                  # Z added by devel/scanprov
+PL_checkav_save                # Z added by devel/scanprov
+PL_clocktick                   # Z added by devel/scanprov
 PL_comppad                     # E
-save_bool                      # U
+PL_in_load_module              # Z added by devel/scanprov
+PL_reentrant_retint            # Z added by devel/scanprov
+PL_signals                     # M added by devel/scanprov
+PL_stashcache                  # Z added by devel/scanprov
+PL_unicode                     # Z added by devel/scanprov
+PL_utf8locale                  # Z added by devel/scanprov
+pthread_create                 # Z added by devel/scanprov
+pthread_keycreate              # Z added by devel/scanprov
+REENTRANT_PROTO_I_TsISBWRE     # Z added by devel/scanprov
+REENTRANT_PROTO_I_uISBWRE      # Z added by devel/scanprov
+RMS_DIR                        # Z added by devel/scanprov
+RMS_FAC                        # Z added by devel/scanprov
+RMS_FEX                        # Z added by devel/scanprov
+RMS_FNF                        # Z added by devel/scanprov
+RMS_IFI                        # Z added by devel/scanprov
+RMS_ISI                        # Z added by devel/scanprov
+RMS_PRV                        # Z added by devel/scanprov
+RX_MATCH_UTF8                  # Z added by devel/scanprov
+RX_MATCH_UTF8_off              # Z added by devel/scanprov
+RX_MATCH_UTF8_on               # Z added by devel/scanprov
+RX_MATCH_UTF8_set              # Z added by devel/scanprov
+save_bool                      # F added by devel/scanprov
+SAVEBOOL                       # U
 savestack_grow_cnt             # U
+SAVEt_BOOL                     # Z added by devel/scanprov
 seed                           # U
+SS_ACCVIO                      # Z added by devel/scanprov
+SS_DEVOFFLINE                  # Z added by devel/scanprov
+SSGROW                         # Z added by devel/scanprov
+SS_IVCHAN                      # Z added by devel/scanprov
+SS_NORMAL                      # Z added by devel/scanprov
+SSPOPBOOL                      # Z added by devel/scanprov
+SSPUSHBOOL                     # Z added by devel/scanprov
 sv_cat_decode                  # U
+SV_CHECK_THINKFIRST            # Z added by devel/scanprov
 SV_COW_DROP_PV                 # E
+SVf256                         # Z added by devel/scanprov
 sv_setpviv                     # U
 sv_setpviv_mg                  # U
+SV_UTF8_NO_ENCODING            # E
 SvVOK                          # U
+TOO_LATE_FOR                   # Z added by devel/scanprov
+UNLOCK_DOLLARZERO_MUTEX        # Z added by devel/scanprov
+unpack_rec                     # F added by devel/scanprov
 unpackstring                   # U
+USE_HASH_SEED                  # Z added by devel/scanprov
+WEXITSTATUS                    # Z added by devel/scanprov
+WIFEXITED                      # Z added by devel/scanprov
+WIFSIGNALED                    # Z added by devel/scanprov
+WIFSTOPPED                     # Z added by devel/scanprov
+WNOHANG                        # Z added by devel/scanprov
+write_to_stderr                # F added by devel/scanprov
+WSTOPSIG                       # Z added by devel/scanprov
+WTERMSIG                       # Z added by devel/scanprov
+WUNTRACED                      # Z added by devel/scanprov
 XSRETURN_UV                    # U
 XST_mUV                        # U
-IN_PERL_COMPILETIME            # M added by devel/scanprov
-PERL_SIGNALS_UNSAFE_FLAG       # M added by devel/scanprov
-PL_signals                     # M added by devel/scanprov
-SV_UTF8_NO_ENCODING            # M added by devel/scanprov
-allocmy                        # F added by devel/scanprov
-deb_stack_all                  # F added by devel/scanprov
-deb_stack_n                    # F added by devel/scanprov
-do_dump_pad                    # F added by devel/scanprov
-doopen_pm                      # F added by devel/scanprov
-free_tied_hv_pool              # F added by devel/scanprov
-get_debug_opts                 # F added by devel/scanprov
-get_hash_seed                  # F added by devel/scanprov
-get_num                        # F added by devel/scanprov
-magic_setregexp                # F added by devel/scanprov
-magic_setutf8                  # F added by devel/scanprov
-pack_rec                       # F added by devel/scanprov
-pad_block_start                # F added by devel/scanprov
-pad_check_dup                  # F added by devel/scanprov
-pad_fixup_inner_anons          # F added by devel/scanprov
-pad_push                       # F added by devel/scanprov
-parse_unicode_opts             # F added by devel/scanprov
-unpack_rec                     # F added by devel/scanprov
-write_to_stderr                # F added by devel/scanprov
index 63aac52..5560e4e 100644 (file)
@@ -1 +1,6 @@
 5.008002
+HVhek_ENABLEHVKFLAGS           # Z added by devel/scanprov
+PAD_SET_CUR_NOSAVE             # Z added by devel/scanprov
+PERL_HASH_INTERNAL             # Z added by devel/scanprov
+PIPE_OPEN_MODE                 # Z added by devel/scanprov
+SOCKET_OPEN_MODE               # Z added by devel/scanprov
index 65bf569..129e018 100644 (file)
@@ -1,2 +1 @@
 5.008009
-hv_assert                      # U
index e33d67e..d67e8b2 100644 (file)
@@ -2,19 +2,49 @@
 _aMY_CXT                       # E
 aMY_CXT                        # E
 aMY_CXT_                       # E
+asctime                        # Z added by devel/scanprov
+CAN_COW_FLAGS                  # Z added by devel/scanprov
+CAN_COW_MASK                   # Z added by devel/scanprov
+crypt                          # Z added by devel/scanprov
+ctermid                        # Z added by devel/scanprov
+ctime                          # Z added by devel/scanprov
+DEBUG_C                        # Z added by devel/scanprov
+DEBUG_C_FLAG                   # Z added by devel/scanprov
+DEBUG_C_TEST                   # Z added by devel/scanprov
 dMY_CXT                        # E
+endgrent                       # Z added by devel/scanprov
+endpwent                       # Z added by devel/scanprov
+getgrent                       # Z added by devel/scanprov
+getgrgid                       # Z added by devel/scanprov
+getgrnam                       # Z added by devel/scanprov
+getpwent                       # Z added by devel/scanprov
+getpwnam                       # Z added by devel/scanprov
+getpwuid                       # Z added by devel/scanprov
+getspnam                       # Z added by devel/scanprov
 hek_dup                        # U
 MY_CXT                         # E
 MY_CXT_INIT                    # E
-my_cxt_init                    # U
 new_version                    # U
 parser_dup                     # E
+Perl_sv_free2                  # F added by devel/scanprov
+PL_cv_has_eval                 # Z added by devel/scanprov
 pMY_CXT                        # E
-regdupe_internal               # U
+readdir64                      # Z added by devel/scanprov
+RX_MATCH_COPY_FREE             # Z added by devel/scanprov
 save_set_svflags               # U
+SAVESETSVFLAGS                 # Z added by devel/scanprov
+SAVEt_SET_SVFLAGS              # Z added by devel/scanprov
+setgrent                       # Z added by devel/scanprov
+setlocale                      # Z added by devel/scanprov
+setpwent                       # Z added by devel/scanprov
+strerror                       # Z added by devel/scanprov
+SV_CHECK_THINKFIRST_COW_DROP   # Z added by devel/scanprov
+SvPADSTALE                     # Z added by devel/scanprov
+SvPADSTALE_off                 # Z added by devel/scanprov
+SvPADSTALE_on                  # Z added by devel/scanprov
+sv_setsv_cow                   # F added by devel/scanprov
 SVs_PADSTALE                   # E
+ttyname                        # Z added by devel/scanprov
 vcmp                           # U
 vnumify                        # U
 vstringify                     # U
-Perl_sv_free2                  # F added by devel/scanprov
-sv_setsv_cow                   # F added by devel/scanprov
index 90ab5a1..eec9147 100644 (file)
@@ -1,11 +1,29 @@
 5.009001
+DEBUG_A                        # Z added by devel/scanprov
+DEBUG_A_FLAG                   # Z added by devel/scanprov
+DEBUG_A_TEST                   # Z added by devel/scanprov
+DEBUG_q                        # Z added by devel/scanprov
+DEBUG_q_FLAG                   # Z added by devel/scanprov
+DEBUG_q_TEST                   # Z added by devel/scanprov
+FF_LINESNGL                    # Z added by devel/scanprov
 hv_clear_placeholders          # U
+hv_delete_common               # F added by devel/scanprov
 hv_scalar                      # U
+magic_scalarpack               # F added by devel/scanprov
+num_overflow                   # F added by devel/scanprov
+OPpCONST_SHORTCIRCUIT          # Z added by devel/scanprov
+OPpFT_STACKED                  # Z added by devel/scanprov
+OPpSORT_INPLACE                # Z added by devel/scanprov
+OPpTRANS_ALL                   # Z added by devel/scanprov
+Perl_ceil                      # Z added by devel/scanprov
+Perl_hv_assert                 # F added by devel/scanprov
 scan_version                   # E (Perl_scan_version)
+sv_2iv                         # Z added by devel/scanprov
 sv_2iv_flags                   # U
+sv_2uv                         # M added by devel/scanprov
 sv_2uv_flags                   # U
 SvIV_nomg                      # U
 SvUV_nomg                      # U
-hv_delete_common               # F added by devel/scanprov
-magic_scalarpack               # F added by devel/scanprov
-num_overflow                   # F added by devel/scanprov
+YYSTYPE_IS_DECLARED            # Z added by devel/scanprov
+YYSTYPE_IS_TRIVIAL             # Z added by devel/scanprov
+YYTOKENTYPE                    # Z added by devel/scanprov
index 2409a8a..a133fd3 100644 (file)
@@ -1,10 +1,23 @@
 5.009002
 CopyD                          # E
+DEBUG_COMPILE_r                # Z added by devel/scanprov
+DEBUG_EXECUTE_r                # Z added by devel/scanprov
+DEBUG_OFFSETS_r                # Z added by devel/scanprov
+DEBUG_OPTIMISE_r               # Z added by devel/scanprov
+DEBUG_TRIE_COMPILE_MORE_r      # Z added by devel/scanprov
+DEBUG_TRIE_COMPILE_r           # Z added by devel/scanprov
+DEBUG_TRIE_EXECUTE_MORE_r      # Z added by devel/scanprov
+DEBUG_TRIE_EXECUTE_r           # Z added by devel/scanprov
+DEBUG_TRIE_r                   # Z added by devel/scanprov
 dUNDERBAR                      # E
 dXCPT                          # E
 find_rundefsvoffset            # U
+find_uninit_var                # F added by devel/scanprov
 gv_fetchpvn_flags              # U
 gv_fetchsv                     # U
+make_trie                      # F added by devel/scanprov
+MEM_WRAP_CHECK                 # Z added by devel/scanprov
+MEM_WRAP_CHECK_1               # Z added by devel/scanprov
 MoveD                          # E
 mPUSHi                         # U
 mPUSHn                         # U
@@ -15,12 +28,29 @@ mXPUSHn                        # U
 mXPUSHp                        # U
 mXPUSHu                        # U
 MY_CXT_CLONE                   # E
+OPpITER_REVERSED               # Z added by devel/scanprov
+OPpSORT_DESCEND                # Z added by devel/scanprov
 op_refcnt_lock                 # U
 op_refcnt_unlock               # U
+PERL_MALLOC_WRAP               # K added by devel/scanprov
+pTHX__FORMAT                   # Z added by devel/scanprov
+pTHX_FORMAT                    # Z added by devel/scanprov
+pTHX__VALUE                    # Z added by devel/scanprov
+pTHX_VALUE                     # Z added by devel/scanprov
 PUSHmortal                     # E
+RE_DEBUG_FLAGS                 # Z added by devel/scanprov
+RE_TRIE_MAXBUF_INIT            # Z added by devel/scanprov
+RE_TRIE_MAXBUF_NAME            # Z added by devel/scanprov
+SAFE_TRIE_NODENUM              # Z added by devel/scanprov
 savesvpv                       # U
+SAVESWITCHSTACK                # Z added by devel/scanprov
+SAVEt_SAVESWITCHSTACK          # Z added by devel/scanprov
+SVf32                          # Z added by devel/scanprov
 SV_NOSTEAL                     # E
 SvPVbyte_force                 # U
+TRIE                           # Z added by devel/scanprov
+TRIE_NODEIDX                   # Z added by devel/scanprov
+TRIE_NODENUM                   # Z added by devel/scanprov
 UNDERBAR                       # E
 UTF8_MAXBYTES                  # E
 UTF8_MAXBYTES_CASE             # E
@@ -31,5 +61,3 @@ XCPT_TRY_END                   # E
 XCPT_TRY_START                 # E
 XPUSHmortal                    # E
 ZeroD                          # E
-find_uninit_var                # F added by devel/scanprov
-make_trie                      # F added by devel/scanprov
index 69b81a2..e3a8369 100644 (file)
@@ -1,26 +1,91 @@
 5.009003
-av_arylen_p                    # U
-ckwarn                         # U
-ckwarn_d                       # U
+amagic_cmp                     # F added by devel/scanprov
+amagic_cmp_locale              # F added by devel/scanprov
+amagic_i_ncmp                  # F added by devel/scanprov
+amagic_ncmp                    # F added by devel/scanprov
+AvREAL_only                    # Z added by devel/scanprov
+AvREIFY_only                   # Z added by devel/scanprov
+C_FAC_POSIX                    # Z added by devel/scanprov
+check_type_and_open            # F added by devel/scanprov
+child_offset_bits              # Z added by devel/scanprov
+CopFILEAVx                     # Z added by devel/scanprov
+CxFOREACH                      # Z added by devel/scanprov
+CxMULTICALL                    # Z added by devel/scanprov
+CXp_MULTICALL                  # Z added by devel/scanprov
 dAXMARK                        # E
 dMULTICALL                     # E
+dMY_CXT_INTERP                 # Z added by devel/scanprov
+do_aexec                       # Z added by devel/scanprov
+do_exec                        # Z added by devel/scanprov
 doref                          # U
+DPTR2FPTR                      # Z added by devel/scanprov
+dump_sv_child                  # F added by devel/scanprov
 dVAR                           # E
+EXTPERLIO                      # Z added by devel/scanprov
+F0convert                      # F added by devel/scanprov
+FAKE_DEFAULT_SIGNAL_HANDLERS   # Z added by devel/scanprov
+FAKE_PERSISTENT_SIGNAL_HANDLERS # Z added by devel/scanprov
+first_symbol                   # F added by devel/scanprov
+FPTR2DPTR                      # Z added by devel/scanprov
+FUNCTION                       # Z added by devel/scanprov
 gv_const_sv                    # U
 GV_NOADD_NOINIT                # E
 GV_NOEXPAND                    # E
 gv_stashpvs                    # U
+GvSVn                          # U
+HASATTRIBUTE_FORMAT            # K added by devel/scanprov
+HASATTRIBUTE_MALLOC            # K added by devel/scanprov
+HASATTRIBUTE_NONNULL           # K added by devel/scanprov
+HASATTRIBUTE_NORETURN          # K added by devel/scanprov
+HASATTRIBUTE_PURE              # K added by devel/scanprov
+HASATTRIBUTE_UNUSED            # K added by devel/scanprov
+HASATTRIBUTE_WARN_UNUSED_RESULT # K added by devel/scanprov
+HAS_CLEARENV                   # K added by devel/scanprov
+HAS_FUTIMES                    # K added by devel/scanprov
+HAS_MODFL_PROTO                # K added by devel/scanprov
+HAS_SNPRINTF                   # K added by devel/scanprov
+HAS_UNSETENV                   # K added by devel/scanprov
+HAS_VSNPRINTF                  # K added by devel/scanprov
+HE_SVSLOT                      # Z added by devel/scanprov
+HvAUX                          # Z added by devel/scanprov
+hv_auxinit                     # F added by devel/scanprov
+HvEITER_get                    # Z added by devel/scanprov
 hv_eiter_p                     # U
 hv_eiter_set                   # U
+HvEITER_set                    # Z added by devel/scanprov
 hv_fetchs                      # U
+HvNAME_get                     # M added by devel/scanprov
+HvNAME_HEK                     # Z added by devel/scanprov
+HvNAMELEN_get                  # U
 hv_name_set                    # U
 hv_placeholders_get            # U
+HvPLACEHOLDERS_get             # Z added by devel/scanprov
 hv_placeholders_set            # U
+HvPLACEHOLDERS_set             # Z added by devel/scanprov
+HvRITER_get                    # Z added by devel/scanprov
 hv_riter_p                     # U
 hv_riter_set                   # U
+HvRITER_set                    # Z added by devel/scanprov
+incpush_if_exists              # F added by devel/scanprov
+IS_UTF8_CHAR                   # Z added by devel/scanprov
+is_utf8_common                 # F added by devel/scanprov
 is_utf8_string_loclen          # U
+KEY_given                      # Z added by devel/scanprov
+KEY_say                        # Z added by devel/scanprov
+LIBM_LIB_VERSION               # K added by devel/scanprov
+magic_freearylen_p             # F added by devel/scanprov
+MEM_LOG_ALLOC                  # Z added by devel/scanprov
+MEM_LOG_FREE                   # Z added by devel/scanprov
+MEM_LOG_REALLOC                # Z added by devel/scanprov
+MGf_LOCAL                      # Z added by devel/scanprov
+mg_localize                    # F added by devel/scanprov
+MgPV_const                     # Z added by devel/scanprov
+MgPV_nolen_const               # Z added by devel/scanprov
 MULTICALL                      # E
+my_clearenv                    # F added by devel/scanprov
+MY_CXT_INIT_INTERP             # Z added by devel/scanprov
 my_sprintf                     # U
+need_utf8                      # F added by devel/scanprov
 newGIVENOP                     # U
 newSVhek                       # U
 newSVpvs                       # U
@@ -28,79 +93,120 @@ newSVpvs_share                 # U
 Newx                           # E
 Newxc                          # E
 Newxz                          # E
+NORETURN_FUNCTION_END          # Z added by devel/scanprov
+NSIG                           # Z added by devel/scanprov
+NV_ZERO_IS_ALLBITS_ZERO        # K added by devel/scanprov
+OPpASSIGN_CV_TO_GV             # Z added by devel/scanprov
+OPpCONST_NOVER                 # Z added by devel/scanprov
+OPpDONT_INIT_GV                # Z added by devel/scanprov
+OPpEVAL_HAS_HH                 # Z added by devel/scanprov
+OPpMAY_RETURN_CONSTANT         # Z added by devel/scanprov
+OPpSORT_STABLE                 # Z added by devel/scanprov
+PAD_COMPNAME_GEN_set           # Z added by devel/scanprov
+pad_compname_type              # U
+PERL_ARENA_SIZE                # Z added by devel/scanprov
+Perl_av_arylen_p               # F added by devel/scanprov
+Perl_ckwarn                    # F added by devel/scanprov
+Perl_ckwarn_d                  # F added by devel/scanprov
+PERL_DEFAULT_DO_EXEC3_IMPLEMENTATION # Z added by devel/scanprov
+PERL_DONT_CREATE_GVSV          # Z added by devel/scanprov
+Perl_hv_backreferences_p       # F added by devel/scanprov
+Perl_hv_placeholders_p         # F added by devel/scanprov
+PERLIO_FUNCS_CAST              # U
+PERLIO_FUNCS_DECL              # M added by devel/scanprov
 PERL_MAGIC_arylen_p            # E
 PERL_MAGIC_rhash               # E
 PERL_MAGIC_symtab              # E
-PL_check                       # E
-POP_MULTICALL                  # E
-savepvs                        # U
-sortsv_flags                   # U
-sv_catpvs                      # U
-SvMAGIC_set                    # U
-SvRV_set                       # U
-SV_SMAGIC                      # E
-SvSTASH_set                    # U
-SvUV_set                       # U
-vverify                        # U
-GvSVn                          # M added by devel/scanprov
-HvNAME_get                     # M added by devel/scanprov
-HvNAMELEN_get                  # M added by devel/scanprov
-PERLIO_FUNCS_CAST              # M added by devel/scanprov
-PERLIO_FUNCS_DECL              # M added by devel/scanprov
-PERL_UNUSED_ARG                # M added by devel/scanprov
-PTR2nat                        # M added by devel/scanprov
-STR_WITH_LEN                   # M added by devel/scanprov
-SV_CONST_RETURN                # M added by devel/scanprov
-SV_MUTABLE_RETURN              # M added by devel/scanprov
-SvPV_const                     # M added by devel/scanprov
-SvPV_flags_const               # M added by devel/scanprov
-SvPV_flags_const_nolen         # M added by devel/scanprov
-SvPV_flags_mutable             # M added by devel/scanprov
-SvPV_force_flags_mutable       # M added by devel/scanprov
-SvPV_force_flags_nolen         # M added by devel/scanprov
-SvPV_force_mutable             # M added by devel/scanprov
-SvPV_force_nolen               # M added by devel/scanprov
-SvPV_force_nomg_nolen          # M added by devel/scanprov
-SvPV_mutable                   # M added by devel/scanprov
-SvPV_nolen_const               # M added by devel/scanprov
-SvPV_nomg_const                # M added by devel/scanprov
-SvPV_nomg_const_nolen          # M added by devel/scanprov
-SvPV_renew                     # M added by devel/scanprov
-SvPVX_const                    # M added by devel/scanprov
-SvPVX_mutable                  # M added by devel/scanprov
-SvSHARED_HASH                  # M added by devel/scanprov
-amagic_cmp                     # F added by devel/scanprov
-amagic_cmp_locale              # F added by devel/scanprov
-amagic_i_ncmp                  # F added by devel/scanprov
-amagic_ncmp                    # F added by devel/scanprov
-check_type_and_open            # F added by devel/scanprov
-dump_sv_child                  # F added by devel/scanprov
-F0convert                      # F added by devel/scanprov
-first_symbol                   # F added by devel/scanprov
-free_global_struct             # F added by devel/scanprov
-hv_auxinit                     # F added by devel/scanprov
-incpush_if_exists              # F added by devel/scanprov
-init_global_struct             # F added by devel/scanprov
-is_utf8_common                 # F added by devel/scanprov
-magic_freearylen_p             # F added by devel/scanprov
-mg_localize                    # F added by devel/scanprov
-my_clearenv                    # F added by devel/scanprov
-need_utf8                      # F added by devel/scanprov
-Perl_hv_backreferences_p       # F added by devel/scanprov
-Perl_hv_placeholders_p         # F added by devel/scanprov
+PERL_STRLEN_ROUNDUP            # Z added by devel/scanprov
+PERL_STRLEN_ROUNDUP_QUANTUM    # Z added by devel/scanprov
 Perl_sv_add_backref            # F added by devel/scanprov
 Perl_sv_kill_backrefs          # F added by devel/scanprov
+PERL_TRACK_MEMPOOL             # Z added by devel/scanprov
+PERL_UNUSED_ARG                # U
+PERL_USES_PL_PIDSTATUS         # Z added by devel/scanprov
+PL_body_roots                  # Z added by devel/scanprov
+PL_check                       # E
+PL_dumper_fd                   # Z added by devel/scanprov
+PL_minus_E                     # Z added by devel/scanprov
+PL_my_cxt_list                 # Z added by devel/scanprov
+PL_my_cxt_size                 # Z added by devel/scanprov
+PL_statusvalue_posix           # Z added by devel/scanprov
+POP_MULTICALL                  # E
+POPpconstx                     # Z added by devel/scanprov
+pTHX_5                         # Z added by devel/scanprov
+pTHX_6                         # Z added by devel/scanprov
+pTHX_7                         # Z added by devel/scanprov
+pTHX_8                         # Z added by devel/scanprov
+pTHX_9                         # Z added by devel/scanprov
+PTR2nat                        # U
+REENTR_MEMZERO                 # Z added by devel/scanprov
+ref                            # Z added by devel/scanprov
 restore_magic                  # F added by devel/scanprov
 run_user_filter                # F added by devel/scanprov
+savepvs                        # U
 sequence_num                   # F added by devel/scanprov
+share_hek_hek                  # Z added by devel/scanprov
 sortcv                         # F added by devel/scanprov
 sortcv_stacked                 # F added by devel/scanprov
 sortcv_xsub                    # F added by devel/scanprov
+sortsv_flags                   # U
+STATUS_EXIT                    # Z added by devel/scanprov
+STATUS_EXIT_SET                # Z added by devel/scanprov
+STATUS_NATIVE_CHILD_SET        # Z added by devel/scanprov
+STATUS_UNIX                    # Z added by devel/scanprov
+STATUS_UNIX_EXIT_SET           # Z added by devel/scanprov
+STATUS_UNIX_SET                # Z added by devel/scanprov
 strip_return                   # F added by devel/scanprov
+STR_WITH_LEN                   # M added by devel/scanprov
+sv_2pvbyte_nolen               # M added by devel/scanprov
+sv_2pv_nolen                   # M added by devel/scanprov
+sv_2pvutf8_nolen               # Z added by devel/scanprov
+sv_catpvs                      # U
+SV_CONST_RETURN                # M added by devel/scanprov
 sv_exp_grow                    # F added by devel/scanprov
+SvGROW_mutable                 # Z added by devel/scanprov
 sv_i_ncmp                      # F added by devel/scanprov
+SvIS_FREED                     # Z added by devel/scanprov
+SvMAGIC_set                    # U
+SV_MUTABLE_RETURN              # M added by devel/scanprov
 sv_ncmp                        # F added by devel/scanprov
+SVpav_REAL                     # Z added by devel/scanprov
+SVpav_REIFY                    # Z added by devel/scanprov
+SVphv_CLONEABLE                # Z added by devel/scanprov
+SvPVbytex_nolen                # Z added by devel/scanprov
+SvPV_const                     # U
+SvPV_flags_const               # U
+SvPV_flags_const_nolen         # U
+SvPV_flags_mutable             # U
+SvPV_force_flags_mutable       # U
+SvPV_force_flags_nolen         # U
+SvPV_force_mutable             # U
+SvPV_force_nolen               # U
+SvPV_force_nomg_nolen          # U
+SvPV_free                      # Z added by devel/scanprov
+SvPV_mutable                   # U
+SvPV_nolen_const               # U
+SvPV_nomg_const                # U
+SvPV_nomg_const_nolen          # U
+SvPV_renew                     # U
+SvPV_shrink_to_cur             # U
+SvPVX_const                    # U
+SvPVx_const                    # Z added by devel/scanprov
+SvPVX_mutable                  # U
+SvPVx_nolen                    # Z added by devel/scanprov
+SvPVx_nolen_const              # Z added by devel/scanprov
+SvRV_set                       # U
+SvSHARED_HASH                  # U
+SvSHARED_HEK_FROM_PV           # Z added by devel/scanprov
+SV_SMAGIC                      # E
+SvSTASH_set                    # U
+sv_taint                       # Z added by devel/scanprov
+SvUV_set                       # U
 tokenize_use                   # F added by devel/scanprov
+tTHX                           # Z added by devel/scanprov
 uiv_2buf                       # F added by devel/scanprov
 unwind_handler_stack           # F added by devel/scanprov
 varname                        # F added by devel/scanprov
+vverify                        # U
+xiv_iv                         # Z added by devel/scanprov
+xuv_uv                         # Z added by devel/scanprov
index c4e52c8..e658671 100644 (file)
@@ -1,16 +1,87 @@
 5.009004
+assert_not_glob                # Z added by devel/scanprov
+clear_placeholders             # F added by devel/scanprov
+CopHINTS_get                   # Z added by devel/scanprov
+CopHINTS_set                   # Z added by devel/scanprov
+create_eval_scope              # F added by devel/scanprov
+cv_ckproto                     # Z added by devel/scanprov
+CVf_ISXSUB                     # Z added by devel/scanprov
+CvISXSUB                       # Z added by devel/scanprov
+CvISXSUB_off                   # Z added by devel/scanprov
+CvISXSUB_on                    # Z added by devel/scanprov
+DEBUG_DUMP_r                   # Z added by devel/scanprov
+DEBUG_EXTRA_r                  # Z added by devel/scanprov
+DEBUG_INTUIT_r                 # Z added by devel/scanprov
+DEBUG_MATCH_r                  # Z added by devel/scanprov
+DEBUG_PARSE_r                  # Z added by devel/scanprov
+debug_start_match              # F added by devel/scanprov
+DEBUG_STATE_r                  # Z added by devel/scanprov
+delete_eval_scope              # F added by devel/scanprov
+dump_exec_pos                  # F added by devel/scanprov
+dump_trie                      # F added by devel/scanprov
+dump_trie_interim_list         # F added by devel/scanprov
+dump_trie_interim_table        # F added by devel/scanprov
+DUP_WARNINGS                   # Z added by devel/scanprov
+exec_failed                    # F added by devel/scanprov
+EXPECT                         # Z added by devel/scanprov
+EXT_MGVTBL                     # Z added by devel/scanprov
+find_array_subscript           # F added by devel/scanprov
+find_hash_subscript            # F added by devel/scanprov
+G_FAKINGEVAL                   # Z added by devel/scanprov
+glob_2number                   # F added by devel/scanprov
+glob_assign_glob               # F added by devel/scanprov
+gv_fetchpvs                    # U
+GvFILE_HEK                     # Z added by devel/scanprov
+GvNAME_get                     # Z added by devel/scanprov
+GvNAME_HEK                     # Z added by devel/scanprov
+GvNAMELEN_get                  # Z added by devel/scanprov
 gv_name_set                    # U
+GV_NOTQUAL                     # E
+HAS_BUILTIN_CHOOSE_EXPR        # K added by devel/scanprov
+HAS_C99_VARIADIC_MACROS        # K added by devel/scanprov
+HINTS_REFCNT_INIT              # Z added by devel/scanprov
+HINTS_REFCNT_LOCK              # Z added by devel/scanprov
+HINTS_REFCNT_TERM              # Z added by devel/scanprov
+HINTS_REFCNT_UNLOCK            # Z added by devel/scanprov
 hv_copy_hints_hv               # U
+HVhek_UNSHARED                 # Z added by devel/scanprov
+HVrhek_delete                  # Z added by devel/scanprov
+HVrhek_IV                      # Z added by devel/scanprov
+HVrhek_PV                      # Z added by devel/scanprov
+HVrhek_typemask                # Z added by devel/scanprov
+HVrhek_undef                   # Z added by devel/scanprov
+HVrhek_UV                      # Z added by devel/scanprov
 hv_stores                      # U
+INIT_TRACK_MEMPOOL             # Z added by devel/scanprov
+isGV_with_GP                   # U
+join_exact                     # F added by devel/scanprov
+KEY_state                      # Z added by devel/scanprov
 LIKELY                         # U
+magic_clearhint                # F added by devel/scanprov
+magic_sethint                  # F added by devel/scanprov
+MJD_OFFSET_DEBUG               # Z added by devel/scanprov
+more_sv                        # F added by devel/scanprov
 my_snprintf                    # U
 my_strlcat                     # U
 my_strlcpy                     # U
 my_vsnprintf                   # U
 newXS_flags                    # U
+NO_ENV_ARRAY_IN_MAIN           # Z added by devel/scanprov
+OPpPAD_STATE                   # Z added by devel/scanprov
+PAD_COMPNAME_FLAGS_isOUR       # Z added by devel/scanprov
+pad_peg                        # Z added by devel/scanprov
+PERL_ARENA_ROOTS_SIZE          # Z added by devel/scanprov
+PERL_ENABLE_EXPERIMENTAL_REGEX_OPTIMISATIONS # Z added by devel/scanprov
+PERL_ENABLE_EXTENDED_TRIE_OPTIMISATION # Z added by devel/scanprov
+PERL_ENABLE_TRIE_OPTIMISATION  # Z added by devel/scanprov
 PerlIO_context_layers          # U
 PERL_MAGIC_hints               # E
 PERL_MAGIC_hintselem           # E
+PERL_MY_SNPRINTF_GUARDED       # Z added by devel/scanprov
+PERL_MY_VSNPRINTF_GUARDED      # Z added by devel/scanprov
+Perl_newGP                     # F added by devel/scanprov
+Perl_new_warnings_bitfield     # F added by devel/scanprov
+PERL_NO_DEV_RANDOM             # Z added by devel/scanprov
 PERL_PV_ESCAPE_ALL             # E
 PERL_PV_ESCAPE_FIRSTCHAR       # E
 PERL_PV_ESCAPE_NOBACKSLASH     # E
@@ -18,15 +89,70 @@ PERL_PV_ESCAPE_NOCLEAR         # E
 PERL_PV_ESCAPE_QUOTE           # E
 PERL_PV_ESCAPE_UNI             # E
 PERL_PV_ESCAPE_UNI_DETECT      # E
+PERL_PV_PRETTY_DUMP            # M added by devel/scanprov
 PERL_PV_PRETTY_LTGT            # E
 PERL_PV_PRETTY_QUOTE           # E
+PERL_PV_PRETTY_REGPROP         # M added by devel/scanprov
+PERL_REGMATCH_SLAB_SLOTS       # Z added by devel/scanprov
+PERL_UNICODE_UTF8CACHEASSERT   # Z added by devel/scanprov
+PERL_UNICODE_UTF8CACHEASSERT_FLAG # Z added by devel/scanprov
+PERL_UNLOCK_HOOK               # Z added by devel/scanprov
+PERL_UNUSED_CONTEXT            # E
+PERL_USE_GCC_BRACE_GROUPS      # M added by devel/scanprov
+PERL_WARNHOOK_FATAL            # Z added by devel/scanprov
+PL_body_arenas                 # Z added by devel/scanprov
+PL_memory_debug_header         # Z added by devel/scanprov
+PL_regmatch_slab               # Z added by devel/scanprov
+PL_regmatch_state              # Z added by devel/scanprov
+PL_utf8cache                   # Z added by devel/scanprov
+pm_description                 # F added by devel/scanprov
 PoisonFree                     # E
 PoisonNew                      # E
 PoisonWith                     # E
+printbuf                       # F added by devel/scanprov
+PSEUDO                         # Z added by devel/scanprov
+ptr_table_find                 # F added by devel/scanprov
 pv_escape                      # U
 pv_pretty                      # U
+RE_DEBUG_COMPILE_DUMP          # Z added by devel/scanprov
+RE_DEBUG_COMPILE_MASK          # Z added by devel/scanprov
+RE_DEBUG_COMPILE_OPTIMISE      # Z added by devel/scanprov
+RE_DEBUG_COMPILE_PARSE         # Z added by devel/scanprov
+RE_DEBUG_COMPILE_TRIE          # Z added by devel/scanprov
+RE_DEBUG_EXECUTE_INTUIT        # Z added by devel/scanprov
+RE_DEBUG_EXECUTE_MASK          # Z added by devel/scanprov
+RE_DEBUG_EXECUTE_MATCH         # Z added by devel/scanprov
+RE_DEBUG_EXECUTE_TRIE          # Z added by devel/scanprov
+RE_DEBUG_EXTRA_MASK            # Z added by devel/scanprov
+RE_DEBUG_EXTRA_OFFSETS         # Z added by devel/scanprov
+RE_DEBUG_EXTRA_STATE           # Z added by devel/scanprov
+RE_DEBUG_EXTRA_TRIE            # Z added by devel/scanprov
+RE_DEBUG_FLAG                  # Z added by devel/scanprov
+refcounted_he_value            # F added by devel/scanprov
+REGNODE_MAX                    # Z added by devel/scanprov
+regtail_study                  # F added by devel/scanprov
+RE_PV_COLOR_DECL               # Z added by devel/scanprov
+RE_PV_QUOTED_DECL              # Z added by devel/scanprov
+RE_SV_DUMPLEN                  # Z added by devel/scanprov
+RE_SV_ESCAPE                   # Z added by devel/scanprov
+RE_SV_TAIL                     # Z added by devel/scanprov
+SAVECOMPILEWARNINGS            # Z added by devel/scanprov
+SAVEt_COMPILE_WARNINGS         # Z added by devel/scanprov
+space_join_names_mortal        # F added by devel/scanprov
+sv_2iuv_common                 # F added by devel/scanprov
 sv_does                        # U
 SV_HAS_TRAILING_NUL            # E
+SvPAD_OUR                      # Z added by devel/scanprov
+SvPAD_OUR_on                   # Z added by devel/scanprov
+SVpad_STATE                    # Z added by devel/scanprov
+SvPAD_STATE                    # Z added by devel/scanprov
+SvPAD_STATE_on                 # Z added by devel/scanprov
+SvPAD_TYPED                    # Z added by devel/scanprov
+SvPAD_TYPED_on                 # Z added by devel/scanprov
+sv_pos_b2u_midway              # F added by devel/scanprov
+sv_pos_u2b_cached              # F added by devel/scanprov
+sv_pos_u2b_forwards            # F added by devel/scanprov
+sv_pos_u2b_midway              # F added by devel/scanprov
 SvREFCNT_inc_NN                # U
 SvREFCNT_inc_simple            # U
 SvREFCNT_inc_simple_NN         # U
@@ -36,42 +162,15 @@ SvREFCNT_inc_void              # U
 SvREFCNT_inc_void_NN           # U
 sv_setpvs                      # U
 sv_usepvn_flags                # U
+SvVSTRING_mg                   # U
+TRIE_BITMAP                    # Z added by devel/scanprov
+TRIE_BITMAP_BYTE               # Z added by devel/scanprov
+TRIE_BITMAP_CLEAR              # Z added by devel/scanprov
+TRIE_BITMAP_SET                # Z added by devel/scanprov
+TRIE_BITMAP_TEST               # Z added by devel/scanprov
+TRIEC                          # Z added by devel/scanprov
+TRIE_CHARCOUNT                 # Z added by devel/scanprov
 UNLIKELY                       # U
-gv_fetchpvs                    # M added by devel/scanprov
-isGV_with_GP                   # M added by devel/scanprov
-PERL_PV_PRETTY_DUMP            # M added by devel/scanprov
-PERL_PV_PRETTY_REGPROP         # M added by devel/scanprov
-PERL_UNUSED_CONTEXT            # M added by devel/scanprov
-PERL_USE_GCC_BRACE_GROUPS      # M added by devel/scanprov
-SvVSTRING_mg                   # M added by devel/scanprov
-clear_placeholders             # F added by devel/scanprov
-create_eval_scope              # F added by devel/scanprov
-debug_start_match              # F added by devel/scanprov
-delete_eval_scope              # F added by devel/scanprov
-dump_exec_pos                  # F added by devel/scanprov
-dump_trie                      # F added by devel/scanprov
-dump_trie_interim_list         # F added by devel/scanprov
-dump_trie_interim_table        # F added by devel/scanprov
-exec_failed                    # F added by devel/scanprov
-find_array_subscript           # F added by devel/scanprov
-find_hash_subscript            # F added by devel/scanprov
-glob_2number                   # F added by devel/scanprov
-glob_assign_glob               # F added by devel/scanprov
-join_exact                     # F added by devel/scanprov
-magic_clearhint                # F added by devel/scanprov
-magic_sethint                  # F added by devel/scanprov
-more_sv                        # F added by devel/scanprov
-Perl_newGP                     # F added by devel/scanprov
-Perl_new_warnings_bitfield     # F added by devel/scanprov
-pm_description                 # F added by devel/scanprov
-printbuf                       # F added by devel/scanprov
-ptr_table_find                 # F added by devel/scanprov
-refcounted_he_value            # F added by devel/scanprov
-regtail_study                  # F added by devel/scanprov
-space_join_names_mortal        # F added by devel/scanprov
-sv_2iuv_common                 # F added by devel/scanprov
-sv_pos_b2u_midway              # F added by devel/scanprov
-sv_pos_u2b_cached              # F added by devel/scanprov
-sv_pos_u2b_forwards            # F added by devel/scanprov
-sv_pos_u2b_midway              # F added by devel/scanprov
+UTF8_ALLOW_DEFAULT             # Z added by devel/scanprov
 utf8_mg_pos_cache_update       # F added by devel/scanprov
+XS_DYNAMIC_FILENAME            # Z added by devel/scanprov
index 17ce3d5..506ee19 100644 (file)
 5.009005
+ACCEPT                         # Z added by devel/scanprov
+AHOCORASICK                    # Z added by devel/scanprov
+AHOCORASICKC                   # Z added by devel/scanprov
+anchored_end_shift             # Z added by devel/scanprov
+ANYOF_HORIZWS                  # Z added by devel/scanprov
+ANYOF_NHORIZWS                 # Z added by devel/scanprov
+ANYOF_NVERTWS                  # Z added by devel/scanprov
+ANYOF_VERTWS                   # Z added by devel/scanprov
+ARG2L                          # Z added by devel/scanprov
+ARG2L_LOC                      # Z added by devel/scanprov
+ARG2L_SET                      # Z added by devel/scanprov
 av_create_and_push             # U
 av_create_and_unshift_one      # U
+BITMAP_BYTE                    # Z added by devel/scanprov
+BITMAP_TEST                    # Z added by devel/scanprov
+BmFLAGS                        # Z added by devel/scanprov
+boot_core_mro                  # F added by devel/scanprov
+BRANCH_next                    # Z added by devel/scanprov
+BRANCH_next_fail               # Z added by devel/scanprov
+CALLREGCOMP_ENG                # Z added by devel/scanprov
+CALLREGDUPE                    # Z added by devel/scanprov
+CALLREGDUPE_PVT                # Z added by devel/scanprov
+CALLREGFREE_PVT                # Z added by devel/scanprov
+CALLREG_NAMED_BUFF_ALL         # Z added by devel/scanprov
+CALLREG_NAMED_BUFF_CLEAR       # Z added by devel/scanprov
+CALLREG_NAMED_BUFF_COUNT       # Z added by devel/scanprov
+CALLREG_NAMED_BUFF_DELETE      # Z added by devel/scanprov
+CALLREG_NAMED_BUFF_EXISTS      # Z added by devel/scanprov
+CALLREG_NAMED_BUFF_FETCH       # Z added by devel/scanprov
+CALLREG_NAMED_BUFF_FIRSTKEY    # Z added by devel/scanprov
+CALLREG_NAMED_BUFF_NEXTKEY     # Z added by devel/scanprov
+CALLREG_NAMED_BUFF_SCALAR      # Z added by devel/scanprov
+CALLREG_NAMED_BUFF_STORE       # Z added by devel/scanprov
+CALLREG_NUMBUF_FETCH           # Z added by devel/scanprov
+CALLREG_NUMBUF_LENGTH          # Z added by devel/scanprov
+CALLREG_NUMBUF_STORE           # Z added by devel/scanprov
+CALLREG_PACKAGE                # Z added by devel/scanprov
+CASE_STD_PMMOD_FLAGS_PARSE_SET # Z added by devel/scanprov
+check_end_shift                # Z added by devel/scanprov
+COMMIT                         # Z added by devel/scanprov
+COMMIT_next                    # Z added by devel/scanprov
+COMMIT_next_fail               # Z added by devel/scanprov
+CONTINUE_PAT_MOD               # Z added by devel/scanprov
+CopFILE_setn                   # Z added by devel/scanprov
 CopLABEL                       # U
+CopLABEL_alloc                 # Z added by devel/scanprov
+COP_SEQ_RANGE_HIGH             # Z added by devel/scanprov
+COP_SEQ_RANGE_LOW              # Z added by devel/scanprov
+CURLY_B_max                    # Z added by devel/scanprov
+CURLY_B_max_fail               # Z added by devel/scanprov
+CURLY_B_min                    # Z added by devel/scanprov
+CURLY_B_min_fail               # Z added by devel/scanprov
+CURLYM_A                       # Z added by devel/scanprov
+CURLYM_A_fail                  # Z added by devel/scanprov
+CURLYM_B                       # Z added by devel/scanprov
+CURLYM_B_fail                  # Z added by devel/scanprov
+CURLYX_end                     # Z added by devel/scanprov
+CURLYX_end_fail                # Z added by devel/scanprov
+CUTGROUP                       # Z added by devel/scanprov
+CUTGROUP_next                  # Z added by devel/scanprov
+CUTGROUP_next_fail             # Z added by devel/scanprov
+cx_type                        # Z added by devel/scanprov
+DEBUG_BUFFERS_r                # Z added by devel/scanprov
+DEBUG_FLAGS_r                  # Z added by devel/scanprov
+DEBUG_OPTIMISE_MORE_r          # Z added by devel/scanprov
+DEBUG_STACK_r                  # Z added by devel/scanprov
+DEBUG_U                        # Z added by devel/scanprov
+DEBUG_U_FLAG                   # Z added by devel/scanprov
+DEBUG_U_TEST                   # Z added by devel/scanprov
+DEBUG_Uv                       # Z added by devel/scanprov
+DEBUG_Uv_TEST                  # Z added by devel/scanprov
+DEFINEP                        # Z added by devel/scanprov
+ENDLIKE                        # Z added by devel/scanprov
+EXEC_PAT_MOD                   # Z added by devel/scanprov
+EXEC_PAT_MODS                  # Z added by devel/scanprov
+EXT_PAT_MODS                   # Z added by devel/scanprov
+FAKE_BIT_BUCKET                # Z added by devel/scanprov
+find_and_forget_pmops          # F added by devel/scanprov
+float_end_shift                # Z added by devel/scanprov
 get_cvn_flags                  # U
+GLOBAL_PAT_MOD                 # Z added by devel/scanprov
+GOSUB                          # Z added by devel/scanprov
 gv_fetchfile_flags             # U
+GV_NOADD_MASK                  # Z added by devel/scanprov
+HAS_CTERMID                    # K added by devel/scanprov
+HAS_PTHREAD_YIELD              # K added by devel/scanprov
+HAS_SIGNBIT                    # K added by devel/scanprov
+HINT_LEXICAL_IO_IN             # Z added by devel/scanprov
+HINT_LEXICAL_IO_OUT            # Z added by devel/scanprov
+HV_DELETE                      # Z added by devel/scanprov
+HV_FETCH_ISEXISTS              # Z added by devel/scanprov
+HV_FETCH_ISSTORE               # Z added by devel/scanprov
+HV_FETCH_JUST_SV               # Z added by devel/scanprov
+HV_FETCH_LVALUE                # Z added by devel/scanprov
+HvMROMETA                      # Z added by devel/scanprov
+HVrhek_PV_UTF8                 # Z added by devel/scanprov
+IFMATCH_A                      # Z added by devel/scanprov
+IFMATCH_A_fail                 # Z added by devel/scanprov
+IGNORE_PAT_MOD                 # Z added by devel/scanprov
+INSUBP                         # Z added by devel/scanprov
+INT_PAT_MODS                   # Z added by devel/scanprov
+IS_ANYOF_TRIE                  # Z added by devel/scanprov
+isGV_with_GP_off               # Z added by devel/scanprov
+isGV_with_GP_on                # Z added by devel/scanprov
+is_LNBREAK_latin1_safe         # Z added by devel/scanprov
+is_LNBREAK_safe                # Z added by devel/scanprov
+is_LNBREAK_utf8_safe           # Z added by devel/scanprov
+IS_TRIE_AC                     # Z added by devel/scanprov
+KEEPCOPY_PAT_MOD               # Z added by devel/scanprov
+KEEPCOPY_PAT_MODS              # Z added by devel/scanprov
+KEEPS                          # Z added by devel/scanprov
+KEEPS_next                     # Z added by devel/scanprov
+KEEPS_next_fail                # Z added by devel/scanprov
+KEY_UNITCHECK                  # Z added by devel/scanprov
 lex_start                      # E (Perl_lex_start)
+LNBREAK                        # Z added by devel/scanprov
+LOOP_PAT_MODS                  # Z added by devel/scanprov
+L_R_TZSET                      # K added by devel/scanprov
+MARKPOINT                      # Z added by devel/scanprov
+MARKPOINT_next                 # Z added by devel/scanprov
+MARKPOINT_next_fail            # Z added by devel/scanprov
+MAX_RECURSE_EVAL_NOCHANGE_DEPTH # Z added by devel/scanprov
 memEQs                         # U
 memNEs                         # U
+MEM_SIZE_MAX                   # Z added by devel/scanprov
+M_PAT_MODS                     # Z added by devel/scanprov
 mro_get_linear_isa             # U
+mro_get_linear_isa_dfs         # F added by devel/scanprov
+mro_isa_changed_in             # F added by devel/scanprov
+mro_meta_dup                   # F added by devel/scanprov
 mro_method_changed_in          # U
+MULTILINE_PAT_MOD              # Z added by devel/scanprov
+MY_CXT_INDEX                   # Z added by devel/scanprov
 my_dirfd                       # U
 newSV_type                     # U
+ONCE_PAT_MOD                   # Z added by devel/scanprov
+ONCE_PAT_MODS                  # Z added by devel/scanprov
+OPFAIL                         # Z added by devel/scanprov
+PAD_COMPNAME_SV                # Z added by devel/scanprov
+PAD_FAKELEX_ANON               # Z added by devel/scanprov
+PAD_FAKELEX_MULTI              # Z added by devel/scanprov
+PARENT_FAKELEX_FLAGS           # Z added by devel/scanprov
+PARENT_PAD_INDEX               # Z added by devel/scanprov
+parser_free                    # F added by devel/scanprov
+Perl_emulate_cop_io            # F added by devel/scanprov
+PERL_ENABLE_POSITIVE_ASSERTION_STUDY # Z added by devel/scanprov
+PERL_FILTER_EXISTS             # Z added by devel/scanprov
+Perl_get_db_sub                # F added by devel/scanprov
+Perl_get_re_arg                # F added by devel/scanprov
+PERL___I                       # Z added by devel/scanprov
+PERLIO_INIT                    # Z added by devel/scanprov
+PERLIO_TERM                    # Z added by devel/scanprov
+Perl_mro_meta_init             # F added by devel/scanprov
+Perl_op_refcnt_dec             # F added by devel/scanprov
+Perl_op_refcnt_inc             # F added by devel/scanprov
 PERL_PV_ESCAPE_RE              # E
+PERL_REENTR_API                # Z added by devel/scanprov
 Perl_signbit                   # U
+Perl_softref2xv                # F added by devel/scanprov
+PL_isarev                      # Z added by devel/scanprov
 PL_parser                      # E
+PL_unitcheckav                 # Z added by devel/scanprov
+PL_unitcheckav_save            # Z added by devel/scanprov
+PMf_KEEPCOPY                   # Z added by devel/scanprov
+PMf_USED                       # Z added by devel/scanprov
 pregcomp                       # E (Perl_pregcomp)
+PREGf_CUTGROUP_SEEN            # Z added by devel/scanprov
+PREGf_IMPLICIT                 # Z added by devel/scanprov
+PREGf_NAUGHTY                  # Z added by devel/scanprov
+PREGf_SKIP                     # Z added by devel/scanprov
+PREGf_VERBARG_SEEN             # Z added by devel/scanprov
+PRINTF_FORMAT_NULL_OK          # K added by devel/scanprov
+process_special_blocks         # F added by devel/scanprov
+PRUNE                          # Z added by devel/scanprov
 ptr_table_clear                # U
 ptr_table_fetch                # U
 ptr_table_free                 # U
 ptr_table_new                  # U
 ptr_table_split                # U
 ptr_table_store                # U
+QR_PAT_MODS                    # Z added by devel/scanprov
 re_compile                     # U
-regfree_internal               # U
-reg_named_buff_all             # U
-reg_named_buff_exists          # U
-reg_named_buff_fetch           # U
-reg_named_buff_firstkey        # U
-reg_named_buff_nextkey         # U
-reg_named_buff_scalar          # U
-savesharedpvn                  # U
-scan_vstring                   # E (Perl_scan_vstring)
-SVfARG                         # U
-SvRX                           # U
-SvRXOK                         # U
-upg_version                    # E (Perl_upg_version)
-GV_NOADD_MASK                  # M added by devel/scanprov
-SV_COW_SHARED_HASH_KEYS        # M added by devel/scanprov
-boot_core_mro                  # F added by devel/scanprov
-find_and_forget_pmops          # F added by devel/scanprov
-mro_get_linear_isa_dfs         # F added by devel/scanprov
-mro_isa_changed_in             # F added by devel/scanprov
-mro_meta_dup                   # F added by devel/scanprov
-parser_free                    # F added by devel/scanprov
-Perl_emulate_cop_io            # F added by devel/scanprov
-Perl_get_db_sub                # F added by devel/scanprov
-Perl_get_re_arg                # F added by devel/scanprov
-Perl_mro_meta_init             # F added by devel/scanprov
-Perl_my_cxt_index              # F added by devel/scanprov
-Perl_op_refcnt_dec             # F added by devel/scanprov
-Perl_op_refcnt_inc             # F added by devel/scanprov
-Perl_softref2xv                # F added by devel/scanprov
-process_special_blocks         # F added by devel/scanprov
+RE_DEBUG_COMPILE_FLAGS         # Z added by devel/scanprov
+RE_DEBUG_EXTRA_BUFFERS         # Z added by devel/scanprov
+RE_DEBUG_EXTRA_OFFDEBUG        # Z added by devel/scanprov
+RE_DEBUG_EXTRA_OPTIMISE        # Z added by devel/scanprov
+RE_DEBUG_EXTRA_STACK           # Z added by devel/scanprov
+REF_HE_KEY                     # Z added by devel/scanprov
 reg_check_named_buff_matched   # F added by devel/scanprov
 regdump_extflags               # F added by devel/scanprov
+regdupe_internal               # F added by devel/scanprov
+regfree_internal               # F added by devel/scanprov
 reghop4                        # F added by devel/scanprov
+REGMATCH_STATE_MAX             # Z added by devel/scanprov
 reg_named_buff                 # F added by devel/scanprov
+reg_named_buff_all             # F added by devel/scanprov
+reg_named_buff_exists          # F added by devel/scanprov
+reg_named_buff_fetch           # F added by devel/scanprov
+reg_named_buff_firstkey        # F added by devel/scanprov
 reg_named_buff_iter            # F added by devel/scanprov
+reg_named_buff_nextkey         # F added by devel/scanprov
+reg_named_buff_scalar          # F added by devel/scanprov
 reg_numbered_buff_fetch        # F added by devel/scanprov
 reg_numbered_buff_length       # F added by devel/scanprov
 reg_numbered_buff_store        # F added by devel/scanprov
@@ -65,5 +209,88 @@ reg_scan_name                  # F added by devel/scanprov
 reg_skipcomment                # F added by devel/scanprov
 reg_temp_copy                  # F added by devel/scanprov
 require_tie_mod                # F added by devel/scanprov
+RE_TRACK_PATTERN_OFFSETS       # Z added by devel/scanprov
+RXapif_ALL                     # Z added by devel/scanprov
+RXapif_CLEAR                   # Z added by devel/scanprov
+RXapif_DELETE                  # Z added by devel/scanprov
+RXapif_EXISTS                  # Z added by devel/scanprov
+RXapif_FETCH                   # Z added by devel/scanprov
+RXapif_FIRSTKEY                # Z added by devel/scanprov
+RXapif_NEXTKEY                 # Z added by devel/scanprov
+RXapif_ONE                     # Z added by devel/scanprov
+RXapif_REGNAME                 # Z added by devel/scanprov
+RXapif_REGNAMES                # Z added by devel/scanprov
+RXapif_REGNAMES_COUNT          # Z added by devel/scanprov
+RXapif_SCALAR                  # Z added by devel/scanprov
+RXapif_STORE                   # Z added by devel/scanprov
+RX_BUFF_IDX_FULLMATCH          # Z added by devel/scanprov
+RX_BUFF_IDX_POSTMATCH          # Z added by devel/scanprov
+RX_BUFF_IDX_PREMATCH           # Z added by devel/scanprov
+RXf_CHECK_ALL                  # Z added by devel/scanprov
+RXf_COPY_DONE                  # Z added by devel/scanprov
+RXf_EVAL_SEEN                  # Z added by devel/scanprov
+RXf_INTUIT_TAIL                # Z added by devel/scanprov
+RXf_MATCH_UTF8                 # Z added by devel/scanprov
+RXf_PMf_COMPILETIME            # Z added by devel/scanprov
+RXf_PMf_EXTENDED               # Z added by devel/scanprov
+RXf_PMf_FOLD                   # Z added by devel/scanprov
+RXf_PMf_KEEPCOPY               # Z added by devel/scanprov
+RXf_PMf_MULTILINE              # Z added by devel/scanprov
+RXf_PMf_SINGLELINE             # Z added by devel/scanprov
+RXf_PMf_STD_PMMOD              # Z added by devel/scanprov
+RXf_SKIPWHITE                  # Z added by devel/scanprov
+RXf_SPLIT                      # Z added by devel/scanprov
+RXf_START_ONLY                 # Z added by devel/scanprov
+RXf_TAINTED                    # Z added by devel/scanprov
+RXf_TAINTED_SEEN               # Z added by devel/scanprov
+RXf_USE_INTUIT                 # Z added by devel/scanprov
+RXf_USE_INTUIT_ML              # Z added by devel/scanprov
+RXf_USE_INTUIT_NOML            # Z added by devel/scanprov
+RXf_WHITE                      # Z added by devel/scanprov
+RXi_GET                        # Z added by devel/scanprov
+RXi_GET_DECL                   # Z added by devel/scanprov
+RXi_SET                        # Z added by devel/scanprov
+SAVEPARSER                     # Z added by devel/scanprov
+savesharedpvn                  # U
+SAVEt_PARSER                   # Z added by devel/scanprov
+scan_vstring                   # E (Perl_scan_vstring)
+SINGLE_PAT_MOD                 # Z added by devel/scanprov
+SKIP                           # Z added by devel/scanprov
+SKIP_next                      # Z added by devel/scanprov
+SKIP_next_fail                 # Z added by devel/scanprov
 Slab_to_rw                     # F added by devel/scanprov
+S_PAT_MODS                     # Z added by devel/scanprov
+STD_PAT_MODS                   # Z added by devel/scanprov
+SV_COW_OTHER_PVS               # Z added by devel/scanprov
+SV_COW_SHARED_HASH_KEYS        # M added by devel/scanprov
+SV_DO_COW_SVSETSV              # Z added by devel/scanprov
+SVfARG                         # U
+SvOURSTASH                     # Z added by devel/scanprov
+SvOURSTASH_set                 # Z added by devel/scanprov
+SvPCS_IMPORTED                 # Z added by devel/scanprov
+SvPCS_IMPORTED_off             # Z added by devel/scanprov
+SvPCS_IMPORTED_on              # Z added by devel/scanprov
+SVpgv_GP                       # Z added by devel/scanprov
+SVprv_PCS_IMPORTED             # Z added by devel/scanprov
+SvRX                           # U
+SvRXOK                         # U
+SV_SAVED_COPY                  # Z added by devel/scanprov
+SVt_PVBM                       # Z added by devel/scanprov
+TRIE_next                      # Z added by devel/scanprov
+TRIE_next_fail                 # Z added by devel/scanprov
+TRIE_WORDS_OFFSET              # Z added by devel/scanprov
 update_debugger_info           # F added by devel/scanprov
+upg_version                    # E (Perl_upg_version)
+VERB                           # Z added by devel/scanprov
+WHILEM_A_max                   # Z added by devel/scanprov
+WHILEM_A_max_fail              # Z added by devel/scanprov
+WHILEM_A_min                   # Z added by devel/scanprov
+WHILEM_A_min_fail              # Z added by devel/scanprov
+WHILEM_A_pre                   # Z added by devel/scanprov
+WHILEM_A_pre_fail              # Z added by devel/scanprov
+WHILEM_B_max                   # Z added by devel/scanprov
+WHILEM_B_max_fail              # Z added by devel/scanprov
+WHILEM_B_min                   # Z added by devel/scanprov
+WHILEM_B_min_fail              # Z added by devel/scanprov
+XTENDED_PAT_MOD                # Z added by devel/scanprov
+YYEMPTY                        # Z added by devel/scanprov
index 43b63ec..bfe3520 100644 (file)
@@ -1,16 +1,62 @@
 5.010000
-hv_common                      # U
-hv_common_key_len              # U
+HAS_ASCTIME_R                  # K added by devel/scanprov
+HAS_CRYPT_R                    # K added by devel/scanprov
+HAS_CTIME_R                    # K added by devel/scanprov
+HAS_DRAND48_R                  # K added by devel/scanprov
+HAS_GETGRENT_R                 # K added by devel/scanprov
+HAS_GETGRGID_R                 # K added by devel/scanprov
+HAS_GETGRNAM_R                 # K added by devel/scanprov
+HAS_GETHOSTBYADDR_R            # K added by devel/scanprov
+HAS_GETHOSTBYNAME_R            # K added by devel/scanprov
+HAS_GETHOSTENT_R               # K added by devel/scanprov
+HAS_GETLOGIN_R                 # K added by devel/scanprov
+HAS_GETNETBYADDR_R             # K added by devel/scanprov
+HAS_GETNETBYNAME_R             # K added by devel/scanprov
+HAS_GETNETENT_R                # K added by devel/scanprov
+HAS_GETPROTOBYNAME_R           # K added by devel/scanprov
+HAS_GETPROTOBYNUMBER_R         # K added by devel/scanprov
+HAS_GETPROTOENT_R              # K added by devel/scanprov
+HAS_GETPWENT_R                 # K added by devel/scanprov
+HAS_GETPWNAM_R                 # K added by devel/scanprov
+HAS_GETPWUID_R                 # K added by devel/scanprov
+HAS_GETSERVBYNAME_R            # K added by devel/scanprov
+HAS_GETSERVBYPORT_R            # K added by devel/scanprov
+HAS_GETSERVENT_R               # K added by devel/scanprov
+HAS_GETSPNAM_R                 # K added by devel/scanprov
+HAS_GMTIME_R                   # K added by devel/scanprov
+HAS_LOCALTIME_R                # K added by devel/scanprov
+HAS_OFF64_T                    # K added by devel/scanprov
+HAS_PTHREAD_ATFORK             # K added by devel/scanprov
+HAS_RANDOM_R                   # K added by devel/scanprov
+HAS_READDIR64_R                # K added by devel/scanprov
+HAS_READDIR_R                  # K added by devel/scanprov
+HAS_SETRESGID_PROTO            # K added by devel/scanprov
+HAS_SETRESUID_PROTO            # K added by devel/scanprov
+HAS_SRAND48_R                  # K added by devel/scanprov
+HAS_SRANDOM_R                  # K added by devel/scanprov
+HAS_STRERROR_R                 # K added by devel/scanprov
+HAS_TMPNAM_R                   # K added by devel/scanprov
+HAS_TTYNAME_R                  # K added by devel/scanprov
+hv_common                      # F added by devel/scanprov
+hv_common_key_len              # F added by devel/scanprov
+HV_DISABLE_UVAR_XKEY           # Z added by devel/scanprov
+LOCALTIME_R_NEEDS_TZSET        # K added by devel/scanprov
+my_cxt_init                    # U
+PERL_INTERPRETER_SIZE_UPTO_MEMBER # Z added by devel/scanprov
 PERL_PV_PRETTY_ELLIPSES        # E
-reentrant_free                 # U
-reentrant_init                 # U
-reentrant_retry                # U
-reentrant_size                 # U
+PERL_PV_PRETTY_NOCLEAR         # M added by devel/scanprov
+Perl_sys_init                  # F added by devel/scanprov
+Perl_sys_init3                 # F added by devel/scanprov
+PERL_SYS_INIT3_BODY            # Z added by devel/scanprov
+PERL_SYS_INIT_BODY             # Z added by devel/scanprov
+Perl_sys_term                  # F added by devel/scanprov
+PERL_SYS_TERM_BODY             # Z added by devel/scanprov
+PL_destroyhook                 # Z added by devel/scanprov
+RXf_NULL                       # Z added by devel/scanprov
 START_MY_CXT                   # E
+sv_2num                        # F added by devel/scanprov
 sv_destroyable                 # U
-sys_init                       # U
-sys_init3                      # U
-sys_term                       # U
-PERL_PV_PRETTY_NOCLEAR         # M added by devel/scanprov
+SvDESTROYABLE                  # Z added by devel/scanprov
+USE_ITHREADS                   # K added by devel/scanprov
+XSINTERFACE_CVT_ANON           # Z added by devel/scanprov
 XSPROTO                        # M added by devel/scanprov
-sv_2num                        # F added by devel/scanprov
index 04b614a..011faa4 100644 (file)
 5.010001
 croak_xs_usage                 # U
+CxHASARGS                      # Z added by devel/scanprov
+CxLABEL                        # Z added by devel/scanprov
+CxLVAL                         # Z added by devel/scanprov
+CxOLD_IN_EVAL                  # Z added by devel/scanprov
+CxOLD_OP_TYPE                  # Z added by devel/scanprov
+CxONCE                         # Z added by devel/scanprov
+DEFSV_set                      # U
+dSAVEDERRNO                    # Z added by devel/scanprov
+dSAVE_ERRNO                    # Z added by devel/scanprov
+GMTIME_MAX                     # K added by devel/scanprov
+GMTIME_MIN                     # K added by devel/scanprov
+G_WANT                         # Z added by devel/scanprov
+HASATTRIBUTE_DEPRECATED        # K added by devel/scanprov
+HAS_BUILTIN_EXPECT             # K added by devel/scanprov
+HAS_GETADDRINFO                # K added by devel/scanprov
+HAS_GETNAMEINFO                # K added by devel/scanprov
+HAS_INETNTOP                   # K added by devel/scanprov
+HAS_INETPTON                   # K added by devel/scanprov
+HAS_TIMEGM                     # K added by devel/scanprov
 HeUTF8                         # U
+HINT_NO_AMAGIC                 # Z added by devel/scanprov
+HVhek_KEYCANONICAL             # Z added by devel/scanprov
+I_SYS_POLL                     # K added by devel/scanprov
+LOCALTIME_MAX                  # K added by devel/scanprov
+LOCALTIME_MIN                  # K added by devel/scanprov
+magic_clearisa                 # F added by devel/scanprov
+malloc_good_size               # F added by devel/scanprov
+mem_log_common                 # F added by devel/scanprov
 mPUSHs                         # U
 mro_get_from_name              # U
+MRO_GET_PRIVATE_DATA           # Z added by devel/scanprov
 mro_get_private_data           # U
 mro_register                   # U
 mro_set_mro                    # U
 mro_set_private_data           # U
+MUTABLE_AV                     # U
+MUTABLE_CV                     # U
+MUTABLE_GV                     # U
+MUTABLE_HV                     # U
+MUTABLE_IO                     # U
+MUTABLE_PTR                    # U
+MUTABLE_SV                     # U
 mXPUSHs                        # U
 newSVpvn_flags                 # U
 newSVpvn_utf8                  # U
 newSVpvs_flags                 # U
-save_freeop                    # U (Perl_save_freeop)
+NV_OVERFLOWS_INTEGERS_AT       # K added by devel/scanprov
+OP_GIMME_REVERSE               # Z added by devel/scanprov
+PERL_BITFIELD16                # Z added by devel/scanprov
+PERL_BITFIELD32                # Z added by devel/scanprov
+PERL_BITFIELD8                 # Z added by devel/scanprov
+PERLDBf_SAVESRC                # Z added by devel/scanprov
+PERLDBf_SAVESRC_INVALID        # Z added by devel/scanprov
+PERLDBf_SAVESRC_NOSUBS         # Z added by devel/scanprov
+PERLDB_SAVESRC                 # Z added by devel/scanprov
+PERLDB_SAVESRC_INVALID         # Z added by devel/scanprov
+PERLDB_SAVESRC_NOSUBS          # Z added by devel/scanprov
+PERL_FS_VERSION                # Z added by devel/scanprov
+PERL_GIT_UNPUSHED_COMMITS      # Z added by devel/scanprov
+Perl_malloc_good_size          # Z added by devel/scanprov
+PERL_PATCHNUM                  # Z added by devel/scanprov
+Perl_safesysmalloc_size        # Z added by devel/scanprov
+PERL_SUB_DEPTH_WARN            # Z added by devel/scanprov
+PERL_USE_DEVEL                 # K added by devel/scanprov
+PERL_VERSION_STRING            # Z added by devel/scanprov
+PL_breakable_sub_gen           # Z added by devel/scanprov
+PL_registered_mros             # Z added by devel/scanprov
+PL_sv_serial                   # Z added by devel/scanprov
+prepare_SV_for_RV              # Z added by devel/scanprov
+RESTORE_ERRNO                  # Z added by devel/scanprov
+RX_ANCHORED_SUBSTR             # Z added by devel/scanprov
+RX_ANCHORED_UTF8               # Z added by devel/scanprov
+RX_CHECK_SUBSTR                # Z added by devel/scanprov
+RX_ENGINE                      # Z added by devel/scanprov
+RX_EXTFLAGS                    # Z added by devel/scanprov
+RX_FLOAT_SUBSTR                # Z added by devel/scanprov
+RX_FLOAT_UTF8                  # Z added by devel/scanprov
+RXf_PMf_STD_PMMOD_SHIFT        # Z added by devel/scanprov
+RX_GOFS                        # Z added by devel/scanprov
+RX_LASTCLOSEPAREN              # Z added by devel/scanprov
+RX_LASTPAREN                   # Z added by devel/scanprov
+RX_MINLEN                      # Z added by devel/scanprov
+RX_MINLENRET                   # Z added by devel/scanprov
+RX_NPARENS                     # Z added by devel/scanprov
+RX_OFFS                        # Z added by devel/scanprov
+RXp_EXTFLAGS                   # Z added by devel/scanprov
+RXp_MATCH_COPIED               # Z added by devel/scanprov
+RXp_MATCH_COPIED_off           # Z added by devel/scanprov
+RXp_MATCH_COPIED_on            # Z added by devel/scanprov
+RXp_MATCH_TAINTED              # Z added by devel/scanprov
+RXp_MATCH_UTF8                 # Z added by devel/scanprov
+RXp_PAREN_NAMES                # Z added by devel/scanprov
+RX_PRECOMP                     # Z added by devel/scanprov
+RX_PRECOMP_const               # Z added by devel/scanprov
+RX_PRELEN                      # Z added by devel/scanprov
+RX_REFCNT                      # Z added by devel/scanprov
+RX_SUBBEG                      # Z added by devel/scanprov
+RX_SUBLEN                      # Z added by devel/scanprov
+RX_UTF8                        # Z added by devel/scanprov
+RX_WRAPLEN                     # Z added by devel/scanprov
+RX_WRAPPED                     # Z added by devel/scanprov
+SAVE_ERRNO                     # Z added by devel/scanprov
+save_freeop                    # Z added by devel/scanprov
+SAVEFREEOP                     # U
+save_freepv                    # Z added by devel/scanprov
+save_freesv                    # Z added by devel/scanprov
 save_hints                     # U
+save_mortalizesv               # Z added by devel/scanprov
 save_op                        # U (Perl_save_op)
 save_padsv_and_mortalize       # U
+SAVEPADSVANDMORTALIZE          # Z added by devel/scanprov
 save_pushi32ptr                # U
 save_pushptr                   # U
-save_pushptrptr                # U
-sv_insert_flags                # U
-DEFSV_set                      # M added by devel/scanprov
-MUTABLE_PTR                    # M added by devel/scanprov
-MUTABLE_SV                     # M added by devel/scanprov
-magic_clearisa                 # F added by devel/scanprov
-malloc_good_size               # F added by devel/scanprov
-mem_log_common                 # F added by devel/scanprov
 save_pushptri32ptr             # F added by devel/scanprov
+save_pushptrptr                # U
+SAVEt_PADSV_AND_MORTALIZE      # Z added by devel/scanprov
 search_const                   # F added by devel/scanprov
+sv_insert_flags                # U
+SvRV_const                     # Z added by devel/scanprov
index b908c46..d011cb5 100644 (file)
@@ -1,26 +1,67 @@
 5.011000
-av_iter_p                      # U
+blk_format                     # Z added by devel/scanprov
+blk_u16                        # Z added by devel/scanprov
+CXp_HASARGS                    # Z added by devel/scanprov
+CXp_ONCE                       # Z added by devel/scanprov
+CXt_LOOP_LAZYIV                # Z added by devel/scanprov
+CXt_LOOP_LAZYSV                # Z added by devel/scanprov
+CXt_LOOP_PLAIN                 # Z added by devel/scanprov
+CxTYPE_is_LOOP                 # Z added by devel/scanprov
+DEBUG_B                        # Z added by devel/scanprov
+DEBUG_B_FLAG                   # Z added by devel/scanprov
+DEBUG_B_TEST                   # Z added by devel/scanprov
+DEBUG_GPOS_r                   # Z added by devel/scanprov
+do_delete_local                # F added by devel/scanprov
+dump_all_perl                  # F added by devel/scanprov
+dump_packsubs_perl             # F added by devel/scanprov
+dump_sub_perl                  # F added by devel/scanprov
+get_aux_mg                     # F added by devel/scanprov
+get_cvs                        # U
 gv_add_by_type                 # U
 Gv_AMupdate                    # A
+GV_AUTOLOAD                    # Z added by devel/scanprov
+GV_CROAK                       # Z added by devel/scanprov
+gv_SVadd                       # Z added by devel/scanprov
+incpush_use_sep                # F added by devel/scanprov
+INT_64_T                       # Z added by devel/scanprov
 is_ascii_string                # U
+magic_clearhints               # F added by devel/scanprov
+my                             # Z added by devel/scanprov
+NATIVE8_TO_UNI                 # Z added by devel/scanprov
+Perl_assert                    # Z added by devel/scanprov
+Perl_av_iter_p                 # F added by devel/scanprov
+PL_ofsgv                       # Z added by devel/scanprov
 PL_opfreehook                  # E
-pregfree2                      # U
+pregfree2                      # F added by devel/scanprov
 PUSH_MULTICALL                 # U
+RE_DEBUG_EXTRA_GPOS            # Z added by devel/scanprov
 re_dup_guts                    # U
+RX_SAVED_COPY                  # Z added by devel/scanprov
+RX_WRAPPED_const               # Z added by devel/scanprov
 save_adelete                   # U
+SAVEADELETE                    # Z added by devel/scanprov
 save_aelem_flags               # U
+SAVEf_KEEPOLDELEM              # Z added by devel/scanprov
+SAVEf_SETMAGIC                 # Z added by devel/scanprov
 save_hdelete                   # U
+SAVEHDELETE                    # Z added by devel/scanprov
 save_helem_flags               # U
+SAVEt_ADELETE                  # Z added by devel/scanprov
+S_IFIFO                        # Z added by devel/scanprov
+SvCANEXISTDELETE               # Z added by devel/scanprov
+sv_dup_inc_multiple            # F added by devel/scanprov
+SV_FORCE_UTF8_UPGRADE          # Z added by devel/scanprov
 SvOOK_offset                   # U
 SVt_REGEXP                     # E
+SVt_RV                         # Z added by devel/scanprov
+SV_UNDEF_RETURNS_NULL          # Z added by devel/scanprov
 sv_utf8_upgrade_flags_grow     # U
+SYSTEM_GMTIME_MAX              # Z added by devel/scanprov
+SYSTEM_GMTIME_MIN              # Z added by devel/scanprov
+SYSTEM_LOCALTIME_MAX           # Z added by devel/scanprov
+SYSTEM_LOCALTIME_MIN           # Z added by devel/scanprov
+TM                             # Z added by devel/scanprov
+USE_SYSTEM_GMTIME              # Z added by devel/scanprov
+USE_SYSTEM_LOCALTIME           # Z added by devel/scanprov
+USE_TM64                       # Z added by devel/scanprov
 WARN_IMPRECISION               # E
-get_cvs                        # M added by devel/scanprov
-do_delete_local                # F added by devel/scanprov
-dump_all_perl                  # F added by devel/scanprov
-dump_packsubs_perl             # F added by devel/scanprov
-dump_sub_perl                  # F added by devel/scanprov
-get_aux_mg                     # F added by devel/scanprov
-incpush_use_sep                # F added by devel/scanprov
-magic_clearhints               # F added by devel/scanprov
-sv_dup_inc_multiple            # F added by devel/scanprov
index 48651c5..3aeb030 100644 (file)
@@ -1,7 +1,9 @@
 5.011001
-ck_warner                      # U
-ck_warner_d                    # U
 add_utf16_textfilter           # F added by devel/scanprov
 ckwarn_common                  # F added by devel/scanprov
+ck_warner                      # U
+ck_warner_d                    # U
+deprecate                      # Z added by devel/scanprov
 package_version                # F added by devel/scanprov
 utf16_textfilter               # F added by devel/scanprov
+WARNshift                      # Z added by devel/scanprov
index 651df59..1ce6fb8 100644 (file)
@@ -1,6 +1,14 @@
 5.011002
-CHARBITS                       # E
+CHARBITS                       # K added by devel/scanprov
 ENTER_with_name                # U
+gv_try_downgrade               # F added by devel/scanprov
+HINT_UNI_8_BIT                 # Z added by devel/scanprov
+IN_UNI_8_BIT                   # Z added by devel/scanprov
+KEYWORD_PLUGIN_DECLINE         # Z added by devel/scanprov
+KEYWORD_PLUGIN_EXPR            # Z added by devel/scanprov
+KEYWORD_PLUGIN_STMT            # Z added by devel/scanprov
+LATIN_SMALL_LETTER_SHARP_S     # Z added by devel/scanprov
+LATIN_SMALL_LETTER_Y_WITH_DIAERESIS # Z added by devel/scanprov
 LEAVE_with_name                # U
 lex_bufutf8                    # U
 lex_discard_to                 # U
@@ -15,6 +23,18 @@ lex_stuff_pvn                  # U
 lex_stuff_sv                   # U
 LEX_STUFF_UTF8                 # E
 lex_unstuff                    # U
-PL_keyword_plugin              # E
-gv_try_downgrade               # F added by devel/scanprov
+MAX_PORTABLE_UTF8_TWO_BYTE     # Z added by devel/scanprov
+MICRO_SIGN                     # Z added by devel/scanprov
+OPpREVERSE_INPLACE             # Z added by devel/scanprov
+padadd_NO_DUP_CHECK            # Z added by devel/scanprov
+padadd_OUR                     # Z added by devel/scanprov
+padadd_STATE                   # Z added by devel/scanprov
 Perl_keyword_plugin_standard   # F added by devel/scanprov
+PL_keyword_plugin              # E
+PL_scopestack_name             # Z added by devel/scanprov
+toLOWER_LATIN1                 # Z added by devel/scanprov
+toUPPER_LATIN1_MOD             # Z added by devel/scanprov
+UTF8_TWO_BYTE_HI               # Z added by devel/scanprov
+UTF8_TWO_BYTE_HI_nocast        # Z added by devel/scanprov
+UTF8_TWO_BYTE_LO               # Z added by devel/scanprov
+UTF8_TWO_BYTE_LO_nocast        # Z added by devel/scanprov
index 2679a3f..27152a1 100644 (file)
@@ -1,4 +1,7 @@
 5.011004
+BADVERSION                     # Z added by devel/scanprov
+force_strict_version           # F added by devel/scanprov
+is_LAX_VERSION                 # Z added by devel/scanprov
+is_STRICT_VERSION              # Z added by devel/scanprov
 prescan_version                # U
 WARN_ILLEGALPROTO              # E
-force_strict_version           # F added by devel/scanprov
index d9b0d6a..6e201e0 100644 (file)
@@ -1,2 +1,5 @@
 5.011005
+isALNUMU                       # Z added by devel/scanprov
+isALPHAU                       # Z added by devel/scanprov
+isCHARNAME_CONT                # Z added by devel/scanprov
 sv_pos_u2b_flags               # U
index 84da3de..39347f9 100644 (file)
@@ -1,2 +1,5 @@
 5.013000
 cBOOL                          # U
+GvEGVx                         # Z added by devel/scanprov
+HAS_PRCTL                      # K added by devel/scanprov
+HAS_PRCTL_SET_NAME             # K added by devel/scanprov
index 02c65cd..23e86e9 100644 (file)
@@ -1,12 +1,22 @@
 5.013001
 croak_sv                       # U
 die_sv                         # U
-mess_sv                        # U
-sv_2nv_flags                   # U
-warn_sv                        # U
 die_unwind                     # F added by devel/scanprov
 grok_bslash_c                  # F added by devel/scanprov
+G_UNDEF_FILL                   # Z added by devel/scanprov
 invoke_exception_hook          # F added by devel/scanprov
 magic_methcall1                # F added by devel/scanprov
+mess_sv                        # U
 Perl_magic_methcall            # F added by devel/scanprov
+PL_restartjmpenv               # Z added by devel/scanprov
+SAVE_MASK                      # Z added by devel/scanprov
+SAVEt_I32_SMALL                # Z added by devel/scanprov
+SAVE_TIGHT_SHIFT               # Z added by devel/scanprov
+SAVEt_INT_SMALL                # Z added by devel/scanprov
+SSPOPUV                        # Z added by devel/scanprov
+SSPUSHUV                       # Z added by devel/scanprov
+sv_2nv                         # Z added by devel/scanprov
+sv_2nv_flags                   # U
+SV_SKIP_OVERLOAD               # Z added by devel/scanprov
+warn_sv                        # U
 with_queued_errors             # F added by devel/scanprov
index bfd1764..1a9cc78 100644 (file)
@@ -1,18 +1,34 @@
 5.013002
+AMGf_numeric                   # Z added by devel/scanprov
 C_ARRAY_END                    # U
 clone_params_del               # U
 clone_params_new               # U
+DM_ARRAY_ISA                   # Z added by devel/scanprov
+dPOPnv_nomg                    # Z added by devel/scanprov
+dPOPTOPiirl_nomg               # Z added by devel/scanprov
+dPOPTOPiirl_ul_nomg            # Z added by devel/scanprov
+dPOPTOPnnrl_nomg               # Z added by devel/scanprov
+dPOPXiirl_ul_nomg              # Z added by devel/scanprov
 find_rundefsv                  # U
 foldEQ                         # U
 foldEQ_locale                  # U
 foldEQ_utf8                    # U
 hv_fill                        # U
-sv_dec_nomg                    # U
-sv_dup_inc                     # U
-sv_inc_nomg                    # U
-SvNV_nomg                      # U
+NONDESTRUCT_PAT_MOD            # Z added by devel/scanprov
+NONDESTRUCT_PAT_MODS           # Z added by devel/scanprov
 padlist_dup                    # F added by devel/scanprov
 Perl_try_amagic_bin            # F added by devel/scanprov
 Perl_try_amagic_un             # F added by devel/scanprov
+PL_signalhook                  # Z added by devel/scanprov
+PMf_NONDESTRUCT                # Z added by devel/scanprov
+REGNODE_SIMPLE                 # Z added by devel/scanprov
+REGNODE_VARIES                 # Z added by devel/scanprov
+sv_dec_nomg                    # U
 sv_dup_common                  # F added by devel/scanprov
+sv_dup_inc                     # U
+sv_inc_nomg                    # U
+SvIV_please_nomg               # Z added by devel/scanprov
+SvNV_nomg                      # U
+tryAMAGICbin_MG                # Z added by devel/scanprov
+tryAMAGICun_MG                 # Z added by devel/scanprov
 unreferenced_to_tmp_stack      # F added by devel/scanprov
index 2284558..33ea2bd 100644 (file)
@@ -1,10 +1,24 @@
 5.013003
-blockhook_register             # E
-croak_no_modify                # U
 anonymise_cv_maybe             # F added by devel/scanprov
 assert_uft8_cache_coherent     # F added by devel/scanprov
+BhkDISABLE                     # Z added by devel/scanprov
+BhkENABLE                      # Z added by devel/scanprov
+BhkENTRY                       # Z added by devel/scanprov
+BhkENTRY_set                   # Z added by devel/scanprov
+BhkFLAGS                       # Z added by devel/scanprov
+blockhook_register             # E
+CALL_BLOCK_HOOKS               # Z added by devel/scanprov
+croak_no_modify                # U
+CvCVGV_RC                      # Z added by devel/scanprov
+CvCVGV_RC_off                  # Z added by devel/scanprov
+CvCVGV_RC_on                   # Z added by devel/scanprov
+CVf_CVGV_RC                    # Z added by devel/scanprov
+CvGV_set                       # Z added by devel/scanprov
 cvgv_set                       # F added by devel/scanprov
 grok_bslash_o                  # F added by devel/scanprov
+my_lstat                       # Z added by devel/scanprov
 my_lstat_flags                 # F added by devel/scanprov
+my_stat                        # Z added by devel/scanprov
 my_stat_flags                  # F added by devel/scanprov
+PL_blockhooks                  # Z added by devel/scanprov
 utf8_mg_len_cache_update       # F added by devel/scanprov
index 6d5bd06..b2721c7 100644 (file)
@@ -1,4 +1,10 @@
 5.013004
-XS_APIVERSION_BOOTCHECK        # E
+HAS_STATIC_INLINE              # K added by devel/scanprov
+PERL_API_VERSION_STRING        # Z added by devel/scanprov
 Perl_hv_kill_backrefs          # F added by devel/scanprov
 Perl_init_dbargs               # F added by devel/scanprov
+PERL_STATIC_INLINE             # K added by devel/scanprov
+PERL_STRLEN_EXPAND_SHIFT       # Z added by devel/scanprov
+PMf_BASE_SHIFT                 # Z added by devel/scanprov
+RXf_BASE_SHIFT                 # Z added by devel/scanprov
+XS_APIVERSION_BOOTCHECK        # E
index 53130ca..d61d84a 100644 (file)
@@ -1,10 +1,13 @@
 5.013005
 caller_cx                      # U
+FITS_IN_8_BITS                 # Z added by devel/scanprov
+gv_magicalize_isa              # F added by devel/scanprov
 isOCTAL                        # U
 lex_stuff_pvs                  # U
+MY_CXT_INIT_ARG                # Z added by devel/scanprov
 parse_fullstmt                 # U
-PL_rpeepp                      # E
-gv_magicalize_isa              # F added by devel/scanprov
 Perl_more_bodies               # F added by devel/scanprov
+PL_rpeepp                      # E
 rpeep                          # F added by devel/scanprov
+SAVEt_GVSV                     # Z added by devel/scanprov
 yyunlex                        # F added by devel/scanprov
index 0ee7d59..6ce7cdd 100644 (file)
@@ -1,9 +1,16 @@
 5.013006
+BHKf_bhk_eval                  # Z added by devel/scanprov
+BHKf_bhk_post_end              # Z added by devel/scanprov
+BHKf_bhk_pre_end               # Z added by devel/scanprov
+BHKf_bhk_start                 # Z added by devel/scanprov
 ck_entersub_args_list          # U
 ck_entersub_args_proto         # U
 ck_entersub_args_proto_or_list # U
 cv_get_call_checker            # E
 cv_set_call_checker            # E
+DEFAULT_PAT_MOD                # Z added by devel/scanprov
+FLAGS                          # Z added by devel/scanprov
+gv_fetchpvn                    # U
 isALNUMC_A                     # U
 isALNUMC_L1                    # U
 isALPHA_A                      # U
@@ -40,7 +47,10 @@ isXDIGIT_A                     # U
 isXDIGIT_L1                    # U
 lex_stuff_pv                   # U
 LINKLIST                       # U
+LOCALE_PAT_MOD                 # Z added by devel/scanprov
+LOCALE_PAT_MODS                # Z added by devel/scanprov
 mg_free_type                   # U
+mro_package_moved              # F added by devel/scanprov
 newSVpv_share                  # U
 op_append_elem                 # U
 op_append_list                 # U
@@ -49,23 +59,28 @@ op_linklist                    # U
 op_prepend_elem                # U
 parse_stmtseq                  # U
 PERL_MAGIC_checkcall           # E
+Perl_populate_isa              # F added by devel/scanprov
 rv2cv_op_cv                    # U
 RV2CVOPCV_MARK_EARLY           # E
 RV2CVOPCV_RETURN_NAME_GV       # E
 savesharedpvs                  # U
 savesharedsvpv                 # U
-sv_2bool_flags                 # U
+STD_PMMOD_FLAGS_CLEAR          # Z added by devel/scanprov
+sv_2bool                       # Z added by devel/scanprov
+sv_2bool_flags                 # F added by devel/scanprov
 sv_catpv_flags                 # U
 sv_catpv_nomg                  # U
 sv_catpvs_flags                # U
 sv_catpvs_mg                   # U
 sv_catpvs_nomg                 # U
+sv_catxmlpvs                   # Z added by devel/scanprov
 sv_cmp_flags                   # U
 sv_cmp_locale_flags            # U
+sv_collxfrm                    # Z added by devel/scanprov
 sv_collxfrm_flags              # U
 sv_eq_flags                    # U
 sv_setpvs_mg                   # U
 sv_setref_pvs                  # U
 SvTRUE_nomg                    # U
-mro_package_moved              # F added by devel/scanprov
-Perl_populate_isa              # F added by devel/scanprov
+UNICODE_PAT_MOD                # Z added by devel/scanprov
+UNICODE_PAT_MODS               # Z added by devel/scanprov
index 50f21fa..74843ae 100644 (file)
@@ -18,14 +18,29 @@ cophh_store_pv                 # E
 cophh_store_pvn                # E
 cophh_store_pvs                # E
 cophh_store_sv                 # E
+CopHINTHASH_get                # Z added by devel/scanprov
+CopHINTHASH_set                # Z added by devel/scanprov
 cop_hints_2hv                  # A
 cop_hints_fetch_pv             # U
 cop_hints_fetch_pvn            # U
 cop_hints_fetch_pvs            # U
 cop_hints_fetch_sv             # U
 custom_op_register             # E
+CvSTASH_set                    # Z added by devel/scanprov
+cvstash_set                    # F added by devel/scanprov
 dirp_dup                       # A
+HINT_RE_FLAGS                  # Z added by devel/scanprov
 HvENAME                        # U
+hv_ename_add                   # F added by devel/scanprov
+hv_ename_delete                # F added by devel/scanprov
+HvENAME_get                    # Z added by devel/scanprov
+HvENAME_HEK                    # Z added by devel/scanprov
+HvENAME_HEK_NN                 # Z added by devel/scanprov
+HvENAMELEN_get                 # Z added by devel/scanprov
+HV_FETCH_EMPTY_HE              # Z added by devel/scanprov
+HvNAME_HEK_NN                  # Z added by devel/scanprov
+mro_clean_isarev               # F added by devel/scanprov
+mro_gather_and_rename          # F added by devel/scanprov
 newFOROP                       # A
 newWHILEOP                     # A
 OP_CLASS                       # U
@@ -35,25 +50,35 @@ parse_barestmt                 # U
 parse_block                    # U
 parse_label                    # U
 PARSE_OPTIONAL                 # E
+PERLIOBUF_DEFAULT_BUFSIZ       # Z added by devel/scanprov
+PL_custom_ops                  # Z added by devel/scanprov
 PL_phase                       # E
-SvPV_nomg_nolen                # U
-XopFLAGS                       # E
-XopDISABLE                     # M added by devel/scanprov
-XopENABLE                      # M added by devel/scanprov
-XopENTRY                       # M added by devel/scanprov
-XopENTRY_set                   # M added by devel/scanprov
-cvstash_set                    # F added by devel/scanprov
-hv_ename_add                   # F added by devel/scanprov
-hv_ename_delete                # F added by devel/scanprov
-mro_clean_isarev               # F added by devel/scanprov
-mro_gather_and_rename          # F added by devel/scanprov
-Perl_custom_op_xop             # F added by devel/scanprov
+PL_utf8_foldclosures           # Z added by devel/scanprov
 refcounted_he_chain_2hv        # F added by devel/scanprov
 refcounted_he_fetch_pv         # F added by devel/scanprov
 refcounted_he_fetch_pvn        # F added by devel/scanprov
+refcounted_he_fetch_pvs        # Z added by devel/scanprov
 refcounted_he_fetch_sv         # F added by devel/scanprov
 refcounted_he_free             # F added by devel/scanprov
 refcounted_he_inc              # F added by devel/scanprov
+REFCOUNTED_HE_KEY_UTF8         # Z added by devel/scanprov
 refcounted_he_new_pv           # F added by devel/scanprov
 refcounted_he_new_pvn          # F added by devel/scanprov
+refcounted_he_new_pvs          # Z added by devel/scanprov
 refcounted_he_new_sv           # F added by devel/scanprov
+SAVEFREECOPHH                  # Z added by devel/scanprov
+SAVEt_FREECOPHH                # Z added by devel/scanprov
+SvPV_nomg_nolen                # U
+XopDISABLE                     # M added by devel/scanprov
+XOPd_xop_class                 # Z added by devel/scanprov
+XOPd_xop_desc                  # Z added by devel/scanprov
+XOPd_xop_name                  # Z added by devel/scanprov
+XOPd_xop_peep                  # Z added by devel/scanprov
+XopENABLE                      # M added by devel/scanprov
+XopENTRY                       # M added by devel/scanprov
+XopENTRY_set                   # M added by devel/scanprov
+XopFLAGS                       # E
+XOPf_xop_class                 # Z added by devel/scanprov
+XOPf_xop_desc                  # Z added by devel/scanprov
+XOPf_xop_name                  # Z added by devel/scanprov
+XOPf_xop_peep                  # Z added by devel/scanprov
index 25fbf7a..32b3314 100644 (file)
@@ -1,9 +1,18 @@
 5.013008
-foldEQ_latin1                  # U
+ANYOF_CLASS_TEST_ANY_SET       # Z added by devel/scanprov
+DEBUG_Pv                       # Z added by devel/scanprov
+DEBUG_Pv_TEST                  # Z added by devel/scanprov
+EXACTFU                        # Z added by devel/scanprov
+foldEQ_latin1                  # F added by devel/scanprov
+GREEK_SMALL_LETTER_MU          # Z added by devel/scanprov
+HV_NAME_SETALL                 # Z added by devel/scanprov
 mg_findext                     # U
 parse_arithexpr                # U
 parse_fullexpr                 # U
 parse_listexpr                 # U
 parse_termexpr                 # U
-sv_unmagicext                  # U
 Perl_hv_undef_flags            # F added by devel/scanprov
+PERLIO_F_CLEARED               # Z added by devel/scanprov
+REFFU                          # Z added by devel/scanprov
+sv_unmagicext                  # U
+TWO_BYTE_UTF8_TO_UNI           # Z added by devel/scanprov
index c969c70..1010a53 100644 (file)
 5.013009
+AMG_CALLunary                  # Z added by devel/scanprov
+ASCII_RESTRICT_PAT_MOD         # Z added by devel/scanprov
+ASCII_RESTRICT_PAT_MODS        # Z added by devel/scanprov
+BOUNDA                         # Z added by devel/scanprov
+BOUNDU                         # Z added by devel/scanprov
+check_utf8_print               # F added by devel/scanprov
+curse                          # F added by devel/scanprov
+DEPENDS_PAT_MOD                # Z added by devel/scanprov
+DEPENDS_PAT_MODS               # Z added by devel/scanprov
+G_WRITING_TO_STDERR            # Z added by devel/scanprov
+HAS_SIN6_SCOPE_ID              # K added by devel/scanprov
+MAX_CHARSET_NAME_LENGTH        # Z added by devel/scanprov
+NBOUNDA                        # Z added by devel/scanprov
+NBOUNDU                        # Z added by devel/scanprov
+Perl_pp_accept                 # Z added by devel/scanprov
+Perl_pp_andassign              # Z added by devel/scanprov
+Perl_pp_avalues                # Z added by devel/scanprov
+Perl_pp_bind                   # Z added by devel/scanprov
+Perl_pp_bit_xor                # Z added by devel/scanprov
+Perl_pp_chmod                  # Z added by devel/scanprov
+Perl_pp_chomp                  # Z added by devel/scanprov
+Perl_pp_connect                # Z added by devel/scanprov
+Perl_pp_cos                    # Z added by devel/scanprov
+Perl_pp_custom                 # Z added by devel/scanprov
+Perl_pp_dbmclose               # Z added by devel/scanprov
+Perl_pp_dofile                 # Z added by devel/scanprov
+Perl_pp_dor                    # Z added by devel/scanprov
+Perl_pp_dorassign              # Z added by devel/scanprov
+Perl_pp_dump                   # Z added by devel/scanprov
+Perl_pp_egrent                 # Z added by devel/scanprov
+Perl_pp_enetent                # Z added by devel/scanprov
+Perl_pp_eprotoent              # Z added by devel/scanprov
+Perl_pp_epwent                 # Z added by devel/scanprov
+Perl_pp_eservent               # Z added by devel/scanprov
+Perl_pp_exp                    # Z added by devel/scanprov
+Perl_pp_fcntl                  # Z added by devel/scanprov
+Perl_pp_ftatime                # Z added by devel/scanprov
+Perl_pp_ftbinary               # Z added by devel/scanprov
+Perl_pp_ftblk                  # Z added by devel/scanprov
+Perl_pp_ftchr                  # Z added by devel/scanprov
+Perl_pp_ftctime                # Z added by devel/scanprov
+Perl_pp_ftdir                  # Z added by devel/scanprov
+Perl_pp_fteexec                # Z added by devel/scanprov
+Perl_pp_fteowned               # Z added by devel/scanprov
+Perl_pp_fteread                # Z added by devel/scanprov
+Perl_pp_ftewrite               # Z added by devel/scanprov
+Perl_pp_ftfile                 # Z added by devel/scanprov
+Perl_pp_ftmtime                # Z added by devel/scanprov
+Perl_pp_ftpipe                 # Z added by devel/scanprov
+Perl_pp_ftrexec                # Z added by devel/scanprov
+Perl_pp_ftrwrite               # Z added by devel/scanprov
+Perl_pp_ftsgid                 # Z added by devel/scanprov
+Perl_pp_ftsize                 # Z added by devel/scanprov
+Perl_pp_ftsock                 # Z added by devel/scanprov
+Perl_pp_ftsuid                 # Z added by devel/scanprov
+Perl_pp_ftsvtx                 # Z added by devel/scanprov
+Perl_pp_ftzero                 # Z added by devel/scanprov
+Perl_pp_getpeername            # Z added by devel/scanprov
+Perl_pp_getsockname            # Z added by devel/scanprov
+Perl_pp_ggrgid                 # Z added by devel/scanprov
+Perl_pp_ggrnam                 # Z added by devel/scanprov
+Perl_pp_ghbyaddr               # Z added by devel/scanprov
+Perl_pp_ghbyname               # Z added by devel/scanprov
+Perl_pp_gnbyaddr               # Z added by devel/scanprov
+Perl_pp_gnbyname               # Z added by devel/scanprov
+Perl_pp_gpbyname               # Z added by devel/scanprov
+Perl_pp_gpbynumber             # Z added by devel/scanprov
+Perl_pp_gpwnam                 # Z added by devel/scanprov
+Perl_pp_gpwuid                 # Z added by devel/scanprov
+Perl_pp_gsbyname               # Z added by devel/scanprov
+Perl_pp_gsbyport               # Z added by devel/scanprov
+Perl_pp_gsockopt               # Z added by devel/scanprov
+Perl_pp_hex                    # Z added by devel/scanprov
+Perl_pp_keys                   # Z added by devel/scanprov
+Perl_pp_kill                   # Z added by devel/scanprov
+Perl_pp_lcfirst                # Z added by devel/scanprov
+Perl_pp_lineseq                # Z added by devel/scanprov
+Perl_pp_listen                 # Z added by devel/scanprov
+Perl_pp_localtime              # Z added by devel/scanprov
+Perl_pp_log                    # Z added by devel/scanprov
+Perl_pp_lstat                  # Z added by devel/scanprov
+Perl_pp_mapstart               # Z added by devel/scanprov
+Perl_pp_msgctl                 # Z added by devel/scanprov
+Perl_pp_msgget                 # Z added by devel/scanprov
+Perl_pp_msgrcv                 # Z added by devel/scanprov
+Perl_pp_msgsnd                 # Z added by devel/scanprov
+Perl_pp_orassign               # Z added by devel/scanprov
+Perl_pp_padany                 # Z added by devel/scanprov
+Perl_pp_pop                    # Z added by devel/scanprov
+Perl_pp_read                   # Z added by devel/scanprov
+Perl_pp_recv                   # Z added by devel/scanprov
+Perl_pp_regcmaybe              # Z added by devel/scanprov
+Perl_pp_rindex                 # Z added by devel/scanprov
+Perl_pp_rv2hv                  # Z added by devel/scanprov
+Perl_pp_say                    # Z added by devel/scanprov
+Perl_pp_scalar                 # Z added by devel/scanprov
+Perl_pp_schomp                 # Z added by devel/scanprov
+Perl_pp_scope                  # Z added by devel/scanprov
+Perl_pp_seek                   # Z added by devel/scanprov
+Perl_pp_semop                  # Z added by devel/scanprov
+Perl_pp_send                   # Z added by devel/scanprov
+Perl_pp_sge                    # Z added by devel/scanprov
+Perl_pp_sgrent                 # Z added by devel/scanprov
+Perl_pp_sgt                    # Z added by devel/scanprov
+Perl_pp_shmctl                 # Z added by devel/scanprov
+Perl_pp_shmget                 # Z added by devel/scanprov
+Perl_pp_shmread                # Z added by devel/scanprov
+Perl_pp_shutdown               # Z added by devel/scanprov
+Perl_pp_slt                    # Z added by devel/scanprov
+Perl_pp_snetent                # Z added by devel/scanprov
+Perl_pp_socket                 # Z added by devel/scanprov
+Perl_pp_sprotoent              # Z added by devel/scanprov
+Perl_pp_spwent                 # Z added by devel/scanprov
+Perl_pp_sqrt                   # Z added by devel/scanprov
+Perl_pp_sservent               # Z added by devel/scanprov
+Perl_pp_ssockopt               # Z added by devel/scanprov
+Perl_pp_symlink                # Z added by devel/scanprov
+Perl_pp_transr                 # Z added by devel/scanprov
+Perl_pp_unlink                 # Z added by devel/scanprov
+Perl_pp_utime                  # Z added by devel/scanprov
+Perl_pp_values                 # Z added by devel/scanprov
 PERL_PV_ESCAPE_NONASCII        # E
+report_wrongway_fh             # F added by devel/scanprov
+RXf_PMf_CHARSET                # Z added by devel/scanprov
+tied_method                    # F added by devel/scanprov
+TIED_METHOD_ARGUMENTS_ON_STACK # Z added by devel/scanprov
+TIED_METHOD_MORTALIZE_NOT_NEEDED # Z added by devel/scanprov
+TIED_METHOD_SAY                # Z added by devel/scanprov
+UNICODE_DISALLOW_ILLEGAL_INTERCHANGE # Z added by devel/scanprov
+UNICODE_DISALLOW_NONCHAR       # Z added by devel/scanprov
+UNICODE_DISALLOW_SUPER         # Z added by devel/scanprov
+UNICODE_DISALLOW_SURROGATE     # Z added by devel/scanprov
+UNICODE_IS_NONCHAR             # Z added by devel/scanprov
+UNICODE_IS_SUPER               # Z added by devel/scanprov
+UNICODE_WARN_ILLEGAL_INTERCHANGE # Z added by devel/scanprov
+UNICODE_WARN_NONCHAR           # Z added by devel/scanprov
+UNICODE_WARN_SUPER             # Z added by devel/scanprov
+UNICODE_WARN_SURROGATE         # Z added by devel/scanprov
+UTF8_DISALLOW_FE_FF            # Z added by devel/scanprov
 UTF8_DISALLOW_ILLEGAL_INTERCHANGE # E
 UTF8_DISALLOW_NONCHAR          # E
 UTF8_DISALLOW_SUPER            # E
 UTF8_DISALLOW_SURROGATE        # E
+UTF8_IS_NONCHAR_GIVEN_THAT_NON_SUPER_AND_GE_PROBLEMATIC # Z added by devel/scanprov
+UTF8_MAX_FOLD_CHAR_EXPAND      # Z added by devel/scanprov
+UTF8_WARN_FE_FF                # Z added by devel/scanprov
 UTF8_WARN_ILLEGAL_INTERCHANGE  # E
 UTF8_WARN_NONCHAR              # E
 UTF8_WARN_SUPER                # E
 UTF8_WARN_SURROGATE            # E
-check_utf8_print               # F added by devel/scanprov
-curse                          # F added by devel/scanprov
-report_wrongway_fh             # F added by devel/scanprov
-tied_method                    # F added by devel/scanprov
index 071409b..b22d550 100644 (file)
@@ -1,13 +1,29 @@
 5.013010
-WARN_NONCHAR                   # E
-WARN_NON_UNICODE               # E
-WARN_SURROGATE                 # E
 _append_range_to_invlist       # F added by devel/scanprov
+ASCII_MORE_RESTRICT_PAT_MODS   # Z added by devel/scanprov
+CHARSET_PAT_MODS               # Z added by devel/scanprov
 foldEQ_utf8_flags              # F added by devel/scanprov
+FOLDEQ_UTF8_NOMIX_ASCII        # Z added by devel/scanprov
+GvCV_set                       # Z added by devel/scanprov
+GvGP_set                       # Z added by devel/scanprov
 invlist_array                  # F added by devel/scanprov
 invlist_extend                 # F added by devel/scanprov
 invlist_max                    # F added by devel/scanprov
 invlist_set_len                # F added by devel/scanprov
 invlist_trim                   # F added by devel/scanprov
+MAX_FEATURE_LEN                # Z added by devel/scanprov
 _new_invlist                   # F added by devel/scanprov
+PERL_COP_SEQMAX                # Z added by devel/scanprov
+PERL_PADSEQ_INTRO              # Z added by devel/scanprov
+PL_utf8_xidcont                # Z added by devel/scanprov
+PL_utf8_xidstart               # Z added by devel/scanprov
+REFFA                          # Z added by devel/scanprov
 regcurly                       # F added by devel/scanprov
+SUBST_TAINT_BOOLRET            # Z added by devel/scanprov
+SUBST_TAINT_PAT                # Z added by devel/scanprov
+SUBST_TAINT_REPL               # Z added by devel/scanprov
+SUBST_TAINT_RETAINT            # Z added by devel/scanprov
+SUBST_TAINT_STR                # Z added by devel/scanprov
+WARN_NONCHAR                   # E
+WARN_NON_UNICODE               # E
+WARN_SURROGATE                 # E
index 91269f0..a41448d 100644 (file)
@@ -1,2 +1,7 @@
 5.013011
 add_cp_to_invlist              # F added by devel/scanprov
+ANYOF_CLASS_SETALL             # Z added by devel/scanprov
+GREEK_CAPITAL_LETTER_MU        # Z added by devel/scanprov
+LATIN_CAPITAL_LETTER_A_WITH_RING_ABOVE # Z added by devel/scanprov
+LATIN_CAPITAL_LETTER_Y_WITH_DIAERESIS # Z added by devel/scanprov
+LATIN_SMALL_LETTER_A_WITH_RING_ABOVE # Z added by devel/scanprov
index 89a626a..62c32e3 100644 (file)
@@ -1,3 +1,6 @@
 5.014000
+LATIN_CAPITAL_LETTER_SHARP_S   # Z added by devel/scanprov
+LEX_START_SAME_FILTER          # Z added by devel/scanprov
+to_uni_fold                    # Z added by devel/scanprov
 _to_uni_fold_flags             # F added by devel/scanprov
 _to_utf8_fold_flags            # F added by devel/scanprov
index 5970cd4..07a9d37 100644 (file)
@@ -1,3 +1,41 @@
 5.015000
 hv_free_ent_ret                # F added by devel/scanprov
 Perl_hfree_next_entry          # F added by devel/scanprov
+PERL_MAGIC_READONLY_ACCEPTABLE # Z added by devel/scanprov
+PERL_MAGIC_TYPE_IS_VALUE_MAGIC # Z added by devel/scanprov
+PERL_MAGIC_TYPE_READONLY_ACCEPTABLE # Z added by devel/scanprov
+PERL_MAGIC_VALUE_MAGIC         # Z added by devel/scanprov
+PERL_MAGIC_VTABLE_MASK         # Z added by devel/scanprov
+Perl_pp_aelemfast_lex          # Z added by devel/scanprov
+PL_vtbl_arylen                 # Z added by devel/scanprov
+PL_vtbl_arylen_p               # Z added by devel/scanprov
+PL_vtbl_backref                # Z added by devel/scanprov
+PL_vtbl_bm                     # Z added by devel/scanprov
+PL_vtbl_collxfrm               # Z added by devel/scanprov
+PL_vtbl_dbline                 # Z added by devel/scanprov
+PL_vtbl_defelem                # Z added by devel/scanprov
+PL_vtbl_env                    # Z added by devel/scanprov
+PL_vtbl_envelem                # Z added by devel/scanprov
+PL_vtbl_fm                     # Z added by devel/scanprov
+PL_vtbl_hints                  # Z added by devel/scanprov
+PL_vtbl_hintselem              # Z added by devel/scanprov
+PL_vtbl_isa                    # Z added by devel/scanprov
+PL_vtbl_isaelem                # Z added by devel/scanprov
+PL_vtbl_mglob                  # Z added by devel/scanprov
+PL_vtbl_nkeys                  # Z added by devel/scanprov
+PL_vtbl_ovrld                  # Z added by devel/scanprov
+PL_vtbl_pack                   # Z added by devel/scanprov
+PL_vtbl_packelem               # Z added by devel/scanprov
+PL_vtbl_pos                    # Z added by devel/scanprov
+PL_vtbl_regdata                # Z added by devel/scanprov
+PL_vtbl_regdatum               # Z added by devel/scanprov
+PL_vtbl_regexp                 # Z added by devel/scanprov
+PL_vtbl_sigelem                # Z added by devel/scanprov
+PL_vtbl_substr                 # Z added by devel/scanprov
+PL_vtbl_sv                     # Z added by devel/scanprov
+PL_vtbl_taint                  # Z added by devel/scanprov
+PL_vtbl_utf8                   # Z added by devel/scanprov
+PL_vtbl_uvar                   # Z added by devel/scanprov
+PL_vtbl_vec                    # Z added by devel/scanprov
+want_vtbl_bm                   # Z added by devel/scanprov
+want_vtbl_fm                   # Z added by devel/scanprov
index 75f98a0..1a2de3f 100644 (file)
@@ -1,14 +1,6 @@
 5.015001
 cop_fetch_label                # U
 cop_store_label                # U
-pad_add_name_pv                # U
-pad_add_name_pvn               # U
-pad_add_name_pvs               # U
-pad_add_name_sv                # U
-pad_findmy_pv                  # U
-pad_findmy_pvn                 # U
-pad_findmy_pvs                 # U
-pad_findmy_sv                  # U
 do_ncmp                        # F added by devel/scanprov
 get_invlist_iter_addr          # F added by devel/scanprov
 _invlist_array_init            # F added by devel/scanprov
@@ -19,6 +11,20 @@ invlist_iterinit               # F added by devel/scanprov
 invlist_iternext               # F added by devel/scanprov
 _invlist_subtract              # F added by devel/scanprov
 _invlist_union                 # F added by devel/scanprov
+OP_LVALUE_NO_CROAK             # Z added by devel/scanprov
+OPpENTERSUB_LVAL_MASK          # Z added by devel/scanprov
+OPpFT_STACKING                 # Z added by devel/scanprov
+pad_add_name_pv                # U
+pad_add_name_pvn               # U
+pad_add_name_pvs               # U
+pad_add_name_sv                # U
 pad_alloc_name                 # F added by devel/scanprov
+pad_findmy_pv                  # U
+pad_findmy_pvn                 # U
+pad_findmy_pvs                 # U
+pad_findmy_sv                  # U
 Perl_op_lvalue_flags           # F added by devel/scanprov
+PERL_SCAN_SILENT_NON_PORTABLE  # Z added by devel/scanprov
+PERL_SET_PHASE                 # Z added by devel/scanprov
 Perl_was_lvalue_sub            # F added by devel/scanprov
+SVt_MASK                       # Z added by devel/scanprov
index 07dae39..5090205 100644 (file)
@@ -1,7 +1,14 @@
 5.015002
-XS_EXTERNAL                    # M added by devel/scanprov
-XS_INTERNAL                    # M added by devel/scanprov
 core_prototype                 # F added by devel/scanprov
+CvDYNFILE                      # Z added by devel/scanprov
+CvDYNFILE_off                  # Z added by devel/scanprov
+CvDYNFILE_on                   # Z added by devel/scanprov
+CVf_DYNFILE                    # Z added by devel/scanprov
 finalize_op                    # F added by devel/scanprov
 finalize_optree                # F added by devel/scanprov
+OPpOFFBYONE                    # Z added by devel/scanprov
 Perl_ck_entersub_args_core     # F added by devel/scanprov
+ST_INO_SIGN                    # K added by devel/scanprov
+ST_INO_SIZE                    # K added by devel/scanprov
+XS_EXTERNAL                    # M added by devel/scanprov
+XS_INTERNAL                    # M added by devel/scanprov
index c10cb56..56d9df5 100644 (file)
@@ -1,6 +1,19 @@
 5.015003
-GV_ADDMG                       # E
 coresub_op                     # F added by devel/scanprov
+GV_ADDMG                       # E
+gv_fetchsv_nomg                # U
+GV_NO_SVGMAGIC                 # E
 inplace_aassign                # F added by devel/scanprov
+I_STDBOOL                      # K added by devel/scanprov
+MAYBE_DEREF_GV                 # Z added by devel/scanprov
+MAYBE_DEREF_GV_flags           # Z added by devel/scanprov
+MAYBE_DEREF_GV_nomg            # Z added by devel/scanprov
 op_integerize                  # F added by devel/scanprov
+OP_IS_DIRHOP                   # Z added by devel/scanprov
+OP_IS_NUMCOMPARE               # Z added by devel/scanprov
+OPpCOREARGS_DEREF1             # Z added by devel/scanprov
+OPpCOREARGS_DEREF2             # Z added by devel/scanprov
+OPpCOREARGS_PUSHMARK           # Z added by devel/scanprov
+OPpCOREARGS_SCALARMOD          # Z added by devel/scanprov
 op_std_init                    # F added by devel/scanprov
+QUAD_IS___INT64                # K added by devel/scanprov
index a8853a3..82aaa5a 100644 (file)
@@ -1,7 +1,21 @@
 5.015004
+CvAUTOLOAD                     # Z added by devel/scanprov
+CvAUTOLOAD_off                 # Z added by devel/scanprov
+CvAUTOLOAD_on                  # Z added by devel/scanprov
+cv_ckproto_len_flags           # F added by devel/scanprov
+CVf_AUTOLOAD                   # Z added by devel/scanprov
+CvPROTO                        # Z added by devel/scanprov
+CvPROTOLEN                     # Z added by devel/scanprov
+FOLDEQ_S1_ALREADY_FOLDED       # Z added by devel/scanprov
+FOLDEQ_S2_ALREADY_FOLDED       # Z added by devel/scanprov
+GV_AUTOLOAD_ISMETHOD           # Z added by devel/scanprov
 gv_autoload_pv                 # U
 gv_autoload_pvn                # U
 gv_autoload_sv                 # U
+GvENAME_HEK                    # Z added by devel/scanprov
+GvENAMELEN                     # Z added by devel/scanprov
+GvENAMEUTF8                    # Z added by devel/scanprov
+gv_fetchmethod_flags           # Z added by devel/scanprov
 gv_fetchmethod_pv_flags        # U
 gv_fetchmethod_pvn_flags       # U
 gv_fetchmethod_sv_flags        # U
@@ -14,12 +28,18 @@ gv_fetchmeth_sv_autoload       # U
 gv_init_pv                     # U
 gv_init_pvn                    # U
 gv_init_sv                     # U
+gv_init_svtype                 # F added by devel/scanprov
+GvNAMEUTF8                     # Z added by devel/scanprov
+HEKf                           # Z added by devel/scanprov
+HEKf256                        # Z added by devel/scanprov
+HEKfARG                        # Z added by devel/scanprov
 HvENAMELEN                     # U
 HvENAMEUTF8                    # U
 HvNAMELEN                      # U
 HvNAMEUTF8                     # U
 isASCII_L1                     # U
 newGVgen_flags                 # U
+PL_utf8_perl_idstart           # Z added by devel/scanprov
 sv_derived_from_pv             # U
 sv_derived_from_pvn            # U
 sv_derived_from_sv             # U
@@ -27,10 +47,8 @@ sv_does_pv                     # U
 sv_does_pvn                    # U
 sv_does_sv                     # U
 sv_ref                         # U
+sv_sethek                      # F added by devel/scanprov
 whichsig_pv                    # U
 whichsig_pvn                   # U
 whichsig_sv                    # U
 WIDEST_UTYPE                   # E
-cv_ckproto_len_flags           # F added by devel/scanprov
-gv_init_svtype                 # F added by devel/scanprov
-sv_sethek                      # F added by devel/scanprov
index 2c52f9b..015b2ec 100644 (file)
@@ -1,4 +1,13 @@
 5.015005
+KEY_evalbytes                  # Z added by devel/scanprov
+LEX_EVALBYTES                  # Z added by devel/scanprov
+LEX_IGNORE_UTF8_HINTS          # Z added by devel/scanprov
+LEX_START_COPIED               # Z added by devel/scanprov
+LEX_START_FLAGS                # Z added by devel/scanprov
+OPpEVAL_BYTES                  # Z added by devel/scanprov
+OPpEVAL_COPHH                  # Z added by devel/scanprov
+OPpEVAL_UNICODE                # Z added by devel/scanprov
+PL_globhook                    # Z added by devel/scanprov
 _to_fold_latin1                # F added by devel/scanprov
 to_lower_latin1                # F added by devel/scanprov
 _to_upper_title_latin1         # F added by devel/scanprov
index 81b9284..25e8bcb 100644 (file)
@@ -1,9 +1,17 @@
 5.015006
-newCONSTSUB_flags              # A
 check_locale_boundary_crossing # F added by devel/scanprov
+FOLD_FLAGS_FULL                # Z added by devel/scanprov
+FOLD_FLAGS_LOCALE              # Z added by devel/scanprov
+I8_TO_NATIVE                   # Z added by devel/scanprov
+KEY___SUB                      # Z added by devel/scanprov
+LvFLAGS                        # Z added by devel/scanprov
 mayberelocate                  # F added by devel/scanprov
 minus_v                        # F added by devel/scanprov
+NATIVE_TO_I8                   # Z added by devel/scanprov
+newCONSTSUB_flags              # A
 newXS_len_flags                # F added by devel/scanprov
+OPpALLOW_FAKE                  # Z added by devel/scanprov
+OPpSUBSTR_REPL_FIRST           # Z added by devel/scanprov
 report_redefined_cv            # F added by devel/scanprov
 _to_utf8_lower_flags           # F added by devel/scanprov
 _to_utf8_title_flags           # F added by devel/scanprov
index b02b431..31846bd 100644 (file)
@@ -1 +1,19 @@
 5.015007
+CURRENT_FEATURE_BUNDLE         # Z added by devel/scanprov
+CURRENT_HINTS                  # Z added by devel/scanprov
+FEATURE_BUNDLE_510             # Z added by devel/scanprov
+FEATURE_BUNDLE_511             # Z added by devel/scanprov
+FEATURE_BUNDLE_515             # Z added by devel/scanprov
+FEATURE_BUNDLE_CUSTOM          # Z added by devel/scanprov
+FEATURE_BUNDLE_DEFAULT         # Z added by devel/scanprov
+FEATURE_EVALBYTES_IS_ENABLED   # Z added by devel/scanprov
+FEATURE_SAY_IS_ENABLED         # Z added by devel/scanprov
+FEATURE_STATE_IS_ENABLED       # Z added by devel/scanprov
+FEATURE___SUB___IS_ENABLED     # Z added by devel/scanprov
+FEATURE_SWITCH_IS_ENABLED      # Z added by devel/scanprov
+FEATURE_UNICODE_IS_ENABLED     # Z added by devel/scanprov
+FEATURE_UNIEVAL_IS_ENABLED     # Z added by devel/scanprov
+HAS_ISBLANK                    # K added by devel/scanprov
+HINT_FEATURE_MASK              # Z added by devel/scanprov
+HINT_FEATURE_SHIFT             # Z added by devel/scanprov
+REFCOUNTED_HE_EXISTS           # Z added by devel/scanprov
index 5687046..6766cc2 100644 (file)
@@ -1,8 +1,26 @@
 5.015008
-isASCII_LC                     # U
-is_utf8_char_buf               # U
-wrap_op_checker                # U
 amagic_is_enabled              # F added by devel/scanprov
+FEATURE_FC_IS_ENABLED          # Z added by devel/scanprov
+HAS_IPV6_MREQ                  # K added by devel/scanprov
+HAS_SOCKADDR_IN6               # K added by devel/scanprov
+IN_SOME_LOCALE_FORM            # Z added by devel/scanprov
+IN_SOME_LOCALE_FORM_COMPILETIME # Z added by devel/scanprov
+IN_SOME_LOCALE_FORM_RUNTIME    # Z added by devel/scanprov
 _invlist_intersection_maybe_complement_2nd # F added by devel/scanprov
 _invlist_union_maybe_complement_2nd # F added by devel/scanprov
+isASCII_LC                     # U
+is_utf8_char_buf               # U
+KEY_fc                         # Z added by devel/scanprov
 _new_invlist_C_array           # F added by devel/scanprov
+OP_CHECK_MUTEX_INIT            # Z added by devel/scanprov
+OP_CHECK_MUTEX_LOCK            # Z added by devel/scanprov
+OP_CHECK_MUTEX_TERM            # Z added by devel/scanprov
+OP_CHECK_MUTEX_UNLOCK          # Z added by devel/scanprov
+OPpFT_AFTER_t                  # Z added by devel/scanprov
+PL_AboveLatin1                 # Z added by devel/scanprov
+PL_delaymagic_egid             # Z added by devel/scanprov
+PL_delaymagic_euid             # Z added by devel/scanprov
+PL_delaymagic_gid              # Z added by devel/scanprov
+PL_delaymagic_uid              # Z added by devel/scanprov
+PL_Latin1                      # Z added by devel/scanprov
+wrap_op_checker                # U
index 26adad0..640b802 100644 (file)
@@ -1,4 +1,5 @@
 5.015009
+LEX_DONT_CLOSE_RSFP            # Z added by devel/scanprov
 utf8_to_uvchr_buf              # U
 utf8_to_uvuni_buf              # F added by devel/scanprov
 valid_utf8_to_uvchr            # F added by devel/scanprov
index 01207b0..3557c0a 100644 (file)
@@ -1,8 +1,14 @@
 5.016000
-CopLABEL_len                   # U
-CopLABEL_len_flags             # U
 _add_range_to_invlist          # F added by devel/scanprov
 bad_type_pv                    # F added by devel/scanprov
+CopLABEL_len                   # U
+CopLABEL_len_flags             # U
+CxLABEL_len                    # Z added by devel/scanprov
+CxLABEL_len_flags              # Z added by devel/scanprov
+HINT_EXPLICIT_STRICT_REFS      # Z added by devel/scanprov
+HINT_EXPLICIT_STRICT_SUBS      # Z added by devel/scanprov
+HINT_EXPLICIT_STRICT_VARS      # Z added by devel/scanprov
+OPpPV_IS_UTF8                  # Z added by devel/scanprov
 too_few_arguments_pv           # F added by devel/scanprov
 too_many_arguments_pv          # F added by devel/scanprov
 yyerror_pv                     # F added by devel/scanprov
index eee006b..08510e3 100644 (file)
@@ -1,2 +1,8 @@
 5.017000
+FOLD_FLAGS_NOMIX_ASCII         # Z added by devel/scanprov
+HvAMAGIC                       # Z added by devel/scanprov
+HvAMAGIC_off                   # Z added by devel/scanprov
+HvAMAGIC_on                    # Z added by devel/scanprov
 magic_copycallchecker          # F added by devel/scanprov
+PL_vtbl_checkcall              # Z added by devel/scanprov
+UTF8_IS_REPLACEMENT            # Z added by devel/scanprov
index 1336444..3aee89d 100644 (file)
@@ -1,5 +1,14 @@
 5.017001
 alloccopstash                  # U
+CopSTASHPV_set                 # A
 current_re_engine              # F added by devel/scanprov
 newSTUB                        # F added by devel/scanprov
+PL_stashpad                    # Z added by devel/scanprov
+PL_stashpadix                  # Z added by devel/scanprov
+PL_stashpadmax                 # Z added by devel/scanprov
+PMf_CODELIST_PRIVATE           # Z added by devel/scanprov
+PMf_HAS_CV                     # Z added by devel/scanprov
+PMf_IS_QR                      # Z added by devel/scanprov
+PMf_USE_RE_EVAL                # Z added by devel/scanprov
+PREGf_USE_RE_EVAL              # Z added by devel/scanprov
 re_op_compile                  # F added by devel/scanprov
index 960991e..51a4c10 100644 (file)
@@ -1,13 +1,56 @@
 5.017002
-sv_copypv_flags                # U
-sv_copypv_nomg                 # U
-sv_vcatpvfn_flags              # U
+AMGf_want_list                 # Z added by devel/scanprov
+CVf_HASEVAL                    # Z added by devel/scanprov
 cv_forget_slab                 # F added by devel/scanprov
+CVf_SLABBED                    # Z added by devel/scanprov
+CvHASEVAL                      # Z added by devel/scanprov
+CvHASEVAL_off                  # Z added by devel/scanprov
+CvHASEVAL_on                   # Z added by devel/scanprov
+CvSLABBED                      # Z added by devel/scanprov
+CvSLABBED_off                  # Z added by devel/scanprov
+CvSLABBED_on                   # Z added by devel/scanprov
+DEBUG_S                        # Z added by devel/scanprov
+DEBUG_S_FLAG                   # Z added by devel/scanprov
+DEBUG_S_TEST                   # Z added by devel/scanprov
+FIND_RUNCV_level_eq            # Z added by devel/scanprov
 find_runcv_where               # F added by devel/scanprov
 grok_bslash_x                  # F added by devel/scanprov
+HAS_IP_MREQ                    # K added by devel/scanprov
 invlist_highest                # F added by devel/scanprov
 magic_cleararylen_p            # F added by devel/scanprov
+OP_FREED                       # Z added by devel/scanprov
+OpSLAB                         # Z added by devel/scanprov
 opslab_force_free              # F added by devel/scanprov
 opslab_free                    # F added by devel/scanprov
 opslab_free_nopad              # F added by devel/scanprov
+OpslabREFCNT_dec               # Z added by devel/scanprov
+OpslabREFCNT_dec_padok         # Z added by devel/scanprov
+OpSLOT                         # Z added by devel/scanprov
+OPSLOT_HEADER                  # Z added by devel/scanprov
+OPSLOT_HEADER_P                # Z added by devel/scanprov
+PERL_CALLCONV_NO_RET           # Z added by devel/scanprov
+PERL_RELOCATABLE_INC           # K added by devel/scanprov
 Slab_to_ro                     # F added by devel/scanprov
+sv_2bool_nomg                  # Z added by devel/scanprov
+sv_catpvn_nomg_utf8_upgrade    # Z added by devel/scanprov
+sv_copypv_flags                # U
+sv_copypv_nomg                 # U
+SvIOK_nog                      # Z added by devel/scanprov
+SvIOK_nogthink                 # Z added by devel/scanprov
+SvNIOK_nog                     # Z added by devel/scanprov
+SvNIOK_nogthink                # Z added by devel/scanprov
+SvNOK_nog                      # Z added by devel/scanprov
+SvNOK_nogthink                 # Z added by devel/scanprov
+SvPOK_byte_nog                 # Z added by devel/scanprov
+SvPOK_byte_nogthink            # Z added by devel/scanprov
+SvPOK_nog                      # Z added by devel/scanprov
+SvPOK_nogthink                 # Z added by devel/scanprov
+SvPOK_utf8_nog                 # Z added by devel/scanprov
+SvPOK_utf8_nogthink            # Z added by devel/scanprov
+SvPVXtrue                      # Z added by devel/scanprov
+SvTRUE_common                  # Z added by devel/scanprov
+SvTRUEx_nomg                   # Z added by devel/scanprov
+SvUOK_nog                      # Z added by devel/scanprov
+SvUOK_nogthink                 # Z added by devel/scanprov
+sv_vcatpvfn_flags              # U
+tryAMAGICunTARGETlist          # Z added by devel/scanprov
index 81e5077..6c46e9c 100644 (file)
@@ -1,7 +1,22 @@
 5.017003
+ANGSTROM_SIGN                  # Z added by devel/scanprov
 compute_EXACTish               # F added by devel/scanprov
 grok_bslash_N                  # F added by devel/scanprov
 init_constants                 # F added by devel/scanprov
 _invlist_contains_cp           # F added by devel/scanprov
 _invlist_search                # F added by devel/scanprov
+KELVIN_SIGN                    # Z added by devel/scanprov
+LATIN_SMALL_LETTER_LONG_S      # Z added by devel/scanprov
+NPOSIXA                        # Z added by devel/scanprov
+NPOSIXD                        # Z added by devel/scanprov
+NPOSIXL                        # Z added by devel/scanprov
+NPOSIXU                        # Z added by devel/scanprov
 op_unscope                     # F added by devel/scanprov
+padadd_STALEOK                 # Z added by devel/scanprov
+POSIXA                         # Z added by devel/scanprov
+POSIXD                         # Z added by devel/scanprov
+POSIXL                         # Z added by devel/scanprov
+POSIXU                         # Z added by devel/scanprov
+SvPOK_byte_pure_nogthink       # Z added by devel/scanprov
+SvPOK_pure_nogthink            # Z added by devel/scanprov
+SvPOK_utf8_pure_nogthink       # Z added by devel/scanprov
index be63ed3..d726613 100644 (file)
@@ -1,30 +1,64 @@
 5.017004
+av_extend_guts                 # F added by devel/scanprov
+COMBINING_GRAVE_ACCENT_UTF8    # Z added by devel/scanprov
+cv_clone_into                  # F added by devel/scanprov
+CVf_NAMED                      # Z added by devel/scanprov
+CvNAMED                        # Z added by devel/scanprov
+CvNAMED_off                    # Z added by devel/scanprov
+CvNAMED_on                     # Z added by devel/scanprov
+CvNAME_HEK_set                 # Z added by devel/scanprov
+FIND_RUNCV_padid_eq            # Z added by devel/scanprov
+force_ident_maybe_lex          # F added by devel/scanprov
+get_invlist_previous_index_addr # F added by devel/scanprov
 GV_SUPER                       # E
+HAS_IP_MREQ_SOURCE             # K added by devel/scanprov
+HYPHEN_UTF8                    # Z added by devel/scanprov
+_invlist_len                   # F added by devel/scanprov
+invlist_previous_index         # F added by devel/scanprov
+invlist_set_previous_index     # F added by devel/scanprov
+is_QUOTEMETA_high              # Z added by devel/scanprov
+LATIN_CAPITAL_LETTER_A_WITH_RING_ABOVE_NATIVE # Z added by devel/scanprov
+LATIN_SMALL_LETTER_A_WITH_RING_ABOVE_NATIVE # Z added by devel/scanprov
+LATIN_SMALL_LETTER_SHARP_S_NATIVE # Z added by devel/scanprov
+LATIN_SMALL_LETTER_Y_WITH_DIAERESIS_NATIVE # Z added by devel/scanprov
+MICRO_SIGN_NATIVE              # Z added by devel/scanprov
 newMYSUB                       # E (Perl_newMYSUB)
 newSVpadname                   # E
+OPpMAYBE_TRUEBOOL              # Z added by devel/scanprov
+OPpTRUEBOOL                    # Z added by devel/scanprov
 PadARRAY                       # U
+PAD_COMPNAME                   # Z added by devel/scanprov
 PadlistARRAY                   # U
 PadlistMAX                     # U
 PadlistNAMES                   # E
 PadlistNAMESARRAY              # E
 PadlistNAMESMAX                # U
 PadlistREFCNT                  # U
+padlist_store                  # F added by devel/scanprov
 PadMAX                         # U
+PadnameIsOUR                   # Z added by devel/scanprov
+PadnameIsSTATE                 # Z added by devel/scanprov
 PadnameLEN                     # E
 PadnamelistARRAY               # E
 PadnamelistMAX                 # E
+PadnameOURSTASH                # Z added by devel/scanprov
+PadnameOUTER                   # Z added by devel/scanprov
 PadnamePV                      # E
 PadnameSV                      # E
+PadnameTYPE                    # Z added by devel/scanprov
 PadnameUTF8                    # E
+pending_ident                  # F added by devel/scanprov
 PL_comppad_name                # E
+REXEC_COPY_SKIP_POST           # Z added by devel/scanprov
+REXEC_COPY_SKIP_PRE            # Z added by devel/scanprov
+RX_BUFF_IDX_CARET_FULLMATCH    # Z added by devel/scanprov
+RX_BUFF_IDX_CARET_POSTMATCH    # Z added by devel/scanprov
+RX_BUFF_IDX_CARET_PREMATCH     # Z added by devel/scanprov
+RX_SUBCOFFSET                  # Z added by devel/scanprov
+RX_SUBOFFSET                   # Z added by devel/scanprov
+SAWAMPERSAND_LEFT              # Z added by devel/scanprov
+SAWAMPERSAND_MIDDLE            # Z added by devel/scanprov
+SAWAMPERSAND_RIGHT             # Z added by devel/scanprov
+sv_len_utf8_nomg               # F added by devel/scanprov
+UTF8_IS_ABOVE_LATIN1           # Z added by devel/scanprov
 WARN_EXPERIMENTAL              # E
-sv_len_utf8_nomg               # M added by devel/scanprov
-av_extend_guts                 # F added by devel/scanprov
-cv_clone_into                  # F added by devel/scanprov
-force_ident_maybe_lex          # F added by devel/scanprov
-get_invlist_previous_index_addr # F added by devel/scanprov
-_invlist_len                   # F added by devel/scanprov
-invlist_previous_index         # F added by devel/scanprov
-invlist_set_previous_index     # F added by devel/scanprov
-padlist_store                  # F added by devel/scanprov
-pending_ident                  # F added by devel/scanprov
index 17b0d1f..fe76cb1 100644 (file)
@@ -1,4 +1,11 @@
 5.017005
+ANYOF_NWORDCHAR                # Z added by devel/scanprov
+ANYOF_WORDCHAR                 # Z added by devel/scanprov
+PERL_STATIC_INLINE_NO_RET      # Z added by devel/scanprov
+PERL_STATIC_NO_RET             # Z added by devel/scanprov
+PL_HasMultiCharFold            # Z added by devel/scanprov
+sv_catpvn_nomg_maybeutf8       # Z added by devel/scanprov
 sv_mortalcopy_flags            # U
-WARN_EXPERIMENTAL__LEXICAL_SUBS # E
+sv_or_pv_len_utf8              # Z added by devel/scanprov
 sv_resetpvn                    # F added by devel/scanprov
+WARN_EXPERIMENTAL__LEXICAL_SUBS # E
index 896dabc..183c0cb 100644 (file)
@@ -1,7 +1,42 @@
 5.017006
-croak_memory_wrap              # U
-READ_XDIGIT                    # U
+ANYOF_UNIPROP                  # Z added by devel/scanprov
+aTHXa                          # Z added by devel/scanprov
 croak_no_mem                   # F added by devel/scanprov
 get_and_check_backslash_N_name # F added by devel/scanprov
+is_HORIZWS_cp_high             # Z added by devel/scanprov
+is_HORIZWS_high                # Z added by devel/scanprov
+isREGEXP                       # Z added by devel/scanprov
+is_VERTWS_cp_high              # Z added by devel/scanprov
+is_VERTWS_high                 # Z added by devel/scanprov
+isVERTWS_uni                   # Z added by devel/scanprov
+isVERTWS_utf8                  # Z added by devel/scanprov
+isWORDCHAR_uni                 # Z added by devel/scanprov
+is_XDIGIT_cp_high              # Z added by devel/scanprov
+is_XDIGIT_high                 # Z added by devel/scanprov
+is_XPERLSPACE_cp_high          # Z added by devel/scanprov
+is_XPERLSPACE_high             # Z added by devel/scanprov
+NO_TAINT_SUPPORT               # Z added by devel/scanprov
+OPpPADRANGE_COUNTMASK          # Z added by devel/scanprov
+OPpPADRANGE_COUNTSHIFT         # Z added by devel/scanprov
 parser_free_nexttoke_ops       # F added by devel/scanprov
+PERL_HASH_FUNC                 # Z added by devel/scanprov
+PERL_HASH_SEED_BYTES           # Z added by devel/scanprov
+PL_utf8_charname_begin         # Z added by devel/scanprov
+PL_utf8_charname_continue      # Z added by devel/scanprov
+READ_XDIGIT                    # U
+ReANY                          # Z added by devel/scanprov
+RX_ISTAINTED                   # Z added by devel/scanprov
+RX_TAINT_on                    # Z added by devel/scanprov
+SAVEt_CLEARPADRANGE            # Z added by devel/scanprov
+SIPROUND                       # Z added by devel/scanprov
+SVf_IsCOW                      # Z added by devel/scanprov
+TAINT_get                      # Z added by devel/scanprov
+TAINTING_get                   # Z added by devel/scanprov
+TAINTING_set                   # Z added by devel/scanprov
+TAINT_set                      # Z added by devel/scanprov
+TAINT_WARN_get                 # Z added by devel/scanprov
+TAINT_WARN_set                 # Z added by devel/scanprov
+U8TO64_LE                      # Z added by devel/scanprov
+UTF8_IS_NEXT_CHAR_DOWNGRADEABLE # Z added by devel/scanprov
 win32_croak_not_implemented    # F added by devel/scanprov
+xpv_len                        # Z added by devel/scanprov
index 1e45834..213dbb4 100644 (file)
@@ -1,13 +1,38 @@
 5.017007
+ANYOF_CLASS_OR                 # Z added by devel/scanprov
+CowREFCNT                      # Z added by devel/scanprov
+dSS_ADD                        # Z added by devel/scanprov
+forget_pmop                    # F added by devel/scanprov
+gv_method_changed              # Z added by devel/scanprov
 isALNUMC_LC_uvchr              # U
+isALNUMC_uni                   # Z added by devel/scanprov
+isALNUMC_utf8                  # Z added by devel/scanprov
+isASCII_LC_utf8                # Z added by devel/scanprov
 isASCII_LC_uvchr               # U
 isBLANK_LC_uvchr               # U
+isFOO_lc                       # F added by devel/scanprov
 isPSXSPC_LC_uvchr              # U
+_is_uni_perl_idstart           # F added by devel/scanprov
 isWORDCHAR_LC                  # U
+isWORDCHAR_LC_utf8             # Z added by devel/scanprov
 isWORDCHAR_LC_uvchr            # U
 isXDIGIT_LC                    # U
+isXDIGIT_LC_utf8               # Z added by devel/scanprov
 isXDIGIT_LC_uvchr              # U
+PERL_ANY_COW                   # Z added by devel/scanprov
+SAVEt_GVSLOT                   # Z added by devel/scanprov
+SS_ADD_BOOL                    # Z added by devel/scanprov
+SS_ADD_DPTR                    # Z added by devel/scanprov
+SS_ADD_DXPTR                   # Z added by devel/scanprov
+SS_ADD_END                     # Z added by devel/scanprov
+SS_ADD_INT                     # Z added by devel/scanprov
+SS_ADD_IV                      # Z added by devel/scanprov
+SS_ADD_LONG                    # Z added by devel/scanprov
+SS_ADD_PTR                     # Z added by devel/scanprov
+SS_ADD_UV                      # Z added by devel/scanprov
+SS_MAXPUSH                     # Z added by devel/scanprov
+SvCANCOW                       # Z added by devel/scanprov
+SV_COW_REFCNT_MAX              # Z added by devel/scanprov
 SvREFCNT_dec_NN                # U
-forget_pmop                    # F added by devel/scanprov
-isFOO_lc                       # F added by devel/scanprov
-_is_uni_perl_idstart           # F added by devel/scanprov
+SvTRUE_NN                      # U
+SvTRUE_nomg_NN                 # U
index 1f573e9..57dde87 100644 (file)
@@ -1,18 +1,33 @@
 5.017008
+ANYOF_ALPHANUMERIC             # Z added by devel/scanprov
+ANYOF_CASED                    # Z added by devel/scanprov
+ANYOF_NALPHANUMERIC            # Z added by devel/scanprov
+ANYOF_NCASED                   # Z added by devel/scanprov
+croak_popstack                 # F added by devel/scanprov
+invlist_is_iterating           # F added by devel/scanprov
+invlist_iterfinish             # F added by devel/scanprov
 isALPHANUMERIC                 # U
 isALPHANUMERIC_A               # U
 isALPHANUMERIC_L1              # U
 isALPHANUMERIC_LC              # U
+isALPHANUMERIC_LC_utf8         # Z added by devel/scanprov
 isALPHANUMERIC_LC_uvchr        # U
+isALPHANUMERIC_uni             # Z added by devel/scanprov
+isFOO_utf8_lc                  # F added by devel/scanprov
 isIDCONT                       # U
 isIDCONT_A                     # U
 isIDCONT_L1                    # U
 isIDCONT_LC                    # U
+isIDCONT_LC_utf8               # Z added by devel/scanprov
 isIDCONT_LC_uvchr              # U
-WARN_EXPERIMENTAL__REGEX_SETS  # E
-croak_popstack                 # F added by devel/scanprov
-invlist_is_iterating           # F added by devel/scanprov
-invlist_iterfinish             # F added by devel/scanprov
-isFOO_utf8_lc                  # F added by devel/scanprov
+isIDCONT_uni                   # Z added by devel/scanprov
+is_PATWS_cp                    # Z added by devel/scanprov
+is_PATWS_safe                  # Z added by devel/scanprov
 _is_uni_FOO                    # F added by devel/scanprov
 _is_uni_perl_idcont            # F added by devel/scanprov
+PL_utf8_perl_idcont            # Z added by devel/scanprov
+PL_XPosix_ptrs                 # Z added by devel/scanprov
+POSIX_CC_COUNT                 # Z added by devel/scanprov
+RXp_MATCH_TAINTED_on           # Z added by devel/scanprov
+SvREFCNT_IMMORTAL              # Z added by devel/scanprov
+WARN_EXPERIMENTAL__REGEX_SETS  # E
index 8af1a5f..c89ae77 100644 (file)
@@ -3,3 +3,4 @@ av_tindex                      # U
 av_top_index                   # U
 handle_regex_sets              # F added by devel/scanprov
 parse_lparen_question_flags    # F added by devel/scanprov
+PERL_LAST_5_18_0_INTERP_MEMBER # Z added by devel/scanprov
index 5b3585c..5181d64 100644 (file)
@@ -1,3 +1,12 @@
 5.017010
+DEL_NATIVE                     # Z added by devel/scanprov
 parse_ident                    # F added by devel/scanprov
+PERL_SAWAMPERSAND              # Z added by devel/scanprov
+PERL_SEEN_HV_FUNC_H            # Z added by devel/scanprov
+PL_hash_rand_bits              # Z added by devel/scanprov
 ptr_hash                       # F added by devel/scanprov
+ROTL32                         # Z added by devel/scanprov
+ROTL64                         # Z added by devel/scanprov
+ROTL_UV                        # Z added by devel/scanprov
+U8TO16_LE                      # Z added by devel/scanprov
+U8TO32_LE                      # Z added by devel/scanprov
index 478877f..a1c38fd 100644 (file)
@@ -1,2 +1,15 @@
 5.017011
+EVAL_RE_REPARSING              # Z added by devel/scanprov
+G_RE_REPARSING                 # Z added by devel/scanprov
+HvLASTRAND_get                 # Z added by devel/scanprov
+HvRAND_get                     # Z added by devel/scanprov
+OPpEVAL_RE_REPARSING           # Z added by devel/scanprov
+PERL_HASH_DEFAULT_HvMAX        # Z added by devel/scanprov
+PMf_CHARSET                    # Z added by devel/scanprov
+PMf_SPLIT                      # Z added by devel/scanprov
+RX_COMPFLAGS                   # Z added by devel/scanprov
+RXf_NO_INPLACE_SUBST           # Z added by devel/scanprov
+RXf_PMf_FLAGCOPYMASK           # Z added by devel/scanprov
+RXf_PMf_SPLIT                  # Z added by devel/scanprov
+RXp_COMPFLAGS                  # Z added by devel/scanprov
 WARN_EXPERIMENTAL__SMARTMATCH  # E
index 17729d0..c539f63 100644 (file)
@@ -1,2 +1,11 @@
 5.018000
+CHANGE_MULTICALL_FLAGS         # Z added by devel/scanprov
+CXp_SUB_RE                     # Z added by devel/scanprov
+CXp_SUB_RE_FAKE                # Z added by devel/scanprov
 hv_rand_set                    # U
+PERL_HASH_ITER_BUCKET          # Z added by devel/scanprov
+PERL_HASH_RANDOMIZE_KEYS       # Z added by devel/scanprov
+PL_HASH_RAND_BITS_ENABLED      # Z added by devel/scanprov
+PL_hash_rand_bits_enabled      # Z added by devel/scanprov
+PUSH_MULTICALL_FLAGS           # Z added by devel/scanprov
+USE_PERL_PERTURB_KEYS          # Z added by devel/scanprov
index 0894b3f..2f3eb7f 100644 (file)
@@ -1,7 +1,18 @@
 5.019001
+find_lexical_cv                # F added by devel/scanprov
+LATIN_CAPITAL_LETTER_SHARP_S_UTF8 # Z added by devel/scanprov
+LATIN_SMALL_LETTER_LONG_S_UTF8 # Z added by devel/scanprov
+path_is_searchable             # F added by devel/scanprov
+SvGID                          # Z added by devel/scanprov
+sv_setgid                      # Z added by devel/scanprov
+sv_setuid                      # Z added by devel/scanprov
+SvUID                          # Z added by devel/scanprov
 toFOLD                         # U
+toFOLD_A                       # Z added by devel/scanprov
+toFOLD_LC                      # Z added by devel/scanprov
+toLOWER_A                      # Z added by devel/scanprov
 toLOWER_L1                     # U
 toTITLE                        # U
+toTITLE_A                      # Z added by devel/scanprov
+toUPPER_A                      # Z added by devel/scanprov
 UTF8f                          # E
-find_lexical_cv                # F added by devel/scanprov
-path_is_searchable             # F added by devel/scanprov
index 63829e9..61feeaa 100644 (file)
@@ -1,12 +1,56 @@
 5.019002
-G_METHOD_NAMED                 # E
-UTF8fARG                       # U
 bad_type_gv                    # F added by devel/scanprov
 defelem_target                 # F added by devel/scanprov
 get_invlist_offset_addr        # F added by devel/scanprov
+G_METHOD_NAMED                 # E
+HAS_SKIP_LOCALE_INIT           # Z added by devel/scanprov
 mg_find_mglob                  # F added by devel/scanprov
+OPpSPLIT_IMPLIM                # Z added by devel/scanprov
+PL_op_exec_cnt                 # Z added by devel/scanprov
+PL_sv_consts                   # Z added by devel/scanprov
 regdump_intflags               # F added by devel/scanprov
 save_magic_flags               # F added by devel/scanprov
+SAVEt_READONLY_OFF             # Z added by devel/scanprov
 skipspace_flags                # F added by devel/scanprov
+SV_CONST                       # Z added by devel/scanprov
+SV_CONST_BINMODE               # Z added by devel/scanprov
+SV_CONST_CLEAR                 # Z added by devel/scanprov
+SV_CONST_CLOSE                 # Z added by devel/scanprov
+SV_CONST_DELETE                # Z added by devel/scanprov
+SV_CONST_DESTROY               # Z added by devel/scanprov
+SV_CONST_EOF                   # Z added by devel/scanprov
+SV_CONST_EXISTS                # Z added by devel/scanprov
+SV_CONST_EXTEND                # Z added by devel/scanprov
+SV_CONST_FETCH                 # Z added by devel/scanprov
+SV_CONST_FETCHSIZE             # Z added by devel/scanprov
+SV_CONST_FILENO                # Z added by devel/scanprov
+SV_CONST_FIRSTKEY              # Z added by devel/scanprov
+SV_CONST_GETC                  # Z added by devel/scanprov
+SV_CONST_NEXTKEY               # Z added by devel/scanprov
+SV_CONST_OPEN                  # Z added by devel/scanprov
+SV_CONST_POP                   # Z added by devel/scanprov
+SV_CONST_PRINT                 # Z added by devel/scanprov
+SV_CONST_PRINTF                # Z added by devel/scanprov
+SV_CONST_PUSH                  # Z added by devel/scanprov
+SV_CONST_READ                  # Z added by devel/scanprov
+SV_CONST_READLINE              # Z added by devel/scanprov
+SV_CONST_SCALAR                # Z added by devel/scanprov
+SV_CONSTS_COUNT                # Z added by devel/scanprov
+SV_CONST_SEEK                  # Z added by devel/scanprov
+SV_CONST_SHIFT                 # Z added by devel/scanprov
+SV_CONST_SPLICE                # Z added by devel/scanprov
+SV_CONST_STORE                 # Z added by devel/scanprov
+SV_CONST_STORESIZE             # Z added by devel/scanprov
+SV_CONST_TELL                  # Z added by devel/scanprov
+SV_CONST_TIEARRAY              # Z added by devel/scanprov
+SV_CONST_TIEHANDLE             # Z added by devel/scanprov
+SV_CONST_TIEHASH               # Z added by devel/scanprov
+SV_CONST_TIESCALAR             # Z added by devel/scanprov
+SV_CONST_UNSHIFT               # Z added by devel/scanprov
+SV_CONST_UNTIE                 # Z added by devel/scanprov
+SV_CONST_WRITE                 # Z added by devel/scanprov
 sv_magicext_mglob              # F added by devel/scanprov
+USE_LOCALE_MESSAGES            # Z added by devel/scanprov
+USE_LOCALE_MONETARY            # Z added by devel/scanprov
+UTF8fARG                       # U
 validate_proto                 # F added by devel/scanprov
index 5bcd299..d4aec89 100644 (file)
@@ -1,7 +1,11 @@
 5.019003
-PERL_EXIT_ABORT                # E
-PERL_EXIT_WARN                 # E
-sv_pos_b2u_flags               # U
 adjust_size_and_find_bucket    # F added by devel/scanprov
+croak_memory_wrap              # F added by devel/scanprov
 cv_const_sv_or_av              # F added by devel/scanprov
 _invlist_dump                  # F added by devel/scanprov
+PadnamelistMAXNAMED            # Z added by devel/scanprov
+PERL_EXIT_ABORT                # E
+PERL_EXIT_WARN                 # E
+REXEC_FAIL_ON_UNDERFLOW        # Z added by devel/scanprov
+RX_ZERO_LEN                    # Z added by devel/scanprov
+sv_pos_b2u_flags               # U
index 378be8e..adf5192 100644 (file)
@@ -1,21 +1,51 @@
 5.019004
-IS_SAFE_SYSCALL                # U
-is_safe_syscall                # U
-LATIN1_TO_NATIVE               # U
-NATIVE_TO_LATIN1               # U
-UVCHR_IS_INVARIANT             # U
-WARN_SYSCALLS                  # E
 append_utf8_from_native_byte   # F added by devel/scanprov
 ASCII_TO_NEED                  # F added by devel/scanprov
+BOM_UTF8_FIRST_BYTE            # Z added by devel/scanprov
+BOM_UTF8_TAIL                  # Z added by devel/scanprov
+CR_NATIVE                      # Z added by devel/scanprov
 find_default_stash             # F added by devel/scanprov
 gv_is_in_main                  # F added by devel/scanprov
 gv_magicalize                  # F added by devel/scanprov
+I8_TO_NATIVE_UTF8              # Z added by devel/scanprov
+ILLEGAL_UTF8_BYTE              # Z added by devel/scanprov
+IS_SAFE_PATHNAME               # Z added by devel/scanprov
+IS_SAFE_SYSCALL                # U
+is_safe_syscall                # U
+LATIN1_TO_NATIVE               # U
+LATIN_SMALL_LIGATURE_LONG_S_T  # Z added by devel/scanprov
+LATIN_SMALL_LIGATURE_LONG_S_T_UTF8 # Z added by devel/scanprov
+LATIN_SMALL_LIGATURE_ST        # Z added by devel/scanprov
+LATIN_SMALL_LIGATURE_ST_UTF8   # Z added by devel/scanprov
+LF_NATIVE                      # Z added by devel/scanprov
+LvSTARGOFF                     # Z added by devel/scanprov
+MAX_UTF8_TWO_BYTE              # Z added by devel/scanprov
 maybe_multimagic_gv            # F added by devel/scanprov
+MgBYTEPOS                      # Z added by devel/scanprov
+MgBYTEPOS_set                  # Z added by devel/scanprov
+MGf_BYTES                      # Z added by devel/scanprov
+NATIVE_BYTE_IS_INVARIANT       # Z added by devel/scanprov
+NATIVE_SKIP                    # Z added by devel/scanprov
+NATIVE_TO_LATIN1               # U
 NATIVE_TO_NEED                 # F added by devel/scanprov
+NATIVE_UTF8_TO_I8              # Z added by devel/scanprov
 newSVavdefelem                 # F added by devel/scanprov
+OFFUNISKIP                     # Z added by devel/scanprov
+OPpSLICEWARNING                # Z added by devel/scanprov
 parse_gv_stash_name            # F added by devel/scanprov
+Perl_drand48                   # Z added by devel/scanprov
+Perl_drand48_init              # Z added by devel/scanprov
 Perl_drand48_init_r            # F added by devel/scanprov
+PERL_DRAND48_QUAD              # Z added by devel/scanprov
 Perl_drand48_r                 # F added by devel/scanprov
+PL_random_state                # Z added by devel/scanprov
+PL_RANDOM_STATE_TYPE           # Z added by devel/scanprov
 save_strlen                    # F added by devel/scanprov
+SAVEt_STRLEN                   # Z added by devel/scanprov
+SSize_t_MAX                    # Z added by devel/scanprov
 sv_or_pv_pos_u2b               # F added by devel/scanprov
+TWO_BYTE_UTF8_TO_NATIVE        # Z added by devel/scanprov
+UVCHR_IS_INVARIANT             # U
 uvuni_to_utf8                  # F added by devel/scanprov
+WARN_SYSCALLS                  # E
+xlv_targoff                    # Z added by devel/scanprov
index f9b4194..6f1f249 100644 (file)
@@ -1,7 +1,19 @@
 5.019005
-WARN_EXPERIMENTAL__POSTDEREF   # E
+ANYOF_LOCALE_FLAGS             # Z added by devel/scanprov
+ANYOF_POSIXL_AND               # Z added by devel/scanprov
+ANYOF_POSIXL_CLEAR             # Z added by devel/scanprov
+ANYOF_POSIXL_MAX               # Z added by devel/scanprov
+ANYOF_POSIXL_OR                # Z added by devel/scanprov
+ANYOF_POSIXL_SET               # Z added by devel/scanprov
+ANYOF_POSIXL_SETALL            # Z added by devel/scanprov
+ANYOF_POSIXL_TEST              # Z added by devel/scanprov
+ANYOF_POSIXL_TEST_ALL_SET      # Z added by devel/scanprov
+ANYOF_POSIXL_TEST_ANY_SET      # Z added by devel/scanprov
+ANYOF_POSIXL_ZERO              # Z added by devel/scanprov
+FEATURE_POSTDEREF_QQ_IS_ENABLED # Z added by devel/scanprov
 get_ANYOF_cp_list_for_ssc      # F added by devel/scanprov
 move_proto_attr                # F added by devel/scanprov
+PL_UpperLatin1                 # Z added by devel/scanprov
 populate_ANYOF_from_invlist    # F added by devel/scanprov
 set_ANYOF_arg                  # F added by devel/scanprov
 ssc_add_range                  # F added by devel/scanprov
@@ -16,3 +28,4 @@ ssc_is_anything                # F added by devel/scanprov
 ssc_is_cp_posixl_init          # F added by devel/scanprov
 ssc_or                         # F added by devel/scanprov
 ssc_union                      # F added by devel/scanprov
+WARN_EXPERIMENTAL__POSTDEREF   # E
index 176400d..91f0739 100644 (file)
@@ -1,5 +1,14 @@
 5.019006
-XopENTRYCUSTOM                 # M added by devel/scanprov
+ASSUME                         # Z added by devel/scanprov
 custom_op_get_field            # F added by devel/scanprov
+GvFILEx                        # Z added by devel/scanprov
 gv_override                    # F added by devel/scanprov
+hv_deletehek                   # Z added by devel/scanprov
+hv_fetchhek                    # Z added by devel/scanprov
+hv_storehek                    # Z added by devel/scanprov
+NOT_REACHED                    # Z added by devel/scanprov
+OPpLVALUE                      # Z added by devel/scanprov
+Perl_custom_op_xop             # Z added by devel/scanprov
+PERL_POISON_EXPR               # Z added by devel/scanprov
 set_caret_X                    # F added by devel/scanprov
+XopENTRYCUSTOM                 # M added by devel/scanprov
index af1c95d..bbea415 100644 (file)
@@ -1,4 +1,7 @@
 5.019007
 __ASSERT_                      # E
-OP_TYPE_IS                     # U
 fixup_errno_string             # F added by devel/scanprov
+GCC_DIAG_IGNORE                # Z added by devel/scanprov
+GCC_DIAG_RESTORE               # Z added by devel/scanprov
+OP_TYPE_IS                     # U
+UNKNOWN_ERRNO_MSG              # Z added by devel/scanprov
index 8da5697..09bf997 100644 (file)
@@ -1,5 +1,21 @@
 5.019008
+ANYOF_COMMON_FLAGS             # Z added by devel/scanprov
+ISA_VERSION_OBJ                # Z added by devel/scanprov
 newATTRSUB_x                   # F added by devel/scanprov
+NEW_VERSION                    # Z added by devel/scanprov
+OCTAL_VALUE                    # Z added by devel/scanprov
+PERL_DECIMAL_VERSION           # Z added by devel/scanprov
+PERL_PV_ESCAPE_DWIM            # Z added by devel/scanprov
+PRESCAN_VERSION                # Z added by devel/scanprov
+SCAN_VERSION                   # Z added by devel/scanprov
 _setup_canned_invlist          # F added by devel/scanprov
 sv_buf_to_ro                   # F added by devel/scanprov
 sv_buf_to_rw                   # F added by devel/scanprov
+UPG_VERSION                    # Z added by devel/scanprov
+VCMP                           # Z added by devel/scanprov
+VNORMAL                        # Z added by devel/scanprov
+VNUMIFY                        # Z added by devel/scanprov
+VSTRINGIFY                     # Z added by devel/scanprov
+VUTIL_REPLACE_CORE             # Z added by devel/scanprov
+VVERIFY                        # Z added by devel/scanprov
+XDIGIT_VALUE                   # Z added by devel/scanprov
index 6789972..442ba72 100644 (file)
@@ -1,4 +1,41 @@
 5.019009
-WARN_EXPERIMENTAL__SIGNATURES  # E
-_get_regclass_nonbitmap_data   # F added by devel/scanprov
+ANYOF_POSIXL_SSC_TEST_ALL_SET  # Z added by devel/scanprov
+ANYOF_POSIXL_SSC_TEST_ANY_SET  # Z added by devel/scanprov
+DEBUG_L                        # Z added by devel/scanprov
+DEBUG_L_FLAG                   # Z added by devel/scanprov
+DEBUG_L_TEST                   # Z added by devel/scanprov
+FEATURE_SIGNATURES_IS_ENABLED  # Z added by devel/scanprov
+FOLDEQ_LOCALE                  # Z added by devel/scanprov
+IN_UTF8_CTYPE_LOCALE           # Z added by devel/scanprov
+is_ANYOF_SYNTHETIC             # Z added by devel/scanprov
+is_FOLDS_TO_MULTI_utf8         # Z added by devel/scanprov
+is_PROBLEMATIC_LOCALE_FOLD_cp  # Z added by devel/scanprov
+is_PROBLEMATIC_LOCALE_FOLDEDS_START_cp # Z added by devel/scanprov
+is_PROBLEMATIC_LOCALE_FOLDEDS_START_utf8 # Z added by devel/scanprov
+is_PROBLEMATIC_LOCALE_FOLD_utf8 # Z added by devel/scanprov
+PERL_MEMORY_DEBUG_HEADER_SIZE  # Z added by devel/scanprov
+PL_in_utf8_CTYPE_locale        # Z added by devel/scanprov
+PREGf_ANCH                     # Z added by devel/scanprov
+PREGf_ANCH_GPOS                # Z added by devel/scanprov
+PREGf_ANCH_MBOL                # Z added by devel/scanprov
+PREGf_ANCH_SBOL                # Z added by devel/scanprov
+PREGf_GPOS_FLOAT               # Z added by devel/scanprov
+PREGf_GPOS_SEEN                # Z added by devel/scanprov
+PREGf_NOSCAN                   # Z added by devel/scanprov
 put_range                      # F added by devel/scanprov
+REG_CUTGROUP_SEEN              # Z added by devel/scanprov
+REG_GPOS_SEEN                  # Z added by devel/scanprov
+REG_LOOKBEHIND_SEEN            # Z added by devel/scanprov
+REG_RECURSE_SEEN               # Z added by devel/scanprov
+REG_RUN_ON_COMMENT_SEEN        # Z added by devel/scanprov
+REG_TOP_LEVEL_BRANCHES_SEEN    # Z added by devel/scanprov
+REG_UNBOUNDED_QUANTIFIER_SEEN  # Z added by devel/scanprov
+REG_UNFOLDED_MULTI_SEEN        # Z added by devel/scanprov
+REG_VERBARG_SEEN               # Z added by devel/scanprov
+REG_ZERO_LEN_SEEN              # Z added by devel/scanprov
+RXf_IS_ANCHORED                # Z added by devel/scanprov
+RXf_UNBOUNDED_QUANTIFIER_SEEN  # Z added by devel/scanprov
+RX_INTFLAGS                    # Z added by devel/scanprov
+RXp_INTFLAGS                   # Z added by devel/scanprov
+set_ANYOF_SYNTHETIC            # Z added by devel/scanprov
+WARN_EXPERIMENTAL__SIGNATURES  # E
index 02e9173..f87255f 100644 (file)
@@ -1,7 +1,21 @@
 5.019010
-OP_TYPE_IS_OR_WAS              # U
 do_open6                       # F added by devel/scanprov
 do_open_raw                    # F added by devel/scanprov
+HvAUXf_NO_DEREF                # Z added by devel/scanprov
+HvAUXf_SCAN_STASH              # Z added by devel/scanprov
 hv_auxinit_internal            # F added by devel/scanprov
+is_MULTI_CHAR_FOLD_latin1_safe # Z added by devel/scanprov
+is_MULTI_CHAR_FOLD_utf8_safe   # Z added by devel/scanprov
+is_MULTI_CHAR_FOLD_utf8_safe_part0 # Z added by devel/scanprov
+is_MULTI_CHAR_FOLD_utf8_safe_part1 # Z added by devel/scanprov
 openn_cleanup                  # F added by devel/scanprov
 openn_setup                    # F added by devel/scanprov
+OP_TYPE_IS_NN                  # Z added by devel/scanprov
+OP_TYPE_ISNT                   # Z added by devel/scanprov
+OP_TYPE_ISNT_AND_WASNT         # Z added by devel/scanprov
+OP_TYPE_ISNT_AND_WASNT_NN      # Z added by devel/scanprov
+OP_TYPE_ISNT_NN                # Z added by devel/scanprov
+OP_TYPE_IS_OR_WAS              # U
+OP_TYPE_IS_OR_WAS_NN           # Z added by devel/scanprov
+PERL_HV_ALLOC_AUX_SIZE         # Z added by devel/scanprov
+pTHX_12                        # Z added by devel/scanprov
index 0c90925..e61864c 100644 (file)
@@ -1 +1,3 @@
 5.020000
+REG_EXTFLAGS_NAME_SIZE         # Z added by devel/scanprov
+REG_INTFLAGS_NAME_SIZE         # Z added by devel/scanprov
index af98005..6220e19 100644 (file)
@@ -1,15 +1,41 @@
 5.021001
-isUTF8_CHAR                    # U
-markstack_grow                 # E (Perl_markstack_grow)
-WARN_EXPERIMENTAL__WIN32_PERLIO # E
-PERL_UNUSED_RESULT             # M added by devel/scanprov
 add_above_Latin1_folds         # F added by devel/scanprov
 construct_ahocorasick_from_trie # F added by devel/scanprov
 dump_c_backtrace               # F added by devel/scanprov
 free_c_backtrace               # F added by devel/scanprov
+GCC_DIAG_PRAGMA                # Z added by devel/scanprov
 get_c_backtrace                # F added by devel/scanprov
 get_c_backtrace_dump           # F added by devel/scanprov
+HAS_BACKTRACE                  # K added by devel/scanprov
+HAS_DLADDR                     # K added by devel/scanprov
+HAS_PTRDIFF_T                  # K added by devel/scanprov
+HAS_WCSCMP                     # K added by devel/scanprov
+HAS_WCSXFRM                    # K added by devel/scanprov
+HINT_LOCALE_PARTIAL            # Z added by devel/scanprov
+I_EXECINFO                     # K added by devel/scanprov
+IN_LC                          # Z added by devel/scanprov
+IN_LC_ALL_COMPILETIME          # Z added by devel/scanprov
+IN_LC_ALL_RUNTIME              # Z added by devel/scanprov
+IN_LC_COMPILETIME              # Z added by devel/scanprov
+IN_LC_PARTIAL_COMPILETIME      # Z added by devel/scanprov
+IN_LC_PARTIAL_RUNTIME          # Z added by devel/scanprov
+IN_LC_RUNTIME                  # Z added by devel/scanprov
 _is_cur_LC_category_utf8       # F added by devel/scanprov
 _is_in_locale_category         # F added by devel/scanprov
+is_QUOTEMETA_high_part0        # Z added by devel/scanprov
+is_QUOTEMETA_high_part1        # Z added by devel/scanprov
+isUTF8_CHAR                    # U
+is_UTF8_CHAR_utf8_no_length_checks # Z added by devel/scanprov
+LOCK_NUMERIC_STANDARD          # Z added by devel/scanprov
+markstack_grow                 # E (Perl_markstack_grow)
 my_strerror                    # F added by devel/scanprov
+NBSP_NATIVE                    # Z added by devel/scanprov
+NBSP_UTF8                      # Z added by devel/scanprov
+Perl_free_c_backtrace          # Z added by devel/scanprov
+PERL_HASH_WITH_SEED            # Z added by devel/scanprov
+PERL_UNUSED_RESULT             # U
+QUESTION_MARK_CTRL             # Z added by devel/scanprov
 should_warn_nl                 # F added by devel/scanprov
+SS_NOPRIV                      # Z added by devel/scanprov
+UNLOCK_NUMERIC_STANDARD        # Z added by devel/scanprov
+WARN_EXPERIMENTAL__WIN32_PERLIO # E
index ec97b0f..7ea554b 100644 (file)
@@ -1,8 +1,14 @@
 5.021002
 grok_number_flags              # U
+IS_NUMBER_TRAILING             # Z added by devel/scanprov
+not_incrementable              # F added by devel/scanprov
+OP_SIBLING                     # Z added by devel/scanprov
 op_sibling_splice              # U
+PERL_MY_SNPRINTF_POST_GUARD    # Z added by devel/scanprov
+PERL_MY_VSNPRINTF_POST_GUARD   # Z added by devel/scanprov
 PERL_SCAN_TRAILING             # E
+PERL_SNPRINTF_CHECK            # Z added by devel/scanprov
+sv_display                     # F added by devel/scanprov
+USE_LOCALE_TIME                # Z added by devel/scanprov
 WARN_MISSING                   # E
 WARN_REDUNDANT                 # E
-not_incrementable              # F added by devel/scanprov
-sv_display                     # F added by devel/scanprov
index a0f459f..27b8bbb 100644 (file)
@@ -1,2 +1,16 @@
 5.021003
 clear_special_blocks           # F added by devel/scanprov
+HAS_LDEXPL                     # K added by devel/scanprov
+LONG_DOUBLE_IS_DOUBLE          # K added by devel/scanprov
+LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BIG_ENDIAN # K added by devel/scanprov
+LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LITTLE_ENDIAN # K added by devel/scanprov
+LONG_DOUBLE_IS_IEEE_754_128_BIT_BIG_ENDIAN # K added by devel/scanprov
+LONG_DOUBLE_IS_IEEE_754_128_BIT_LITTLE_ENDIAN # K added by devel/scanprov
+LONG_DOUBLE_IS_UNKNOWN_FORMAT  # K added by devel/scanprov
+LONG_DOUBLE_IS_X86_80_BIT_BIG_ENDIAN # K added by devel/scanprov
+LONG_DOUBLE_IS_X86_80_BIT_LITTLE_ENDIAN # K added by devel/scanprov
+LONG_DOUBLEKIND                # K added by devel/scanprov
+NV_MAX_EXP                     # Z added by devel/scanprov
+NV_MIN_EXP                     # Z added by devel/scanprov
+Perl_ldexp                     # Z added by devel/scanprov
+Size_t_MAX                     # Z added by devel/scanprov
index 05a1b65..08fc29a 100644 (file)
@@ -1,14 +1,67 @@
 5.021004
-CALL_CHECKER_REQUIRE_GV        # E
-cv_set_call_checker_flags      # U
-grok_infnan                    # U
-isinfnan                       # U
 add_multi_match                # F added by devel/scanprov
+ANYOF_MATCHES_ALL_ABOVE_BITMAP # Z added by devel/scanprov
+ANYOF_MATCHES_POSIXL           # Z added by devel/scanprov
+ANYOF_ONLY_HAS_BITMAP          # Z added by devel/scanprov
+CALL_CHECKER_REQUIRE_GV        # E
 cntrl_to_mnemonic              # F added by devel/scanprov
+CVf_LEXICAL                    # Z added by devel/scanprov
+CvHASGV                        # Z added by devel/scanprov
+CvLEXICAL                      # Z added by devel/scanprov
+CvLEXICAL_off                  # Z added by devel/scanprov
+CvLEXICAL_on                   # Z added by devel/scanprov
+cv_set_call_checker_flags      # U
 cv_undef_flags                 # F added by devel/scanprov
+CV_UNDEF_KEEP_NAME             # Z added by devel/scanprov
+ESC_NATIVE                     # Z added by devel/scanprov
+FP_PINF                        # Z added by devel/scanprov
+FP_QNAN                        # Z added by devel/scanprov
+grok_infnan                    # U
+GV_CACHE_ONLY                  # Z added by devel/scanprov
+GvGPFLAGS                      # Z added by devel/scanprov
 gv_stashpvn_internal           # F added by devel/scanprov
 gv_stashsvpvn_cached           # F added by devel/scanprov
+HAS_ACOSH                      # K added by devel/scanprov
+HAS_C99                        # Z added by devel/scanprov
+HAS_FEGETROUND                 # K added by devel/scanprov
+HAS_FPCLASSIFY                 # K added by devel/scanprov
+HAS_ISFINITE                   # K added by devel/scanprov
+HAS_ISINFL                     # K added by devel/scanprov
+HAS_J0                         # K added by devel/scanprov
+HAS_J0L                        # K added by devel/scanprov
+HAS_TRUNCL                     # K added by devel/scanprov
+I_FENV                         # K added by devel/scanprov
+isALPHA_FOLD_EQ                # Z added by devel/scanprov
+isALPHA_FOLD_NE                # Z added by devel/scanprov
+isinfnan                       # U
+isnormal                       # Z added by devel/scanprov
+I_STDINT                       # K added by devel/scanprov
+MAX_PRINT_A_FOR_USE_ONLY_BY_REGCOMP_DOT_C # Z added by devel/scanprov
+MGf_REQUIRE_GV                 # Z added by devel/scanprov
+NUM_ANYOF_CODE_POINTS          # Z added by devel/scanprov
+OPpARG1_MASK                   # Z added by devel/scanprov
+OPpARG2_MASK                   # Z added by devel/scanprov
+OPpARG3_MASK                   # Z added by devel/scanprov
+OPpARG4_MASK                   # Z added by devel/scanprov
+OPpHINT_STRICT_REFS            # Z added by devel/scanprov
+Perl_acos                      # Z added by devel/scanprov
+Perl_asin                      # Z added by devel/scanprov
+Perl_atan                      # Z added by devel/scanprov
+Perl_cosh                      # Z added by devel/scanprov
 Perl_cvgv_from_hek             # F added by devel/scanprov
+Perl_isfinitel                 # Z added by devel/scanprov
+Perl_log10                     # Z added by devel/scanprov
+Perl_sinh                      # Z added by devel/scanprov
+Perl_strtod                    # Z added by devel/scanprov
+Perl_tan                       # Z added by devel/scanprov
+Perl_tanh                      # Z added by devel/scanprov
+PL_constpadix                  # Z added by devel/scanprov
 put_charclass_bitmap_innards   # F added by devel/scanprov
 put_code_point                 # F added by devel/scanprov
 quadmath_format_needed         # F added by devel/scanprov
+RV2CVOPCV_FLAG_MASK            # Z added by devel/scanprov
+RV2CVOPCV_MAYBE_NAME_GV        # Z added by devel/scanprov
+RV2CVOPCV_RETURN_STUB          # Z added by devel/scanprov
+SSC_MATCHES_EMPTY_STRING       # Z added by devel/scanprov
+sv_cathek                      # Z added by devel/scanprov
+VT_NATIVE                      # Z added by devel/scanprov
index a427083..7b0e098 100644 (file)
@@ -1,22 +1,57 @@
 5.021005
+assignment_type                # F added by devel/scanprov
+cMETHOPx                       # Z added by devel/scanprov
+cMETHOPx_meth                  # Z added by devel/scanprov
 cv_name                        # A
 CV_NAME_NOTQUAL                # E
-newMETHOP                      # U
-newMETHOP_named                # U
-PERL_MAGIC_debugvar            # E
-PERL_MAGIC_lvref               # E
-SV_CATBYTES                    # E
-SV_CATUTF8                     # E
-WARN_EXPERIMENTAL__REFALIASING # E
-assignment_type                # F added by devel/scanprov
+CXp_FOR_LVREF                  # Z added by devel/scanprov
+DBVARMG_COUNT                  # Z added by devel/scanprov
+DBVARMG_SIGNAL                 # Z added by devel/scanprov
+DBVARMG_SINGLE                 # Z added by devel/scanprov
+DBVARMG_TRACE                  # Z added by devel/scanprov
+DEBUG_TEST_r                   # Z added by devel/scanprov
+FEATURE_REFALIASING_IS_ENABLED # Z added by devel/scanprov
+FILL_ADVANCE_NODE_2L_ARG       # Z added by devel/scanprov
 gv_setref                      # F added by devel/scanprov
+HAS_LC_MONETARY_2008           # K added by devel/scanprov
 isinfnansv                     # F added by devel/scanprov
 is_ssc_worth_it                # F added by devel/scanprov
 magic_getdebugvar              # F added by devel/scanprov
 magic_setdebugvar              # F added by devel/scanprov
 magic_setlvref                 # F added by devel/scanprov
+MGf_PERSIST                    # Z added by devel/scanprov
+NAN_COMPARE_BROKEN             # Z added by devel/scanprov
+newMETHOP                      # U
 newMETHOP_internal             # F added by devel/scanprov
+newMETHOP_named                # U
+NON_OTHER_COUNT_FOR_USE_ONLY_BY_REGCOMP_DOT_C # Z added by devel/scanprov
+OA_METHOP                      # Z added by devel/scanprov
+OPpLVREF_AV                    # Z added by devel/scanprov
+OPpLVREF_CV                    # Z added by devel/scanprov
+OPpLVREF_ELEM                  # Z added by devel/scanprov
+OPpLVREF_HV                    # Z added by devel/scanprov
+OPpLVREF_ITER                  # Z added by devel/scanprov
+OPpLVREF_SV                    # Z added by devel/scanprov
+OPpLVREF_TYPE                  # Z added by devel/scanprov
 op_relocate_sv                 # F added by devel/scanprov
+PERL_MAGIC_debugvar            # E
+PERL_MAGIC_lvref               # E
+PERL_PV_PRETTY_EXACTSIZE       # Z added by devel/scanprov
+PERL_SYS_FPU_INIT              # Z added by devel/scanprov
+PL_DBcontrol                   # Z added by devel/scanprov
+PL_DBsignal_iv                 # Z added by devel/scanprov
+PL_DBsingle_iv                 # Z added by devel/scanprov
+PL_DBtrace_iv                  # Z added by devel/scanprov
+PL_vtbl_debugvar               # Z added by devel/scanprov
+PL_vtbl_lvref                  # Z added by devel/scanprov
+PMf_EXTENDED_MORE              # Z added by devel/scanprov
+RE_DEBUG_COMPILE_TEST          # Z added by devel/scanprov
 reg2Lanode                     # F added by devel/scanprov
 regnode_guts                   # F added by devel/scanprov
+RXf_PMf_EXTENDED_MORE          # Z added by devel/scanprov
+SV_CATBYTES                    # E
+SV_CATUTF8                     # E
+SVf_PROTECT                    # Z added by devel/scanprov
+SVt_FIRST                      # Z added by devel/scanprov
 tmps_grow_p                    # F added by devel/scanprov
+WARN_EXPERIMENTAL__REFALIASING # E
index 04ff79e..5c98fff 100644 (file)
@@ -1,12 +1,89 @@
 5.021006
-DOUBLEKIND                     # E
+COP_SEQMAX_INC                 # Z added by devel/scanprov
+CvDEPTHunsafe                  # Z added by devel/scanprov
+CvHSCXT                        # Z added by devel/scanprov
+CvPADLIST_set                  # Z added by devel/scanprov
+DOUBLE_IS_IEEE_754_128_BIT_BIG_ENDIAN # K added by devel/scanprov
+DOUBLE_IS_IEEE_754_128_BIT_LITTLE_ENDIAN # K added by devel/scanprov
+DOUBLE_IS_IEEE_754_32_BIT_BIG_ENDIAN # K added by devel/scanprov
+DOUBLE_IS_IEEE_754_32_BIT_LITTLE_ENDIAN # K added by devel/scanprov
+DOUBLE_IS_IEEE_754_64_BIT_BIG_ENDIAN # K added by devel/scanprov
+DOUBLE_IS_IEEE_754_64_BIT_LITTLE_ENDIAN # K added by devel/scanprov
+DOUBLE_IS_IEEE_754_64_BIT_MIXED_ENDIAN_BE_LE # K added by devel/scanprov
+DOUBLE_IS_IEEE_754_64_BIT_MIXED_ENDIAN_LE_BE # K added by devel/scanprov
+DOUBLE_IS_UNKNOWN_FORMAT       # K added by devel/scanprov
+DOUBLEKIND                     # K added by devel/scanprov
+dXSBOOTARGSAPIVERCHK           # Z added by devel/scanprov
+dXSBOOTARGSNOVERCHK            # Z added by devel/scanprov
+dXSBOOTARGSXSAPIVERCHK         # Z added by devel/scanprov
+HAS_ASINH                      # K added by devel/scanprov
+HAS_ATANH                      # K added by devel/scanprov
+HAS_CBRT                       # K added by devel/scanprov
+HAS_COPYSIGN                   # K added by devel/scanprov
+HAS_ERF                        # K added by devel/scanprov
+HAS_ERFC                       # K added by devel/scanprov
+HAS_EXP2                       # K added by devel/scanprov
+HAS_EXPM1                      # K added by devel/scanprov
+HAS_FDIM                       # K added by devel/scanprov
+HAS_FMA                        # K added by devel/scanprov
+HAS_FMAX                       # K added by devel/scanprov
+HAS_FMIN                       # K added by devel/scanprov
+HAS_HYPOT                      # K added by devel/scanprov
+HAS_ILOGB                      # K added by devel/scanprov
+HAS_ISNORMAL                   # K added by devel/scanprov
+HAS_LGAMMA                     # K added by devel/scanprov
+HAS_LGAMMA_R                   # K added by devel/scanprov
+HAS_LLRINT                     # K added by devel/scanprov
+HAS_LLROUND                    # K added by devel/scanprov
+HAS_LOG1P                      # K added by devel/scanprov
+HAS_LOG2                       # K added by devel/scanprov
+HAS_LOGB                       # K added by devel/scanprov
+HAS_LRINT                      # K added by devel/scanprov
+HAS_LROUND                     # K added by devel/scanprov
+HAS_NAN                        # K added by devel/scanprov
+HAS_NEARBYINT                  # K added by devel/scanprov
+HAS_NEXTAFTER                  # K added by devel/scanprov
+HAS_NEXTTOWARD                 # K added by devel/scanprov
+HAS_REMAINDER                  # K added by devel/scanprov
+HAS_REMQUO                     # K added by devel/scanprov
+HAS_RINT                       # K added by devel/scanprov
+HAS_ROUND                      # K added by devel/scanprov
+HAS_SCALBN                     # K added by devel/scanprov
+HAS_TGAMMA                     # K added by devel/scanprov
+HAS_TRUNC                      # K added by devel/scanprov
+HS_APIVERLEN_MAX               # Z added by devel/scanprov
+HS_CXT                         # Z added by devel/scanprov
+HSf_IMP_CXT                    # Z added by devel/scanprov
+HSf_NOCHK                      # Z added by devel/scanprov
+HSf_POPMARK                    # Z added by devel/scanprov
+HSf_SETXSUBFN                  # Z added by devel/scanprov
+HS_GETAPIVERLEN                # Z added by devel/scanprov
+HS_GETINTERPSIZE               # Z added by devel/scanprov
+HS_GETXSVERLEN                 # Z added by devel/scanprov
+HS_KEY                         # Z added by devel/scanprov
+HS_KEYp                        # Z added by devel/scanprov
+HSm_APIVERLEN                  # Z added by devel/scanprov
+HSm_INTRPSIZE                  # Z added by devel/scanprov
+HSm_KEY_MATCH                  # Z added by devel/scanprov
+HSm_XSVERLEN                   # Z added by devel/scanprov
+HS_XSVERLEN_MAX                # Z added by devel/scanprov
 newDEFSVOP                     # U
-op_convert_list                # U
-WARN_LOCALE                    # E
 newXS_deffile                  # F added by devel/scanprov
 noperl_die                     # F added by devel/scanprov
+op_convert_list                # U
+PadnameLVALUE                  # Z added by devel/scanprov
+PadnameLVALUE_on               # Z added by devel/scanprov
 PerlIO_restore_errno           # F added by devel/scanprov
 PerlIO_save_errno              # F added by devel/scanprov
 Perl_xs_handshake              # F added by devel/scanprov
+PL_xsubfilename                # Z added by devel/scanprov
+PoisonPADLIST                  # Z added by devel/scanprov
 set_padlist                    # F added by devel/scanprov
+WARN_LOCALE                    # E
+XS_APIVERSION_POPMARK_BOOTCHECK # Z added by devel/scanprov
+XS_APIVERSION_SETXSUBFN_POPMARK_BOOTCHECK # Z added by devel/scanprov
 xs_boot_epilog                 # F added by devel/scanprov
+XS_BOTHVERSION_BOOTCHECK       # Z added by devel/scanprov
+XS_BOTHVERSION_POPMARK_BOOTCHECK # Z added by devel/scanprov
+XS_BOTHVERSION_SETXSUBFN_POPMARK_BOOTCHECK # Z added by devel/scanprov
+XS_SETXSUBFN_POPMARK           # Z added by devel/scanprov
index 4a3d4d0..44206a5 100644 (file)
@@ -1,22 +1,82 @@
 5.021007
+cMETHOPx_rclass                # Z added by devel/scanprov
+cUNOP_AUX                      # Z added by devel/scanprov
+cUNOP_AUXo                     # Z added by devel/scanprov
+cUNOP_AUXx                     # Z added by devel/scanprov
+gv_fetchmeth_internal          # F added by devel/scanprov
+HAS_REGCOMP                    # K added by devel/scanprov
+HAS_STAT                       # K added by devel/scanprov
+I_GDBM                         # K added by devel/scanprov
+I_GDBMNDBM                     # K added by devel/scanprov
 is_invariant_string            # U
+kUNOP_AUX                      # Z added by devel/scanprov
+MDEREF_ACTION_MASK             # Z added by devel/scanprov
+MDEREF_AV_gvav_aelem           # Z added by devel/scanprov
+MDEREF_AV_gvsv_vivify_rv2av_aelem # Z added by devel/scanprov
+MDEREF_AV_padav_aelem          # Z added by devel/scanprov
+MDEREF_AV_padsv_vivify_rv2av_aelem # Z added by devel/scanprov
+MDEREF_AV_pop_rv2av_aelem      # Z added by devel/scanprov
+MDEREF_AV_vivify_rv2av_aelem   # Z added by devel/scanprov
+MDEREF_FLAG_last               # Z added by devel/scanprov
+MDEREF_HV_gvhv_helem           # Z added by devel/scanprov
+MDEREF_HV_gvsv_vivify_rv2hv_helem # Z added by devel/scanprov
+MDEREF_HV_padhv_helem          # Z added by devel/scanprov
+MDEREF_HV_padsv_vivify_rv2hv_helem # Z added by devel/scanprov
+MDEREF_HV_pop_rv2hv_helem      # Z added by devel/scanprov
+MDEREF_HV_vivify_rv2hv_helem   # Z added by devel/scanprov
+MDEREF_INDEX_const             # Z added by devel/scanprov
+MDEREF_INDEX_gvsv              # Z added by devel/scanprov
+MDEREF_INDEX_MASK              # Z added by devel/scanprov
+MDEREF_INDEX_none              # Z added by devel/scanprov
+MDEREF_INDEX_padsv             # Z added by devel/scanprov
+MDEREF_MASK                    # Z added by devel/scanprov
+MDEREF_reload                  # Z added by devel/scanprov
+MDEREF_SHIFT                   # Z added by devel/scanprov
+NDEBUG                         # Z added by devel/scanprov
 newPADNAMELIST                 # U
 newPADNAMEouter                # U
 newPADNAMEpvn                  # U
 newUNOP_AUX                    # E
+OA_UNOP_AUX                    # Z added by devel/scanprov
+OPf_FOLDED                     # Z added by devel/scanprov
 OpHAS_SIBLING                  # U
+opmethod_stash                 # F added by devel/scanprov
+OPpMULTIDEREF_DELETE           # Z added by devel/scanprov
+OPpMULTIDEREF_EXISTS           # Z added by devel/scanprov
 OpSIBLING                      # U
+pad_add_weakref                # F added by devel/scanprov
+padname_dup                    # F added by devel/scanprov
+PadnameFLAGS                   # Z added by devel/scanprov
+PADNAME_FROM_PV                # Z added by devel/scanprov
+PadnameIsSTATE_on              # Z added by devel/scanprov
+padnamelist_dup                # F added by devel/scanprov
 padnamelist_fetch              # U
 PadnamelistREFCNT              # U
 PadnamelistREFCNT_dec          # U
 padnamelist_store              # U
+PadnameOURSTASH_set            # Z added by devel/scanprov
+PadnamePROTOCV                 # Z added by devel/scanprov
 PadnameREFCNT                  # U
 PadnameREFCNT_dec              # U
+PADNAMEt_LVALUE                # Z added by devel/scanprov
+PADNAMEt_OUR                   # Z added by devel/scanprov
 PADNAMEt_OUTER                 # E
-gv_fetchmeth_internal          # F added by devel/scanprov
-opmethod_stash                 # F added by devel/scanprov
-pad_add_weakref                # F added by devel/scanprov
-padname_dup                    # F added by devel/scanprov
-padnamelist_dup                # F added by devel/scanprov
+PADNAMEt_STATE                 # Z added by devel/scanprov
+PADNAMEt_TYPED                 # Z added by devel/scanprov
+PadnameTYPE_set                # Z added by devel/scanprov
+PERL_DEB2                      # Z added by devel/scanprov
 Perl_padname_free              # F added by devel/scanprov
 Perl_padnamelist_free          # F added by devel/scanprov
+PERL_PADNAME_MINIMAL           # Z added by devel/scanprov
+PL_multideref_pc               # Z added by devel/scanprov
+PL_padlist_generation          # Z added by devel/scanprov
+PL_padname_const               # Z added by devel/scanprov
+PL_padname_undef               # Z added by devel/scanprov
+PNf                            # Z added by devel/scanprov
+PNfARG                         # Z added by devel/scanprov
+SAVEFREEPADNAME                # Z added by devel/scanprov
+SAVEt_FREEPADNAME              # Z added by devel/scanprov
+STATIC_ASSERT_1                # Z added by devel/scanprov
+STATIC_ASSERT_2                # Z added by devel/scanprov
+STATIC_ASSERT_STMT             # Z added by devel/scanprov
+UNOP_AUX_item_sv               # Z added by devel/scanprov
index 61387ed..c459490 100644 (file)
@@ -1,4 +1,20 @@
 5.021008
+ANYOFL                         # Z added by devel/scanprov
+CvANONCONST                    # Z added by devel/scanprov
+CvANONCONST_off                # Z added by devel/scanprov
+CvANONCONST_on                 # Z added by devel/scanprov
+CVf_ANONCONST                  # Z added by devel/scanprov
+EXACTFLU8                      # Z added by devel/scanprov
+EXACTL                         # Z added by devel/scanprov
+FOLDEQ_S1_FOLDS_SANE           # Z added by devel/scanprov
+FOLDEQ_S2_FOLDS_SANE           # Z added by devel/scanprov
+NOCAPTURE_PAT_MOD              # Z added by devel/scanprov
+NOCAPTURE_PAT_MODS             # Z added by devel/scanprov
+PL_warn_locale                 # Z added by devel/scanprov
+PMf_NOCAPTURE                  # Z added by devel/scanprov
+PMf_STRICT                     # Z added by devel/scanprov
+RXf_PMf_NOCAPTURE              # Z added by devel/scanprov
+RXf_PMf_STRICT                 # Z added by devel/scanprov
 sv_get_backrefs                # U
 WARN_EXPERIMENTAL__CONST_ATTR  # E
 WARN_EXPERIMENTAL__RE_STRICT   # E
index 979825e..e442ba9 100644 (file)
@@ -1,11 +1,36 @@
 5.021009
-WARN_EXPERIMENTAL__BITWISE     # E
 advance_one_SB                 # F added by devel/scanprov
 advance_one_WB                 # F added by devel/scanprov
+AMGf_numarg                    # Z added by devel/scanprov
 backup_one_SB                  # F added by devel/scanprov
 backup_one_WB                  # F added by devel/scanprov
+DOUBLE_BIG_ENDIAN              # Z added by devel/scanprov
+DOUBLE_LITTLE_ENDIAN           # Z added by devel/scanprov
+DOUBLE_MIX_ENDIAN              # Z added by devel/scanprov
+FEATURE_BITWISE_IS_ENABLED     # Z added by devel/scanprov
+HAS_LLRINTL                    # K added by devel/scanprov
+HAS_LLROUNDL                   # K added by devel/scanprov
+HAS_LRINTL                     # K added by devel/scanprov
+HAS_LROUNDL                    # K added by devel/scanprov
 isGCB                          # F added by devel/scanprov
 isSB                           # F added by devel/scanprov
 isWB                           # F added by devel/scanprov
+LONGDOUBLE_BIG_ENDIAN          # Z added by devel/scanprov
+LONGDOUBLE_DOUBLEDOUBLE        # Z added by devel/scanprov
+LONGDOUBLE_LITTLE_ENDIAN       # Z added by devel/scanprov
+LONGDOUBLE_X86_80_BIT          # Z added by devel/scanprov
 multideref_stringify           # F added by devel/scanprov
 my_bytes_to_utf8               # F added by devel/scanprov
+NV_BIG_ENDIAN                  # Z added by devel/scanprov
+NV_IMPLICIT_BIT                # Z added by devel/scanprov
+NV_LITTLE_ENDIAN               # Z added by devel/scanprov
+NV_MIX_ENDIAN                  # Z added by devel/scanprov
+OP_IS_INFIX_BIT                # Z added by devel/scanprov
+Perl_pp_nbit_xor               # Z added by devel/scanprov
+Perl_pp_sbit_xor               # Z added by devel/scanprov
+PL_GCB_invlist                 # Z added by devel/scanprov
+PL_SB_invlist                  # Z added by devel/scanprov
+PL_WB_invlist                  # Z added by devel/scanprov
+RETSETTARG                     # Z added by devel/scanprov
+SS_BUFFEROVF                   # Z added by devel/scanprov
+WARN_EXPERIMENTAL__BITWISE     # E
index b86937f..30e079a 100644 (file)
@@ -1,8 +1,11 @@
 5.021010
 DECLARATION_FOR_LC_NUMERIC_MANIPULATION # E
+grok_atoUV                     # F added by devel/scanprov
+LOCK_LC_NUMERIC_STANDARD       # Z added by devel/scanprov
+regex_set_precedence           # F added by devel/scanprov
 RESTORE_LC_NUMERIC             # E
+SET_NUMERIC_UNDERLYING         # Z added by devel/scanprov
 STORE_LC_NUMERIC_FORCE_TO_UNDERLYING # E
 STORE_LC_NUMERIC_SET_TO_NEEDED # E
-grok_atoUV                     # F added by devel/scanprov
-regex_set_precedence           # F added by devel/scanprov
 sv_only_taint_gmagic           # F added by devel/scanprov
+UNLOCK_LC_NUMERIC_STANDARD     # Z added by devel/scanprov
index 50ed05a..3c616da 100644 (file)
@@ -1,8 +1,37 @@
 5.023000
-DOUBLEINFBYTES                 # E
-DOUBLEMANTBITS                 # E
-DOUBLENANBYTES                 # E
-LONGDBLINFBYTES                # E
-LONGDBLMANTBITS                # E
-LONGDBLNANBYTES                # E
-NVMANTBITS                     # E
+DOUBLEINFBYTES                 # K added by devel/scanprov
+DOUBLEMANTBITS                 # K added by devel/scanprov
+DOUBLENANBYTES                 # K added by devel/scanprov
+INFNAN_NV_U8_DECL              # Z added by devel/scanprov
+INFNAN_U8_NV_DECL              # Z added by devel/scanprov
+LONGDBLINFBYTES                # K added by devel/scanprov
+LONGDBLMANTBITS                # K added by devel/scanprov
+LONGDBLNANBYTES                # K added by devel/scanprov
+NVMANTBITS                     # K added by devel/scanprov
+NV_NAN_BITS                    # Z added by devel/scanprov
+NV_NAN_IS_QUIET                # Z added by devel/scanprov
+NV_NAN_IS_SIGNALING            # Z added by devel/scanprov
+NV_NAN_PAYLOAD_MASK            # Z added by devel/scanprov
+NV_NAN_PAYLOAD_MASK_IEEE_754_128_BE # Z added by devel/scanprov
+NV_NAN_PAYLOAD_MASK_IEEE_754_128_LE # Z added by devel/scanprov
+NV_NAN_PAYLOAD_MASK_IEEE_754_64_BE # Z added by devel/scanprov
+NV_NAN_PAYLOAD_MASK_IEEE_754_64_LE # Z added by devel/scanprov
+NV_NAN_PAYLOAD_PERM            # Z added by devel/scanprov
+NV_NAN_PAYLOAD_PERM_0_TO_7     # Z added by devel/scanprov
+NV_NAN_PAYLOAD_PERM_7_TO_0     # Z added by devel/scanprov
+NV_NAN_PAYLOAD_PERM_IEEE_754_128_BE # Z added by devel/scanprov
+NV_NAN_PAYLOAD_PERM_IEEE_754_128_LE # Z added by devel/scanprov
+NV_NAN_PAYLOAD_PERM_IEEE_754_64_BE # Z added by devel/scanprov
+NV_NAN_PAYLOAD_PERM_IEEE_754_64_LE # Z added by devel/scanprov
+NV_NAN_QS_BIT                  # Z added by devel/scanprov
+NV_NAN_QS_BIT_OFFSET           # Z added by devel/scanprov
+NV_NAN_QS_BIT_SHIFT            # Z added by devel/scanprov
+NV_NAN_QS_BYTE                 # Z added by devel/scanprov
+NV_NAN_QS_BYTE_OFFSET          # Z added by devel/scanprov
+NV_NAN_QS_QUIET                # Z added by devel/scanprov
+NV_NAN_QS_SIGNALING            # Z added by devel/scanprov
+NV_NAN_QS_TEST                 # Z added by devel/scanprov
+NV_NAN_QS_XOR                  # Z added by devel/scanprov
+NV_NAN_SET_QUIET               # Z added by devel/scanprov
+NV_NAN_SET_SIGNALING           # Z added by devel/scanprov
+PERLSI_MULTICALL               # Z added by devel/scanprov
index ea44212..67d2d52 100644 (file)
@@ -1 +1,3 @@
 5.023001
+FEATURE_BUNDLE_523             # Z added by devel/scanprov
+PERL_COPY_ON_WRITE             # Z added by devel/scanprov
index 9d73a7f..22971e6 100644 (file)
@@ -1,4 +1,20 @@
 5.023002
+ELEMENT_RANGE_MATCHES_INVLIST  # Z added by devel/scanprov
+FROM_INTERNAL_SIZE             # Z added by devel/scanprov
+LATIN_CAPITAL_LETTER_I_WITH_DOT_ABOVE # Z added by devel/scanprov
+LATIN_CAPITAL_LETTER_I_WITH_DOT_ABOVE_UTF8 # Z added by devel/scanprov
+LATIN_SMALL_LETTER_DOTLESS_I   # Z added by devel/scanprov
+LATIN_SMALL_LETTER_DOTLESS_I_UTF8 # Z added by devel/scanprov
+OPpASSIGN_COMMON_AGG           # Z added by devel/scanprov
+OPpASSIGN_COMMON_RC1           # Z added by devel/scanprov
+OPpASSIGN_COMMON_SCALAR        # Z added by devel/scanprov
+PERLDB_LINE_OR_SAVESRC         # Z added by devel/scanprov
+PREV_RANGE_MATCHES_INVLIST     # Z added by devel/scanprov
+TO_INTERNAL_SIZE               # Z added by devel/scanprov
+U64                            # Z added by devel/scanprov
+UNICODE_DOT_DOT_VERSION        # Z added by devel/scanprov
+UNICODE_DOT_VERSION            # Z added by devel/scanprov
+UNICODE_MAJOR_VERSION          # Z added by devel/scanprov
 UTF8_IS_NONCHAR                # U
 UTF8_IS_SUPER                  # A
 UTF8_IS_SURROGATE              # A
index 4b19a24..c167edf 100644 (file)
@@ -1 +1,9 @@
 5.023003
+ANYOFD                         # Z added by devel/scanprov
+ANYOF_SHARED_d_MATCHES_ALL_NON_UTF8_NON_ASCII_non_d_WARN_SUPER # Z added by devel/scanprov
+DEBUG_Lv                       # Z added by devel/scanprov
+DEBUG_Lv_TEST                  # Z added by devel/scanprov
+EIGHT_BIT_UTF8_TO_NATIVE       # Z added by devel/scanprov
+isUTF8_POSSIBLY_PROBLEMATIC    # Z added by devel/scanprov
+OFFUNI_IS_INVARIANT            # Z added by devel/scanprov
+UTF8_IS_ABOVE_LATIN1_START     # Z added by devel/scanprov
index 1b8818c..8460233 100644 (file)
@@ -1 +1,18 @@
 5.023005
+HAS_FSTATFS                    # K added by devel/scanprov
+HAS_FSTATVFS                   # K added by devel/scanprov
+HAS_GETMNTENT                  # K added by devel/scanprov
+HAS_HASMNTOPT                  # K added by devel/scanprov
+HAS_STRUCT_STATFS              # K added by devel/scanprov
+HAS_STRUCT_STATFS_F_FLAGS      # K added by devel/scanprov
+HAS_USTAT                      # K added by devel/scanprov
+I_MNTENT                       # K added by devel/scanprov
+INCMARK                        # Z added by devel/scanprov
+I_SYS_MOUNT                    # K added by devel/scanprov
+I_SYS_STATFS                   # K added by devel/scanprov
+I_SYS_STATVFS                  # K added by devel/scanprov
+I_SYS_VFS                      # K added by devel/scanprov
+I_USTAT                        # K added by devel/scanprov
+TARGi                          # Z added by devel/scanprov
+TARGn                          # Z added by devel/scanprov
+TARGu                          # Z added by devel/scanprov
index 2945414..36f078e 100644 (file)
@@ -1,3 +1,34 @@
 5.023006
+ANYOF_SHARED_d_UPPER_LATIN1_UTF8_STRING_MATCHES_non_d_RUNTIME_USER_PROP # Z added by devel/scanprov
+CLANG_DIAG_IGNORE              # Z added by devel/scanprov
+CLANG_DIAG_PRAGMA              # Z added by devel/scanprov
+CLANG_DIAG_RESTORE             # Z added by devel/scanprov
+HIGHEST_CASE_CHANGING_CP_FOR_USE_ONLY_BY_UTF8_DOT_C # Z added by devel/scanprov
 _invlistEQ                     # F added by devel/scanprov
+LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BE_BE # K added by devel/scanprov
+LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BE_LE # K added by devel/scanprov
+LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LE_BE # K added by devel/scanprov
+LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LE_LE # K added by devel/scanprov
+LONGDOUBLE_MIX_ENDIAN          # Z added by devel/scanprov
+NV_NAN_PAYLOAD_MASK_SKIP_EIGHT # Z added by devel/scanprov
+NV_NAN_PAYLOAD_PERM_SKIP_EIGHT # Z added by devel/scanprov
+perl_pthread_mutex_lock        # Z added by devel/scanprov
+perl_pthread_mutex_unlock      # Z added by devel/scanprov
+PERL_TSA                       # Z added by devel/scanprov
+PERL_TSA_ACQUIRE               # Z added by devel/scanprov
+PERL_TSA_ACTIVE                # Z added by devel/scanprov
+PERL_TSA_CAPABILITY            # Z added by devel/scanprov
+PERL_TSA_EXCLUDES              # Z added by devel/scanprov
+PERL_TSA_GUARDED_BY            # Z added by devel/scanprov
+PERL_TSA_NO_TSA                # Z added by devel/scanprov
+PERL_TSA_PT_GUARDED_BY         # Z added by devel/scanprov
+PERL_TSA_RELEASE               # Z added by devel/scanprov
+PERL_TSA_REQUIRES              # Z added by devel/scanprov
 _to_utf8_case                  # F added by devel/scanprov
+UNICODE_DISALLOW_ABOVE_31_BIT  # Z added by devel/scanprov
+UNICODE_IS_32_CONTIGUOUS_NONCHARS # Z added by devel/scanprov
+UNICODE_IS_END_PLANE_NONCHAR_GIVEN_NOT_SUPER # Z added by devel/scanprov
+UNICODE_WARN_ABOVE_31_BIT      # Z added by devel/scanprov
+UTF8_DISALLOW_ABOVE_31_BIT     # Z added by devel/scanprov
+UTF8_WARN_ABOVE_31_BIT         # Z added by devel/scanprov
+UTF_IS_CONTINUATION_MASK       # Z added by devel/scanprov
index 08b6922..e97e121 100644 (file)
@@ -1,4 +1,17 @@
 5.023007
 advance_one_LB                 # F added by devel/scanprov
+ANYOFL_FOLD                    # Z added by devel/scanprov
+ANYOFL_SHARED_UTF8_LOCALE_fold_HAS_MATCHES_nonfold_REQD # Z added by devel/scanprov
+ANYOFL_SOME_FOLDS_ONLY_IN_UTF8_LOCALE # Z added by devel/scanprov
+ANYOFL_UTF8_LOCALE_REQD        # Z added by devel/scanprov
 backup_one_LB                  # F added by devel/scanprov
 isLB                           # F added by devel/scanprov
+LB_BREAKABLE                   # Z added by devel/scanprov
+LB_HY_or_BA_then_foo           # Z added by devel/scanprov
+LB_NOBREAK                     # Z added by devel/scanprov
+LB_NOBREAK_EVEN_WITH_SP_BETWEEN # Z added by devel/scanprov
+LB_PR_or_PO_then_OP_or_HY      # Z added by devel/scanprov
+LB_SP_foo                      # Z added by devel/scanprov
+LB_SY_or_IS_then_various       # Z added by devel/scanprov
+LB_various_then_PO_or_PR       # Z added by devel/scanprov
+PL_LB_invlist                  # Z added by devel/scanprov
index a5480fc..247a88c 100644 (file)
@@ -1,25 +1,61 @@
 5.023008
+blk_oldsaveix                  # Z added by devel/scanprov
+blk_old_tmpsfloor              # Z added by devel/scanprov
 clear_defarray                 # U
-cx_popblock                    # U
-cx_popeval                     # U
-cx_popformat                   # U
-cx_poploop                     # U
-cx_popsub                      # U
-cx_popsub_args                 # U
-cx_popsub_common               # U
-cx_pushblock                   # U
-cx_pusheval                    # U
-cx_pushformat                  # U
-cx_pushloop_for                # U
-cx_pushloop_plain              # U
-cx_pushsub                     # U
-cx_topblock                    # U
-leave_adjust_stacks            # U
-savetmps                       # U
+CX_CUR                         # Z added by devel/scanprov
+CX_DEBUG                       # Z added by devel/scanprov
+CX_LEAVE_SCOPE                 # Z added by devel/scanprov
+CXp_FOR_GV                     # Z added by devel/scanprov
+CXp_FOR_PAD                    # Z added by devel/scanprov
+CX_POP                         # Z added by devel/scanprov
+cx_popblock                    # F added by devel/scanprov
+cx_popeval                     # F added by devel/scanprov
+cx_popformat                   # F added by devel/scanprov
+cx_poploop                     # F added by devel/scanprov
+CX_POP_SAVEARRAY               # Z added by devel/scanprov
+cx_popsub                      # F added by devel/scanprov
+cx_popsub_args                 # F added by devel/scanprov
+cx_popsub_common               # F added by devel/scanprov
+CX_POPSUBST                    # Z added by devel/scanprov
+cx_pushblock                   # F added by devel/scanprov
+cx_pusheval                    # F added by devel/scanprov
+cx_pushformat                  # F added by devel/scanprov
+cx_pushloop_for                # F added by devel/scanprov
+cx_pushloop_plain              # F added by devel/scanprov
+cx_pushsub                     # F added by devel/scanprov
+CX_PUSHSUB_GET_LVALUE_MASK     # Z added by devel/scanprov
+CX_PUSHSUBST                   # Z added by devel/scanprov
+CXt_LOOP_ARY                   # Z added by devel/scanprov
+CXt_LOOP_LIST                  # Z added by devel/scanprov
+cx_topblock                    # F added by devel/scanprov
 doeval_compile                 # F added by devel/scanprov
 edit_distance                  # F added by devel/scanprov
 handle_named_backref           # F added by devel/scanprov
 handle_possible_posix          # F added by devel/scanprov
+HAS_SIGINFO_SI_ADDR            # K added by devel/scanprov
+HAS_SIGINFO_SI_BAND            # K added by devel/scanprov
+HAS_SIGINFO_SI_ERRNO           # K added by devel/scanprov
+HAS_SIGINFO_SI_PID             # K added by devel/scanprov
+HAS_SIGINFO_SI_STATUS          # K added by devel/scanprov
+HAS_SIGINFO_SI_UID             # K added by devel/scanprov
+HAS_SIGINFO_SI_VALUE           # K added by devel/scanprov
 invlist_contents               # F added by devel/scanprov
+leave_adjust_stacks            # U
+PERL_BISON_VERSION             # Z added by devel/scanprov
+PERL_SMALL_MACRO_BUFFER        # Z added by devel/scanprov
+PL_dump_re_max_len             # Z added by devel/scanprov
 put_charclass_bitmap_innards_common # F added by devel/scanprov
 put_charclass_bitmap_innards_invlist # F added by devel/scanprov
+savetmps                       # U
+SAVEt_TMPSFLOOR                # Z added by devel/scanprov
+SET_SVANY_FOR_BODYLESS_IV      # Z added by devel/scanprov
+SET_SVANY_FOR_BODYLESS_NV      # Z added by devel/scanprov
+WB_BREAKABLE                   # Z added by devel/scanprov
+WB_DQ_then_HL                  # Z added by devel/scanprov
+WB_HL_then_DQ                  # Z added by devel/scanprov
+WB_hs_then_hs                  # Z added by devel/scanprov
+WB_LE_or_HL_then_MB_or_ML_or_SQ # Z added by devel/scanprov
+WB_MB_or_ML_or_SQ_then_LE_or_HL # Z added by devel/scanprov
+WB_MB_or_MN_or_SQ_then_NU      # Z added by devel/scanprov
+WB_NOBREAK                     # Z added by devel/scanprov
+WB_NU_then_MB_or_MN_or_SQ      # Z added by devel/scanprov
index cceca1d..5ea5bf3 100644 (file)
@@ -1,4 +1,9 @@
 5.023009
+HAS_FREELOCALE                 # K added by devel/scanprov
+HAS_NEWLOCALE                  # K added by devel/scanprov
+HAS_USELOCALE                  # K added by devel/scanprov
+invlist_clear                  # F added by devel/scanprov
+invlist_replace_list_destroys_src # F added by devel/scanprov
 isALPHANUMERIC_uvchr           # U
 isALPHA_uvchr                  # U
 isASCII_uvchr                  # U
@@ -14,18 +19,24 @@ isPSXSPC_uvchr                 # U
 isPUNCT_uvchr                  # U
 isSPACE_uvchr                  # U
 isUPPER_uvchr                  # U
+isVERTWS_uvchr                 # Z added by devel/scanprov
 isWORDCHAR_uvchr               # U
 isXDIGIT_uvchr                 # U
-toFOLD_uvchr                   # U
-toLOWER_uvchr                  # U
-toTITLE_uvchr                  # U
-toUPPER_uvchr                  # U
-invlist_clear                  # F added by devel/scanprov
-invlist_replace_list_destroys_src # F added by devel/scanprov
 Perl_dtrace_probe_call         # F added by devel/scanprov
+PERL_DTRACE_PROBE_ENTRY        # Z added by devel/scanprov
+PERL_DTRACE_PROBE_FILE_LOADED  # Z added by devel/scanprov
+PERL_DTRACE_PROBE_FILE_LOADING # Z added by devel/scanprov
 Perl_dtrace_probe_load         # F added by devel/scanprov
+PERL_DTRACE_PROBE_OP           # Z added by devel/scanprov
 Perl_dtrace_probe_op           # F added by devel/scanprov
+PERL_DTRACE_PROBE_PHASE        # Z added by devel/scanprov
 Perl_dtrace_probe_phase        # F added by devel/scanprov
+PERL_DTRACE_PROBE_RETURN       # Z added by devel/scanprov
+PREGf_RECURSE_SEEN             # Z added by devel/scanprov
 re_exec_indentf                # F added by devel/scanprov
 re_indentf                     # F added by devel/scanprov
 re_printf                      # F added by devel/scanprov
+toFOLD_uvchr                   # U
+toLOWER_uvchr                  # U
+toTITLE_uvchr                  # U
+toUPPER_uvchr                  # U
index 2445a65..562d7bb 100644 (file)
@@ -1,4 +1,9 @@
 5.024000
+HAS_MEMMEM                     # K added by devel/scanprov
+LOCALE_INIT                    # Z added by devel/scanprov
+LOCALE_LOCK                    # Z added by devel/scanprov
+LOCALE_TERM                    # Z added by devel/scanprov
+LOCALE_UNLOCK                  # Z added by devel/scanprov
 mem_log_alloc                  # F added by devel/scanprov
 mem_log_free                   # F added by devel/scanprov
 mem_log_realloc                # F added by devel/scanprov
index 398001b..193ba0c 100644 (file)
@@ -1,2 +1,3 @@
 5.025001
 op_parent                      # U
+PERL_OP_PARENT                 # Z added by devel/scanprov
index 03f1ade..a920eed 100644 (file)
@@ -1,2 +1,9 @@
 5.025002
+DEBUG_i                        # Z added by devel/scanprov
+DEBUG_i_FLAG                   # Z added by devel/scanprov
+DEBUG_i_TEST                   # Z added by devel/scanprov
+HAS_STRERROR_L                 # K added by devel/scanprov
 _mem_collxfrm                  # F added by devel/scanprov
+PL_in_utf8_COLLATE_locale      # Z added by devel/scanprov
+PL_strxfrm_is_behaved          # Z added by devel/scanprov
+PL_strxfrm_max_cp              # Z added by devel/scanprov
index 583bf3e..6a55408 100644 (file)
@@ -1,4 +1,22 @@
 5.025003
+backup_one_GCB                 # F added by devel/scanprov
+DOUBLE_HAS_INF                 # K added by devel/scanprov
+DOUBLE_HAS_NAN                 # K added by devel/scanprov
+DOUBLE_IS_IEEE_FORMAT          # Z added by devel/scanprov
+DOUBLE_IS_VAX_D_FLOAT          # K added by devel/scanprov
+DOUBLE_IS_VAX_F_FLOAT          # K added by devel/scanprov
+DOUBLE_IS_VAX_FLOAT            # Z added by devel/scanprov
+DOUBLE_IS_VAX_G_FLOAT          # K added by devel/scanprov
+DOUBLE_VAX_ENDIAN              # Z added by devel/scanprov
+FEATURE_MYREF_IS_ENABLED       # Z added by devel/scanprov
+GCB_BREAKABLE                  # Z added by devel/scanprov
+GCB_EX_then_EM                 # Z added by devel/scanprov
+GCB_NOBREAK                    # Z added by devel/scanprov
+GCB_RI_then_RI                 # Z added by devel/scanprov
 hv_bucket_ratio                # U
+LB_CM_ZWJ_foo                  # Z added by devel/scanprov
+LB_RI_then_RI                  # Z added by devel/scanprov
+NV_VAX_ENDIAN                  # Z added by devel/scanprov
 WARN_EXPERIMENTAL__DECLARED_REFS # E
-backup_one_GCB                 # F added by devel/scanprov
+WB_Ex_or_FO_or_ZWJ_then_foo    # Z added by devel/scanprov
+WB_RI_then_RI                  # Z added by devel/scanprov
index c1165b8..573b81d 100644 (file)
@@ -1,4 +1,15 @@
 5.025004
 alloc_LOGOP                    # F added by devel/scanprov
 croak_caller                   # F added by devel/scanprov
+HAS_GAI_STRERROR               # K added by devel/scanprov
+I_XLOCALE                      # K added by devel/scanprov
+KEY_sigvar                     # Z added by devel/scanprov
+LONG_DOUBLE_IS_VAX_H_FLOAT     # K added by devel/scanprov
+LONGDOUBLE_VAX_ENDIAN          # Z added by devel/scanprov
+NV_X86_80_BIT                  # Z added by devel/scanprov
+OPpARGELEM_AV                  # Z added by devel/scanprov
+OPpARGELEM_HV                  # Z added by devel/scanprov
+OPpARGELEM_MASK                # Z added by devel/scanprov
+OPpARGELEM_SV                  # Z added by devel/scanprov
 print_collxfrm_input_and_return # F added by devel/scanprov
+USE_THREAD_SAFE_LOCALE         # Z added by devel/scanprov
index 7b018ce..d0407e6 100644 (file)
@@ -1,13 +1,25 @@
 5.025005
 BOM_UTF8                       # E
+delimcpy_no_escape             # F added by devel/scanprov
 isC9_STRICT_UTF8_CHAR          # U
+is_C9_STRICT_UTF8_CHAR_utf8_no_length_checks # Z added by devel/scanprov
+is_NONCHAR_utf8_safe           # Z added by devel/scanprov
 isSTRICT_UTF8_CHAR             # U
+is_STRICT_UTF8_CHAR_utf8_no_length_checks # Z added by devel/scanprov
+is_STRICT_UTF8_CHAR_utf8_no_length_checks_part0 # Z added by devel/scanprov
+is_STRICT_UTF8_CHAR_utf8_no_length_checks_part1 # Z added by devel/scanprov
+is_SURROGATE_utf8_safe         # Z added by devel/scanprov
 isUTF8_CHAR_flags              # U
+is_utf8_cp_above_31_bits       # F added by devel/scanprov
 is_utf8_invariant_string       # U
 is_utf8_valid_partial_char     # U
 is_utf8_valid_partial_char_flags # U
+memGE                          # Z added by devel/scanprov
+memGT                          # Z added by devel/scanprov
+memLE                          # Z added by devel/scanprov
+memLT                          # Z added by devel/scanprov
 REPLACEMENT_CHARACTER_UTF8     # E
+UNICODE_DISALLOW_ILLEGAL_C9_INTERCHANGE # Z added by devel/scanprov
+UNICODE_WARN_ILLEGAL_C9_INTERCHANGE # Z added by devel/scanprov
 UTF8_DISALLOW_ILLEGAL_C9_INTERCHANGE # E
 UTF8_WARN_ILLEGAL_C9_INTERCHANGE # E
-delimcpy_no_escape             # F added by devel/scanprov
-is_utf8_cp_above_31_bits       # F added by devel/scanprov
index 08c2bed..4f44c9b 100644 (file)
@@ -1,4 +1,13 @@
 5.025006
+_byte_dump_string              # F added by devel/scanprov
+does_utf8_overflow             # F added by devel/scanprov
+DOUBLE_IS_CRAY_SINGLE_64_BIT   # K added by devel/scanprov
+DOUBLE_IS_IBM_DOUBLE_64_BIT    # K added by devel/scanprov
+DOUBLE_IS_IBM_SINGLE_32_BIT    # K added by devel/scanprov
+dump_regex_sets_structures     # F added by devel/scanprov
+hv_deletes                     # Z added by devel/scanprov
+hv_existss                     # Z added by devel/scanprov
+hv_name_sets                   # Z added by devel/scanprov
 is_c9strict_utf8_string        # U
 is_c9strict_utf8_string_loc    # U
 is_c9strict_utf8_string_loclen # U
@@ -8,15 +17,28 @@ is_strict_utf8_string_loclen   # U
 is_utf8_fixed_width_buf_flags  # U
 is_utf8_fixed_width_buf_loc_flags # U
 is_utf8_fixed_width_buf_loclen_flags # U
+is_utf8_overlong_given_start_byte_ok # F added by devel/scanprov
 is_utf8_string_flags           # U
 is_utf8_string_loc_flags       # U
 is_utf8_string_loclen_flags    # U
+MAX                            # Z added by devel/scanprov
+MIN                            # Z added by devel/scanprov
+OPpAVHVSWITCH_MASK             # Z added by devel/scanprov
+OPpSPLIT_ASSIGN                # Z added by devel/scanprov
+OPpSPLIT_LEX                   # Z added by devel/scanprov
+regcp_restore                  # F added by devel/scanprov
 SvPVCLEAR                      # U
 sv_setpv_bufsize               # U
-utf8n_to_uvchr_error           # U
-_byte_dump_string              # F added by devel/scanprov
-does_utf8_overflow             # F added by devel/scanprov
-dump_regex_sets_structures     # F added by devel/scanprov
-is_utf8_overlong_given_start_byte_ok # F added by devel/scanprov
-regcp_restore                  # F added by devel/scanprov
 unexpected_non_continuation_text # F added by devel/scanprov
+UTF8_GOT_ABOVE_31_BIT          # Z added by devel/scanprov
+UTF8_GOT_CONTINUATION          # Z added by devel/scanprov
+UTF8_GOT_EMPTY                 # Z added by devel/scanprov
+UTF8_GOT_LONG                  # Z added by devel/scanprov
+UTF8_GOT_NONCHAR               # Z added by devel/scanprov
+UTF8_GOT_NON_CONTINUATION      # Z added by devel/scanprov
+UTF8_GOT_OVERFLOW              # Z added by devel/scanprov
+UTF8_GOT_SHORT                 # Z added by devel/scanprov
+UTF8_GOT_SUPER                 # Z added by devel/scanprov
+UTF8_GOT_SURROGATE             # Z added by devel/scanprov
+utf8n_to_uvchr_error           # U
+YYDEBUG                        # Z added by devel/scanprov
index 2176720..3410161 100644 (file)
@@ -1,6 +1,13 @@
 5.025007
 CLEAR_ERRSV                    # E
+CxEVAL_TXT_REFCNTED            # Z added by devel/scanprov
+DOUBLE_HAS_NEGATIVE_ZERO       # K added by devel/scanprov
+DOUBLE_HAS_SUBNORMALS          # K added by devel/scanprov
+DOUBLE_STYLE_IEEE              # K added by devel/scanprov
+isFF_OVERLONG                  # F added by devel/scanprov
+LONG_DOUBLE_STYLE_IEEE         # K added by devel/scanprov
+LONG_DOUBLE_STYLE_IEEE_EXTENDED # K added by devel/scanprov
+PL_curpm_under                 # Z added by devel/scanprov
 utf8_hop_back                  # U
 utf8_hop_forward               # U
 utf8_hop_safe                  # U
-isFF_OVERLONG                  # F added by devel/scanprov
index 4ca9b58..27fa046 100644 (file)
@@ -1,2 +1,10 @@
 5.025008
+is_C9_STRICT_UTF8_CHAR_utf8_no_length_checks_part0 # Z added by devel/scanprov
+is_C9_STRICT_UTF8_CHAR_utf8_no_length_checks_part1 # Z added by devel/scanprov
+is_MULTI_CHAR_FOLD_utf8_safe_part2 # Z added by devel/scanprov
+is_MULTI_CHAR_FOLD_utf8_safe_part3 # Z added by devel/scanprov
+is_STRICT_UTF8_CHAR_utf8_no_length_checks_part2 # Z added by devel/scanprov
+is_STRICT_UTF8_CHAR_utf8_no_length_checks_part3 # Z added by devel/scanprov
+PERL_SIPHASH_FNC               # Z added by devel/scanprov
+PL_strxfrm_NUL_replacement     # Z added by devel/scanprov
 sv_set_undef                   # U
index 71d2ac4..a95f3d6 100644 (file)
@@ -1,4 +1,7 @@
 5.025009
+deprecate_disappears_in        # Z added by devel/scanprov
+deprecate_fatal_in             # Z added by devel/scanprov
+_force_out_malformed_utf8_message # F added by devel/scanprov
 isALPHA_LC_utf8_safe           # U
 isALPHANUMERIC_LC_utf8_safe    # U
 isALPHANUMERIC_utf8_safe       # U
@@ -15,6 +18,7 @@ isGRAPH_LC_utf8_safe           # U
 isGRAPH_utf8_safe              # U
 isIDCONT_LC_utf8_safe          # U
 isIDCONT_utf8_safe             # U
+isIDFIRST_lazy_if_safe         # Z added by devel/scanprov
 isIDFIRST_LC_utf8_safe         # U
 isIDFIRST_utf8_safe            # U
 isLOWER_LC_utf8_safe           # U
@@ -29,13 +33,17 @@ isSPACE_LC_utf8_safe           # U
 isSPACE_utf8_safe              # U
 isUPPER_LC_utf8_safe           # U
 isUPPER_utf8_safe              # U
+isVERTWS_utf8_safe             # Z added by devel/scanprov
+isWORDCHAR_lazy_if_safe        # Z added by devel/scanprov
 isWORDCHAR_LC_utf8_safe        # U
 isWORDCHAR_utf8_safe           # U
 isXDIGIT_LC_utf8_safe          # U
 isXDIGIT_utf8_safe             # U
+PL_Assigned_invlist            # Z added by devel/scanprov
 toFOLD_utf8_safe               # U
 toLOWER_utf8_safe              # U
 toTITLE_utf8_safe              # U
 toUPPER_utf8_safe              # U
-_force_out_malformed_utf8_message # F added by devel/scanprov
+UTF8_ALLOW_LONG_AND_ITS_VALUE  # Z added by devel/scanprov
+UTF8_ALLOW_OVERFLOW            # Z added by devel/scanprov
 warn_on_first_deprecated_use   # F added by devel/scanprov
index 5f2b615..1601d18 100644 (file)
@@ -1,5 +1,12 @@
 5.025010
-op_class                       # E
 abort_execution                # F added by devel/scanprov
+av_tindex_skip_len_mg          # Z added by devel/scanprov
+av_top_index_skip_len_mg       # Z added by devel/scanprov
+EVAL_B                         # Z added by devel/scanprov
+EVAL_B_fail                    # Z added by devel/scanprov
+EVAL_postponed_AB              # Z added by devel/scanprov
+EVAL_postponed_AB_fail         # Z added by devel/scanprov
 notify_parser_that_changed_to_utf8 # F added by devel/scanprov
+op_class                       # E
+PMf_HAS_ERROR                  # Z added by devel/scanprov
 yyquit                         # F added by devel/scanprov
index ebbab42..2068862 100644 (file)
@@ -1 +1,2 @@
 5.025011
+DEFAULT_INC_EXCLUDES_DOT       # K added by devel/scanprov
index c1d9e63..c504d00 100644 (file)
@@ -1 +1,2 @@
 5.025012
+PERL_UTIL_H                    # Z added by devel/scanprov
index a952cd1..91ad388 100644 (file)
@@ -1,4 +1,334 @@
 5.027001
 bytes_from_utf8_loc            # U
+CAN64BITHASH                   # Z added by devel/scanprov
+case_100_SBOX32                # Z added by devel/scanprov
+case_101_SBOX32                # Z added by devel/scanprov
+case_102_SBOX32                # Z added by devel/scanprov
+case_103_SBOX32                # Z added by devel/scanprov
+case_104_SBOX32                # Z added by devel/scanprov
+case_105_SBOX32                # Z added by devel/scanprov
+case_106_SBOX32                # Z added by devel/scanprov
+case_107_SBOX32                # Z added by devel/scanprov
+case_108_SBOX32                # Z added by devel/scanprov
+case_109_SBOX32                # Z added by devel/scanprov
+case_10_SBOX32                 # Z added by devel/scanprov
+case_110_SBOX32                # Z added by devel/scanprov
+case_111_SBOX32                # Z added by devel/scanprov
+case_112_SBOX32                # Z added by devel/scanprov
+case_113_SBOX32                # Z added by devel/scanprov
+case_114_SBOX32                # Z added by devel/scanprov
+case_115_SBOX32                # Z added by devel/scanprov
+case_116_SBOX32                # Z added by devel/scanprov
+case_117_SBOX32                # Z added by devel/scanprov
+case_118_SBOX32                # Z added by devel/scanprov
+case_119_SBOX32                # Z added by devel/scanprov
+case_11_SBOX32                 # Z added by devel/scanprov
+case_120_SBOX32                # Z added by devel/scanprov
+case_121_SBOX32                # Z added by devel/scanprov
+case_122_SBOX32                # Z added by devel/scanprov
+case_123_SBOX32                # Z added by devel/scanprov
+case_124_SBOX32                # Z added by devel/scanprov
+case_125_SBOX32                # Z added by devel/scanprov
+case_126_SBOX32                # Z added by devel/scanprov
+case_127_SBOX32                # Z added by devel/scanprov
+case_128_SBOX32                # Z added by devel/scanprov
+case_129_SBOX32                # Z added by devel/scanprov
+case_12_SBOX32                 # Z added by devel/scanprov
+case_130_SBOX32                # Z added by devel/scanprov
+case_131_SBOX32                # Z added by devel/scanprov
+case_132_SBOX32                # Z added by devel/scanprov
+case_133_SBOX32                # Z added by devel/scanprov
+case_134_SBOX32                # Z added by devel/scanprov
+case_135_SBOX32                # Z added by devel/scanprov
+case_136_SBOX32                # Z added by devel/scanprov
+case_137_SBOX32                # Z added by devel/scanprov
+case_138_SBOX32                # Z added by devel/scanprov
+case_139_SBOX32                # Z added by devel/scanprov
+case_13_SBOX32                 # Z added by devel/scanprov
+case_140_SBOX32                # Z added by devel/scanprov
+case_141_SBOX32                # Z added by devel/scanprov
+case_142_SBOX32                # Z added by devel/scanprov
+case_143_SBOX32                # Z added by devel/scanprov
+case_144_SBOX32                # Z added by devel/scanprov
+case_145_SBOX32                # Z added by devel/scanprov
+case_146_SBOX32                # Z added by devel/scanprov
+case_147_SBOX32                # Z added by devel/scanprov
+case_148_SBOX32                # Z added by devel/scanprov
+case_149_SBOX32                # Z added by devel/scanprov
+case_14_SBOX32                 # Z added by devel/scanprov
+case_150_SBOX32                # Z added by devel/scanprov
+case_151_SBOX32                # Z added by devel/scanprov
+case_152_SBOX32                # Z added by devel/scanprov
+case_153_SBOX32                # Z added by devel/scanprov
+case_154_SBOX32                # Z added by devel/scanprov
+case_155_SBOX32                # Z added by devel/scanprov
+case_156_SBOX32                # Z added by devel/scanprov
+case_157_SBOX32                # Z added by devel/scanprov
+case_158_SBOX32                # Z added by devel/scanprov
+case_159_SBOX32                # Z added by devel/scanprov
+case_15_SBOX32                 # Z added by devel/scanprov
+case_160_SBOX32                # Z added by devel/scanprov
+case_161_SBOX32                # Z added by devel/scanprov
+case_162_SBOX32                # Z added by devel/scanprov
+case_163_SBOX32                # Z added by devel/scanprov
+case_164_SBOX32                # Z added by devel/scanprov
+case_165_SBOX32                # Z added by devel/scanprov
+case_166_SBOX32                # Z added by devel/scanprov
+case_167_SBOX32                # Z added by devel/scanprov
+case_168_SBOX32                # Z added by devel/scanprov
+case_169_SBOX32                # Z added by devel/scanprov
+case_16_SBOX32                 # Z added by devel/scanprov
+case_170_SBOX32                # Z added by devel/scanprov
+case_171_SBOX32                # Z added by devel/scanprov
+case_172_SBOX32                # Z added by devel/scanprov
+case_173_SBOX32                # Z added by devel/scanprov
+case_174_SBOX32                # Z added by devel/scanprov
+case_175_SBOX32                # Z added by devel/scanprov
+case_176_SBOX32                # Z added by devel/scanprov
+case_177_SBOX32                # Z added by devel/scanprov
+case_178_SBOX32                # Z added by devel/scanprov
+case_179_SBOX32                # Z added by devel/scanprov
+case_17_SBOX32                 # Z added by devel/scanprov
+case_180_SBOX32                # Z added by devel/scanprov
+case_181_SBOX32                # Z added by devel/scanprov
+case_182_SBOX32                # Z added by devel/scanprov
+case_183_SBOX32                # Z added by devel/scanprov
+case_184_SBOX32                # Z added by devel/scanprov
+case_185_SBOX32                # Z added by devel/scanprov
+case_186_SBOX32                # Z added by devel/scanprov
+case_187_SBOX32                # Z added by devel/scanprov
+case_188_SBOX32                # Z added by devel/scanprov
+case_189_SBOX32                # Z added by devel/scanprov
+case_18_SBOX32                 # Z added by devel/scanprov
+case_190_SBOX32                # Z added by devel/scanprov
+case_191_SBOX32                # Z added by devel/scanprov
+case_192_SBOX32                # Z added by devel/scanprov
+case_193_SBOX32                # Z added by devel/scanprov
+case_194_SBOX32                # Z added by devel/scanprov
+case_195_SBOX32                # Z added by devel/scanprov
+case_196_SBOX32                # Z added by devel/scanprov
+case_197_SBOX32                # Z added by devel/scanprov
+case_198_SBOX32                # Z added by devel/scanprov
+case_199_SBOX32                # Z added by devel/scanprov
+case_19_SBOX32                 # Z added by devel/scanprov
+case_1_SBOX32                  # Z added by devel/scanprov
+case_200_SBOX32                # Z added by devel/scanprov
+case_201_SBOX32                # Z added by devel/scanprov
+case_202_SBOX32                # Z added by devel/scanprov
+case_203_SBOX32                # Z added by devel/scanprov
+case_204_SBOX32                # Z added by devel/scanprov
+case_205_SBOX32                # Z added by devel/scanprov
+case_206_SBOX32                # Z added by devel/scanprov
+case_207_SBOX32                # Z added by devel/scanprov
+case_208_SBOX32                # Z added by devel/scanprov
+case_209_SBOX32                # Z added by devel/scanprov
+case_20_SBOX32                 # Z added by devel/scanprov
+case_210_SBOX32                # Z added by devel/scanprov
+case_211_SBOX32                # Z added by devel/scanprov
+case_212_SBOX32                # Z added by devel/scanprov
+case_213_SBOX32                # Z added by devel/scanprov
+case_214_SBOX32                # Z added by devel/scanprov
+case_215_SBOX32                # Z added by devel/scanprov
+case_216_SBOX32                # Z added by devel/scanprov
+case_217_SBOX32                # Z added by devel/scanprov
+case_218_SBOX32                # Z added by devel/scanprov
+case_219_SBOX32                # Z added by devel/scanprov
+case_21_SBOX32                 # Z added by devel/scanprov
+case_220_SBOX32                # Z added by devel/scanprov
+case_221_SBOX32                # Z added by devel/scanprov
+case_222_SBOX32                # Z added by devel/scanprov
+case_223_SBOX32                # Z added by devel/scanprov
+case_224_SBOX32                # Z added by devel/scanprov
+case_225_SBOX32                # Z added by devel/scanprov
+case_226_SBOX32                # Z added by devel/scanprov
+case_227_SBOX32                # Z added by devel/scanprov
+case_228_SBOX32                # Z added by devel/scanprov
+case_229_SBOX32                # Z added by devel/scanprov
+case_22_SBOX32                 # Z added by devel/scanprov
+case_230_SBOX32                # Z added by devel/scanprov
+case_231_SBOX32                # Z added by devel/scanprov
+case_232_SBOX32                # Z added by devel/scanprov
+case_233_SBOX32                # Z added by devel/scanprov
+case_234_SBOX32                # Z added by devel/scanprov
+case_235_SBOX32                # Z added by devel/scanprov
+case_236_SBOX32                # Z added by devel/scanprov
+case_237_SBOX32                # Z added by devel/scanprov
+case_238_SBOX32                # Z added by devel/scanprov
+case_239_SBOX32                # Z added by devel/scanprov
+case_23_SBOX32                 # Z added by devel/scanprov
+case_240_SBOX32                # Z added by devel/scanprov
+case_241_SBOX32                # Z added by devel/scanprov
+case_242_SBOX32                # Z added by devel/scanprov
+case_243_SBOX32                # Z added by devel/scanprov
+case_244_SBOX32                # Z added by devel/scanprov
+case_245_SBOX32                # Z added by devel/scanprov
+case_246_SBOX32                # Z added by devel/scanprov
+case_247_SBOX32                # Z added by devel/scanprov
+case_248_SBOX32                # Z added by devel/scanprov
+case_249_SBOX32                # Z added by devel/scanprov
+case_24_SBOX32                 # Z added by devel/scanprov
+case_250_SBOX32                # Z added by devel/scanprov
+case_251_SBOX32                # Z added by devel/scanprov
+case_252_SBOX32                # Z added by devel/scanprov
+case_253_SBOX32                # Z added by devel/scanprov
+case_254_SBOX32                # Z added by devel/scanprov
+case_255_SBOX32                # Z added by devel/scanprov
+case_256_SBOX32                # Z added by devel/scanprov
+case_25_SBOX32                 # Z added by devel/scanprov
+case_26_SBOX32                 # Z added by devel/scanprov
+case_27_SBOX32                 # Z added by devel/scanprov
+case_28_SBOX32                 # Z added by devel/scanprov
+case_29_SBOX32                 # Z added by devel/scanprov
+case_2_SBOX32                  # Z added by devel/scanprov
+case_30_SBOX32                 # Z added by devel/scanprov
+case_31_SBOX32                 # Z added by devel/scanprov
+case_32_SBOX32                 # Z added by devel/scanprov
+case_33_SBOX32                 # Z added by devel/scanprov
+case_34_SBOX32                 # Z added by devel/scanprov
+case_35_SBOX32                 # Z added by devel/scanprov
+case_36_SBOX32                 # Z added by devel/scanprov
+case_37_SBOX32                 # Z added by devel/scanprov
+case_38_SBOX32                 # Z added by devel/scanprov
+case_39_SBOX32                 # Z added by devel/scanprov
+case_3_SBOX32                  # Z added by devel/scanprov
+case_40_SBOX32                 # Z added by devel/scanprov
+case_41_SBOX32                 # Z added by devel/scanprov
+case_42_SBOX32                 # Z added by devel/scanprov
+case_43_SBOX32                 # Z added by devel/scanprov
+case_44_SBOX32                 # Z added by devel/scanprov
+case_45_SBOX32                 # Z added by devel/scanprov
+case_46_SBOX32                 # Z added by devel/scanprov
+case_47_SBOX32                 # Z added by devel/scanprov
+case_48_SBOX32                 # Z added by devel/scanprov
+case_49_SBOX32                 # Z added by devel/scanprov
+case_4_SBOX32                  # Z added by devel/scanprov
+case_50_SBOX32                 # Z added by devel/scanprov
+case_51_SBOX32                 # Z added by devel/scanprov
+case_52_SBOX32                 # Z added by devel/scanprov
+case_53_SBOX32                 # Z added by devel/scanprov
+case_54_SBOX32                 # Z added by devel/scanprov
+case_55_SBOX32                 # Z added by devel/scanprov
+case_56_SBOX32                 # Z added by devel/scanprov
+case_57_SBOX32                 # Z added by devel/scanprov
+case_58_SBOX32                 # Z added by devel/scanprov
+case_59_SBOX32                 # Z added by devel/scanprov
+case_5_SBOX32                  # Z added by devel/scanprov
+case_60_SBOX32                 # Z added by devel/scanprov
+case_61_SBOX32                 # Z added by devel/scanprov
+case_62_SBOX32                 # Z added by devel/scanprov
+case_63_SBOX32                 # Z added by devel/scanprov
+case_64_SBOX32                 # Z added by devel/scanprov
+case_65_SBOX32                 # Z added by devel/scanprov
+case_66_SBOX32                 # Z added by devel/scanprov
+case_67_SBOX32                 # Z added by devel/scanprov
+case_68_SBOX32                 # Z added by devel/scanprov
+case_69_SBOX32                 # Z added by devel/scanprov
+case_6_SBOX32                  # Z added by devel/scanprov
+case_70_SBOX32                 # Z added by devel/scanprov
+case_71_SBOX32                 # Z added by devel/scanprov
+case_72_SBOX32                 # Z added by devel/scanprov
+case_73_SBOX32                 # Z added by devel/scanprov
+case_74_SBOX32                 # Z added by devel/scanprov
+case_75_SBOX32                 # Z added by devel/scanprov
+case_76_SBOX32                 # Z added by devel/scanprov
+case_77_SBOX32                 # Z added by devel/scanprov
+case_78_SBOX32                 # Z added by devel/scanprov
+case_79_SBOX32                 # Z added by devel/scanprov
+case_7_SBOX32                  # Z added by devel/scanprov
+case_80_SBOX32                 # Z added by devel/scanprov
+case_81_SBOX32                 # Z added by devel/scanprov
+case_82_SBOX32                 # Z added by devel/scanprov
+case_83_SBOX32                 # Z added by devel/scanprov
+case_84_SBOX32                 # Z added by devel/scanprov
+case_85_SBOX32                 # Z added by devel/scanprov
+case_86_SBOX32                 # Z added by devel/scanprov
+case_87_SBOX32                 # Z added by devel/scanprov
+case_88_SBOX32                 # Z added by devel/scanprov
+case_89_SBOX32                 # Z added by devel/scanprov
+case_8_SBOX32                  # Z added by devel/scanprov
+case_90_SBOX32                 # Z added by devel/scanprov
+case_91_SBOX32                 # Z added by devel/scanprov
+case_92_SBOX32                 # Z added by devel/scanprov
+case_93_SBOX32                 # Z added by devel/scanprov
+case_94_SBOX32                 # Z added by devel/scanprov
+case_95_SBOX32                 # Z added by devel/scanprov
+case_96_SBOX32                 # Z added by devel/scanprov
+case_97_SBOX32                 # Z added by devel/scanprov
+case_98_SBOX32                 # Z added by devel/scanprov
+case_99_SBOX32                 # Z added by devel/scanprov
+case_9_SBOX32                  # Z added by devel/scanprov
+DEBUG_SBOX32_HASH              # Z added by devel/scanprov
+DEBUG_STADTX_HASH              # Z added by devel/scanprov
+DEBUG_ZAPHOD32_HASH            # Z added by devel/scanprov
 is_utf8_invariant_string_loc   # U
+LVf_NEG_LEN                    # Z added by devel/scanprov
+LVf_NEG_OFF                    # Z added by devel/scanprov
+LVf_OUT_OF_RANGE               # Z added by devel/scanprov
 new_regcurly                   # F added by devel/scanprov
+NOTE3                          # Z added by devel/scanprov
+OPpKVSLICE                     # Z added by devel/scanprov
+PERL_EBCDIC_TABLES_H           # Z added by devel/scanprov
+PERL_HANDY_H                   # Z added by devel/scanprov
+PERL_HASH_FUNC_STADTX          # Z added by devel/scanprov
+PERL_HASH_FUNC_ZAPHOD32        # Z added by devel/scanprov
+PERL_HASH_SEED_STATE           # Z added by devel/scanprov
+PERL_HASH_STATE_BYTES          # Z added by devel/scanprov
+PERL_HASH_USE_SBOX32_ALSO      # Z added by devel/scanprov
+PERL_HASH_WITH_STATE           # Z added by devel/scanprov
+PERLIO_H                       # Z added by devel/scanprov
+PERLIOL_H                      # Z added by devel/scanprov
+PERL_MALLOC_CTL_H              # Z added by devel/scanprov
+PERL_REENTR_H                  # Z added by devel/scanprov
+PERL_REGCHARCLASS_H            # Z added by devel/scanprov
+PERL_SEEN_HV_MACRO_H           # Z added by devel/scanprov
+PERL_TIME64_CONFIG_H           # Z added by devel/scanprov
+PERL_TIME64_H                  # Z added by devel/scanprov
+PERL_UNICODE_CONSTANTS_H       # Z added by devel/scanprov
+PERL_UTF8_H                    # Z added by devel/scanprov
+PERL_XSUB_H                    # Z added by devel/scanprov
+ROTR32                         # Z added by devel/scanprov
+ROTR64                         # Z added by devel/scanprov
+ROTR_UV                        # Z added by devel/scanprov
+SBOX32_CHURN_ROUNDS            # Z added by devel/scanprov
+SBOX32_MAX_LEN                 # Z added by devel/scanprov
+SBOX32_MIX3                    # Z added by devel/scanprov
+SBOX32_MIX4                    # Z added by devel/scanprov
+SBOX32_SCRAMBLE32              # Z added by devel/scanprov
+SBOX32_SKIP_MASK               # Z added by devel/scanprov
+SBOX32_STATE_BITS              # Z added by devel/scanprov
+SBOX32_STATE_BYTES             # Z added by devel/scanprov
+SBOX32_STATE_WORDS             # Z added by devel/scanprov
+SBOX32_STATIC_INLINE           # Z added by devel/scanprov
+SBOX32_WARN2                   # Z added by devel/scanprov
+SBOX32_WARN3                   # Z added by devel/scanprov
+SBOX32_WARN4                   # Z added by devel/scanprov
+SBOX32_WARN5                   # Z added by devel/scanprov
+SBOX32_WARN6                   # Z added by devel/scanprov
+SIPHASH_SEED_STATE             # Z added by devel/scanprov
+STADTX_HASH_H                  # Z added by devel/scanprov
+STADTX_K0_U64                  # Z added by devel/scanprov
+STADTX_K1_U64                  # Z added by devel/scanprov
+STADTX_K2_U32                  # Z added by devel/scanprov
+STADTX_K2_U64                  # Z added by devel/scanprov
+STADTX_K3_U32                  # Z added by devel/scanprov
+STADTX_K3_U64                  # Z added by devel/scanprov
+STADTX_K4_U32                  # Z added by devel/scanprov
+STADTX_K5_U32                  # Z added by devel/scanprov
+STADTX_SCRAMBLE64              # Z added by devel/scanprov
+STADTX_STATIC_INLINE           # Z added by devel/scanprov
+STATIC_ASSERT_DECL             # Z added by devel/scanprov
+STRLEN                         # Z added by devel/scanprov
+U16                            # Z added by devel/scanprov
+U32                            # Z added by devel/scanprov
+U8                             # Z added by devel/scanprov
+XORSHIFT128_set                # Z added by devel/scanprov
+XORSHIFT96_set                 # Z added by devel/scanprov
+ZAPHOD32_FINALIZE              # Z added by devel/scanprov
+ZAPHOD32_MIX                   # Z added by devel/scanprov
+ZAPHOD32_SCRAMBLE32            # Z added by devel/scanprov
+ZAPHOD32_STATIC_INLINE         # Z added by devel/scanprov
+ZAPHOD32_WARN2                 # Z added by devel/scanprov
+ZAPHOD32_WARN3                 # Z added by devel/scanprov
+ZAPHOD32_WARN4                 # Z added by devel/scanprov
+ZAPHOD32_WARN5                 # Z added by devel/scanprov
+ZAPHOD32_WARN6                 # Z added by devel/scanprov
index 2ba94f4..ee9e03b 100644 (file)
@@ -1,7 +1,17 @@
 5.027002
-Perl_setlocale                 # U
-UTF8_DISALLOW_PERL_EXTENDED    # E
-UTF8_WARN_PERL_EXTENDED        # E
+EXTEND_HWM_SET                 # Z added by devel/scanprov
+EXTEND_SKIP                    # Z added by devel/scanprov
 hv_free_entries                # F added by devel/scanprov
+JE_OLD_STACK_HWM_restore       # Z added by devel/scanprov
+JE_OLD_STACK_HWM_save          # Z added by devel/scanprov
+JE_OLD_STACK_HWM_zero          # Z added by devel/scanprov
+Perl_setlocale                 # U
 print_bytes_for_locale         # F added by devel/scanprov
+PUSHSTACK_INIT_HWM             # Z added by devel/scanprov
 setlocale_debug_string         # F added by devel/scanprov
+UNICODE_DISALLOW_PERL_EXTENDED # Z added by devel/scanprov
+UNICODE_IS_PERL_EXTENDED       # Z added by devel/scanprov
+UNICODE_WARN_PERL_EXTENDED     # Z added by devel/scanprov
+UTF8_DISALLOW_PERL_EXTENDED    # E
+UTF8_GOT_PERL_EXTENDED         # Z added by devel/scanprov
+UTF8_WARN_PERL_EXTENDED        # E
index b74f1c2..734d284 100644 (file)
@@ -1,5 +1,31 @@
 5.027003
 cv_get_call_checker_flags      # U
+HAS_POSIX_2008_LOCALE          # Z added by devel/scanprov
+hv_pushkv                      # F added by devel/scanprov
+OPpASSIGN_TRUEBOOL             # Z added by devel/scanprov
+OPpINDEX_BOOLNEG               # Z added by devel/scanprov
+OPpPADHV_ISKEYS                # Z added by devel/scanprov
+OPpRV2HV_ISKEYS                # Z added by devel/scanprov
+PL_sv_immortals                # Z added by devel/scanprov
 PL_sv_zero                     # E
+RXp_ENGINE                     # Z added by devel/scanprov
+RXp_GOFS                       # Z added by devel/scanprov
+RXp_HAS_CUTGROUP               # Z added by devel/scanprov
+RXp_ISTAINTED                  # Z added by devel/scanprov
+RXp_MATCH_COPY_FREE            # Z added by devel/scanprov
+RXp_MATCH_TAINTED_off          # Z added by devel/scanprov
+RXp_MATCH_UTF8_off             # Z added by devel/scanprov
+RXp_MATCH_UTF8_on              # Z added by devel/scanprov
+RXp_MATCH_UTF8_set             # Z added by devel/scanprov
+RXp_MINLEN                     # Z added by devel/scanprov
+RXp_MINLENRET                  # Z added by devel/scanprov
+RXp_NPARENS                    # Z added by devel/scanprov
+RXp_OFFS                       # Z added by devel/scanprov
+RXp_SAVED_COPY                 # Z added by devel/scanprov
+RXp_SUBBEG                     # Z added by devel/scanprov
+RXp_SUBOFFSET                  # Z added by devel/scanprov
+RXp_ZERO_LEN                   # Z added by devel/scanprov
+SvIMMORTAL_INTERP              # Z added by devel/scanprov
+SvIMMORTAL_TRUE                # Z added by devel/scanprov
 sv_string_from_errnum          # U
-hv_pushkv                      # F added by devel/scanprov
+USE_POSIX_2008_LOCALE          # Z added by devel/scanprov
index e04e1f7..14b892a 100644 (file)
@@ -1,6 +1,19 @@
 5.027004
+HAS_FCHMODAT                   # K added by devel/scanprov
+HAS_LINKAT                     # K added by devel/scanprov
+HAS_OPENAT                     # K added by devel/scanprov
+HAS_RENAMEAT                   # K added by devel/scanprov
+HAS_UNLINKAT                   # K added by devel/scanprov
+HINT_SORT_UNSTABLE             # Z added by devel/scanprov
 mg_freeext                     # U
+OPpSORT_UNSTABLE               # Z added by devel/scanprov
+perl_assert_ptr                # Z added by devel/scanprov
+Perl_internal_drand48          # Z added by devel/scanprov
 Perl_langinfo                  # U
-sv_rvunweaken                  # U
-Perl_my_mkstemp                # F added by devel/scanprov
+PERL_LANGINFO_H                # Z added by devel/scanprov
+Perl_my_mkstemp                # Z added by devel/scanprov
+PL_internal_random_state       # Z added by devel/scanprov
+PL_langinfo_buf                # Z added by devel/scanprov
+PL_langinfo_bufsize            # Z added by devel/scanprov
 save_to_buffer                 # F added by devel/scanprov
+sv_rvunweaken                  # U
index e36214c..b11009f 100644 (file)
@@ -1 +1,3 @@
 5.027005
+HAS_MEMRCHR                    # K added by devel/scanprov
+isGV_or_RVCV                   # Z added by devel/scanprov
index 74a7516..a235c47 100644 (file)
@@ -1,10 +1,53 @@
 5.027006
-my_strnlen                     # U
-wrap_keyword_plugin            # U
+DEFINE_INC_MACROS              # Z added by devel/scanprov
+HAS_MBRLEN                     # K added by devel/scanprov
+HAS_MBRTOWC                    # K added by devel/scanprov
+HAS_NANOSLEEP                  # K added by devel/scanprov
+HAS_STRNLEN                    # K added by devel/scanprov
+HAS_STRTOLD_L                  # K added by devel/scanprov
+HAS_THREAD_SAFE_NL_LANGINFO_L  # K added by devel/scanprov
+INCPUSH_APPLLIB_EXP            # Z added by devel/scanprov
+INCPUSH_APPLLIB_OLD_EXP        # Z added by devel/scanprov
+INCPUSH_ARCHLIB_EXP            # Z added by devel/scanprov
+INCPUSH_PERL5LIB               # Z added by devel/scanprov
+INCPUSH_PERL_OTHERLIBDIRS      # Z added by devel/scanprov
+INCPUSH_PERL_OTHERLIBDIRS_ARCHONLY # Z added by devel/scanprov
+INCPUSH_PERL_VENDORARCH_EXP    # Z added by devel/scanprov
+INCPUSH_PERL_VENDORLIB_EXP     # Z added by devel/scanprov
+INCPUSH_PERL_VENDORLIB_STEM    # Z added by devel/scanprov
+INCPUSH_PRIVLIB_EXP            # Z added by devel/scanprov
+INCPUSH_SITEARCH_EXP           # Z added by devel/scanprov
+INCPUSH_SITELIB_EXP            # Z added by devel/scanprov
+INCPUSH_SITELIB_STEM           # Z added by devel/scanprov
+I_WCHAR                        # K added by devel/scanprov
+KEYWORD_PLUGIN_MUTEX_INIT      # Z added by devel/scanprov
+KEYWORD_PLUGIN_MUTEX_LOCK      # Z added by devel/scanprov
+KEYWORD_PLUGIN_MUTEX_TERM      # Z added by devel/scanprov
+KEYWORD_PLUGIN_MUTEX_UNLOCK    # Z added by devel/scanprov
+MAX_UNICODE_UTF8               # Z added by devel/scanprov
+memBEGINPs                     # Z added by devel/scanprov
+memBEGINs                      # Z added by devel/scanprov
+memENDPs                       # Z added by devel/scanprov
+memENDs                        # Z added by devel/scanprov
 multiconcat_stringify          # F added by devel/scanprov
-my_memrchr                     # F added by devel/scanprov
+my_memrchr                     # Z added by devel/scanprov
 my_nl_langinfo                 # F added by devel/scanprov
+my_strnlen                     # U
+OPpMULTICONCAT_APPEND          # Z added by devel/scanprov
+OPpMULTICONCAT_FAKE            # Z added by devel/scanprov
+OPpMULTICONCAT_STRINGIFY       # Z added by devel/scanprov
 optimize_op                    # F added by devel/scanprov
 optimize_optree                # F added by devel/scanprov
+PERL_MULTICONCAT_HEADER_SIZE   # Z added by devel/scanprov
+PERL_MULTICONCAT_IX_LENGTHS    # Z added by devel/scanprov
+PERL_MULTICONCAT_IX_NARGS      # Z added by devel/scanprov
+PERL_MULTICONCAT_IX_PLAIN_LEN  # Z added by devel/scanprov
+PERL_MULTICONCAT_IX_PLAIN_PV   # Z added by devel/scanprov
+PERL_MULTICONCAT_IX_UTF8_LEN   # Z added by devel/scanprov
+PERL_MULTICONCAT_IX_UTF8_PV    # Z added by devel/scanprov
+PERL_MULTICONCAT_MAXARG        # Z added by devel/scanprov
+PL_numeric_underlying          # Z added by devel/scanprov
 set_numeric_underlying         # F added by devel/scanprov
+strBEGINs                      # Z added by devel/scanprov
 win32_setlocale                # F added by devel/scanprov
+wrap_keyword_plugin            # U
index b194b05..e4086e1 100644 (file)
@@ -1,4 +1,21 @@
 5.027007
-WARN_SHADOW                    # E
+CLANG_DIAG_IGNORE_DECL         # Z added by devel/scanprov
+CLANG_DIAG_IGNORE_STMT         # Z added by devel/scanprov
+CLANG_DIAG_RESTORE_DECL        # Z added by devel/scanprov
+CLANG_DIAG_RESTORE_STMT        # Z added by devel/scanprov
+FIRST_NON_ASCII_DECIMAL_DIGIT  # Z added by devel/scanprov
+GCC_DIAG_IGNORE_DECL           # Z added by devel/scanprov
+GCC_DIAG_IGNORE_STMT           # Z added by devel/scanprov
+GCC_DIAG_RESTORE_DECL          # Z added by devel/scanprov
+GCC_DIAG_RESTORE_STMT          # Z added by devel/scanprov
 is_utf8_non_invariant_string   # F added by devel/scanprov
+OPpCONCAT_NESTED               # Z added by devel/scanprov
+PERL_COUNT_MULTIPLIER          # Z added by devel/scanprov
+PERL_IS_SUBWORD_ADDR           # Z added by devel/scanprov
+PERL_VARIANTS_WORD_MASK        # Z added by devel/scanprov
+PERL_WORD_BOUNDARY_MASK        # Z added by devel/scanprov
+PERL_WORDSIZE                  # Z added by devel/scanprov
+UINT16_C                       # Z added by devel/scanprov
+UINT32_C                       # Z added by devel/scanprov
 variant_under_utf8_count       # F added by devel/scanprov
+WARN_SHADOW                    # E
index e4cea51..a8ff9f7 100644 (file)
@@ -1,33 +1,53 @@
 5.027008
-cx_popgiven                    # U
-cx_popwhen                     # U
-cx_pushgiven                   # U
-cx_pushwhen                    # U
-newWHENOP                      # U
-WARN_EXPERIMENTAL__SCRIPT_RUN  # E
+blk_givwhen                    # Z added by devel/scanprov
 category_name                  # F added by devel/scanprov
+CXp_FOR_DEF                    # Z added by devel/scanprov
+cx_popgiven                    # F added by devel/scanprov
+cx_popwhen                     # F added by devel/scanprov
+cx_pushgiven                   # F added by devel/scanprov
+cx_pushwhen                    # F added by devel/scanprov
+CXt_GIVEN                      # Z added by devel/scanprov
+CXt_WHEN                       # Z added by devel/scanprov
+DEBUG_M                        # Z added by devel/scanprov
+DEBUG_M_FLAG                   # Z added by devel/scanprov
+DEBUG_M_TEST                   # Z added by devel/scanprov
 destroy_matcher                # F added by devel/scanprov
 dopoptogivenfor                # F added by devel/scanprov
 dopoptowhen                    # F added by devel/scanprov
 do_smartmatch                  # F added by devel/scanprov
+FEATURE_BUNDLE_527             # Z added by devel/scanprov
+HAS_ACCEPT4                    # K added by devel/scanprov
+HAS_DUP3                       # K added by devel/scanprov
+HAS_MKOSTEMP                   # K added by devel/scanprov
+HAS_PIPE2                      # K added by devel/scanprov
+HAS_SCX_AUX_TABLES             # Z added by devel/scanprov
 isSCRIPT_RUN                   # F added by devel/scanprov
+KEY_break                      # Z added by devel/scanprov
+KEY_default                    # Z added by devel/scanprov
+KEY_when                       # Z added by devel/scanprov
 looks_like_bool                # F added by devel/scanprov
 make_matcher                   # F added by devel/scanprov
 matcher_matches_sv             # F added by devel/scanprov
 newGIVWHENOP                   # F added by devel/scanprov
+newWHENOP                      # U
+OPpITER_DEF                    # Z added by devel/scanprov
 PerlLIO_dup2_cloexec           # F added by devel/scanprov
 PerlLIO_dup_cloexec            # F added by devel/scanprov
 PerlLIO_open3_cloexec          # F added by devel/scanprov
 PerlLIO_open_cloexec           # F added by devel/scanprov
-Perl_my_mkostemp               # F added by devel/scanprov
+Perl_my_mkostemp               # Z added by devel/scanprov
 Perl_my_mkstemp_cloexec        # F added by devel/scanprov
 PerlProc_pipe_cloexec          # F added by devel/scanprov
 PerlSock_accept_cloexec        # F added by devel/scanprov
 PerlSock_socket_cloexec        # F added by devel/scanprov
 PerlSock_socketpair_cloexec    # F added by devel/scanprov
+PL_SCX_invlist                 # Z added by devel/scanprov
 ref_array_or_hash              # F added by devel/scanprov
 setfd_cloexec                  # F added by devel/scanprov
 setfd_cloexec_for_nonsysfd     # F added by devel/scanprov
 setfd_cloexec_or_inhexec_by_sysfdness # F added by devel/scanprov
 setfd_inhexec                  # F added by devel/scanprov
 setfd_inhexec_for_sysfd        # F added by devel/scanprov
+SRCLOSE                        # Z added by devel/scanprov
+SROPEN                         # Z added by devel/scanprov
+WARN_EXPERIMENTAL__SCRIPT_RUN  # E
index a321803..660810b 100644 (file)
@@ -1,20 +1,47 @@
 5.027009
-PERL_MAGIC_nonelem             # E
-switch_to_global_locale        # U
-sync_locale                    # E (Perl_sync_locale)
-thread_locale_init             # U
-thread_locale_term             # U
-utf8n_to_uvchr_msgs            # U
-uvchr_to_utf8_flags_msgs       # U
-WARN_EXPERIMENTAL__ALPHA_ASSERTIONS # E
+ANYOFM                         # Z added by devel/scanprov
 av_nonelem                     # F added by devel/scanprov
+dTHX_DEBUGGING                 # Z added by devel/scanprov
 emulate_setlocale              # F added by devel/scanprov
+EXACTFAA                       # Z added by devel/scanprov
+EXACTFAA_NO_TRIE               # Z added by devel/scanprov
 find_next_masked               # F added by devel/scanprov
 find_span_end                  # F added by devel/scanprov
 find_span_end_mask             # F added by devel/scanprov
 get_ANYOFM_contents            # F added by devel/scanprov
+LC_NUMERIC_LOCK                # Z added by devel/scanprov
+LC_NUMERIC_UNLOCK              # Z added by devel/scanprov
 magic_setnonelem               # F added by devel/scanprov
 new_msg_hv                     # F added by devel/scanprov
+PERL_MAGIC_nonelem             # E
+PL_curlocales                  # Z added by devel/scanprov
+PL_lc_numeric_mutex_depth      # Z added by devel/scanprov
+PL_locale_utf8ness             # Z added by devel/scanprov
+PL_numeric_underlying_is_standard # Z added by devel/scanprov
+PL_setlocale_buf               # Z added by devel/scanprov
+PL_setlocale_bufsize           # Z added by devel/scanprov
+PL_underlying_numeric_obj      # Z added by devel/scanprov
+PL_vtbl_nonelem                # Z added by devel/scanprov
 restore_switched_locale        # F added by devel/scanprov
+STORE_LC_NUMERIC_SET_STANDARD  # Z added by devel/scanprov
+STORE_NUMERIC_SET_STANDARD     # Z added by devel/scanprov
 switch_category_locale_to_template # F added by devel/scanprov
+switch_to_global_locale        # U
+sync_locale                    # E (Perl_sync_locale)
+thread_locale_init             # U
+thread_locale_term             # U
+UNICODE_GOT_NONCHAR            # Z added by devel/scanprov
+UNICODE_GOT_PERL_EXTENDED      # Z added by devel/scanprov
+UNICODE_GOT_SUPER              # Z added by devel/scanprov
+UNICODE_GOT_SURROGATE          # Z added by devel/scanprov
+USE_LOCALE_ADDRESS             # Z added by devel/scanprov
+USE_LOCALE_IDENTIFICATION      # Z added by devel/scanprov
+USE_LOCALE_MEASUREMENT         # Z added by devel/scanprov
+USE_LOCALE_PAPER               # Z added by devel/scanprov
+USE_LOCALE_TELEPHONE           # Z added by devel/scanprov
+UTF8_ALLOW_FE_FF               # Z added by devel/scanprov
+utf8n_to_uvchr_msgs            # U
+uvchr_to_utf8_flags_msgs       # U
+uvoffuni_to_utf8_flags         # Z added by devel/scanprov
 uvoffuni_to_utf8_flags_msgs    # F added by devel/scanprov
+WARN_EXPERIMENTAL__ALPHA_ASSERTIONS # E
index 8f82fa2..866b995 100644 (file)
@@ -1,2 +1,64 @@
 5.027010
+ABDAY_1                        # Z added by devel/scanprov
+ABDAY_2                        # Z added by devel/scanprov
+ABDAY_3                        # Z added by devel/scanprov
+ABDAY_4                        # Z added by devel/scanprov
+ABDAY_5                        # Z added by devel/scanprov
+ABDAY_6                        # Z added by devel/scanprov
+ABDAY_7                        # Z added by devel/scanprov
+ABMON_1                        # Z added by devel/scanprov
+ABMON_10                       # Z added by devel/scanprov
+ABMON_11                       # Z added by devel/scanprov
+ABMON_12                       # Z added by devel/scanprov
+ABMON_2                        # Z added by devel/scanprov
+ABMON_3                        # Z added by devel/scanprov
+ABMON_4                        # Z added by devel/scanprov
+ABMON_5                        # Z added by devel/scanprov
+ABMON_6                        # Z added by devel/scanprov
+ABMON_7                        # Z added by devel/scanprov
+ABMON_8                        # Z added by devel/scanprov
+ABMON_9                        # Z added by devel/scanprov
+ALT_DIGITS                     # Z added by devel/scanprov
+AM_STR                         # Z added by devel/scanprov
+CODESET                        # Z added by devel/scanprov
+CRNCYSTR                       # Z added by devel/scanprov
+DAY_1                          # Z added by devel/scanprov
+DAY_2                          # Z added by devel/scanprov
+DAY_3                          # Z added by devel/scanprov
+DAY_4                          # Z added by devel/scanprov
+DAY_5                          # Z added by devel/scanprov
+DAY_6                          # Z added by devel/scanprov
+DAY_7                          # Z added by devel/scanprov
+D_FMT                          # Z added by devel/scanprov
+D_T_FMT                        # Z added by devel/scanprov
+ERA                            # Z added by devel/scanprov
+ERA_D_FMT                      # Z added by devel/scanprov
+ERA_D_T_FMT                    # Z added by devel/scanprov
+ERA_T_FMT                      # Z added by devel/scanprov
+FATAL_ABOVE_FF_MSG             # Z added by devel/scanprov
 init_named_cv                  # F added by devel/scanprov
+LOCALE_LOCK_V                  # Z added by devel/scanprov
+LOCALE_UNLOCK_V                # Z added by devel/scanprov
+MEM_WRAP_CHECK_s               # Z added by devel/scanprov
+MON_1                          # Z added by devel/scanprov
+MON_10                         # Z added by devel/scanprov
+MON_11                         # Z added by devel/scanprov
+MON_12                         # Z added by devel/scanprov
+MON_2                          # Z added by devel/scanprov
+MON_3                          # Z added by devel/scanprov
+MON_4                          # Z added by devel/scanprov
+MON_5                          # Z added by devel/scanprov
+MON_6                          # Z added by devel/scanprov
+MON_7                          # Z added by devel/scanprov
+MON_8                          # Z added by devel/scanprov
+MON_9                          # Z added by devel/scanprov
+NOEXPR                         # Z added by devel/scanprov
+NOSTR                          # Z added by devel/scanprov
+PM_STR                         # Z added by devel/scanprov
+RADIXCHAR                      # Z added by devel/scanprov
+T_FMT                          # Z added by devel/scanprov
+T_FMT_AMPM                     # Z added by devel/scanprov
+THOUSEP                        # Z added by devel/scanprov
+TS_W32_BROKEN_LOCALECONV       # Z added by devel/scanprov
+YESEXPR                        # Z added by devel/scanprov
+YESSTR                         # Z added by devel/scanprov
index bc2d22a..f8cd9d3 100644 (file)
@@ -1,4 +1,16 @@
 5.027011
+HAS_CF_AUX_TABLES              # Z added by devel/scanprov
+HAS_DUPLOCALE                  # K added by devel/scanprov
+HAS_IVCF_AUX_TABLES            # Z added by devel/scanprov
+HAS_LC_AUX_TABLES              # Z added by devel/scanprov
+HAS_STRTOD_L                   # K added by devel/scanprov
+HAS_TC_AUX_TABLES              # Z added by devel/scanprov
+HAS_UC_AUX_TABLES              # Z added by devel/scanprov
 init_uniprops                  # F added by devel/scanprov
 _inverse_folds                 # F added by devel/scanprov
+MAX_UNI_KEYWORD_INDEX          # Z added by devel/scanprov
+MPH_BUCKETS                    # Z added by devel/scanprov
+MPH_RSHIFT                     # Z added by devel/scanprov
+MPH_VALt                       # Z added by devel/scanprov
 parse_uniprop_string           # F added by devel/scanprov
+PL_utf8_tosimplefold           # Z added by devel/scanprov
diff --git a/dist/Devel-PPPort/parts/base/5028002 b/dist/Devel-PPPort/parts/base/5028002
new file mode 100644 (file)
index 0000000..9d2f06d
--- /dev/null
@@ -0,0 +1 @@
+5.028002
diff --git a/dist/Devel-PPPort/parts/base/5028003 b/dist/Devel-PPPort/parts/base/5028003
new file mode 100644 (file)
index 0000000..f4b5772
--- /dev/null
@@ -0,0 +1 @@
+5.028003
index 4b504bb..3402710 100644 (file)
@@ -1,2 +1,5 @@
 5.029000
+my_atof2                       # Z added by devel/scanprov
 my_atof3                       # F added by devel/scanprov
+PL_E_FORMAT_PRECISION          # Z added by devel/scanprov
+PL_Posix_ptrs                  # Z added by devel/scanprov
index 5beea24..7504de2 100644 (file)
@@ -1,2 +1,16 @@
 5.029001
+is_HANGUL_ED_utf8_safe         # Z added by devel/scanprov
+N0                             # Z added by devel/scanprov
+N1                             # Z added by devel/scanprov
+N10                            # Z added by devel/scanprov
+N11                            # Z added by devel/scanprov
+N2                             # Z added by devel/scanprov
+N3                             # Z added by devel/scanprov
+N4                             # Z added by devel/scanprov
+N5                             # Z added by devel/scanprov
+N6                             # Z added by devel/scanprov
+N7                             # Z added by devel/scanprov
+N8                             # Z added by devel/scanprov
+N9                             # Z added by devel/scanprov
+NUM_CLASSES                    # Z added by devel/scanprov
 _utf8n_to_uvchr_msgs_helper    # F added by devel/scanprov
index 53a1395..1548bf7 100644 (file)
@@ -1,3 +1,46 @@
 5.029002
+GCB_Maybe_Emoji_NonBreak       # Z added by devel/scanprov
 initialize_invlist_guts        # F added by devel/scanprov
 is_invlist                     # F added by devel/scanprov
+MAX_LEGAL_CP                   # Z added by devel/scanprov
+UNI_AHEX                       # Z added by devel/scanprov
+UNI_ALNUM                      # Z added by devel/scanprov
+UNI_ALPHA                      # Z added by devel/scanprov
+UNI_ALPHABETIC                 # Z added by devel/scanprov
+UNI_ASCIIHEXDIGIT              # Z added by devel/scanprov
+UNI_BASICLATIN                 # Z added by devel/scanprov
+UNI_BLANK                      # Z added by devel/scanprov
+UNI_CC                         # Z added by devel/scanprov
+UNI_CNTRL                      # Z added by devel/scanprov
+UNI_CONTROL                    # Z added by devel/scanprov
+UNI_DECIMALNUMBER              # Z added by devel/scanprov
+UNI_DIGIT                      # Z added by devel/scanprov
+UNI_GRAPH                      # Z added by devel/scanprov
+UNI_HEX                        # Z added by devel/scanprov
+UNI_HEXDIGIT                   # Z added by devel/scanprov
+UNI_HORIZSPACE                 # Z added by devel/scanprov
+UNI_HYPHEN                     # Z added by devel/scanprov
+UNI_L                          # Z added by devel/scanprov
+UNI_L_AMP                      # Z added by devel/scanprov
+UNI_LB__SG                     # Z added by devel/scanprov
+UNI_LC                         # Z added by devel/scanprov
+UNI_LL                         # Z added by devel/scanprov
+UNI_LOWER                      # Z added by devel/scanprov
+UNI_LOWERCASE                  # Z added by devel/scanprov
+UNI_LT                         # Z added by devel/scanprov
+UNI_LU                         # Z added by devel/scanprov
+UNI_ND                         # Z added by devel/scanprov
+UNI_PERLSPACE                  # Z added by devel/scanprov
+UNI_PERLWORD                   # Z added by devel/scanprov
+UNI_PRINT                      # Z added by devel/scanprov
+UNI_SPACE                      # Z added by devel/scanprov
+UNI_SPACEPERL                  # Z added by devel/scanprov
+UNI_TITLECASE                  # Z added by devel/scanprov
+UNI_TITLECASELETTER            # Z added by devel/scanprov
+UNI_UPPER                      # Z added by devel/scanprov
+UNI_UPPERCASE                  # Z added by devel/scanprov
+UNI_WHITESPACE                 # Z added by devel/scanprov
+UNI_WORD                       # Z added by devel/scanprov
+UNI_WSPACE                     # Z added by devel/scanprov
+UNI_XDIGIT                     # Z added by devel/scanprov
+UNI_XPERLSPACE                 # Z added by devel/scanprov
index f426ffc..2a6fbd5 100644 (file)
@@ -1 +1,2 @@
 5.029003
+Ptrdiff_t                      # Z added by devel/scanprov
index d1fa1e8..dc32703 100644 (file)
@@ -1,3 +1,10 @@
 5.029004
+ANYOFPOSIXL                    # Z added by devel/scanprov
+ANYOF_POSIXL_SET_TO_BITMAP     # Z added by devel/scanprov
 change_engine_size             # F added by devel/scanprov
+FILL_NODE                      # Z added by devel/scanprov
+POSIXL_CLEAR                   # Z added by devel/scanprov
+POSIXL_SET                     # Z added by devel/scanprov
+POSIXL_TEST                    # Z added by devel/scanprov
+POSIXL_ZERO                    # Z added by devel/scanprov
 set_regex_pv                   # F added by devel/scanprov
index 5b26fa5..1a0e6b4 100644 (file)
@@ -1,2 +1,3 @@
 5.029005
+NANYOFM                        # Z added by devel/scanprov
 output_posix_warnings          # F added by devel/scanprov
index 7b374ce..98bc976 100644 (file)
@@ -1,2 +1,7 @@
 5.029006
 argvout_final                  # F added by devel/scanprov
+isPOWER_OF_2                   # Z added by devel/scanprov
+MAX_FOLD_FROMS                 # Z added by devel/scanprov
+PERL_FEATURE_H                 # Z added by devel/scanprov
+PERL_INVLIST_INLINE_H          # Z added by devel/scanprov
+PERL_REGCOMP_H                 # Z added by devel/scanprov
index c5f295a..a89683a 100644 (file)
@@ -1,2 +1,6 @@
 5.029007
+ANYOFH                         # Z added by devel/scanprov
+EXACTFUP                       # Z added by devel/scanprov
+EXACTFU_S_EDGE                 # Z added by devel/scanprov
 foldEQ_latin1_s2_folded        # F added by devel/scanprov
+PL_in_some_fold                # Z added by devel/scanprov
index 997168c..8fd2e26 100644 (file)
@@ -1,6 +1,13 @@
 5.029008
+COMBINING_DOT_ABOVE_UTF8       # Z added by devel/scanprov
 handle_user_defined_property   # F added by devel/scanprov
+PL_CCC_non0_non230             # Z added by devel/scanprov
+PL_in_utf8_turkic_locale       # Z added by devel/scanprov
 traverse_op_tree               # F added by devel/scanprov
 turkic_fc                      # F added by devel/scanprov
 turkic_lc                      # F added by devel/scanprov
 turkic_uc                      # F added by devel/scanprov
+USER_PROP_MUTEX_INIT           # Z added by devel/scanprov
+USER_PROP_MUTEX_LOCK           # Z added by devel/scanprov
+USER_PROP_MUTEX_TERM           # Z added by devel/scanprov
+USER_PROP_MUTEX_UNLOCK         # Z added by devel/scanprov
index 71e1ea4..d168273 100644 (file)
@@ -1,9 +1,90 @@
 5.029009
-newSVsv_flags                  # U
+get_and_check_backslash_N_name_wrapper # F added by devel/scanprov
+HAS_TOWLOWER                   # K added by devel/scanprov
+HAS_TOWUPPER                   # K added by devel/scanprov
+I_WCTYPE                       # K added by devel/scanprov
+newSVsv_flags                  # F added by devel/scanprov
 newSVsv_nomg                   # U
+Perl_dup_warnings              # F added by devel/scanprov
+PL_Private_Use                 # Z added by devel/scanprov
+RE_COMPILE_RECURSION_INIT      # Z added by devel/scanprov
+RE_COMPILE_RECURSION_LIMIT     # Z added by devel/scanprov
+UNI_age_values_index           # Z added by devel/scanprov
+UNI_ahex_values_index          # Z added by devel/scanprov
+UNI_alpha_values_index         # Z added by devel/scanprov
+UNI_bc_values_index            # Z added by devel/scanprov
+UNI_bidic_values_index         # Z added by devel/scanprov
+UNI_bidim_values_index         # Z added by devel/scanprov
+UNI_blk_values_index           # Z added by devel/scanprov
+UNI_bpt_values_index           # Z added by devel/scanprov
+UNI_cased_values_index         # Z added by devel/scanprov
+UNI_ccc_values_index           # Z added by devel/scanprov
+UNI_ce_values_index            # Z added by devel/scanprov
+UNI_ci_values_index            # Z added by devel/scanprov
+UNI_compex_values_index        # Z added by devel/scanprov
+UNI_cwcf_values_index          # Z added by devel/scanprov
+UNI_cwcm_values_index          # Z added by devel/scanprov
+UNI_cwkcf_values_index         # Z added by devel/scanprov
+UNI_cwl_values_index           # Z added by devel/scanprov
+UNI_cwt_values_index           # Z added by devel/scanprov
+UNI_cwu_values_index           # Z added by devel/scanprov
+UNI_dash_values_index          # Z added by devel/scanprov
+UNI_dep_values_index           # Z added by devel/scanprov
+UNI_dia_values_index           # Z added by devel/scanprov
+UNI_di_values_index            # Z added by devel/scanprov
+UNI_dt_values_index            # Z added by devel/scanprov
+UNI_ea_values_index            # Z added by devel/scanprov
+UNI_ext_values_index           # Z added by devel/scanprov
+UNI_gcb_values_index           # Z added by devel/scanprov
+UNI_gc_values_index            # Z added by devel/scanprov
+UNI_grbase_values_index        # Z added by devel/scanprov
+UNI_grext_values_index         # Z added by devel/scanprov
+UNI_hex_values_index           # Z added by devel/scanprov
+UNI_hst_values_index           # Z added by devel/scanprov
+UNI_hyphen_values_index        # Z added by devel/scanprov
+UNI_idc_values_index           # Z added by devel/scanprov
+UNI_ideo_values_index          # Z added by devel/scanprov
+UNI_idsb_values_index          # Z added by devel/scanprov
+UNI_idst_values_index          # Z added by devel/scanprov
+UNI_ids_values_index           # Z added by devel/scanprov
+UNI_inpc_values_index          # Z added by devel/scanprov
+UNI_insc_values_index          # Z added by devel/scanprov
+UNI_in_values_index            # Z added by devel/scanprov
+UNI_jg_values_index            # Z added by devel/scanprov
+UNI_joinc_values_index         # Z added by devel/scanprov
+UNI_jt_values_index            # Z added by devel/scanprov
+UNI_lb_values_index            # Z added by devel/scanprov
+UNI_loe_values_index           # Z added by devel/scanprov
+UNI_lower_values_index         # Z added by devel/scanprov
+UNI_math_values_index          # Z added by devel/scanprov
+UNI_nchar_values_index         # Z added by devel/scanprov
+UNI_nfcqc_values_index         # Z added by devel/scanprov
+UNI_nfdqc_values_index         # Z added by devel/scanprov
+UNI_nfkcqc_values_index        # Z added by devel/scanprov
+UNI_nfkdqc_values_index        # Z added by devel/scanprov
+UNI_nt_values_index            # Z added by devel/scanprov
+UNI_nv_values_index            # Z added by devel/scanprov
+UNI_patsyn_values_index        # Z added by devel/scanprov
+UNI_patws_values_index         # Z added by devel/scanprov
+UNI_pcm_values_index           # Z added by devel/scanprov
+UNI_qmark_values_index         # Z added by devel/scanprov
+UNI_radical_values_index       # Z added by devel/scanprov
+UNI_ri_values_index            # Z added by devel/scanprov
+UNI_sb_values_index            # Z added by devel/scanprov
+UNI_sc_values_index            # Z added by devel/scanprov
+UNI_scx_values_index           # Z added by devel/scanprov
+UNI_sd_values_index            # Z added by devel/scanprov
+UNI_sterm_values_index         # Z added by devel/scanprov
+UNI_term_values_index          # Z added by devel/scanprov
+UNI_uideo_values_index         # Z added by devel/scanprov
+UNI_upper_values_index         # Z added by devel/scanprov
+UNI_vo_values_index            # Z added by devel/scanprov
+UNI_vs_values_index            # Z added by devel/scanprov
+UNI_wb_values_index            # Z added by devel/scanprov
+UNI_wspace_values_index        # Z added by devel/scanprov
+UNI_xidc_values_index          # Z added by devel/scanprov
+UNI_xids_values_index          # Z added by devel/scanprov
 UTF8_SAFE_SKIP                 # U
 WARN_EXPERIMENTAL__PRIVATE_USE # E
 WARN_EXPERIMENTAL__UNIPROP_WILDCARDS # E
 WARN_EXPERIMENTAL__VLB         # E
-get_and_check_backslash_N_name_wrapper # F added by devel/scanprov
-Perl_dup_warnings              # F added by devel/scanprov
index 0c02979..254c07c 100644 (file)
@@ -1,3 +1,10 @@
 5.029010
+inRANGE                        # Z added by devel/scanprov
+MSVC_DIAG_IGNORE               # Z added by devel/scanprov
+MSVC_DIAG_IGNORE_DECL          # Z added by devel/scanprov
+MSVC_DIAG_IGNORE_STMT          # Z added by devel/scanprov
+MSVC_DIAG_RESTORE              # Z added by devel/scanprov
+MSVC_DIAG_RESTORE_DECL         # Z added by devel/scanprov
+MSVC_DIAG_RESTORE_STMT         # Z added by devel/scanprov
 my_strtod                      # U
 Strtod                         # U
diff --git a/dist/Devel-PPPort/parts/base/5030001 b/dist/Devel-PPPort/parts/base/5030001
new file mode 100644 (file)
index 0000000..1aa762f
--- /dev/null
@@ -0,0 +1 @@
+5.030001
diff --git a/dist/Devel-PPPort/parts/base/5030002 b/dist/Devel-PPPort/parts/base/5030002
new file mode 100644 (file)
index 0000000..2db920e
--- /dev/null
@@ -0,0 +1 @@
+5.030002
diff --git a/dist/Devel-PPPort/parts/base/5030003 b/dist/Devel-PPPort/parts/base/5030003
new file mode 100644 (file)
index 0000000..33b044f
--- /dev/null
@@ -0,0 +1 @@
+5.030003
diff --git a/dist/Devel-PPPort/parts/base/5031000 b/dist/Devel-PPPort/parts/base/5031000
new file mode 100644 (file)
index 0000000..02126a5
--- /dev/null
@@ -0,0 +1 @@
+5.031000
index 4d4fe30..48102f8 100644 (file)
@@ -1,2 +1,10 @@
 5.031001
+ANYOFHb                        # Z added by devel/scanprov
+GROUPPN                        # Z added by devel/scanprov
 lossless_NV_to_IV              # F added by devel/scanprov
+OP_IS_STAT                     # Z added by devel/scanprov
+REFFAN                         # Z added by devel/scanprov
+REFFLN                         # Z added by devel/scanprov
+REFFN                          # Z added by devel/scanprov
+REFFUN                         # Z added by devel/scanprov
+REFN                           # Z added by devel/scanprov
index 7a56370..5d06fcf 100644 (file)
@@ -1,3 +1,8 @@
 5.031002
+ANYOFHr                        # Z added by devel/scanprov
 G_RETHROW                      # E
+HIGHEST_ANYOF_HRx_BYTE         # Z added by devel/scanprov
+LOWEST_ANYOF_HRx_BYTE          # Z added by devel/scanprov
+MAX_ANYOF_HRx_BYTE             # Z added by devel/scanprov
+O_VMS_DELETEONCLOSE            # Z added by devel/scanprov
 Perl_my_mkostemp_cloexec       # F added by devel/scanprov
index cd1085d..8c8fe6f 100644 (file)
@@ -1,4 +1,9 @@
 5.031004
+DEBUG_DUMP_PRE_OPTIMIZE_r      # Z added by devel/scanprov
+get_regex_charset_name         # F added by devel/scanprov
+is_utf8_char_helper            # F added by devel/scanprov
+PadnameIN_SCOPE                # F added by devel/scanprov
+RE_DEBUG_EXTRA_DUMP_PRE_OPTIMIZE # Z added by devel/scanprov
 sv_2pvbyte_flags               # U
 sv_2pvutf8_flags               # U
 SvAMAGIC_off                   # U
@@ -11,12 +16,6 @@ SvPVutf8_or_null               # U
 SvPVutf8_or_null_nomg          # U
 sv_utf8_downgrade_flags        # U
 sv_utf8_downgrade_nomg         # U
-get_regex_charset_name         # F added by devel/scanprov
-is_utf8_char_helper            # F added by devel/scanprov
-PadnameIN_SCOPE                # F added by devel/scanprov
-Perl_POPMARK                   # F added by devel/scanprov
-Perl_ReANY                     # F added by devel/scanprov
-Perl_TOPMARK                   # F added by devel/scanprov
-to_uni_fold                    # F added by devel/scanprov
 utf8_to_uvchr_buf_helper       # F added by devel/scanprov
 variant_byte_number            # F added by devel/scanprov
+withinCOUNT                    # Z added by devel/scanprov
index fc93346..e68f289 100644 (file)
@@ -1,5 +1,5 @@
 5.031005
-gimme_V                        # U
+gimme_V                        # F added by devel/scanprov
 isALPHANUMERIC_utf8            # A
 isALPHA_utf8                   # A
 isASCII_utf8                   # A
@@ -17,6 +17,14 @@ isSPACE_utf8                   # A
 isUPPER_utf8                   # A
 isWORDCHAR_utf8                # A
 isXDIGIT_utf8                  # A
+LEXACT                         # Z added by devel/scanprov
+OPERANDl                       # Z added by devel/scanprov
+OPERANDs                       # Z added by devel/scanprov
+setSTR_LEN                     # Z added by devel/scanprov
+STRINGl                        # Z added by devel/scanprov
+STRINGs                        # Z added by devel/scanprov
+STR_LENl                       # Z added by devel/scanprov
+STR_LENs                       # Z added by devel/scanprov
 toFOLD_utf8                    # A
 toLOWER_utf8                   # A
 toTITLE_utf8                   # A
index 231cc5c..d380541 100644 (file)
@@ -1,10 +1,33 @@
 5.031006
-UTF8_CHK_SKIP                  # U
-do_trans_count_invmap          # F added by devel/scanprov
-do_trans_invmap                # F added by devel/scanprov
-invmap_dump                    # F added by devel/scanprov
+CLEARFEATUREBITS               # Z added by devel/scanprov
+EXACTFU_REQ8                   # Z added by devel/scanprov
+EXACT_REQ8                     # Z added by devel/scanprov
+FEATURE_BITWISE_BIT            # Z added by devel/scanprov
+FEATURE_EVALBYTES_BIT          # Z added by devel/scanprov
+FEATURE_FC_BIT                 # Z added by devel/scanprov
+FEATURE_IS_ENABLED_MASK        # Z added by devel/scanprov
+FEATURE_MYREF_BIT              # Z added by devel/scanprov
+FEATURE_POSTDEREF_QQ_BIT       # Z added by devel/scanprov
+FEATURE_REFALIASING_BIT        # Z added by devel/scanprov
+FEATURE_SAY_BIT                # Z added by devel/scanprov
+FEATURE_SIGNATURES_BIT         # Z added by devel/scanprov
+FEATURE_STATE_BIT              # Z added by devel/scanprov
+FEATURE___SUB___BIT            # Z added by devel/scanprov
+FEATURE_SWITCH_BIT             # Z added by devel/scanprov
+FEATURE_UNICODE_BIT            # Z added by devel/scanprov
+FEATURE_UNIEVAL_BIT            # Z added by devel/scanprov
+FETCHFEATUREBITSHH             # Z added by devel/scanprov
+GDBMNDBM_H_USES_PROTOTYPES     # K added by devel/scanprov
+HAS_DBMINIT_PROTO              # K added by devel/scanprov
+I_DBM                          # K added by devel/scanprov
+I_NDBM                         # K added by devel/scanprov
 _is_utf8_FOO                   # F added by devel/scanprov
 _is_utf8_perl_idcont           # F added by devel/scanprov
 _is_utf8_perl_idstart          # F added by devel/scanprov
-make_exactf_invlist            # F added by devel/scanprov
-sv_derived_from_svpvn          # F added by devel/scanprov
+LEXACT_REQ8                    # Z added by devel/scanprov
+NDBM_H_USES_PROTOTYPES         # K added by devel/scanprov
+SAVEFEATUREBITS                # Z added by devel/scanprov
+STOREFEATUREBITSHH             # Z added by devel/scanprov
+UTF8_CHK_SKIP                  # U
+UTF_MIN_ABOVE_LATIN1_BYTE      # Z added by devel/scanprov
+UTF_MIN_START_BYTE             # Z added by devel/scanprov
index b0206dc..432d1c7 100644 (file)
@@ -1,13 +1,59 @@
 5.031007
-csighandler                    # E (Perl_csighandler)
-csighandler1                   # U
-csighandler3                   # E
-perly_sighandler               # E
-sv_isa_sv                      # U
-WARN_EXPERIMENTAL__ISA         # E
+ANYOFHs                        # Z added by devel/scanprov
+ANYOFR                         # Z added by devel/scanprov
+ANYOFRb                        # Z added by devel/scanprov
+ANYOFRbase                     # Z added by devel/scanprov
+ANYOFR_BASE_BITS               # Z added by devel/scanprov
+ANYOFRdelta                    # Z added by devel/scanprov
+csighandler1                   # F added by devel/scanprov
+csighandler3                   # F added by devel/scanprov
+DEBUG_y                        # Z added by devel/scanprov
+DEBUG_y_FLAG                   # Z added by devel/scanprov
+DEBUG_y_TEST                   # Z added by devel/scanprov
+DEBUG_yv                       # Z added by devel/scanprov
+DEBUG_yv_TEST                  # Z added by devel/scanprov
+do_trans_count_invmap          # F added by devel/scanprov
+do_trans_invmap                # F added by devel/scanprov
+FEATURE_ISA_BIT                # Z added by devel/scanprov
+FEATURE_ISA_IS_ENABLED         # Z added by devel/scanprov
 find_first_differing_byte_pos  # F added by devel/scanprov
+HASATTRIBUTE_ALWAYS_INLINE     # K added by devel/scanprov
+HAS_ISLESS                     # K added by devel/scanprov
+HAS_WCRTOMB                    # K added by devel/scanprov
 invlist_lowest                 # F added by devel/scanprov
+invmap_dump                    # F added by devel/scanprov
+isALNUMC_LC_utf8_safe          # Z added by devel/scanprov
+isALNUMC_utf8_safe             # Z added by devel/scanprov
+isALNUM_lazy_if_safe           # Z added by devel/scanprov
+isALNUM_LC_utf8_safe           # Z added by devel/scanprov
+isALNUM_utf8_safe              # Z added by devel/scanprov
 is_grapheme                    # F added by devel/scanprov
+is_THREE_CHAR_FOLD_HEAD_latin1_safe # Z added by devel/scanprov
+is_THREE_CHAR_FOLD_HEAD_utf8_safe # Z added by devel/scanprov
+is_THREE_CHAR_FOLD_latin1_safe # Z added by devel/scanprov
+is_THREE_CHAR_FOLD_utf8_safe   # Z added by devel/scanprov
+KEY_isa                        # Z added by devel/scanprov
+magic_sethint_feature          # Z added by devel/scanprov
+make_exactf_invlist            # F added by devel/scanprov
+memCHRs                        # U
+OPpTRANS_CAN_FORCE_UTF8        # Z added by devel/scanprov
+OPpTRANS_USE_SVOP              # Z added by devel/scanprov
+perly_sighandler               # F added by devel/scanprov
+PL_sighandler1p                # Z added by devel/scanprov
+PL_sighandler3p                # Z added by devel/scanprov
+PL_TR_SPECIAL_HANDLING_UTF8    # Z added by devel/scanprov
 quadmath_format_valid          # F added by devel/scanprov
+RANGE_INDICATOR                # Z added by devel/scanprov
 sighandler1                    # F added by devel/scanprov
 sighandler3                    # F added by devel/scanprov
+sv_derived_from_svpvn          # F added by devel/scanprov
+sv_isa_sv                      # U
+TR_DELETE                      # Z added by devel/scanprov
+TR_OOB                         # Z added by devel/scanprov
+TR_R_EMPTY                     # Z added by devel/scanprov
+TR_SPECIAL_HANDLING            # Z added by devel/scanprov
+TR_UNLISTED                    # Z added by devel/scanprov
+TR_UNMAPPED                    # Z added by devel/scanprov
+UNICODE_ALLOW_ABOVE_IV_MAX     # Z added by devel/scanprov
+UTF8_IS_START_base             # Z added by devel/scanprov
+WARN_EXPERIMENTAL__ISA         # E
index 7424595..70f4ad8 100644 (file)
@@ -1,4 +1,4 @@
 5.031008
-memCHRs                        # U
 grok_bin_oct_hex               # F added by devel/scanprov
 output_non_portable            # F added by devel/scanprov
+PERL_SCAN_NOTIFY_ILLDIGIT      # Z added by devel/scanprov
diff --git a/dist/Devel-PPPort/parts/base/5031009 b/dist/Devel-PPPort/parts/base/5031009
new file mode 100644 (file)
index 0000000..e251875
--- /dev/null
@@ -0,0 +1,30 @@
+5.031009
+ARGp                           # Z added by devel/scanprov
+ARGp_LOC                       # Z added by devel/scanprov
+ARGp_SET                       # Z added by devel/scanprov
+compile_wildcard               # F added by devel/scanprov
+execute_wildcard               # F added by devel/scanprov
+FEATURE_INDIRECT_BIT           # Z added by devel/scanprov
+FEATURE_INDIRECT_IS_ENABLED    # Z added by devel/scanprov
+FILL_ADVANCE_NODE_ARGp         # Z added by devel/scanprov
+form_alien_digit_msg           # F added by devel/scanprov
+form_cp_too_large_msg          # F added by devel/scanprov
+isMNEMONIC_CNTRL               # Z added by devel/scanprov
+load_charnames                 # F added by devel/scanprov
+PERL_SCAN_ALLOW_MEDIAL_UNDERSCORES # Z added by devel/scanprov
+PERL_SCAN_SILENT_OVERFLOW      # Z added by devel/scanprov
+PL_mbrlen_ps                   # Z added by devel/scanprov
+PL_mbrtowc_ps                  # Z added by devel/scanprov
+PL_wcrtomb_ps                  # Z added by devel/scanprov
+PMf_WILDCARD                   # Z added by devel/scanprov
+REGEX_SET                      # Z added by devel/scanprov
+regpnode                       # F added by devel/scanprov
+UNI_DISPLAY_BACKSPACE          # Z added by devel/scanprov
+UNI_ebase_values_index         # Z added by devel/scanprov
+UNI_ecomp_values_index         # Z added by devel/scanprov
+UNI_emod_values_index          # Z added by devel/scanprov
+UNI_emoji_values_index         # Z added by devel/scanprov
+UNI_epres_values_index         # Z added by devel/scanprov
+UNI_extpict_values_index       # Z added by devel/scanprov
+UNI_identifierstatus_values_index # Z added by devel/scanprov
+UNI_identifiertype_values_index # Z added by devel/scanprov
diff --git a/dist/Devel-PPPort/parts/base/5031010 b/dist/Devel-PPPort/parts/base/5031010
new file mode 100644 (file)
index 0000000..4ac39b9
--- /dev/null
@@ -0,0 +1,88 @@
+5.031010
+amagic_cmp_desc                # F added by devel/scanprov
+amagic_cmp_locale_desc         # F added by devel/scanprov
+amagic_i_ncmp_desc             # F added by devel/scanprov
+amagic_ncmp_desc               # F added by devel/scanprov
+cmpchain_extend                # F added by devel/scanprov
+cmpchain_finish                # F added by devel/scanprov
+cmpchain_start                 # F added by devel/scanprov
+cmp_desc                       # F added by devel/scanprov
+cmp_locale_desc                # F added by devel/scanprov
+DECLARE_AND_GET_RE_DEBUG_FLAGS # Z added by devel/scanprov
+DECLARE_AND_GET_RE_DEBUG_FLAGS_NON_REGEX # Z added by devel/scanprov
+do_uniprop_match               # F added by devel/scanprov
+ENV_INIT                       # Z added by devel/scanprov
+ENV_LOCALE_LOCK                # Z added by devel/scanprov
+ENV_LOCALE_READ_LOCK           # Z added by devel/scanprov
+ENV_LOCALE_READ_UNLOCK         # Z added by devel/scanprov
+ENV_LOCALE_UNLOCK              # Z added by devel/scanprov
+ENV_LOCK                       # Z added by devel/scanprov
+ENV_TERM                       # Z added by devel/scanprov
+ENV_UNLOCK                     # Z added by devel/scanprov
+free_and_set_cop_warnings      # Z added by devel/scanprov
+get_deprecated_property_msg    # F added by devel/scanprov
+get_prop_definition            # F added by devel/scanprov
+get_prop_values                # F added by devel/scanprov
+get_re_gclass_nonbitmap_data   # F added by devel/scanprov
+get_regclass_nonbitmap_data    # F added by devel/scanprov
+GETSPNAM_R_HAS_BUFFER          # Z added by devel/scanprov
+gmtime                         # Z added by devel/scanprov
+handle_names_wildcard          # F added by devel/scanprov
+isDEBUG_WILDCARD               # Z added by devel/scanprov
+KEY_getspnam                   # Z added by devel/scanprov
+localtime                      # Z added by devel/scanprov
+mortal_getenv                  # F added by devel/scanprov
+PERL_REENTR_USING_ASCTIME_R    # Z added by devel/scanprov
+PERL_REENTR_USING_CRYPT_R      # Z added by devel/scanprov
+PERL_REENTR_USING_CTERMID_R    # Z added by devel/scanprov
+PERL_REENTR_USING_CTIME_R      # Z added by devel/scanprov
+PERL_REENTR_USING_ENDGRENT_R   # Z added by devel/scanprov
+PERL_REENTR_USING_ENDHOSTENT_R # Z added by devel/scanprov
+PERL_REENTR_USING_ENDNETENT_R  # Z added by devel/scanprov
+PERL_REENTR_USING_ENDPROTOENT_R # Z added by devel/scanprov
+PERL_REENTR_USING_ENDPWENT_R   # Z added by devel/scanprov
+PERL_REENTR_USING_ENDSERVENT_R # Z added by devel/scanprov
+PERL_REENTR_USING_GETGRENT_R   # Z added by devel/scanprov
+PERL_REENTR_USING_GETGRGID_R   # Z added by devel/scanprov
+PERL_REENTR_USING_GETGRNAM_R   # Z added by devel/scanprov
+PERL_REENTR_USING_GETHOSTBYADDR_R # Z added by devel/scanprov
+PERL_REENTR_USING_GETHOSTBYNAME_R # Z added by devel/scanprov
+PERL_REENTR_USING_GETHOSTENT_R # Z added by devel/scanprov
+PERL_REENTR_USING_GETLOGIN_R   # Z added by devel/scanprov
+PERL_REENTR_USING_GETNETBYADDR_R # Z added by devel/scanprov
+PERL_REENTR_USING_GETNETBYNAME_R # Z added by devel/scanprov
+PERL_REENTR_USING_GETNETENT_R  # Z added by devel/scanprov
+PERL_REENTR_USING_GETPROTOBYNAME_R # Z added by devel/scanprov
+PERL_REENTR_USING_GETPROTOBYNUMBER_R # Z added by devel/scanprov
+PERL_REENTR_USING_GETPROTOENT_R # Z added by devel/scanprov
+PERL_REENTR_USING_GETPWENT_R   # Z added by devel/scanprov
+PERL_REENTR_USING_GETPWNAM_R   # Z added by devel/scanprov
+PERL_REENTR_USING_GETPWUID_R   # Z added by devel/scanprov
+PERL_REENTR_USING_GETSERVBYNAME_R # Z added by devel/scanprov
+PERL_REENTR_USING_GETSERVBYPORT_R # Z added by devel/scanprov
+PERL_REENTR_USING_GETSERVENT_R # Z added by devel/scanprov
+PERL_REENTR_USING_GETSPNAM_R   # Z added by devel/scanprov
+PERL_REENTR_USING_GMTIME_R     # Z added by devel/scanprov
+PERL_REENTR_USING_LOCALTIME_R  # Z added by devel/scanprov
+PERL_REENTR_USING_READDIR64_R  # Z added by devel/scanprov
+PERL_REENTR_USING_READDIR_R    # Z added by devel/scanprov
+PERL_REENTR_USING_SETGRENT_R   # Z added by devel/scanprov
+PERL_REENTR_USING_SETHOSTENT_R # Z added by devel/scanprov
+PERL_REENTR_USING_SETLOCALE_R  # Z added by devel/scanprov
+PERL_REENTR_USING_SETNETENT_R  # Z added by devel/scanprov
+PERL_REENTR_USING_SETPROTOENT_R # Z added by devel/scanprov
+PERL_REENTR_USING_SETPWENT_R   # Z added by devel/scanprov
+PERL_REENTR_USING_SETSERVENT_R # Z added by devel/scanprov
+PERL_REENTR_USING_STRERROR_R   # Z added by devel/scanprov
+PERL_REENTR_USING_TMPNAM_R     # Z added by devel/scanprov
+PERL_REENTR_USING_TTYNAME_R    # Z added by devel/scanprov
+PERLSI_REGCOMP                 # Z added by devel/scanprov
+PERL_STATIC_FORCE_INLINE       # Z added by devel/scanprov
+PERL_STATIC_FORCE_INLINE_NO_RET # Z added by devel/scanprov
+RE_DEBUG_EXTRA_WILDCARD        # Z added by devel/scanprov
+REENTRANT_PROTO_S_TS           # Z added by devel/scanprov
+should_we_output_Debug_r       # F added by devel/scanprov
+sortsv_flags_impl              # F added by devel/scanprov
+sv_i_ncmp_desc                 # F added by devel/scanprov
+sv_ncmp_desc                   # F added by devel/scanprov
+USE_SPENT_BUFFER               # Z added by devel/scanprov
diff --git a/dist/Devel-PPPort/parts/base/5031011 b/dist/Devel-PPPort/parts/base/5031011
new file mode 100644 (file)
index 0000000..fb307db
--- /dev/null
@@ -0,0 +1,2 @@
+5.031011
+PERL_IS_GCC                    # Z added by devel/scanprov
diff --git a/dist/Devel-PPPort/parts/base/5032000 b/dist/Devel-PPPort/parts/base/5032000
new file mode 100644 (file)
index 0000000..8503a3e
--- /dev/null
@@ -0,0 +1,3 @@
+5.032000
+HAS_SOCKADDR_STORAGE           # K added by devel/scanprov
+rck_elide_nothing              # F added by devel/scanprov
diff --git a/dist/Devel-PPPort/parts/base/5033000 b/dist/Devel-PPPort/parts/base/5033000
new file mode 100644 (file)
index 0000000..4ef4816
--- /dev/null
@@ -0,0 +1,11 @@
+5.033000
+PERL_GIT_UNCOMMITTED_CHANGES   # Z added by devel/scanprov
+PERL_INC_VERSION_LIST          # K added by devel/scanprov
+PERL_RVS_TO_DECIMAL            # Z added by devel/scanprov
+PERL_VERSION_EQ                # U
+PERL_VERSION_GE                # U
+PERL_VERSION_GT                # U
+PERL_VERSION_LE                # U
+PERL_VERSION_LT                # U
+PERL_VERSION_NE                # U
+USE_C_BACKTRACE                # K added by devel/scanprov
diff --git a/dist/Devel-PPPort/parts/base/5033001 b/dist/Devel-PPPort/parts/base/5033001
new file mode 100644 (file)
index 0000000..b62d23b
--- /dev/null
@@ -0,0 +1,7 @@
+5.033001
+av_count                       # U
+dMY_CXT_SV                     # E
+nBIT_MASK                      # Z added by devel/scanprov
+nBIT_UMAX                      # Z added by devel/scanprov
+USE_LOCALE_SYNTAX              # Z added by devel/scanprov
+USE_LOCALE_TOD                 # Z added by devel/scanprov
diff --git a/dist/Devel-PPPort/parts/base/5033002 b/dist/Devel-PPPort/parts/base/5033002
new file mode 100644 (file)
index 0000000..e4f88bf
--- /dev/null
@@ -0,0 +1 @@
+5.033002
index 4bb864f..4482131 100644 (file)
@@ -14,7 +14,7 @@
 : real (full) name, with any appropriate thread context paramaters, thus hiding
 : that detail from the typical code.
 :
-: Most macros listed here are the complete full name.
+: Most macros (as opposed to function) listed here are the complete full name.
 :
 : All non-static functions defined by perl need to be listed in this file.
 : embed.pl uses the entries here to construct:
 :   2) embed.h to create short name macros
 :
 : Static functions internal to a file need not appear here, but there is
-: benefit to declaring them here, as it generally handles the thread context
-: parameter invisibly, as well as making sure a PERL_ARGS_ASSERT_foo macro is
-: defined, which can save you debugging time.
+: benefit to declaring them here:
+:   1) It generally handles the thread context parameter invisibly making it
+:      trivial to add or remove needing thread context passed;
+:   2)  It defines a PERL_ARGS_ASSERT_foo macro, which can save you debugging
+:      time;
+:   3)  It is is automatically known to Devel::PPPort, making it quicker to
+:      later find out when it came into existence.  For example
+:          perl ppport.h --api-info=/edit_distance/
+:      yields
+:              Supported at least since perl-5.23.8, with or without ppport.h.
 :
 : Lines in this file are of the form:
 :    flags|return_type|name|arg1|arg2|...|argN
@@ -91,9 +98,9 @@
 : The E flag is used instead for a function and its short name that is supposed
 :            to be used only in the core, and in extensions compiled with the
 :            PERL_EXT symbol defined.  Again, on some platforms, the function
-:            will be visible everywhere, so the 'p' flag is generally needed.
-:            Also note that an XS writer can always cheat and pretend to be an
-:            extension by #defining PERL_EXT.
+:            will be visible everywhere, so one of the 'p' or 'S' flags is
+:            generally needed.  Also note that an XS writer can always cheat
+:            and pretend to be an extension by #defining PERL_EXT.
 :
 : The X flag is similar to the C flag in that the function (whose entry better
 :           have the 'p' flag) is accessible everywhere on all platforms.
 :           function in its full 'Perl_' form with any necessary thread
 :           context parameter.
 :
+: Just below is a description of the automatic documentation generation system
+: which heavily involves this file.  Below that is a description of all the
+: flags used in this file.
+:
 : Scattered around the perl source are lines of the form:
 :
 :   =for apidoc name
 :
-: followed by pod for that function.  The purpose of these is to tell
-: autodoc.pl where the documentation is for a function listed in this file.  It
-: uses the prototype from here and the pod from there in generating the
-: documentation in perlapi or perlintern.  The entries in this file that have
-: corresponding '=for apidoc' entries should have the 'd' flag set in this
+: followed by pod for that function.  The purpose of these lines and the text
+: that immediately follows them is to furnish documentation for functions
+: and macros listed here in embed.fnc.  The lines tend to be placed near the
+: source for the item they describe.  autodoc.pl is run as part of the standard
+: build process to extract this documentation and build perlapi.pod from the
+: elements that are in the API (flagged as A in this file), and perlintern.pod
+: from the other elements.
+:
+: 'name' in the apidoc line corresponds to an item listed in this file, so that
+: the signature and flags need only be specified once, here, and automatically
+: they get placed into the generated pod.
+:
+: The 'h' flag is used to hide (suppress) the pod associated with =apidoc lines
+: from being placed in the generated perlapi or perlintern.  There are several
+: reasons you might want to do this, given in the 'h' flag description below,
+: but one is for the case where the =apidoc occurs in a file that contains
+: regular pod.  Without that flag, the associated pod will be placed in both
+: it, and perlapi or perlintern.  That may be what you want, but it gives you
+: the flexibility to choose that, or instead have just a link to the source pod
+: inserted in perlapi or perlintern.  This allows single-source browsing for
+: someone; they don't have to scan multiple pods trying to find something
+: suitable.
+:
+: In C files, the apidoc lines are inside comment blocks.  Inside other files,
+: the =for causes lines from there until the next line beginning with an '=' to
+: be ignored.
+:
+: The entries in this file that have corresponding '=for apidoc' entries must
+: have the 'd' flag set in this file.
+:
+: There are also lines of this form scattered around the perl
+: source:
+:
+:   =for apidoc_header HEADING_TEXT
+:   =head1 HEADING_TEXT
+:
+: where HEADING_TEXT is arbitrary text up to the end of the line.  These are
+: used by autodoc to group the documentation into sections of related
+: items.  After having been stripped of leading space, HEADING_TEXT, gives the
+: section the following apidoc lines will be grouped under, and its title.
+: By using the same HEADING_TEXT in multiple files, everything related will
+: automatically get grouped together regardless of its source file.
+: Originally, all apidoc lines were in C files, and the =heading1 worked there
+: when placed in comment blocks, like the rest of the apidoc lines.  But now,
+: the documentation can also come from pure perl files, and =head1 has meaning
+: to them, so has to be avoided there.  You can use the '=for apidoc_header'
+: lines anywhere.
+:
+: Within sections functions are listed, sorted in dictionary order.  What goes
+: into a section ends with the next =head1, '=for apidoc_header', or the end of
 : file.
 :
-: There are also lines of this form scattered around:
+: What goes into the documentation of a particular function ends with the next
+: line that begins with an '='.  In particular, an '=cut' line ends that
+: documentation without introducing something new.
+:
+: It makes sense for some macros to have documentation not in embed.fnc, but
+: somewhere else.  To that end, also scattered around the perl source are lines
+: like this:
 :
 :   =for apidoc flags|return_type|name|arg1|arg2|...|argN
 :
-: and with the same meanings as the lines in this file.  These are for
-: documenting macros.  The 'name' in any such line must not be the same as any
-: in this file (i.e., no redundant definitions), and one of the flags must be
-: 'm', indicating it is a macro.  The lines following these are pod for the
-: respective macro.  Since these are macros, the arguments need not be legal C
-: parameters.  To indicate this to downstream software that inspects these
-: lines, there are a few conventions:
-:  type    should be the entire argument name if it names a type
-:  cast    should be the entire argument name if it is a cast
-:  SP      should be the entire argument name if it is the stack pointer SP
-:  block   should be the entire argument name if it is a C brace-enclosed block
-:
-: The letters above are exact.  For example, you have to have 't', 'y', 'p',
-: and 'e' literally.  Here is an example:
+: and with the same meanings as the lines in this file.  The 'name' in any such
+: line must not be the same as any in this file (i.e., no redundant
+: definitions), and one of the flags must be 'm', indicating it is a macro.
+: Since these are macros, the arguments need not be legal C parameters.  To
+: indicate this to downstream software that inspects these lines, there are a
+: few conventions:
+:  type     should be the entire argument name if it names a type
+:  cast     should be the entire argument name if it is a cast
+:  SP       should be the entire argument name if it is the stack pointer SP
+:  block    should be the entire argument name if it is a C brace-enclosed block
+:  number   should be the entire argument name if it means a C numeric constant
+:  "string" should be the entire argument name if it is a literal C
+:          double-quoted string
+:
+: Except for "string", the letters above are exact.  For example, you have to
+: have 't', 'y', 'p', and 'e' literally.  Here is an example:
+:
 :   =for apidoc Am|void|Newxc|void* ptr|int nitems|type|cast
 :
-: Additionally, an argument can be some word(s) enclosed in double quotes to
-: indicate that it has to be a string, instead of a const char * const, like this
-:   =for apidoc Ama|SV*|newSVpvs|"string"
+: The text within double quotes can be arbitrary descriptive text.
+:
+:   =for apidoc Ama|SV*|newSVpvs|"literal string"
 :
 : If any argument or return value is not one of the above, and isn't a legal C
 : language one, the 'u' flag should be specified.
 :
 :   f  Function takes a format string. If the function name =~ qr/strftime/
 :      then it is assumed to take a strftime-style format string as the 1st
-:      arg; otherwise it's assumed to be a printf style format string, varargs
-:      (hence any entry that would otherwise go in embed.h is suppressed):
+:      arg; otherwise it's assumed to take a printf style format string, not
+:      necessarily the 1st arg.  All the arguments following it (including
+:      possibly '...') are assumed to be for the format.
 :
+:         embed.h: any entry in here is suppressed because of varargs
 :         proto.h: add __attribute__format__ (or ...null_ok__)
 :
+:   F  Function has a '...' parameter, but don't assume it is a format.  This
+:      is to make sure that new functions with formats can't be added without
+:      considering if they are format functions or not.  A reason to use this
+:      flag even on a format function is if the format would generate
+:          error: format string argument is not a string type
+:
 :   G  Suppress empty PERL_ARGS_ASSERT_foo macro.  Normally such a macro is
 :      generated for all entries for functions 'foo' in this file.  If there is
 :      a pointer argument to 'foo', it needs to be declared in this file as
 :         proto.h: PERL_ARGS_ASSERT macro is not defined unless the function
 :                 has NN arguments
 :
-:   h  Hide any documentation.  This is used when the documentation is atypical
-:      of the rest of perlapi and perlintern.  In other words the item is
-:      documented, but just not the standard way.  One reason would be if there
-:      are a bunch of macros which follow a common paradigm in their naming, so
-:      rather than having an entry for each slight variation, there is an
-:      overarchinge one.  It is also used when the documentation is in another
-:      pod, such as perlguts or warnings.h.  This flag is useful for downstream
-:      programs, such as Devel::PPPort.
+:   h  Hide any documentation that would normally go into perlapi or
+:      perlintern.  This is typically used when the documentation is actually
+:      in another pod.  If you don't use the 'h', that documentation is
+:      displayed in both places; with the flag, it stays in the pod, and a
+:      link to that pod is instead placed in perlapi or perlintern.  This
+:      allows one to browse perlapi or perlintern and see all the potentially
+:      relevant elements.  A good example is perlapio.  It has documentation
+:      about PerlIO functions with other text giving context.  There's no point
+:      in writing a second entry for perlapi, but it would be good if someone
+:      browsing perlapi knew about it.  By adding '=for apidoc' lines in
+:      perlapio, the appropriate text could be simply copied into perlapi if
+:      deemed appropriate, or just a link added there when the 'h' flag is
+:      specified.
+:      This flag is useful for symbolic names for flags.  A single =for apidoc
+:      line can be added to the pod where the meaning is discussed, and perlapi
+:      will list the name, with a link to the pod.  Another use would be if
+:      there are a bunch of macros which follow a common paradigm in their
+:      naming, so rather than having an entry for each slight variation, there
+:      is an overarching one.  This flag is useful for downstream programs,
+:      such as Devel::PPPort.
 :
 :   i  inline static.  This is used for functions that the compiler is being
 :      requested to inline.  If the function is in a header file its
 :      definition will be visible (unless guarded by #if..#endif) to all
 :      XS code.  (A typical guard will be that it is being included in a
 :      particular C file(s) or in the perl core.)  Therefore, all
-:      non-guarded function should also have the 'p' flag specified to avoid
+:      non-guarded functions should also have the 'p' flag specified to avoid
 :      polluting the XS code name space.  Otherwise an error is generated if
 :      the 'S' flag is not also specified.
 :
 :         proto.h: function is declared as PERL_STATIC_INLINE
 :
+:   I  This flag works exactly the same as 'i' but it also adds
+:      __attribute__((always_inline)) or __forceinline if either of them is
+:      supported by the compiler.
+:
+:         proto.h: function is declared as PERL_STATIC_FORCE_INLINE and
+:                  __attribute__always_inline__ is added
+:
 :   m  Implemented as a macro; there is no function associated with this name,
 :      and hence no long Perl_ or S_ name.  However, if the macro name itself
 :      begins with 'Perl_', autodoc.pl will show a thread context parameter
 :      characters, and a warning is raised otherwise.  This flag suppresses
 :      that warning, so that weird things can be documented
 :
-:   n  Has no arguments (used only in =for apidoc entries)
-:
+:   n  Has no arguments.  (used only in =for apidoc entries)
 :      The macro (it can't be a function) is used without any parameters nor
 :      empty parentheses.
 :
+:      Perhaps a better name for this flag would have been '0'.  The reason the
+:      flag was not changed to that from 'n', is if D:P were to be regenerated
+:      on an older perl, it still would use the new embed.fnc shipped with it,
+:      but would be using the flags from the older perl source code.
+:
+:
 :   O  Has a perl_ compatibility macro.
 :
 :      The really OLD name for API funcs.
 :
 :      gcc has a bug (which they claim is a feature) in which casting the
 :       result of one of these to (void) doesn't silence the warning that the
-:      result is ignored.
+:      result is ignored.  (Perl has a workaround for this bug, see
+:       PERL_UNUSED_RESULT docs)
 :
 :        proto.h: add __attribute__warn_unused_result__
 :
 :
 : Individual flags may be separated by non-tab whitespace.
 
+CipRTX |char * |mortal_getenv  |NN const char * str
+
 #if defined(PERL_IMPLICIT_SYS)
 ATo    |PerlInterpreter*|perl_alloc_using \
                                |NN struct IPerlMem *ipM \
@@ -457,7 +557,7 @@ ATod        |void   |perl_free      |NN PerlInterpreter *my_perl
 ATod   |int    |perl_run       |NN PerlInterpreter *my_perl
 ATod   |int    |perl_parse     |NN PerlInterpreter *my_perl|XSINIT_t xsinit \
                                |int argc|NULLOK char** argv|NULLOK char** env
-ATpR   |bool   |doing_taint    |int argc|NULLOK char** argv|NULLOK char** env
+CTpR   |bool   |doing_taint    |int argc|NULLOK char** argv|NULLOK char** env
 #if defined(USE_ITHREADS)
 ATod   |PerlInterpreter*|perl_clone|NN PerlInterpreter *proto_perl|UV flags
 #  if defined(PERL_IMPLICIT_SYS)
@@ -524,13 +624,14 @@ Apd       |void   |av_push        |NN AV *av|NN SV *val
 EXp    |void   |av_reify       |NN AV *av
 ApdR   |SV*    |av_shift       |NN AV *av
 Apd    |SV**   |av_store       |NN AV *av|SSize_t key|NULLOK SV *val
-AidRp  |SSize_t|av_top_index   |NN AV *av
+AMdRp  |SSize_t|av_top_index   |NN AV *av
+AidRp  |Size_t |av_count       |NN AV *av
 AmdR   |SSize_t|av_tindex      |NN AV *av
 Apd    |void   |av_undef       |NN AV *av
 Apdoex |SV**   |av_create_and_unshift_one|NN AV **const avp|NN SV *const val
 Apd    |void   |av_unshift     |NN AV *av|SSize_t num
-Apo    |SV**   |av_arylen_p    |NN AV *av
-Apo    |IV*    |av_iter_p      |NN AV *av
+Cpo    |SV**   |av_arylen_p    |NN AV *av
+Cpo    |IV*    |av_iter_p      |NN AV *av
 #if defined(PERL_IN_AV_C)
 S      |MAGIC* |get_aux_mg     |NN AV *av
 #endif
@@ -551,10 +652,10 @@ Apd       |const PERL_CONTEXT *   |caller_cx|I32 level \
                                |NULLOK const PERL_CONTEXT **dbcxp
 : Used in several source files
 pR     |bool   |cando          |Mode_t mode|bool effective|NN const Stat_t* statbufp
-ApRT   |U32    |cast_ulong     |NV f
-ApRT   |I32    |cast_i32       |NV f
-ApRT   |IV     |cast_iv        |NV f
-ApRT   |UV     |cast_uv        |NV f
+CdpRT  |U32    |cast_ulong     |NV f
+CdpRT  |I32    |cast_i32       |NV f
+CdpRT  |IV     |cast_iv        |NV f
+CdpRT  |UV     |cast_uv        |NV f
 #if !defined(HAS_TRUNCATE) && !defined(HAS_CHSIZE) && defined(F_FREESP)
 ApR    |I32    |my_chsize      |int fd|Off_t length
 #endif
@@ -579,19 +680,19 @@ fTpre     |void   |noperl_die|NN const char* pat|...
 Tore   |void   |win32_croak_not_implemented|NN const char * fname
 #endif
 #if defined(PERL_IMPLICIT_CONTEXT)
-AfTrp  |void   |croak_nocontext|NULLOK const char* pat|...
-AfTrp  |OP*    |die_nocontext  |NULLOK const char* pat|...
+AdfTrp |void   |croak_nocontext|NULLOK const char* pat|...
+AdfTrp |OP*    |die_nocontext  |NULLOK const char* pat|...
 AfTp   |void   |deb_nocontext  |NN const char* pat|...
-AfTp   |char*  |form_nocontext |NN const char* pat|...
-ATp    |void   |load_module_nocontext|U32 flags|NN SV* name|NULLOK SV* ver|...
-AfTp   |SV*    |mess_nocontext |NN const char* pat|...
-AfTp   |void   |warn_nocontext |NN const char* pat|...
-AfTp   |void   |warner_nocontext|U32 err|NN const char* pat|...
-AfTp   |SV*    |newSVpvf_nocontext|NN const char *const pat|...
-AfTp   |void   |sv_catpvf_nocontext|NN SV *const sv|NN const char *const pat|...
-AfTp   |void   |sv_setpvf_nocontext|NN SV *const sv|NN const char *const pat|...
-AfTp   |void   |sv_catpvf_mg_nocontext|NN SV *const sv|NN const char *const pat|...
-AfTp   |void   |sv_setpvf_mg_nocontext|NN SV *const sv|NN const char *const pat|...
+AdfTp  |char*  |form_nocontext |NN const char* pat|...
+AdFTp  |void   |load_module_nocontext|U32 flags|NN SV* name|NULLOK SV* ver|...
+AdfTp  |SV*    |mess_nocontext |NN const char* pat|...
+AdfTp  |void   |warn_nocontext |NN const char* pat|...
+AdfTp  |void   |warner_nocontext|U32 err|NN const char* pat|...
+AdfTp  |SV*    |newSVpvf_nocontext|NN const char *const pat|...
+AdfTp  |void   |sv_catpvf_nocontext|NN SV *const sv|NN const char *const pat|...
+AdfTp  |void   |sv_setpvf_nocontext|NN SV *const sv|NN const char *const pat|...
+AdfTp  |void   |sv_catpvf_mg_nocontext|NN SV *const sv|NN const char *const pat|...
+AdfTp  |void   |sv_setpvf_mg_nocontext|NN SV *const sv|NN const char *const pat|...
 AbfTpD |int    |fprintf_nocontext|NN PerlIO *stream|NN const char *format|...
 AbfTpD |int    |printf_nocontext|NN const char *format|...
 #endif
@@ -613,9 +714,9 @@ Apd |SV *   |cv_name        |NN CV *cv|NULLOK SV *sv|U32 flags
 Apd    |void   |cv_undef       |NN CV* cv
 p      |void   |cv_undef_flags |NN CV* cv|U32 flags
 pd     |void   |cv_forget_slab |NULLOK CV *cv
-Ap     |void   |cx_dump        |NN PERL_CONTEXT* cx
-AiMp   |GV *   |CvGV           |NN CV *sv
-AiMTp  |I32 *  |CvDEPTH        |NN const CV * const sv
+Cp     |void   |cx_dump        |NN PERL_CONTEXT* cx
+AdiMp  |GV *   |CvGV           |NN CV *sv
+AdiMTp |I32 *  |CvDEPTH        |NN const CV * const sv
 Aphd   |SV*    |filter_add     |NULLOK filter_t funcp|NULLOK SV* datasv
 Ap     |void   |filter_del     |NN filter_t funcp
 ApRhd  |I32    |filter_read    |int idx|NN SV *buf_sv|int maxlen
@@ -627,7 +728,7 @@ pPR |const char*    |get_no_modify
 pPR    |U32*   |get_opargs
 ApPR   |PPADDR_t*|get_ppaddr
 : Used by CXINC, which appears to be in widespread use
-ApR    |I32    |cxinc
+CpR    |I32    |cxinc
 Afp    |void   |deb            |NN const char* pat|...
 Ap     |void   |vdeb           |NN const char* pat|NULLOK va_list* args
 Ap     |void   |debprofdump
@@ -637,9 +738,9 @@ Ap  |I32    |debop          |NN const OP* o
 Ap     |I32    |debstack
 Ap     |I32    |debstackptrs
 pR     |SV *   |defelem_target |NN SV *sv|NULLOK MAGIC *mg
-ATp    |char*  |delimcpy       |NN char* to|NN const char* toend|NN const char* from \
+AdTp   |char*  |delimcpy       |NN char* to|NN const char* toend|NN const char* from \
                                |NN const char* fromend|int delim|NN I32* retlen
-Tp     |char*  |delimcpy_no_escape|NN char* to|NN const char* toend \
+dTp    |char*  |delimcpy_no_escape|NN char* to|NN const char* toend \
                                   |NN const char* from \
                                   |NN const char* fromend|int delim \
                                   |NN I32* retlen
@@ -649,7 +750,7 @@ Aprd        |OP*    |die_sv         |NN SV *baseex
 Afrpd  |OP*    |die            |NULLOK const char* pat|...
 : Used in util.c
 pr     |void   |die_unwind     |NN SV* msv
-Ap     |void   |dounwind       |I32 cxix
+Cp     |void   |dounwind       |I32 cxix
 : FIXME
 pMb    |bool|do_aexec  |NULLOK SV* really|NN SV** mark|NN SV** sp
 : Used in pp_sys.c
@@ -666,7 +767,7 @@ pM  |bool|do_exec   |NN const char* cmd
 p      |bool|do_exec   |NN const char* cmd
 #endif
 
-#if defined(WIN32) || defined(__SYMBIAN32__) || defined(VMS)
+#if defined(WIN32) || defined(VMS)
 Ap     |int    |do_aspawn      |NULLOK SV* really|NN SV** mark|NN SV** sp
 Ap     |int    |do_spawn       |NN char* cmd
 Ap     |int    |do_spawn_nowait|NN char* cmd
@@ -754,7 +855,7 @@ p   |bool   |do_print       |NULLOK SV* sv|NN PerlIO* fp
 pR     |OP*    |do_readline
 : Defined in doio.c, used only in pp_sys.c
 p      |bool   |do_seek        |NULLOK GV* gv|Off_t pos|int whence
-Ap     |void   |do_sprintf     |NN SV* sv|SSize_t len|NN SV** sarg
+Cp     |void   |do_sprintf     |NN SV* sv|SSize_t len|NN SV** sarg
 : Defined in doio.c, used only in pp_sys.c
 p      |Off_t  |do_sysseek     |NN GV* gv|Off_t pos|int whence
 : Defined in doio.c, used only in pp_sys.c
@@ -804,8 +905,8 @@ S   |OP*    |fold_constants |NN OP * const o
 Sd     |OP*    |traverse_op_tree|NN OP* top|NN OP* o
 #endif
 Afpd   |char*  |form           |NN const char* pat|...
-A    |char*  |vform          |NN const char* pat|NULLOK va_list* args
-Ap     |void   |free_tmps
+Adp    |char*  |vform          |NN const char* pat|NULLOK va_list* args
+Cp     |void   |free_tmps
 #if defined(PERL_IN_OP_C)
 S      |void   |gen_constant_list|NULLOK OP* o
 #endif
@@ -821,19 +922,19 @@ Ap        |GV*    |gv_add_by_type |NULLOK GV *gv|svtype type
 ApMb   |GV*    |gv_AVadd       |NULLOK GV *gv
 ApMb   |GV*    |gv_HVadd       |NULLOK GV *gv
 ApMb   |GV*    |gv_IOadd       |NULLOK GV* gv
-AmR    |GV*    |gv_autoload4   |NULLOK HV* stash|NN const char* name \
+AdmR   |GV*    |gv_autoload4   |NULLOK HV* stash|NN const char* name \
                                |STRLEN len|I32 method
-ApR    |GV*    |gv_autoload_sv |NULLOK HV* stash|NN SV* namesv|U32 flags
-ApR    |GV*    |gv_autoload_pv |NULLOK HV* stash|NN const char* namepv \
+ApRd   |GV*    |gv_autoload_sv |NULLOK HV* stash|NN SV* namesv|U32 flags
+ApRd   |GV*    |gv_autoload_pv |NULLOK HV* stash|NN const char* namepv \
                                 |U32 flags
-ApR    |GV*    |gv_autoload_pvn        |NULLOK HV* stash|NN const char* name \
+ApRd   |GV*    |gv_autoload_pvn        |NULLOK HV* stash|NN const char* name \
                                         |STRLEN len|U32 flags
-Ap     |void   |gv_check       |NN HV* stash
+Cp     |void   |gv_check       |NN HV* stash
 AbpD   |void   |gv_efullname   |NN SV* sv|NN const GV* gv
 ApMb   |void   |gv_efullname3  |NN SV* sv|NN const GV* gv|NULLOK const char* prefix
 Ap     |void   |gv_efullname4  |NN SV* sv|NN const GV* gv|NULLOK const char* prefix|bool keepmain
-A    |GV*    |gv_fetchfile   |NN const char* name
-A    |GV*    |gv_fetchfile_flags|NN const char *const name|const STRLEN len\
+Adp    |GV*    |gv_fetchfile   |NN const char* name
+Adp    |GV*    |gv_fetchfile_flags|NN const char *const name|const STRLEN len\
                                |const U32 flags
 Amd    |GV*    |gv_fetchmeth   |NULLOK HV* stash|NN const char* name \
                                |STRLEN len|I32 level
@@ -855,10 +956,10 @@ Apd       |GV*    |gv_fetchmethod_autoload|NN HV* stash|NN const char* name \
                                |I32 autoload
 Apx    |GV*    |gv_fetchmethod_sv_flags|NN HV* stash|NN SV* namesv|U32 flags
 Apx    |GV*    |gv_fetchmethod_pv_flags|NN HV* stash|NN const char* name \
-                               |U32 flags
+                               |U32 flags
 Apx    |GV*    |gv_fetchmethod_pvn_flags|NN HV* stash|NN const char* name \
                                |const STRLEN len|U32 flags
-Ap     |GV*    |gv_fetchpv     |NN const char *nambeg|I32 add|const svtype sv_type
+Adp    |GV*    |gv_fetchpv     |NN const char *nambeg|I32 flags|const svtype sv_type
 AbpD   |void   |gv_fullname    |NN SV* sv|NN const GV* gv
 ApMb   |void   |gv_fullname3   |NN SV* sv|NN const GV* gv|NULLOK const char* prefix
 Ap     |void   |gv_fullname4   |NN SV* sv|NN const GV* gv|NULLOK const char* prefix|bool keepmain
@@ -882,7 +983,7 @@ p   |void   |gv_setref      |NN SV *const dstr|NN SV *const sstr
 Apd    |HV*    |gv_stashpv     |NN const char* name|I32 flags
 Apd    |HV*    |gv_stashpvn    |NN const char* name|U32 namelen|I32 flags
 #if defined(PERL_IN_GV_C) || defined(PERL_IN_UNIVERSAL_C)
-EpG    |HV*    |gv_stashsvpvn_cached   |NULLOK SV *namesv|NULLOK const char* name|U32 namelen|I32 flags
+Epd    |HV*    |gv_stashsvpvn_cached   |NULLOK SV *namesv|NULLOK const char* name|U32 namelen|I32 flags
 #endif
 #if defined(PERL_IN_GV_C)
 i      |HV*    |gv_stashpvn_internal   |NN const char* name|U32 namelen|I32 flags
@@ -902,10 +1003,10 @@ AbMdRp   |bool   |hv_exists_ent  |NULLOK HV *hv|NN SV *keysv|U32 hash
 AbMdp  |SV**   |hv_fetch       |NULLOK HV *hv|NN const char *key|I32 klen \
                                |I32 lval
 AbMdp  |HE*    |hv_fetch_ent   |NULLOK HV *hv|NN SV *keysv|I32 lval|U32 hash
-Ap     |void*  |hv_common      |NULLOK HV *hv|NULLOK SV *keysv \
+Cp     |void*  |hv_common      |NULLOK HV *hv|NULLOK SV *keysv \
                                |NULLOK const char* key|STRLEN klen|int flags \
                                |int action|NULLOK SV *val|U32 hash
-Ap     |void*  |hv_common_key_len|NULLOK HV *hv|NN const char *key \
+Cp     |void*  |hv_common_key_len|NULLOK HV *hv|NN const char *key \
                                |I32 klen_i32|const int action|NULLOK SV *val \
                                |const U32 hash
 Apod   |STRLEN |hv_fill        |NN HV *const hv
@@ -955,7 +1056,7 @@ AdmP       |I32    |ibcmp          |NN const char* a|NN const char* b|I32 len
 AdiTp  |I32    |foldEQ         |NN const char* a|NN const char* b|I32 len
 AdmP   |I32    |ibcmp_locale   |NN const char* a|NN const char* b|I32 len
 AiTpd  |I32    |foldEQ_locale  |NN const char* a|NN const char* b|I32 len
-A    |I32    |ibcmp_utf8     |NN const char *s1|NULLOK char **pe1|UV l1 \
+Adm    |I32    |ibcmp_utf8     |NN const char *s1|NULLOK char **pe1|UV l1 \
                                |bool u1|NN const char *s2|NULLOK char **pe2 \
                                |UV l2|bool u2
 Amd    |I32    |foldEQ_utf8    |NN const char *s1|NULLOK char **pe1|UV l1 \
@@ -964,7 +1065,7 @@ Amd        |I32    |foldEQ_utf8    |NN const char *s1|NULLOK char **pe1|UV l1 \
 Cp     |I32    |foldEQ_utf8_flags |NN const char *s1|NULLOK char **pe1|UV l1 \
                                |bool u1|NN const char *s2|NULLOK char **pe2 \
                                |UV l2|bool u2|U32 flags
-AiTp   |I32    |foldEQ_latin1  |NN const char* a|NN const char* b|I32 len
+CiTp   |I32    |foldEQ_latin1  |NN const char* a|NN const char* b|I32 len
 #if defined(PERL_IN_DOIO_C)
 SR     |bool   |ingroup        |Gid_t testgid|bool effective
 #endif
@@ -983,6 +1084,10 @@ p |bool   |io_close       |NN IO* io|NULLOK GV *gv \
                                |bool not_implicit|bool warn_on_fail
 : Used in perly.y
 pR     |OP*    |invert         |NULLOK OP* cmd
+pR     |OP*    |cmpchain_start |I32 type|NULLOK OP* left \
+                               |NULLOK OP* right
+pR     |OP*    |cmpchain_extend|I32 type|NN OP* ch|NULLOK OP* right
+pR     |OP*    |cmpchain_finish|NN OP* ch
 ApR    |I32    |is_lvalue_sub
 : Used in cop.h
 XopR   |I32    |was_lvalue_sub
@@ -999,9 +1104,6 @@ STR        |int    |is_utf8_cp_above_31_bits|NN const U8 * const s             \
                                         |const bool consider_overlongs
 #  endif
 #endif
-#if defined(PERL_IN_UTF8_C) || defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_REGEXEC_C)
-EXTp   |UV        |_to_fold_latin1|const U8 c|NN U8 *p|NN STRLEN *lenp|const unsigned int flags
-#endif
 #if defined(PERL_IN_UTF8_C) || defined(PERL_IN_PP_C)
 p      |UV     |_to_upper_title_latin1|const U8 c|NN U8 *p|NN STRLEN *lenp|const char S_or_s
 #endif
@@ -1086,7 +1188,7 @@ EXdpR     |bool   |isSCRIPT_RUN   |NN const U8 *s|NN const U8 *send   \
 #endif
 : Used in perly.y
 p      |OP*    |jmaybe         |NN OP *o
-: Used in pp.c 
+: Used in pp.c
 pP     |I32    |keyword        |NN const char *name|I32 len|bool all_keywords
 #if defined(PERL_IN_OP_C)
 S      |void   |inplace_aassign        |NN OP* o
@@ -1131,48 +1233,11 @@ ApdT    |OP*    |op_parent|NN OP *o
 S      |OP*    |listkids       |NULLOK OP* o
 #endif
 p      |OP*    |list           |NULLOK OP* o
-Apd    |void   |load_module|U32 flags|NN SV* name|NULLOK SV* ver|...
-A    |void   |vload_module|U32 flags|NN SV* name|NULLOK SV* ver|NULLOK va_list* args
+AFpd   |void   |load_module|U32 flags|NN SV* name|NULLOK SV* ver|...
+Adp    |void   |vload_module|U32 flags|NN SV* name|NULLOK SV* ver|NULLOK va_list* args
 : Used in perly.y
 p      |OP*    |localize       |NN OP *o|I32 lex
 ApdR   |I32    |looks_like_number|NN SV *const sv
-#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_TOKE_C) || defined(PERL_IN_DQUOTE_C)
-EpRX   |bool   |grok_bslash_x  |NN char** s                    \
-                               |NN const char* const send      \
-                               |NN UV* uv                      \
-                               |NN const char** message        \
-                               |NULLOK U32 * packed_warn       \
-                               |const bool strict              \
-                               |const bool allow_UV_MAX        \
-                               |const bool utf8
-EpRX   |bool   |grok_bslash_c  |const char source              \
-                               |NN U8 * result                 \
-                               |NN const char** message        \
-                               |NULLOK U32 * packed_warn
-EpRX   |bool   |grok_bslash_o  |NN char** s                    \
-                               |NN const char* const send      \
-                               |NN UV* uv                      \
-                               |NN const char** message        \
-                               |NULLOK U32 * packed_warn       \
-                               |const bool strict              \
-                               |const bool allow_UV_MAX        \
-                               |const bool utf8
-EpRX   |const char *|form_alien_digit_msg|const U8 which       \
-                               |const STRLEN valids_len        \
-                               |NN const char * const first_bad\
-                               |NN const char * const send     \
-                               |const bool UTF                 \
-                               |const bool braced
-#endif
-#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_TOKE_C)
-EiRT   |bool   |regcurly       |NN const char *s
-#endif
-#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_TOKE_C) || defined(PERL_IN_DQUOTE_C) || defined(PERL_IN_UTF8_C)
-EpRX   |const char *|form_cp_too_large_msg|const U8 which      \
-                               |NULLOK const char * string     \
-                               |const Size_t len               \
-                               |const UV cp
-#endif
 AMpd   |UV     |grok_hex       |NN const char* start|NN STRLEN* len_p|NN I32* flags|NULLOK NV *result
 Apd    |int    |grok_infnan    |NN const char** sp|NN const char *send
 Apd    |int    |grok_number    |NN const char *pv|STRLEN len|NULLOK UV *valuep
@@ -1252,7 +1317,7 @@ p |int    |magic_setutf8  |NN SV* sv|NN MAGIC* mg
 p      |int    |magic_set_all_env|NN SV* sv|NN MAGIC* mg
 p      |U32    |magic_sizepack |NN SV* sv|NN MAGIC* mg
 p      |int    |magic_wipepack |NN SV* sv|NN MAGIC* mg
-pod    |SV*    |magic_methcall |NN SV *sv|NN const MAGIC *mg \
+Fpod   |SV*    |magic_methcall |NN SV *sv|NN const MAGIC *mg \
                                |NN SV *meth|U32 flags \
                                |U32 argc|...
 Ap     |I32 *  |markstack_grow
@@ -1288,12 +1353,13 @@ EXpR    |MAGIC* |mg_find_mglob  |NN SV* sv
 Apd    |int    |mg_free        |NN SV* sv
 Apd    |void   |mg_free_type   |NN SV* sv|int how
 Apd    |void   |mg_freeext     |NN SV* sv|int how|NULLOK const MGVTBL *vtbl
+Aipd   |void   |SvGETMAGIC     |NN SV *sv
 Apd    |int    |mg_get         |NN SV* sv
 ApdD   |U32    |mg_length      |NN SV* sv
 ApdT   |void   |mg_magical     |NN SV* sv
 Apd    |int    |mg_set         |NN SV* sv
 Ap     |I32    |mg_size        |NN SV* sv
-ApT    |void   |mini_mktime    |NN struct tm *ptm
+AdpT   |void   |mini_mktime    |NN struct tm *ptm
 Axmd   |OP*    |op_lvalue      |NULLOK OP* o|I32 type
 poX    |OP*    |op_lvalue_flags|NULLOK OP* o|I32 type|U32 flags
 pd     |void   |finalize_optree                |NN OP* o
@@ -1306,8 +1372,8 @@ S |void   |move_proto_attr|NN OP **proto|NN OP **attrs \
 #endif
 : Used in op.c and pp_sys.c
 p      |int    |mode_from_discipline|NULLOK const char* s|STRLEN len
-Ap     |const char*    |moreswitches   |NN const char* s
-A    |NV     |my_atof        |NN const char *s
+Cp     |const char*    |moreswitches   |NN const char* s
+Adp    |NV     |my_atof        |NN const char *s
 ATdpR  |NV     |my_strtod      |NN const char * const s|NULLOK char ** e
 Aprd   |void   |my_exit        |U32 status
 Apr    |void   |my_failure_exit
@@ -1315,7 +1381,7 @@ Ap        |I32    |my_fflush_all
 ATp    |Pid_t  |my_fork
 ATp    |void   |atfork_lock
 ATp    |void   |atfork_unlock
-ApMb   |I32    |my_lstat
+m      |I32    |my_lstat
 pX     |I32    |my_lstat_flags |NULLOK const U32 flags
 #if ! defined(HAS_MEMRCHR) && (defined(PERL_CORE) || defined(PERL_EXT))
 EeiT   |void * |my_memrchr     |NN const char * s|const char c|const STRLEN len
@@ -1326,9 +1392,9 @@ Ap        |PerlIO*|my_popen       |NN const char* cmd|NN const char* mode
 #endif
 Ap     |PerlIO*|my_popen_list  |NN const char* mode|int n|NN SV ** args
 Apd    |void   |my_setenv      |NULLOK const char* nam|NULLOK const char* val
-ApMb   |I32    |my_stat
+m      |I32    |my_stat
 pX     |I32    |my_stat_flags  |NULLOK const U32 flags
-Afp    |char * |my_strftime    |NN const char *fmt|int sec|int min|int hour|int mday|int mon|int year|int wday|int yday|int isdst
+Adfp   |char * |my_strftime    |NN const char *fmt|int sec|int min|int hour|int mday|int mon|int year|int wday|int yday|int isdst
 : Used in pp_ctl.c
 p      |void   |my_unexec
 CbDTPR |UV     |NATIVE_TO_NEED |const UV enc|const UV ch
@@ -1355,7 +1421,7 @@ Ap        |void   |newPROG        |NN OP* o
 ApdR   |OP*    |newRANGE       |I32 flags|NN OP* left|NN OP* right
 ApdR   |OP*    |newSLICEOP     |I32 flags|NULLOK OP* subscript|NULLOK OP* listop
 ApdR   |OP*    |newSTATEOP     |I32 flags|NULLOK char* label|NULLOK OP* o
-ApbM   |CV*    |newSUB         |I32 floor|NULLOK OP* o|NULLOK OP* proto \
+AdpbM  |CV*    |newSUB         |I32 floor|NULLOK OP* o|NULLOK OP* proto \
                                |NULLOK OP* block
 pd     |CV *   |newXS_len_flags|NULLOK const char *name|STRLEN len \
                                |NN XSUBADDR_t subaddr\
@@ -1406,11 +1472,11 @@ ApdR    |SV*    |newSVhek       |NULLOK const HEK *const hek
 ApdR   |SV*    |newSVpvn_share |NULLOK const char* s|I32 len|U32 hash
 ApdR   |SV*    |newSVpv_share  |NULLOK const char* s|U32 hash
 AfpdR  |SV*    |newSVpvf       |NN const char *const pat|...
-ApR    |SV*    |vnewSVpvf      |NN const char *const pat|NULLOK va_list *const args
+ApRd   |SV*    |vnewSVpvf      |NN const char *const pat|NULLOK va_list *const args
 Apd    |SV*    |newSVrv        |NN SV *const rv|NULLOK const char *const classname
 ApMbdR |SV*    |newSVsv        |NULLOK SV *const old
 AmdR   |SV*    |newSVsv_nomg   |NULLOK SV *const old
-ApR    |SV*    |newSVsv_flags  |NULLOK SV *const old|I32 flags
+CpR    |SV*    |newSVsv_flags  |NULLOK SV *const old|I32 flags
 ApdR   |SV*    |newSV_type     |const svtype type
 ApdR   |OP*    |newUNOP        |I32 type|I32 flags|NULLOK OP* first
 ApdR   |OP*    |newUNOP_AUX    |I32 type|I32 flags|NULLOK OP* first \
@@ -1481,10 +1547,10 @@ p       |void   |rpeep          |NULLOK OP* o
 : Defined in doio.c, used only in pp_hot.c
 dopx   |PerlIO*|start_glob     |NN SV *tmpglob|NN IO *io
 
-Ap     |void   |reentrant_size
-Ap     |void   |reentrant_init
-Ap     |void   |reentrant_free
-ATp    |void*  |reentrant_retry|NN const char *f|...
+Cp     |void   |reentrant_size
+Cp     |void   |reentrant_init
+Cp     |void   |reentrant_free
+CFTp   |void*  |reentrant_retry|NN const char *f|...
 
 : "Very" special - can't use the O flag for this one:
 : (The rename from perl_atexit to Perl_call_atexit was in 864dbfa3ca8032ef)
@@ -1493,7 +1559,7 @@ ApdO      |I32    |call_argv      |NN const char* sub_name|I32 flags|NN char** argv
 ApdO   |I32    |call_method    |NN const char* methname|I32 flags
 ApdO   |I32    |call_pv        |NN const char* sub_name|I32 flags
 ApdO   |I32    |call_sv        |NN SV* sv|volatile I32 flags
-Ap     |void   |despatch_signals
+Cp     |void   |despatch_signals
 Ap     |OP *   |doref          |NN OP *o|I32 type|bool set_op_ref
 ApdO   |SV*    |eval_pv        |NN const char* p|I32 croak_on_error
 ApdO   |I32    |eval_sv        |NN SV* sv|I32 flags
@@ -1520,9 +1586,9 @@ ApdT      |bool   |sync_locale
 ApxT   |void   |thread_locale_init
 ApxT   |void   |thread_locale_term
 ApdO   |void   |require_pv     |NN const char* pv
-AbpdM  |void   |pack_cat       |NN SV *cat|NN const char *pat|NN const char *patend \
+AbpdD  |void   |pack_cat       |NN SV *cat|NN const char *pat|NN const char *patend \
                                |NN SV **beglist|NN SV **endlist|NN SV ***next_in_list|U32 flags
-Apd    |void   |packlist       |NN SV *cat|NN const char *pat|NN const char *patend|NN SV **beglist|NN SV **endlist
+Apd    |void   |packlist       |NN SV *cat|NN const char *pat|NN const char *patend|NN SV **beglist|NN SV **endlist
 #if defined(PERL_USES_PL_PIDSTATUS) && defined(PERL_IN_UTIL_C)
 S      |void   |pidgone        |Pid_t pid|int status
 #endif
@@ -1536,70 +1602,11 @@ p       |void   |invmap_dump    |NN SV* invlist|NN UV * map
 Ap     |void   |pop_scope
 Ap     |void   |push_scope
 #if defined(PERL_IN_PERLY_C) || defined(PERL_IN_OP_C) || defined(PERL_IN_TOKE_C)
-ApMb   |OP*    |ref            |NULLOK OP* o|I32 type
+pMb    |OP*    |ref            |NULLOK OP* o|I32 type
 #endif
 #if defined(PERL_IN_OP_C)
 S      |OP*    |refkids        |NULLOK OP* o|I32 type
 #endif
-Ap     |void   |regdump        |NN const regexp* r
-CiTop  |struct regexp *|ReANY  |NN const REGEXP * const re
-#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_PERL_C) || defined(PERL_IN_UTF8_C)
-EXpR   |SV*    |_new_invlist_C_array|NN const UV* const list
-EXp    |bool   |_invlistEQ     |NN SV* const a|NN SV* const b|const bool complement_b
-#endif
-Ap     |I32    |pregexec       |NN REGEXP * const prog|NN char* stringarg \
-                               |NN char* strend|NN char* strbeg \
-                               |SSize_t minend |NN SV* screamer|U32 nosave
-Ap     |void   |pregfree       |NULLOK REGEXP* r
-Ap     |void   |pregfree2      |NN REGEXP *rx
-: FIXME - is anything in re using this now?
-EXp    |REGEXP*|reg_temp_copy  |NULLOK REGEXP* dsv|NN REGEXP* ssv
-Ap     |void   |regfree_internal|NN REGEXP *const rx
-#if defined(USE_ITHREADS)
-Ap     |void*  |regdupe_internal|NN REGEXP * const r|NN CLONE_PARAMS* param
-#endif
-EXp    |regexp_engine const *|current_re_engine
-Ap     |REGEXP*|pregcomp       |NN SV * const pattern|const U32 flags
-p      |REGEXP*|re_op_compile  |NULLOK SV ** const patternp \
-                               |int pat_count|NULLOK OP *expr \
-                               |NN const regexp_engine* eng \
-                               |NULLOK REGEXP *old_re \
-                               |NULLOK bool *is_bare_re \
-                               |const U32 rx_flags|const U32 pm_flags
-Ap     |REGEXP*|re_compile     |NN SV * const pattern|U32 orig_rx_flags
-Cp     |char*  |re_intuit_start|NN REGEXP * const rx \
-                               |NULLOK SV* sv \
-                               |NN const char* const strbeg \
-                               |NN char* strpos \
-                               |NN char* strend \
-                               |const U32 flags \
-                               |NULLOK re_scream_pos_data *data
-Cp     |SV*    |re_intuit_string|NN REGEXP  *const r
-Ap     |I32    |regexec_flags  |NN REGEXP *const rx|NN char *stringarg \
-                               |NN char *strend|NN char *strbeg \
-                               |SSize_t minend|NN SV *sv \
-                               |NULLOK void *data|U32 flags
-ApR    |regnode*|regnext       |NULLOK regnode* p
-EXp    |SV*|reg_named_buff          |NN REGEXP * const rx|NULLOK SV * const key \
-                                 |NULLOK SV * const value|const U32 flags
-EXp    |SV*|reg_named_buff_iter     |NN REGEXP * const rx|NULLOK const SV * const lastkey \
-                                 |const U32 flags
-Ap     |SV*|reg_named_buff_fetch    |NN REGEXP * const rx|NN SV * const namesv|const U32 flags
-Ap     |bool|reg_named_buff_exists  |NN REGEXP * const rx|NN SV * const key|const U32 flags
-Ap     |SV*|reg_named_buff_firstkey |NN REGEXP * const rx|const U32 flags
-Ap     |SV*|reg_named_buff_nextkey  |NN REGEXP * const rx|const U32 flags
-Ap     |SV*|reg_named_buff_scalar   |NN REGEXP * const rx|const U32 flags
-Ap     |SV*|reg_named_buff_all      |NN REGEXP * const rx|const U32 flags
-
-: FIXME - is anything in re using this now?
-EXp    |void|reg_numbered_buff_fetch|NN REGEXP * const rx|const I32 paren|NULLOK SV * const sv
-: FIXME - is anything in re using this now?
-EXp    |void|reg_numbered_buff_store|NN REGEXP * const rx|const I32 paren|NULLOK SV const * const value
-: FIXME - is anything in re using this now?
-EXp    |I32|reg_numbered_buff_length|NN REGEXP * const rx|NN const SV * const sv|const I32 paren
-
-: FIXME - is anything in re using this now?
-EXp    |SV*|reg_qr_package|NN REGEXP * const rx
 
 ATp    |void   |repeatcpy      |NN char* to|NN const char* from|I32 len|IV count
 AdTpP  |char*  |rninstr        |NN const char* big|NN const char* bigend \
@@ -1637,17 +1644,17 @@ Ap      |void   |save_aelem_flags|NN AV* av|SSize_t idx|NN SV **sptr \
 Ap     |I32    |save_alloc     |I32 size|I32 pad
 Apdh   |void   |save_aptr      |NN AV** aptr
 Apdh   |AV*    |save_ary       |NN GV* gv
-Ap     |void   |save_bool      |NN bool* boolp
-Ap     |void   |save_clearsv   |NN SV** svp
-Ap     |void   |save_delete    |NN HV *hv|NN char *key|I32 klen
+Cp     |void   |save_bool      |NN bool* boolp
+Cp     |void   |save_clearsv   |NN SV** svp
+Cp     |void   |save_delete    |NN HV *hv|NN char *key|I32 klen
 Ap     |void   |save_hdelete   |NN HV *hv|NN SV *keysv
 Ap     |void   |save_adelete   |NN AV *av|SSize_t key
-Ap     |void   |save_destructor|DESTRUCTORFUNC_NOCONTEXT_t f|NN void* p
-Ap     |void   |save_destructor_x|DESTRUCTORFUNC_t f|NULLOK void* p
-ApMb   |void   |save_freesv    |NULLOK SV* sv
+Cp     |void   |save_destructor|DESTRUCTORFUNC_NOCONTEXT_t f|NN void* p
+Cp     |void   |save_destructor_x|DESTRUCTORFUNC_t f|NULLOK void* p
+CpMb   |void   |save_freesv    |NULLOK SV* sv
 : Used in SAVEFREOP(), used in op.c, pp_ctl.c
-ApMb   |void   |save_freeop    |NULLOK OP* o
-ApMb   |void   |save_freepv    |NULLOK char* pv
+CpMb   |void   |save_freeop    |NULLOK OP* o
+CpMb   |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
@@ -1657,24 +1664,24 @@ Ap      |void   |save_hints
 Am     |void   |save_helem     |NN HV *hv|NN SV *key|NN SV **sptr
 Ap     |void   |save_helem_flags|NN HV *hv|NN SV *key|NN SV **sptr|const U32 flags
 Apdh   |void   |save_hptr      |NN HV** hptr
-Ap     |void   |save_I16       |NN I16* intp
-Ap     |void   |save_I32       |NN I32* intp
-Ap     |void   |save_I8        |NN I8* bytep
-Ap     |void   |save_int       |NN int* intp
+Cp     |void   |save_I16       |NN I16* intp
+Cp     |void   |save_I32       |NN I32* intp
+Cp     |void   |save_I8        |NN I8* bytep
+Cp     |void   |save_int       |NN int* intp
 Apdh   |void   |save_item      |NN SV* item
-Ap     |void   |save_iv        |NN IV *ivp
+Cp     |void   |save_iv        |NN IV *ivp
 AbpDdh |void   |save_list      |NN SV** sarg|I32 maxsarg
-AbpD   |void   |save_long      |NN long* longp
-ApMb   |void   |save_mortalizesv|NN SV* sv
+CbpD   |void   |save_long      |NN long* longp
+CpMb   |void   |save_mortalizesv|NN SV* sv
 AbpD   |void   |save_nogv      |NN GV* gv
 : Used in SAVEFREOP(), used in gv.c, op.c, perl.c, pp_ctl.c, pp_sort.c
 ApMb   |void   |save_op
 Apdh   |SV*    |save_scalar    |NN GV* gv
-Ap     |void   |save_pptr      |NN char** pptr
+Cp     |void   |save_pptr      |NN char** pptr
 Ap     |void   |save_vptr      |NN void *ptr
-Ap     |void   |save_re_context
+Cp     |void   |save_re_context
 Ap     |void   |save_padsv_and_mortalize|PADOFFSET off
-Ap     |void   |save_sptr      |NN SV** sptr
+Cp     |void   |save_sptr      |NN SV** sptr
 Xp     |void   |save_strlen    |NN STRLEN* ptr
 Apdh   |SV*    |save_svref     |NN SV** sptr
 Axpo   |void   |savetmps
@@ -1702,7 +1709,7 @@ S |OP*    |scalarseq      |NULLOK OP* o
 p      |OP*    |scalarvoid     |NN OP* o
 Apd    |NV     |scan_bin       |NN const char* start|STRLEN len|NN STRLEN* retlen
 Apd    |NV     |scan_hex       |NN const char* start|STRLEN len|NN STRLEN* retlen
-Ap     |char*  |scan_num       |NN const char* s|NN YYSTYPE *lvalp
+Cp     |char*  |scan_num       |NN const char* s|NN YYSTYPE *lvalp
 Apd    |NV     |scan_oct       |NN const char* start|STRLEN len|NN STRLEN* retlen
 Axpd   |OP*    |op_scope       |NULLOK OP* o
 : Only used by perl.c/miniperl.c, but defined in caretx.c
@@ -1712,51 +1719,51 @@ Ap      |HEK*   |share_hek      |NN const char* str|SSize_t len|U32 hash
 #ifdef PERL_USE_3ARG_SIGHANDLER
 : Used in perl.c
 Tp     |Signal_t |sighandler   |int sig|NULLOK Siginfo_t *info|NULLOK void *uap
-ATp    |Signal_t |csighandler  |int sig|NULLOK Siginfo_t *info|NULLOK void *uap
+CTp    |Signal_t |csighandler  |int sig|NULLOK Siginfo_t *info|NULLOK void *uap
 #else
 Tp     |Signal_t |sighandler   |int sig
-ATp    |Signal_t |csighandler  |int sig
+CTp    |Signal_t |csighandler  |int sig
 #endif
 Tp     |Signal_t |sighandler1  |int sig
-ATp    |Signal_t |csighandler1 |int sig
+CTp    |Signal_t |csighandler1 |int sig
 Tp     |Signal_t |sighandler3  |int sig|NULLOK Siginfo_t *info|NULLOK void *uap
-ATp    |Signal_t |csighandler3 |int sig|NULLOK Siginfo_t *info|NULLOK void *uap
-ATp    |Signal_t |perly_sighandler     |int sig|NULLOK Siginfo_t *info|NULLOK void *uap|bool safe
-Ap     |SV**   |stack_grow     |NN SV** sp|NN SV** p|SSize_t n
+CTp    |Signal_t |csighandler3 |int sig|NULLOK Siginfo_t *info|NULLOK void *uap
+CTp    |Signal_t |perly_sighandler     |int sig|NULLOK Siginfo_t *info|NULLOK void *uap|bool safe
+Cp     |SV**   |stack_grow     |NN SV** sp|NN SV** p|SSize_t n
 Ap     |I32    |start_subparse |I32 is_format|U32 flags
 Xp     |void   |init_named_cv  |NN CV *cv|NN OP *nameop
 : Used in pp_ctl.c
 p      |void   |sub_crush_depth|NN CV* cv
-ApbMd  |bool   |sv_2bool       |NN SV *const sv
-Apd    |bool   |sv_2bool_flags |NN SV *sv|I32 flags
+CpbMd  |bool   |sv_2bool       |NN SV *const sv
+Cpd    |bool   |sv_2bool_flags |NN SV *sv|I32 flags
 Apd    |CV*    |sv_2cv         |NULLOK SV* sv|NN HV **const st|NN GV **const gvp \
                                |const I32 lref
 Apd    |IO*    |sv_2io         |NN SV *const sv
 #if defined(PERL_IN_SV_C)
 S      |bool   |glob_2number   |NN GV* const gv
 #endif
-ApMb   |IV     |sv_2iv         |NN SV *sv
+CpMb   |IV     |sv_2iv         |NN SV *sv
 Apd    |IV     |sv_2iv_flags   |NN SV *const sv|const I32 flags
 Apd    |SV*    |sv_2mortal     |NULLOK SV *const sv
 Apd    |NV     |sv_2nv_flags   |NN SV *const sv|const I32 flags
 : Used in pp.c, pp_hot.c, sv.c
 pxd    |SV*    |sv_2num        |NN SV *const sv
-ApMb   |char*  |sv_2pv         |NN SV *sv|NULLOK STRLEN *lp
-Apd    |char*  |sv_2pv_flags   |NN SV *const sv|NULLOK STRLEN *const lp|const I32 flags
+CpMb   |char*  |sv_2pv         |NN SV *sv|NULLOK STRLEN *lp
+Cpd    |char*  |sv_2pv_flags   |NN SV *const sv|NULLOK STRLEN *const lp|const U32 flags
 ApdMb  |char*  |sv_2pvutf8     |NN SV *sv|NULLOK STRLEN *const lp
 Ap     |char*  |sv_2pvutf8_flags       |NN SV *sv|NULLOK STRLEN *const lp|const U32 flags
 ApdMb  |char*  |sv_2pvbyte     |NN SV *sv|NULLOK STRLEN *const lp
-Ap     |char*  |sv_2pvbyte_flags       |NN SV *sv|NULLOK STRLEN *const lp|const U32 flags
+Apd    |char*  |sv_2pvbyte_flags       |NN SV *sv|NULLOK STRLEN *const lp|const U32 flags
 AbpD   |char*  |sv_pvn_nomg    |NN SV* sv|NULLOK STRLEN* lp
-ApMb   |UV     |sv_2uv         |NN SV *sv
+CpMb   |UV     |sv_2uv         |NN SV *sv
 Apd    |UV     |sv_2uv_flags   |NN SV *const sv|const I32 flags
-AbpdD  |IV     |sv_iv          |NN SV* sv
-AbpdD  |UV     |sv_uv          |NN SV* sv
-AbpdD  |NV     |sv_nv          |NN SV* sv
-AbpdD  |char*  |sv_pvn         |NN SV *sv|NN STRLEN *lp
-AbpdD  |char*  |sv_pvutf8n     |NN SV *sv|NN STRLEN *lp
-AbpdD  |char*  |sv_pvbyten     |NN SV *sv|NN STRLEN *lp
-Apd    |I32    |sv_true        |NULLOK SV *const sv
+CbpdD  |IV     |sv_iv          |NN SV* sv
+CbpdD  |UV     |sv_uv          |NN SV* sv
+CbpdD  |NV     |sv_nv          |NN SV* sv
+CbpdD  |char*  |sv_pvn         |NN SV *sv|NN STRLEN *lp
+CbpdD  |char*  |sv_pvutf8n     |NN SV *sv|NN STRLEN *lp
+CbpdD  |char*  |sv_pvbyten     |NN SV *sv|NN STRLEN *lp
+Cpd    |I32    |sv_true        |NULLOK SV *const sv
 #if defined(PERL_IN_SV_C)
 Sd     |void   |sv_add_arena   |NN char *const ptr|const U32 size \
                                |const U32 flags
@@ -1816,7 +1823,7 @@ poxX      |void   |sv_free2       |NN SV *const sv|const U32 refcnt
 : Used only in perl.c
 pd     |void   |sv_free_arenas
 Apd    |char*  |sv_gets        |NN SV *const sv|NN PerlIO *const fp|I32 append
-Apd    |char*  |sv_grow        |NN SV *const sv|STRLEN newlen
+Cpd    |char*  |sv_grow        |NN SV *const sv|STRLEN newlen
 Apd    |void   |sv_inc         |NULLOK SV *const sv
 Apd    |void   |sv_inc_nomg    |NULLOK SV *const sv
 ApMdb  |void   |sv_insert      |NN SV *const bigstr|const STRLEN offset \
@@ -1840,7 +1847,7 @@ EXp       |MAGIC *|sv_magicext_mglob|NN SV *sv
 ApdbMR |SV*    |sv_mortalcopy  |NULLOK SV *const oldsv
 ApdR   |SV*    |sv_mortalcopy_flags|NULLOK SV *const oldsv|U32 flags
 ApdR   |SV*    |sv_newmortal
-Apd    |SV*    |sv_newref      |NULLOK SV *const sv
+Cpd    |SV*    |sv_newref      |NULLOK SV *const sv
 Ap     |char*  |sv_peek        |NULLOK SV* sv
 Apd    |void   |sv_pos_u2b     |NULLOK SV *const sv|NN I32 *const offsetp|NULLOK I32 *const lenp
 Apd    |STRLEN |sv_pos_u2b_flags|NN SV *const sv|STRLEN uoffset \
@@ -1848,9 +1855,11 @@ Apd      |STRLEN |sv_pos_u2b_flags|NN SV *const sv|STRLEN uoffset \
 Apd    |void   |sv_pos_b2u     |NULLOK SV *const sv|NN I32 *const offsetp
 Apd    |STRLEN |sv_pos_b2u_flags|NN SV *const sv|STRLEN const offset \
                                 |U32 flags
-ApMdb  |char*  |sv_pvn_force   |NN SV* sv|NULLOK STRLEN* lp
-Apd    |char*  |sv_pvutf8n_force|NN SV *const sv|NULLOK STRLEN *const lp
-Apd    |char*  |sv_pvbyten_force|NN SV *const sv|NULLOK STRLEN *const lp
+CpMdb  |char*  |sv_pvn_force   |NN SV* sv|NULLOK STRLEN* lp
+Cpd    |char*  |sv_pvutf8n_force|NN SV *const sv|NULLOK STRLEN *const lp
+Ip     |char*  |sv_pvutf8n_force_wrapper|NN SV *const sv|NULLOK STRLEN *const lp|const U32 dummy
+Cpd    |char*  |sv_pvbyten_force|NN SV *const sv|NULLOK STRLEN *const lp
+Ip     |char*  |sv_pvbyten_force_wrapper|NN SV *const sv|NULLOK STRLEN *const lp|const U32 dummy
 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
@@ -1879,13 +1888,13 @@ Apd     |void   |sv_setpvn      |NN SV *const sv|NULLOK const char *const ptr|const STRLEN
 Apd    |char  *|sv_setpv_bufsize|NN SV *const sv|const STRLEN cur|const STRLEN len
 Xp     |void   |sv_sethek      |NN SV *const sv|NULLOK const HEK *const hek
 ApMdb  |void   |sv_setsv       |NN SV *dstr|NULLOK SV *sstr
-ApMdb  |void   |sv_taint       |NN SV* sv
-ApdR   |bool   |sv_tainted     |NN SV *const sv
+CpMdb  |void   |sv_taint       |NN SV* sv
+CpdR   |bool   |sv_tainted     |NN SV *const sv
 Apd    |int    |sv_unmagic     |NN SV *const sv|const int type
 Apd    |int    |sv_unmagicext  |NN SV *const sv|const int type|NULLOK MGVTBL *vtbl
 ApdMb  |void   |sv_unref       |NN SV* sv
 Apd    |void   |sv_unref_flags |NN SV *const ref|const U32 flags
-Apd    |void   |sv_untaint     |NN SV *const sv
+Cpd    |void   |sv_untaint     |NN SV *const sv
 Apd    |void   |sv_upgrade     |NN SV *const sv|svtype new_type
 ApdMb  |void   |sv_usepvn      |NN SV* sv|NULLOK char* ptr|STRLEN len
 Apd    |void   |sv_usepvn_flags|NN SV *const sv|NULLOK char* ptr|const STRLEN len\
@@ -1899,147 +1908,582 @@ Apd   |void   |sv_vcatpvfn_flags|NN SV *const sv|NN const char *const pat|const STRL
 Apd    |void   |sv_vsetpvfn    |NN SV *const sv|NN const char *const pat|const STRLEN patlen \
                                |NULLOK va_list *const args|NULLOK SV **const svargs \
                                |const Size_t sv_count|NULLOK bool *const maybe_tainted
-ApR    |NV     |str_to_version |NN SV *sv
-#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_OP_C) || defined(PERL_IN_DOOP_C)
-EiR    |SV*    |add_cp_to_invlist      |NULLOK SV* invlist|const UV cp
-Ei     |void   |invlist_extend    |NN SV* const invlist|const UV len
-Ei     |void   |invlist_set_len|NN SV* const invlist|const UV len|const bool offset
-EiRT   |UV     |invlist_highest|NN SV* const invlist
-#endif
-#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_OP_C)
-EiRT   |STRLEN*|get_invlist_iter_addr  |NN SV* invlist
-EiT    |void   |invlist_iterinit|NN SV* invlist
-EiRT   |bool   |invlist_iternext|NN SV* invlist|NN UV* start|NN UV* end
-EiT    |void   |invlist_iterfinish|NN SV* invlist
+CpR    |NV     |str_to_version |NN SV *sv
+Cp     |void   |regdump        |NN const regexp* r
+CiTop  |struct regexp *|ReANY  |NN const REGEXP * const re
+Adph   |I32    |pregexec       |NN REGEXP * const prog|NN char* stringarg \
+                               |NN char* strend|NN char* strbeg \
+                               |SSize_t minend |NN SV* screamer|U32 nosave
+Ap     |void   |pregfree       |NULLOK REGEXP* r
+Cp     |void   |pregfree2      |NN REGEXP *rx
+: FIXME - is anything in re using this now?
+EXp    |REGEXP*|reg_temp_copy  |NULLOK REGEXP* dsv|NN REGEXP* ssv
+Cp     |void   |regfree_internal|NN REGEXP *const rx
+#if defined(USE_ITHREADS)
+Cp     |void*  |regdupe_internal|NN REGEXP * const r|NN CLONE_PARAMS* param
 #endif
+EXp    |regexp_engine const *|current_re_engine
+Adph   |REGEXP*|pregcomp       |NN SV * const pattern|const U32 flags
+p      |REGEXP*|re_op_compile  |NULLOK SV ** const patternp \
+                               |int pat_count|NULLOK OP *expr \
+                               |NN const regexp_engine* eng \
+                               |NULLOK REGEXP *old_re \
+                               |NULLOK bool *is_bare_re \
+                               |const U32 rx_flags|const U32 pm_flags
+Ap     |REGEXP*|re_compile     |NN SV * const pattern|U32 orig_rx_flags
+Cp     |char*  |re_intuit_start|NN REGEXP * const rx \
+                               |NULLOK SV* sv \
+                               |NN const char* const strbeg \
+                               |NN char* strpos \
+                               |NN char* strend \
+                               |const U32 flags \
+                               |NULLOK re_scream_pos_data *data
+Cp     |SV*    |re_intuit_string|NN REGEXP  *const r
+Cp     |I32    |regexec_flags  |NN REGEXP *const rx|NN char *stringarg \
+                               |NN char *strend|NN char *strbeg \
+                               |SSize_t minend|NN SV *sv \
+                               |NULLOK void *data|U32 flags
+CpR    |regnode*|regnext       |NULLOK regnode* p
+EXp    |SV*|reg_named_buff          |NN REGEXP * const rx|NULLOK SV * const key \
+                                 |NULLOK SV * const value|const U32 flags
+EXp    |SV*|reg_named_buff_iter     |NN REGEXP * const rx|NULLOK const SV * const lastkey \
+                                 |const U32 flags
+Cp     |SV*|reg_named_buff_fetch    |NN REGEXP * const rx|NN SV * const namesv|const U32 flags
+Cp     |bool|reg_named_buff_exists  |NN REGEXP * const rx|NN SV * const key|const U32 flags
+Cp     |SV*|reg_named_buff_firstkey |NN REGEXP * const rx|const U32 flags
+Cp     |SV*|reg_named_buff_nextkey  |NN REGEXP * const rx|const U32 flags
+Cp     |SV*|reg_named_buff_scalar   |NN REGEXP * const rx|const U32 flags
+Cp     |SV*|reg_named_buff_all      |NN REGEXP * const rx|const U32 flags
+
+: FIXME - is anything in re using this now?
+EXp    |void|reg_numbered_buff_fetch|NN REGEXP * const rx|const I32 paren|NULLOK SV * const sv
+: FIXME - is anything in re using this now?
+EXp    |void|reg_numbered_buff_store|NN REGEXP * const rx|const I32 paren|NULLOK SV const * const value
+: FIXME - is anything in re using this now?
+EXp    |I32|reg_numbered_buff_length|NN REGEXP * const rx|NN const SV * const sv|const I32 paren
+
+: FIXME - is anything in re using this now?
+EXp    |SV*|reg_qr_package|NN REGEXP * const rx
+EXpRT  |I16    |do_uniprop_match|NN const char * const key|const U16 key_len
+EXpRT  |const char * const *|get_prop_values|const int table_index
+EXpR   |SV *   |get_prop_definition|const int table_index
+EXpRT  |const char *|get_deprecated_property_msg|const Size_t warning_offset
 #if defined(PERL_IN_REGCOMP_C)
 EiRT   |bool   |invlist_is_iterating|NN SV* const invlist
 EiR    |SV*    |invlist_contents|NN SV* const invlist              \
                                 |const bool traditional_style
 EixRT  |UV     |invlist_lowest|NN SV* const invlist
-#ifndef PERL_EXT_RE_BUILD
-EiRT   |UV*    |_invlist_array_init    |NN SV* const invlist|const bool will_have_0
-EiRT   |UV     |invlist_max    |NN SV* const invlist
-EiRT   |IV*    |get_invlist_previous_index_addr|NN SV* invlist
-EiT    |void   |invlist_set_previous_index|NN SV* const invlist|const IV index
-EiRT   |IV     |invlist_previous_index|NN SV* const invlist
-EiT    |void   |invlist_trim   |NN SV* invlist
-Ei     |void   |invlist_clear  |NN SV* invlist
-#endif
 ESRT   |bool   |new_regcurly   |NN const char *s|NN const char *e
 ERS    |SV*    |make_exactf_invlist    |NN RExC_state_t *pRExC_state \
                                        |NN regnode *node
-#ifndef PERL_EXT_RE_BUILD
-ES     |void   |_append_range_to_invlist   |NN SV* const invlist|const UV start|const UV end
-ES     |void   |invlist_replace_list_destroys_src|NN SV *dest|NN SV *src
-S      |void   |initialize_invlist_guts|NN SV* invlist|const Size_t initial_size
-#endif
-#endif
-#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_UTF8_C) || defined(PERL_IN_OP_C) || defined(PERL_IN_DOOP_C)
-m      |void   |_invlist_intersection  |NN SV* const a|NN SV* const b|NN SV** i
-EXp    |void   |_invlist_intersection_maybe_complement_2nd \
-               |NULLOK SV* const a|NN SV* const b          \
-               |const bool complement_b|NN SV** i
-Cm     |void   |_invlist_union |NULLOK SV* const a|NN SV* const b|NN SV** output
-EXp    |void   |_invlist_union_maybe_complement_2nd        \
-               |NULLOK SV* const a|NN SV* const b          \
-               |const bool complement_b|NN SV** output
-m      |void   |_invlist_subtract|NN SV* const a|NN SV* const b|NN SV** result
-EXp    |void   |_invlist_invert|NN SV* const invlist
-EXpR   |SV*    |_new_invlist   |IV initial_size
-EXpR   |SV*    |_add_range_to_invlist  |NULLOK SV* invlist|UV start|UV end
-EXpR   |SV*    |_setup_canned_invlist|const STRLEN size|const UV element0|NN UV** other_elements_ptr
-#endif
-#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_SV_C)
-EpX    |SV*    |invlist_clone  |NN SV* const invlist|NULLOK SV* newlist
-#endif
-#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_REGEXEC_C)   \
- || defined(PERL_IN_TOKE_C) || defined(PERL_IN_UTF8_C)         \
- || defined(PERL_IN_PP_C) || defined(PERL_IN_OP_C)             \
- || defined(PERL_IN_DOOP_C)
-EiRT   |UV*    |invlist_array  |NN SV* const invlist
-EiRT   |bool   |is_invlist     |NULLOK SV* const invlist
-EiRT   |bool*  |get_invlist_offset_addr|NN SV* invlist
-EiRT   |UV     |_invlist_len   |NN SV* const invlist
-EiRT   |bool   |_invlist_contains_cp|NN SV* const invlist|const UV cp
-EXpRT  |SSize_t|_invlist_search        |NN SV* const invlist|const UV cp
-#endif
-#if defined(PERL_IN_PP_C) || defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_TOKE_C) || defined(PERL_IN_UNIVERSAL_C)
-EiT    |const char *|get_regex_charset_name|const U32 flags|NN STRLEN* const lenp
-#endif
-#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_REGEXEC_C)
-EXp    |SV*    |_get_regclass_nonbitmap_data                              \
-                               |NULLOK const regexp *prog                 \
-                               |NN const struct regnode *node             \
-                               |bool doinit                               \
-                               |NULLOK SV **listsvp                       \
-                               |NULLOK SV **lonly_utf8_locale             \
-                               |NULLOK SV **output_invlist
-#endif
-#if defined(PERL_IN_REGCOMP_C) || defined (PERL_IN_DUMP_C) || defined(PERL_IN_OP_C)
-EXp    |void   |_invlist_dump  |NN PerlIO *file|I32 level   \
-                               |NN const char* const indent \
-                               |NN SV* const invlist
-#endif
-Ap     |void   |taint_env
-Ap     |void   |taint_proper   |NULLOK const char* f|NN const char *const s
-EXp    |char * |_byte_dump_string                                      \
-                               |NN const U8 * const start              \
-                               |const STRLEN len                       \
-                               |const bool format
-#if defined(PERL_IN_UTF8_C)
-iTR    |int    |does_utf8_overflow|NN const U8 * const s               \
-                                  |NN const U8 * e                     \
-                                  |const bool consider_overlongs
-iTR    |int    |is_utf8_overlong_given_start_byte_ok|NN const U8 * const s \
-                                                    |const STRLEN len
-iTR    |int    |isFF_OVERLONG  |NN const U8 * const s|const STRLEN len
-SR     |char * |unexpected_non_continuation_text                       \
-               |NN const U8 * const s                                  \
-               |STRLEN print_len                                       \
-               |const STRLEN non_cont_byte_pos                         \
-               |const STRLEN expect_len
-#if 0  /* Not currently used, but may be needed in the future */
-S      |void   |warn_on_first_deprecated_use                               \
-                               |NN const char * const name                 \
-                               |NN const char * const alternative          \
-                               |const bool use_locale                      \
-                               |NN const char * const file                 \
-                               |const unsigned line
-#endif
-S      |UV     |_to_utf8_case  |const UV uv1                                   \
-                               |NULLOK const U8 *p                             \
-                               |NN U8* ustrp                                   \
-                               |NN STRLEN *lenp                                \
-                               |NN SV *invlist                                 \
-                               |NN const I32 * const invmap                    \
-                               |NULLOK const U32 * const * const aux_tables    \
-                               |NULLOK const U8 * const aux_table_lengths      \
-                               |NN const char * const normal
-S      |UV     |turkic_fc      |NN const U8 * const p |NN const U8 * const e|NN U8* ustrp|NN STRLEN *lenp
-S      |UV     |turkic_lc      |NN const U8 * const p0|NN const U8 * const e|NN U8* ustrp|NN STRLEN *lenp
-S      |UV     |turkic_uc      |NN const U8 * const p |NN const U8 * const e|NN U8* ustrp|NN STRLEN *lenp
-#endif
-Cp     |UV     |_to_utf8_lower_flags|NN const U8 *p|NULLOK const U8* e         \
-                               |NN U8* ustrp|NULLOK STRLEN *lenp|bool flags
-Cp     |UV     |_to_utf8_upper_flags   |NN const U8 *p|NULLOK const U8 *e      \
-                               |NN U8* ustrp|NULLOK STRLEN *lenp|bool flags
-Cp     |UV     |_to_utf8_title_flags   |NN const U8 *p|NULLOK const U8* e      \
-                               |NN U8* ustrp|NULLOK STRLEN *lenp|bool flags
-Cp     |UV     |_to_utf8_fold_flags|NN const U8 *p|NULLOK const U8 *e          \
-                               |NN U8* ustrp|NULLOK STRLEN *lenp|U8 flags
-#if defined(PERL_IN_MG_C) || defined(PERL_IN_PP_C)
-pT     |bool   |translate_substr_offsets|STRLEN curlen|IV pos1_iv \
-                                        |bool pos1_is_uv|IV len_iv \
-                                        |bool len_is_uv|NN STRLEN *posp \
-                                        |NN STRLEN *lenp
-#endif
-#if defined(UNLINK_ALL_VERSIONS)
-Ap     |I32    |unlnk          |NN const char* f
-#endif
-AbpdD  |SSize_t|unpack_str     |NN const char *pat|NN const char *patend|NN const char *s \
-                               |NULLOK const char *strbeg|NN const char *strend|NULLOK char **new_s \
-                               |I32 ocnt|U32 flags
+ES     |regnode_offset|reg     |NN RExC_state_t *pRExC_state \
+                               |I32 paren|NN I32 *flagp|U32 depth
+ES     |regnode_offset|regnode_guts|NN RExC_state_t *pRExC_state          \
+                               |const U8 op                               \
+                               |const STRLEN extra_len                    \
+                               |NN const char* const name
+ES     |void   |change_engine_size|NN RExC_state_t *pRExC_state|const Ptrdiff_t size
+ES     |regnode_offset|reganode|NN RExC_state_t *pRExC_state|U8 op \
+                               |U32 arg
+ES     |regnode_offset|regpnode|NN RExC_state_t *pRExC_state|U8 op \
+                               |NN SV * arg
+ES     |regnode_offset|reg2Lanode|NN RExC_state_t *pRExC_state            \
+                               |const U8 op                               \
+                               |const U32 arg1                            \
+                               |const I32 arg2
+ES     |regnode_offset|regatom |NN RExC_state_t *pRExC_state \
+                               |NN I32 *flagp|U32 depth
+ES     |regnode_offset|regbranch       |NN RExC_state_t *pRExC_state \
+                               |NN I32 *flagp|I32 first|U32 depth
+ES     |void    |set_ANYOF_arg |NN RExC_state_t* const pRExC_state \
+                               |NN regnode* const node                    \
+                               |NULLOK SV* const cp_list                  \
+                               |NULLOK SV* const runtime_defns            \
+                               |NULLOK SV* const only_utf8_locale_list
+ES     |void   |output_posix_warnings                                      \
+                               |NN RExC_state_t *pRExC_state               \
+                               |NN AV* posix_warnings
+EiT    |Size_t  |find_first_differing_byte_pos|NN const U8 * s1|NN const U8 * s2| const Size_t max
+ES     |AV*     |add_multi_match|NULLOK AV* multi_char_matches             \
+                               |NN SV* multi_string                        \
+                               |const STRLEN cp_count
+ES     |regnode_offset|regclass|NN RExC_state_t *pRExC_state                 \
+                               |NN I32 *flagp|U32 depth|const bool stop_at_1 \
+                               |bool allow_multi_fold                        \
+                               |const bool silence_non_portable              \
+                               |const bool strict                            \
+                               |bool optimizable                             \
+                               |NULLOK SV** ret_invlist
+ES     |SV *   |parse_uniprop_string|NN const char * const name            \
+                                    |Size_t name_len                       \
+                                    |const bool is_utf8                    \
+                                    |const bool to_fold                    \
+                                    |const bool runtime                    \
+                                    |const bool deferrable                 \
+                                    |NULLOK AV ** strings                  \
+                                    |NN bool * user_defined_ptr            \
+                                    |NN SV * msg                           \
+                                    |const STRLEN level
+ES     |SV *   |handle_user_defined_property|NN const char * name          \
+                                            |const STRLEN name_len         \
+                                            |const bool is_utf8            \
+                                            |const bool to_fold            \
+                                            |const bool runtime            \
+                                            |const bool deferrable         \
+                                            |NN SV* contents               \
+                                            |NN bool *user_defined_ptr     \
+                                            |NN SV * msg                   \
+                                            |const STRLEN level
+ERS    |REGEXP*|compile_wildcard|NN const char * subpattern|const STRLEN len\
+                                |const bool ignore_case
+ES     |I32    |execute_wildcard|NN REGEXP * const prog|NN char* stringarg \
+                               |NN char* strend|NN char* strbeg \
+                               |SSize_t minend |NN SV* screamer|U32 nosave
+ES     |bool   |handle_names_wildcard                                      \
+                               |NN const char * wname                      \
+                               |const STRLEN wname_len                     \
+                               |NN SV ** prop_definition                   \
+                               |NN AV ** strings
+ES     |void|add_above_Latin1_folds|NN RExC_state_t *pRExC_state|const U8 cp \
+                               |NN SV** invlist
+ES     |regnode_offset|handle_named_backref|NN RExC_state_t *pRExC_state   \
+                               |NN I32 *flagp                              \
+                               |NN char * parse_start                      \
+                               |char ch
+ESTR   |unsigned int|regex_set_precedence|const U8 my_operator
+ES     |regnode_offset|handle_regex_sets|NN RExC_state_t *pRExC_state \
+                               |NULLOK SV ** return_invlist            \
+                               |NN I32 *flagp|U32 depth                \
+                               |NN char * const oregcomp_parse
+ES     |void   |set_regex_pv   |NN RExC_state_t *pRExC_state|NN REGEXP *Rx
+#  if defined(DEBUGGING) && defined(ENABLE_REGEX_SETS_DEBUGGING)
+ES     |void   |dump_regex_sets_structures                                 \
+                               |NN RExC_state_t *pRExC_state               \
+                               |NN AV * stack                              \
+                               |const IV fence|NN AV * fence_stack
+#  endif
+ES     |void|parse_lparen_question_flags|NN RExC_state_t *pRExC_state
+ES     |regnode_offset|reg_node|NN RExC_state_t *pRExC_state|U8 op
+ES     |regnode_offset|regpiece|NN RExC_state_t *pRExC_state \
+                               |NN I32 *flagp|U32 depth
+ES     |bool   |grok_bslash_N  |NN RExC_state_t *pRExC_state               \
+                               |NULLOK regnode_offset* nodep               \
+                               |NULLOK UV *code_point_p                    \
+                               |NULLOK int* cp_count                       \
+                               |NN I32 *flagp                              \
+                               |const bool strict                          \
+                               |const U32 depth
+ES     |void   |reginsert      |NN RExC_state_t *pRExC_state \
+                               |const U8 op                                \
+                               |const regnode_offset operand               \
+                               |const U32 depth
+ESR    |bool   |regtail        |NN RExC_state_t * pRExC_state              \
+                               |NN const regnode_offset p                  \
+                               |NN const regnode_offset val                \
+                               |const U32 depth
+ES     |SV *   |reg_scan_name  |NN RExC_state_t *pRExC_state \
+                               |U32 flags
+ES     |U32    |join_exact     |NN RExC_state_t *pRExC_state \
+                               |NN regnode *scan|NN UV *min_subtract  \
+                               |NN bool *unfolded_multi_char          \
+                               |U32 flags|NULLOK regnode *val|U32 depth
+EST    |U8   |compute_EXACTish|NN RExC_state_t *pRExC_state
+ES     |void   |nextchar       |NN RExC_state_t *pRExC_state
+ES     |void   |skip_to_be_ignored_text|NN RExC_state_t *pRExC_state  \
+                               |NN char ** p                       \
+                               |const bool force_to_xmod
+EiT    |char * |reg_skipcomment|NN RExC_state_t *pRExC_state|NN char * p
+ES     |void   |scan_commit    |NN const RExC_state_t *pRExC_state \
+                               |NN struct scan_data_t *data        \
+                               |NN SSize_t *minlenp                \
+                               |int is_inf
+ES     |void   |populate_ANYOF_from_invlist|NN regnode *node|NN SV** invlist_ptr
+ES     |void   |ssc_anything   |NN regnode_ssc *ssc
+ESRT   |int    |ssc_is_anything|NN const regnode_ssc *ssc
+ES     |void   |ssc_init       |NN const RExC_state_t *pRExC_state \
+                               |NN regnode_ssc *ssc
+ESRT   |int    |ssc_is_cp_posixl_init|NN const RExC_state_t *pRExC_state \
+                               |NN const regnode_ssc *ssc
+ES     |void   |ssc_and        |NN const RExC_state_t *pRExC_state \
+                               |NN regnode_ssc *ssc                \
+                               |NN const regnode_charclass *and_with
+ES     |void   |ssc_or         |NN const RExC_state_t *pRExC_state \
+                               |NN regnode_ssc *ssc \
+                               |NN const regnode_charclass *or_with
+ES     |SV*    |get_ANYOF_cp_list_for_ssc                                 \
+                               |NN const RExC_state_t *pRExC_state \
+                               |NN const regnode_charclass* const node
+ES     |void   |ssc_intersection|NN regnode_ssc *ssc \
+                               |NN SV* const invlist|const bool invert_2nd
+ES     |void   |ssc_union      |NN regnode_ssc *ssc \
+                               |NN SV* const invlist|const bool invert_2nd
+ES     |void   |ssc_add_range  |NN regnode_ssc *ssc \
+                               |UV const start|UV const end
+ES     |void   |ssc_cp_and     |NN regnode_ssc *ssc \
+                               |UV const cp
+EST    |void   |ssc_clear_locale|NN regnode_ssc *ssc
+ETS    |bool   |is_ssc_worth_it|NN const RExC_state_t * pRExC_state \
+                               |NN const regnode_ssc * ssc
+ES     |void   |ssc_finalize   |NN RExC_state_t *pRExC_state \
+                               |NN regnode_ssc *ssc
+ES     |SSize_t|study_chunk    |NN RExC_state_t *pRExC_state \
+                               |NN regnode **scanp|NN SSize_t *minlenp \
+                               |NN SSize_t *deltap|NN regnode *last \
+                               |NULLOK struct scan_data_t *data \
+                                |I32 stopparen|U32 recursed_depth \
+                               |NULLOK regnode_ssc *and_withp \
+                               |U32 flags|U32 depth|bool was_mutate_ok
+ES     |void   |rck_elide_nothing|NN regnode *node
+ESR    |SV *   |get_ANYOFM_contents|NN const regnode * n
+ESRT   |U32    |add_data       |NN RExC_state_t* const pRExC_state \
+                               |NN const char* const s|const U32 n
+frS    |void   |re_croak       |bool utf8|NN const char* pat|...
+ES     |int    |handle_possible_posix                                      \
+                               |NN RExC_state_t *pRExC_state               \
+                               |NN const char* const s                     \
+                               |NULLOK char ** updated_parse_ptr           \
+                               |NULLOK AV** posix_warnings                 \
+                               |const bool check_only
+ES     |I32    |make_trie      |NN RExC_state_t *pRExC_state \
+                               |NN regnode *startbranch|NN regnode *first \
+                               |NN regnode *last|NN regnode *tail \
+                               |U32 word_count|U32 flags|U32 depth
+ES     |regnode *|construct_ahocorasick_from_trie|NN RExC_state_t *pRExC_state \
+                                |NN regnode *source|U32 depth
+ETSR   |int    |edit_distance  |NN const UV *src                   \
+                               |NN const UV *tgt                   \
+                               |const STRLEN x                     \
+                               |const STRLEN y                     \
+                               |const SSize_t maxDistance
+#  ifdef DEBUGGING
+EFp    |int    |re_indentf     |NN const char *fmt|U32 depth|...
+ES     |void        |regdump_intflags|NULLOK const char *lead| const U32 flags
+ES     |void   |regdump_extflags|NULLOK const char *lead| const U32 flags
+ES     |const regnode*|dumpuntil|NN const regexp *r|NN const regnode *start \
+                               |NN const regnode *node \
+                               |NULLOK const regnode *last \
+                               |NULLOK const regnode *plast \
+                               |NN SV* sv|I32 indent|U32 depth
+ES     |void   |put_code_point |NN SV* sv|UV c
+ES     |bool   |put_charclass_bitmap_innards|NN SV* sv             \
+                               |NULLOK char* bitmap                \
+                               |NULLOK SV* nonbitmap_invlist       \
+                               |NULLOK SV* only_utf8_locale_invlist\
+                               |NULLOK const regnode * const node  \
+                               |const U8 flags                     \
+                               |const bool force_as_is_display
+ES     |SV*    |put_charclass_bitmap_innards_common                \
+                               |NN SV* invlist                     \
+                               |NULLOK SV* posixes                 \
+                               |NULLOK SV* only_utf8               \
+                               |NULLOK SV* not_utf8                \
+                               |NULLOK SV* only_utf8_locale        \
+                               |const bool invert
+ES     |void   |put_charclass_bitmap_innards_invlist               \
+                               |NN SV *sv                          \
+                               |NN SV* invlist
+ES     |void   |put_range      |NN SV* sv|UV start|const UV end    \
+                               |const bool allow_literals
+ES     |void   |dump_trie      |NN const struct _reg_trie_data *trie\
+                               |NULLOK HV* widecharmap|NN AV *revcharmap\
+                               |U32 depth
+ES     |void   |dump_trie_interim_list|NN const struct _reg_trie_data *trie\
+                               |NULLOK HV* widecharmap|NN AV *revcharmap\
+                               |U32 next_alloc|U32 depth
+ES     |void   |dump_trie_interim_table|NN const struct _reg_trie_data *trie\
+                               |NULLOK HV* widecharmap|NN AV *revcharmap\
+                               |U32 next_alloc|U32 depth
+ESR    |bool   |regtail_study  |NN RExC_state_t *pRExC_state \
+                               |NN regnode_offset p|NN const regnode_offset val|U32 depth
+#  endif
+#  ifndef PERL_EXT_RE_BUILD
+EiRT   |UV*    |_invlist_array_init    |NN SV* const invlist|const bool will_have_0
+EiRT   |UV     |invlist_max    |NN SV* const invlist
+EiRT   |IV*    |get_invlist_previous_index_addr|NN SV* invlist
+EiT    |void   |invlist_set_previous_index|NN SV* const invlist|const IV index
+EiRT   |IV     |invlist_previous_index|NN SV* const invlist
+EiT    |void   |invlist_trim   |NN SV* invlist
+Ei     |void   |invlist_clear  |NN SV* invlist
+ES     |void   |_append_range_to_invlist   |NN SV* const invlist|const UV start|const UV end
+ES     |void   |invlist_replace_list_destroys_src|NN SV *dest|NN SV *src
+S      |void   |initialize_invlist_guts|NN SV* invlist|const Size_t initial_size
+#  endif
+#endif
+#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_DOOP_C) || defined(PERL_IN_OP_C)
+EiR    |SV*    |add_cp_to_invlist      |NULLOK SV* invlist|const UV cp
+Ei     |void   |invlist_extend    |NN SV* const invlist|const UV len
+Ei     |void   |invlist_set_len|NN SV* const invlist|const UV len|const bool offset
+EiRT   |UV     |invlist_highest|NN SV* const invlist
+#endif
+#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_DOOP_C) || defined(PERL_IN_OP_C) || defined(PERL_IN_UTF8_C)
+m      |void   |_invlist_intersection  |NN SV* const a|NN SV* const b|NN SV** i
+EXp    |void   |_invlist_intersection_maybe_complement_2nd \
+               |NULLOK SV* const a|NN SV* const b          \
+               |const bool complement_b|NN SV** i
+Cm     |void   |_invlist_union |NULLOK SV* const a|NN SV* const b|NN SV** output
+EXp    |void   |_invlist_union_maybe_complement_2nd        \
+               |NULLOK SV* const a|NN SV* const b          \
+               |const bool complement_b|NN SV** output
+m      |void   |_invlist_subtract|NN SV* const a|NN SV* const b|NN SV** result
+EXp    |void   |_invlist_invert|NN SV* const invlist
+EXpR   |SV*    |_new_invlist   |IV initial_size
+EXpR   |SV*    |_add_range_to_invlist  |NULLOK SV* invlist|UV start|UV end
+EXpR   |SV*    |_setup_canned_invlist|const STRLEN size|const UV element0|NN UV** other_elements_ptr
+#endif
+#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_DQUOTE_C) || defined(PERL_IN_TOKE_C)
+EpRX   |bool   |grok_bslash_x  |NN char** s                    \
+                               |NN const char* const send      \
+                               |NN UV* uv                      \
+                               |NN const char** message        \
+                               |NULLOK U32 * packed_warn       \
+                               |const bool strict              \
+                               |const bool allow_UV_MAX        \
+                               |const bool utf8
+EpRX   |bool   |grok_bslash_c  |const char source              \
+                               |NN U8 * result                 \
+                               |NN const char** message        \
+                               |NULLOK U32 * packed_warn
+EpRX   |bool   |grok_bslash_o  |NN char** s                    \
+                               |NN const char* const send      \
+                               |NN UV* uv                      \
+                               |NN const char** message        \
+                               |NULLOK U32 * packed_warn       \
+                               |const bool strict              \
+                               |const bool allow_UV_MAX        \
+                               |const bool utf8
+EpRX   |const char *|form_alien_digit_msg|const U8 which       \
+                               |const STRLEN valids_len        \
+                               |NN const char * const first_bad\
+                               |NN const char * const send     \
+                               |const bool UTF                 \
+                               |const bool braced
+#endif
+#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_DQUOTE_C) || defined(PERL_IN_TOKE_C) || defined(PERL_IN_UTF8_C)
+EpRX   |const char *|form_cp_too_large_msg|const U8 which      \
+                               |NULLOK const char * string     \
+                               |const Size_t len               \
+                               |const UV cp
+#endif
+#if defined(PERL_IN_REGCOMP_C) || defined (PERL_IN_DUMP_C) || defined(PERL_IN_OP_C)
+EXp    |void   |_invlist_dump  |NN PerlIO *file|I32 level   \
+                               |NN const char* const indent \
+                               |NN SV* const invlist
+#endif
+#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_OP_C)
+EiRT   |STRLEN*|get_invlist_iter_addr  |NN SV* invlist
+EiT    |void   |invlist_iterinit|NN SV* invlist
+EiRT   |bool   |invlist_iternext|NN SV* invlist|NN UV* start|NN UV* end
+EiT    |void   |invlist_iterfinish|NN SV* invlist
+#endif
+#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_PERL_C) || defined(PERL_IN_UTF8_C)
+EXpR   |SV*    |_new_invlist_C_array|NN const UV* const list
+EXp    |bool   |_invlistEQ     |NN SV* const a|NN SV* const b|const bool complement_b
+#endif
+#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_PP_C) || defined(PERL_IN_TOKE_C) || defined(PERL_IN_UNIVERSAL_C)
+EiT    |const char *|get_regex_charset_name|const U32 flags|NN STRLEN* const lenp
+#endif
+#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_REGEXEC_C)   \
+ || defined(PERL_IN_PP_C) || defined(PERL_IN_OP_C)             \
+ || defined(PERL_IN_TOKE_C) || defined(PERL_IN_UTF8_C)         \
+ || defined(PERL_IN_DOOP_C)
+EiRT   |UV*    |invlist_array  |NN SV* const invlist
+EiRT   |bool   |is_invlist     |NULLOK SV* const invlist
+EiRT   |bool*  |get_invlist_offset_addr|NN SV* invlist
+EiRT   |UV     |_invlist_len   |NN SV* const invlist
+EiRT   |bool   |_invlist_contains_cp|NN SV* const invlist|const UV cp
+EXpRT  |SSize_t|_invlist_search        |NN SV* const invlist|const UV cp
+#endif
+#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_REGEXEC_C)
+#  ifndef PERL_EXT_RE_BUILD
+Ep     |SV*    |get_regclass_nonbitmap_data                               \
+                               |NULLOK const regexp *prog                 \
+                               |NN const struct regnode *node             \
+                               |bool doinit                               \
+                               |NULLOK SV **listsvp                       \
+                               |NULLOK SV **lonly_utf8_locale             \
+                               |NULLOK SV **output_invlist
+#  else
+Ep     |SV*    |get_re_gclass_nonbitmap_data                              \
+                               |NULLOK const regexp *prog                 \
+                               |NN const struct regnode *node             \
+                               |bool doinit                               \
+                               |NULLOK SV **listsvp                       \
+                               |NULLOK SV **lonly_utf8_locale             \
+                               |NULLOK SV **output_invlist
+#endif
+Ep     |void   |regprop        |NULLOK const regexp *prog|NN SV* sv|NN const regnode* o|NULLOK const regmatch_info *reginfo \
+                               |NULLOK const RExC_state_t *pRExC_state
+Efp    |int    |re_printf      |NN const char *fmt|...
+#endif
+#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_REGEXEC_C) || defined(PERL_IN_TOKE_C)
+ERp    |bool   |is_grapheme    |NN const U8 * strbeg|NN const U8 * s|NN const U8 *strend|const UV cp
+#endif
+#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_REGEXEC_C) || defined(PERL_IN_UTF8_C)
+EXTp   |UV     |_to_fold_latin1|const U8 c|NN U8 *p|NN STRLEN *lenp|const unsigned int flags
+#endif
+#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_SV_C)
+EpX    |SV*    |invlist_clone  |NN SV* const invlist|NULLOK SV* newlist
+#endif
+#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_TOKE_C)
+EiRT   |bool   |regcurly       |NN const char *s
+#endif
+#if defined(PERL_IN_REGEXEC_C)
+ERS    |bool   |isFOO_utf8_lc  |const U8 classnum|NN const U8* character|NN const U8* e
+ERTS   |U8 *   |find_next_masked|NN U8 * s                             \
+                                |NN const U8 * send                    \
+                                |const U8 byte|const U8 mask
+ERTS   |U8 *|find_span_end     |NN U8* s|NN const U8 * send|const U8 span_byte
+ERTS   |U8 *|find_span_end_mask|NN U8 * s|NN const U8 * send   \
+                               |const U8 span_byte|const U8 mask
+ERS    |SSize_t|regmatch       |NN regmatch_info *reginfo|NN char *startpos|NN regnode *prog
+WERS   |I32    |regrepeat      |NN regexp *prog|NN char **startposp \
+                               |NN const regnode *p \
+                               |NN char *loceol                \
+                               |NN regmatch_info *const reginfo \
+                               |I32 max
+ERS    |bool   |regtry         |NN regmatch_info *reginfo|NN char **startposp
+ERS    |bool   |reginclass     |NULLOK regexp * const prog  \
+                               |NN const regnode * const n  \
+                               |NN const U8 * const p       \
+                               |NN const U8 * const p_end   \
+                               |bool const utf8_target
+WES    |CHECKPOINT|regcppush   |NN const regexp *rex|I32 parenfloor\
+                               |U32 maxopenparen
+WES    |void   |regcppop       |NN regexp *rex|NN U32 *maxopenparen_p
+WES    |void   |regcp_restore  |NN regexp *rex|I32 ix|NN U32 *maxopenparen_p
+ERST   |U8*    |reghop3        |NN U8 *s|SSize_t off|NN const U8 *lim
+ERST   |U8*    |reghop4        |NN U8 *s|SSize_t off|NN const U8 *llim \
+                               |NN const U8 *rlim
+ERST   |U8*    |reghopmaybe3   |NN U8 *s|SSize_t off|NN const U8 * const lim
+ERS    |char*  |find_byclass   |NN regexp * prog|NN const regnode *c \
+                               |NN char *s|NN const char *strend \
+                               |NULLOK regmatch_info *reginfo
+ES     |void   |to_utf8_substr |NN regexp * prog
+ES     |bool   |to_byte_substr |NN regexp * prog
+ERST   |I32    |reg_check_named_buff_matched   |NN const regexp *rex \
+                                               |NN const regnode *scan
+ESR    |bool   |isGCB          |const GCB_enum before                  \
+                               |const GCB_enum after                   \
+                               |NN const U8 * const strbeg             \
+                               |NN const U8 * const curpos             \
+                               |const bool utf8_target
+ESR    |GCB_enum|backup_one_GCB|NN const U8 * const strbeg                     \
+                               |NN U8 ** curpos                                \
+                               |const bool utf8_target
+ESR    |bool   |isLB           |LB_enum before                         \
+                               |LB_enum after                          \
+                               |NN const U8 * const strbeg             \
+                               |NN const U8 * const curpos             \
+                               |NN const U8 * const strend             \
+                               |const bool utf8_target
+ESR    |LB_enum|advance_one_LB |NN U8 ** curpos                                \
+                               |NN const U8 * const strend                     \
+                               |const bool utf8_target
+ESR    |LB_enum|backup_one_LB  |NN const U8 * const strbeg                     \
+                               |NN U8 ** curpos                                \
+                               |const bool utf8_target
+ESR    |bool   |isSB           |SB_enum before                         \
+                               |SB_enum after                          \
+                               |NN const U8 * const strbeg                     \
+                               |NN const U8 * const curpos                     \
+                               |NN const U8 * const strend                     \
+                               |const bool utf8_target
+ESR    |SB_enum|advance_one_SB |NN U8 ** curpos                                \
+                               |NN const U8 * const strend                     \
+                               |const bool utf8_target
+ESR    |SB_enum|backup_one_SB  |NN const U8 * const strbeg                     \
+                               |NN U8 ** curpos                                \
+                               |const bool utf8_target
+ESR    |bool   |isWB           |WB_enum previous                               \
+                               |WB_enum before                         \
+                               |WB_enum after                          \
+                               |NN const U8 * const strbeg                     \
+                               |NN const U8 * const curpos                     \
+                               |NN const U8 * const strend                     \
+                               |const bool utf8_target
+ESR    |WB_enum|advance_one_WB |NN U8 ** curpos                                \
+                               |NN const U8 * const strend                     \
+                               |const bool utf8_target                         \
+                               |const bool skip_Extend_Format
+ESR    |WB_enum|backup_one_WB  |NN WB_enum * previous                  \
+                               |NN const U8 * const strbeg                     \
+                               |NN U8 ** curpos                                \
+                               |const bool utf8_target
+EiT    |I32    |foldEQ_latin1_s2_folded|NN const char* a|NN const char* b|I32 len
+#  ifdef DEBUGGING
+ES     |void   |dump_exec_pos  |NN const char *locinput|NN const regnode *scan|NN const char *loc_regeol\
+                               |NN const char *loc_bostr|NN const char *loc_reg_starttry|const bool do_utf8|const U32 depth
+ES     |void   |debug_start_match|NN const REGEXP *prog|const bool do_utf8\
+                               |NN const char *start|NN const char *end\
+                               |NN const char *blurb
+
+EFp    |int    |re_exec_indentf|NN const char *fmt|U32 depth|...
+#  endif
+#endif
+#if defined(PERL_IN_REGEXEC_C) || defined(PERL_IN_UTF8_C)
+EXRp   |bool   |isFOO_lc       |const U8 classnum|const U8 character
+#endif
+
+Cp     |void   |taint_env
+Cp     |void   |taint_proper   |NULLOK const char* f|NN const char *const s
+EXp    |char * |_byte_dump_string                                      \
+                               |NN const U8 * const start              \
+                               |const STRLEN len                       \
+                               |const bool format
+
+#if defined(PERL_IN_UTF8_C)
+iTR    |int    |does_utf8_overflow|NN const U8 * const s               \
+                                  |NN const U8 * e                     \
+                                  |const bool consider_overlongs
+iTR    |int    |is_utf8_overlong_given_start_byte_ok|NN const U8 * const s \
+                                                    |const STRLEN len
+iTR    |int    |isFF_OVERLONG  |NN const U8 * const s|const STRLEN len
+SR     |char * |unexpected_non_continuation_text                       \
+               |NN const U8 * const s                                  \
+               |STRLEN print_len                                       \
+               |const STRLEN non_cont_byte_pos                         \
+               |const STRLEN expect_len
+#if 0  /* Not currently used, but may be needed in the future */
+S      |void   |warn_on_first_deprecated_use                               \
+                               |NN const char * const name                 \
+                               |NN const char * const alternative          \
+                               |const bool use_locale                      \
+                               |NN const char * const file                 \
+                               |const unsigned line
+#endif
+S      |UV     |_to_utf8_case  |const UV uv1                                   \
+                               |NULLOK const U8 *p                             \
+                               |NN U8* ustrp                                   \
+                               |NN STRLEN *lenp                                \
+                               |NN SV *invlist                                 \
+                               |NN const I32 * const invmap                    \
+                               |NULLOK const U32 * const * const aux_tables    \
+                               |NULLOK const U8 * const aux_table_lengths      \
+                               |NN const char * const normal
+S      |UV     |turkic_fc      |NN const U8 * const p |NN const U8 * const e|NN U8* ustrp|NN STRLEN *lenp
+S      |UV     |turkic_lc      |NN const U8 * const p0|NN const U8 * const e|NN U8* ustrp|NN STRLEN *lenp
+S      |UV     |turkic_uc      |NN const U8 * const p |NN const U8 * const e|NN U8* ustrp|NN STRLEN *lenp
+#endif
+Cp     |UV     |_to_utf8_lower_flags|NN const U8 *p|NULLOK const U8* e         \
+                               |NN U8* ustrp|NULLOK STRLEN *lenp|bool flags
+Cp     |UV     |_to_utf8_upper_flags   |NN const U8 *p|NULLOK const U8 *e      \
+                               |NN U8* ustrp|NULLOK STRLEN *lenp|bool flags
+Cp     |UV     |_to_utf8_title_flags   |NN const U8 *p|NULLOK const U8* e      \
+                               |NN U8* ustrp|NULLOK STRLEN *lenp|bool flags
+Cp     |UV     |_to_utf8_fold_flags|NN const U8 *p|NULLOK const U8 *e          \
+                               |NN U8* ustrp|NULLOK STRLEN *lenp|U8 flags
+#if defined(PERL_IN_MG_C) || defined(PERL_IN_PP_C)
+pT     |bool   |translate_substr_offsets|STRLEN curlen|IV pos1_iv \
+                                        |bool pos1_is_uv|IV len_iv \
+                                        |bool len_is_uv|NN STRLEN *posp \
+                                        |NN STRLEN *lenp
+#endif
+#if defined(UNLINK_ALL_VERSIONS)
+Cp     |I32    |unlnk          |NN const char* f
+#endif
+AbpdD  |SSize_t|unpack_str     |NN const char *pat|NN const char *patend|NN const char *s \
+                               |NULLOK const char *strbeg|NN const char *strend|NULLOK char **new_s \
+                               |I32 ocnt|U32 flags
 Apd    |SSize_t|unpackstring   |NN const char *pat|NN const char *patend|NN const char *s \
                                |NN const char *strend|U32 flags
 Ap     |void   |unsharepvn     |NULLOK const char* sv|I32 len|U32 hash
@@ -2067,7 +2511,7 @@ AxTp      |U8*    |bytes_from_utf8_loc|NN const U8 *s                         \
                                    |NN bool *is_utf8p                      \
                                    |NULLOK const U8 ** first_unconverted
 Apxd   |U8*    |bytes_to_utf8  |NN const U8 *s|NN STRLEN *lenp
-ApdD   |UV     |utf8_to_uvchr  |NN const U8 *s|NULLOK STRLEN *retlen
+ApdDb  |UV     |utf8_to_uvchr  |NN const U8 *s|NULLOK STRLEN *retlen
 CbpdD  |UV     |utf8_to_uvuni  |NN const U8 *s|NULLOK STRLEN *retlen
 CbpD   |UV     |valid_utf8_to_uvuni    |NN const U8 *s|NULLOK STRLEN *retlen
 AMpd   |UV     |utf8_to_uvchr_buf      |NN const U8 *s|NN const U8 *send|NULLOK STRLEN *retlen
@@ -2084,7 +2528,7 @@ AdMTp     |UV     |utf8n_to_uvchr_error|NN const U8 *s                        \
                                |NULLOK STRLEN *retlen                      \
                                |const U32 flags                            \
                                |NULLOK U32 * errors
-AxTdip |UV     |utf8n_to_uvchr_msgs|NN const U8 *s                         \
+ATdip  |UV     |utf8n_to_uvchr_msgs|NN const U8 *s                         \
                                |STRLEN curlen                              \
                                |NULLOK STRLEN *retlen                      \
                                |const U32 flags                            \
@@ -2098,15 +2542,15 @@ CTp     |UV     |_utf8n_to_uvchr_msgs_helper                                \
                                |NULLOK U32 * errors                        \
                                |NULLOK AV ** msgs
 CipTRd |UV     |valid_utf8_to_uvchr    |NN const U8 *s|NULLOK STRLEN *retlen
-Cdp    |UV     |utf8n_to_uvuni|NN const U8 *s|STRLEN curlen|NULLOK STRLEN *retlen|U32 flags
+CdbDp  |UV     |utf8n_to_uvuni|NN const U8 *s|STRLEN curlen|NULLOK STRLEN *retlen|U32 flags
 
 Adm    |U8*    |uvchr_to_utf8  |NN U8 *d|UV uv
 Cp     |U8*    |uvuni_to_utf8  |NN U8 *d|UV uv
 Adm    |U8*    |uvchr_to_utf8_flags    |NN U8 *d|UV uv|UV flags
-Admx   |U8*    |uvchr_to_utf8_flags_msgs|NN U8 *d|UV uv|UV flags|NULLOK HV ** msgs
+Adm    |U8*    |uvchr_to_utf8_flags_msgs|NN U8 *d|UV uv|UV flags|NULLOK HV ** msgs
 CMpd   |U8*    |uvoffuni_to_utf8_flags |NN U8 *d|UV uv|const UV flags
 Cp     |U8*    |uvoffuni_to_utf8_flags_msgs|NN U8 *d|UV uv|const UV flags|NULLOK HV** msgs
-Cdp    |U8*    |uvuni_to_utf8_flags    |NN U8 *d|UV uv|UV flags
+CdpbD  |U8*    |uvuni_to_utf8_flags    |NN U8 *d|UV uv|UV flags
 Apd    |char*  |pv_uni_display |NN SV *dsv|NN const U8 *spv|STRLEN len|STRLEN pvlim|UV flags
 ApdR   |char*  |sv_uni_display |NN SV *dsv|NN SV *ssv|STRLEN pvlim|UV flags
 EXpR   |Size_t |_inverse_folds |const UV cp                                \
@@ -2139,10 +2583,10 @@ p       |void   |report_redefined_cv|NN const SV *name \
 Apd    |void   |warn_sv        |NN SV *baseex
 Afpd   |void   |warn           |NN const char* pat|...
 Apd    |void   |vwarn          |NN const char* pat|NULLOK va_list* args
-Afp    |void   |warner         |U32 err|NN const char* pat|...
-Afp    |void   |ck_warner      |U32 err|NN const char* pat|...
-Afp    |void   |ck_warner_d    |U32 err|NN const char* pat|...
-A    |void   |vwarner        |U32 err|NN const char* pat|NULLOK va_list* args
+Adfp   |void   |warner         |U32 err|NN const char* pat|...
+Adfp   |void   |ck_warner      |U32 err|NN const char* pat|...
+Adfp   |void   |ck_warner_d    |U32 err|NN const char* pat|...
+Adp    |void   |vwarner        |U32 err|NN const char* pat|NULLOK va_list* args
 #ifdef USE_C_BACKTRACE
 pd     |Perl_c_backtrace*|get_c_backtrace|int max_depth|int skip
 dm     |void   |free_c_backtrace|NN Perl_c_backtrace* bt
@@ -2151,10 +2595,10 @@ Apd     |bool   |dump_c_backtrace|NN PerlIO* fp|int max_depth|int skip
 #endif
 : FIXME
 p      |void   |watch          |NN char** addr
-Am     |I32    |whichsig       |NN const char* sig
-Ap     |I32    |whichsig_sv    |NN SV* sigsv
-Ap     |I32    |whichsig_pv    |NN const char* sig
-Ap     |I32    |whichsig_pvn   |NN const char* sig|STRLEN len
+Amd    |I32    |whichsig       |NN const char* sig
+Apd    |I32    |whichsig_sv    |NN SV* sigsv
+Apd    |I32    |whichsig_pv    |NN const char* sig
+Apd    |I32    |whichsig_pvn   |NN const char* sig|STRLEN len
 : used to check for NULs in pathnames and other names
 AiRdp  |bool   |is_safe_syscall|NN const char *pv|STRLEN len|NN const char *what|NN const char *op_name
 #ifdef PERL_CORE
@@ -2186,18 +2630,13 @@ S       |int    |yywarn         |NN const char *const s|U32 flags
 Ap     |void   |dump_mstats    |NN const char* s
 Ap     |int    |get_mstats     |NN perl_mstats_t *buf|int buflen|int level
 #endif
-ATpa   |Malloc_t|safesysmalloc |MEM_SIZE nbytes
-ATpa   |Malloc_t|safesyscalloc |MEM_SIZE elements|MEM_SIZE size
-ATpR   |Malloc_t|safesysrealloc|Malloc_t where|MEM_SIZE nbytes
-ATp    |Free_t |safesysfree    |Malloc_t where
-AirTep |void   |croak_memory_wrap
-#if defined(PERL_GLOBAL_STRUCT)
-Ap     |struct perl_vars *|GetVars
-Ap     |struct perl_vars*|init_global_struct
-Ap     |void   |free_global_struct|NN struct perl_vars *plvarsp
-#endif
-Ap     |int    |runops_standard
-Ap     |int    |runops_debug
+ATdpa  |Malloc_t|safesysmalloc |MEM_SIZE nbytes
+ATdpa  |Malloc_t|safesyscalloc |MEM_SIZE elements|MEM_SIZE size
+ATdpR  |Malloc_t|safesysrealloc|Malloc_t where|MEM_SIZE nbytes
+AdTp   |Free_t |safesysfree    |Malloc_t where
+CrTp   |void   |croak_memory_wrap
+Cp     |int    |runops_standard
+Cp     |int    |runops_debug
 Afpd   |void   |sv_catpvf_mg   |NN SV *const sv|NN const char *const pat|...
 Apd    |void   |sv_vcatpvf_mg  |NN SV *const sv|NN const char *const pat \
                                |NULLOK va_list *const args
@@ -2221,35 +2660,35 @@ Apd     |char*  |pv_display     |NN SV *dsv|NN const char *pv|STRLEN cur|STRLEN len \
 Apd    |char*  |pv_escape      |NULLOK SV *dsv|NN char const * const str\
                                 |const STRLEN count|const STRLEN max\
                                 |NULLOK STRLEN * const escaped\
-                                |const U32 flags                               
+                                |const U32 flags
 Apd    |char*  |pv_pretty      |NN SV *dsv|NN char const * const str\
                                 |const STRLEN count|const STRLEN max\
                                 |NULLOK char const * const start_color\
                                 |NULLOK char const * const end_color\
-                                |const U32 flags                               
-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 \
+                                |const U32 flags
+Cfp    |void   |dump_indent    |I32 level|NN PerlIO *file|NN const char* pat|...
+Cp     |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 const char *name\
+Cp     |void   |do_gv_dump     |I32 level|NN PerlIO *file|NN const char *name\
                                |NULLOK GV *sv
-Ap     |void   |do_gvgv_dump   |I32 level|NN PerlIO *file|NN const char *name\
+Cp     |void   |do_gvgv_dump   |I32 level|NN PerlIO *file|NN const char *name\
                                |NULLOK GV *sv
-Ap     |void   |do_hv_dump     |I32 level|NN PerlIO *file|NN const char *name\
+Cp     |void   |do_hv_dump     |I32 level|NN PerlIO *file|NN const char *name\
                                |NULLOK HV *sv
-Ap     |void   |do_magic_dump  |I32 level|NN PerlIO *file|NULLOK const MAGIC *mg|I32 nest \
+Cp     |void   |do_magic_dump  |I32 level|NN PerlIO *file|NULLOK const MAGIC *mg|I32 nest \
                                |I32 maxnest|bool dumpops|STRLEN pvlim
-Ap     |void   |do_op_dump     |I32 level|NN PerlIO *file|NULLOK const OP *o
-Ap     |void   |do_pmop_dump   |I32 level|NN PerlIO *file|NULLOK const PMOP *pm
-Ap     |void   |do_sv_dump     |I32 level|NN PerlIO *file|NULLOK SV *sv|I32 nest \
+Cp     |void   |do_op_dump     |I32 level|NN PerlIO *file|NULLOK const OP *o
+Cp     |void   |do_pmop_dump   |I32 level|NN PerlIO *file|NULLOK const PMOP *pm
+Cp     |void   |do_sv_dump     |I32 level|NN PerlIO *file|NULLOK SV *sv|I32 nest \
                                |I32 maxnest|bool dumpops|STRLEN pvlim
 Ap     |void   |magic_dump     |NULLOK const MAGIC *mg
-Ap     |void   |reginitcolors
-ApdRMb |char*  |sv_2pv_nolen   |NN SV* sv
-ApdRMb |char*  |sv_2pvutf8_nolen|NN SV* sv
-ApdRMb |char*  |sv_2pvbyte_nolen|NN SV* sv
-ApMdbR |char*  |sv_pv          |NN SV *sv
-ApMdbR |char*  |sv_pvutf8      |NN SV *sv
-ApMdbR |char*  |sv_pvbyte      |NN SV *sv
+Cp     |void   |reginitcolors
+CpdRMb |char*  |sv_2pv_nolen   |NN SV* sv
+CpdRMb |char*  |sv_2pvutf8_nolen|NN SV* sv
+CpdRMb |char*  |sv_2pvbyte_nolen|NN SV* sv
+CpMdbR |char*  |sv_pv          |NN SV *sv
+CpMdbR |char*  |sv_pvutf8      |NN SV *sv
+CpMdbR |char*  |sv_pvbyte      |NN SV *sv
 ApMdb  |STRLEN |sv_utf8_upgrade|NN SV *sv
 Amd    |STRLEN |sv_utf8_upgrade_nomg|NN SV *sv
 ApdMb  |bool   |sv_utf8_downgrade|NN SV *const sv|const bool fail_ok
@@ -2268,12 +2707,22 @@ AiTMdp  |SV *   |SvREFCNT_inc_NN|NN SV *sv
 AiTMdp |void   |SvREFCNT_inc_void|NULLOK SV *sv
 AiMdp  |void   |SvREFCNT_dec   |NULLOK SV *sv
 AiMdp  |void   |SvREFCNT_dec_NN|NN SV *sv
-AiTp   |void   |SvAMAGIC_on    |NN SV *sv
-AiTp   |void   |SvAMAGIC_off   |NN SV *sv
+AdiTp  |void   |SvAMAGIC_on    |NN SV *sv
+AdiTp  |void   |SvAMAGIC_off   |NN SV *sv
+Aipd   |IV     |SvIV           |NN SV *sv
+Aipd   |UV     |SvUV           |NN SV *sv
+Aipd   |NV     |SvNV           |NN SV *sv
+Aipd   |IV     |SvIV_nomg      |NN SV *sv
+Aipd   |UV     |SvUV_nomg      |NN SV *sv
+Aipd   |NV     |SvNV_nomg      |NN SV *sv
+Aipd   |bool   |SvTRUE         |NULLOK SV *sv
+Aipd   |bool   |SvTRUE_nomg    |NULLOK SV *sv
+Aipd   |bool   |SvTRUE_NN      |NN SV *sv
+Cip    |bool   |SvTRUE_common  |NN SV *sv|const bool sv_2bool_is_fallback
 : This is indirectly referenced by globals.c. This is somewhat annoying.
 p      |int    |magic_killbackrefs|NN SV *sv|NN MAGIC *mg
 Ap     |OP*    |newANONATTRSUB |I32 floor|NULLOK OP *proto|NULLOK OP *attrs|NULLOK OP *block
-A    |CV*    |newATTRSUB     |I32 floor|NULLOK OP *o|NULLOK OP *proto|NULLOK OP *attrs|NULLOK OP *block
+Adm    |CV*    |newATTRSUB     |I32 floor|NULLOK OP *o|NULLOK OP *proto|NULLOK OP *attrs|NULLOK OP *block
 pdX    |CV*    |newATTRSUB_x   |I32 floor|NULLOK OP *o|NULLOK OP *proto \
                                 |NULLOK OP *attrs|NULLOK OP *block \
                                 |bool o_is_gv
@@ -2283,13 +2732,13 @@ p       |CV*    |newSTUB        |NN GV *gv|bool fake
 : Used in perly.y
 p      |OP *   |my_attrs       |NN OP *o|NULLOK OP *attrs
 #if defined(USE_ITHREADS)
-ApR    |PERL_CONTEXT*|cx_dup   |NULLOK PERL_CONTEXT* cx|I32 ix|I32 max|NN CLONE_PARAMS* param
+CpR    |PERL_CONTEXT*|cx_dup   |NULLOK PERL_CONTEXT* cx|I32 ix|I32 max|NN CLONE_PARAMS* param
 ApR    |PERL_SI*|si_dup        |NULLOK PERL_SI* si|NN CLONE_PARAMS* param
 ApR    |ANY*   |ss_dup         |NN PerlInterpreter* proto_perl|NN CLONE_PARAMS* param
 ApR    |void*  |any_dup        |NULLOK void* v|NN const PerlInterpreter* proto_perl
 ApR    |HE*    |he_dup         |NULLOK const HE* e|bool shared|NN CLONE_PARAMS* param
 ApR    |HEK*   |hek_dup        |NULLOK HEK* e|NN CLONE_PARAMS* param
-A    |void   |re_dup_guts    |NN const REGEXP *sstr|NN REGEXP *dstr \
+Adp    |void   |re_dup_guts    |NN const REGEXP *sstr|NN REGEXP *dstr \
                                |NN CLONE_PARAMS* param
 Ap     |PerlIO*|fp_dup         |NULLOK PerlIO *const fp|const char type|NN CLONE_PARAMS *const param
 ApR    |DIR*   |dirp_dup       |NULLOK DIR *const dp|NN CLONE_PARAMS *const param
@@ -2341,548 +2790,244 @@ p     |void   |init_constants
 #if defined(PERL_IN_DOOP_C)
 SR     |Size_t |do_trans_simple        |NN SV * const sv|NN const OPtrans_map * const tbl
 SR     |Size_t |do_trans_count         |NN SV * const sv|NN const OPtrans_map * const tbl
-SR     |Size_t |do_trans_complex       |NN SV * const sv|NN const OPtrans_map * const tbl
-SR     |Size_t |do_trans_invmap        |NN SV * const sv|NN AV * const map
-SR     |Size_t |do_trans_count_invmap  |NN SV * const sv|NN AV * const map
-#endif
-
-#if defined(PERL_IN_GV_C)
-S      |void   |gv_init_svtype |NN GV *gv|const svtype sv_type
-S      |void   |gv_magicalize_isa      |NN GV *gv
-S      |bool|parse_gv_stash_name|NN HV **stash|NN GV **gv \
-                     |NN const char **name|NN STRLEN *len \
-                     |NN const char *nambeg|STRLEN full_len \
-                     |const U32 is_utf8|const I32 add
-S      |bool|find_default_stash|NN HV **stash|NN const char *name \
-                     |STRLEN len|const U32 is_utf8|const I32 add \
-                     |const svtype sv_type
-S      |bool|gv_magicalize|NN GV *gv|NN HV *stash|NN const char *name \
-                     |STRLEN len \
-                     |const svtype sv_type
-S      |void|maybe_multimagic_gv|NN GV *gv|NN const char *name|const svtype sv_type
-S      |bool|gv_is_in_main|NN const char *name|STRLEN len \
-                      |const U32 is_utf8
-S      |void   |require_tie_mod|NN GV *gv|NN const char varname \
-                               |NN const char * name|STRLEN len \
-                               |const U32 flags
-#endif
-
-#if defined(PERL_IN_HV_C) || defined(PERL_IN_SV_C)
-po     |SV*    |hfree_next_entry       |NN HV *hv|NN STRLEN *indexp
-#endif
-
-#if defined(PERL_IN_HV_C)
-S      |void   |hsplit         |NN HV *hv|STRLEN const oldsize|STRLEN newsize
-S      |void   |hv_free_entries|NN HV *hv
-S      |SV*    |hv_free_ent_ret|NN HV *hv|NN HE *entry
-SR     |HE*    |new_he
-SaTR   |HEK*   |save_hek_flags |NN const char *str|I32 len|U32 hash|int flags
-ST     |void   |hv_magic_check |NN HV *hv|NN bool *needs_copy|NN bool *needs_store
-S      |void   |unshare_hek_or_pvn|NULLOK const HEK* hek|NULLOK const char* str|I32 len|U32 hash
-SR     |HEK*   |share_hek_flags|NN const char *str|STRLEN len|U32 hash|int flags
-rS     |void   |hv_notallowed  |int flags|NN const char *key|I32 klen|NN const char *msg
-iT     |U32|ptr_hash|PTRV u
-S      |struct xpvhv_aux*|hv_auxinit|NN HV *hv
-ST     |struct xpvhv_aux*|hv_auxinit_internal|NN struct xpvhv_aux *iter
-Sx     |SV*    |hv_delete_common|NULLOK HV *hv|NULLOK SV *keysv \
-               |NULLOK const char *key|STRLEN klen|int k_flags|I32 d_flags \
-               |U32 hash
-Sx     |void   |clear_placeholders     |NN HV *hv|U32 items
-#endif
-
-#if defined(PERL_IN_MG_C)
-S      |void   |save_magic_flags|I32 mgs_ix|NN SV *sv|U32 flags
-S      |int    |magic_methpack |NN SV *sv|NN const MAGIC *mg|NN SV *meth
-S      |SV*    |magic_methcall1|NN SV *sv|NN const MAGIC *mg \
-                               |NN SV *meth|U32 flags \
-                               |int n|NULLOK SV *val
-S      |void   |restore_magic  |NULLOK const void *p
-S      |void   |unwind_handler_stack|NULLOK const void *p
-S      |void   |fixup_errno_string|NN SV* sv
-
-#endif
-
-#if defined(PERL_IN_OP_C)
-SRT    |bool   |is_handle_constructor|NN const OP *o|I32 numargs
-SR     |I32    |assignment_type|NULLOK const OP *o
-S      |void   |forget_pmop    |NN PMOP *const o
-S      |void   |find_and_forget_pmops  |NN OP *o
-S      |void   |cop_free       |NN COP *cop
-S      |OP*    |modkids        |NULLOK OP *o|I32 type
-S      |OP*    |scalarboolean  |NN OP *o
-SR     |OP*    |search_const   |NN OP *o
-SR     |OP*    |new_logop      |I32 type|I32 flags|NN OP **firstp|NN OP **otherp
-S      |void   |simplify_sort  |NN OP *o
-SRT    |bool   |scalar_mod_type|NULLOK const OP *o|I32 type
-S      |OP *   |my_kid         |NULLOK OP *o|NULLOK OP *attrs|NN OP **imopsp
-S      |OP *   |dup_attrlist   |NN OP *o
-S      |void   |apply_attrs    |NN HV *stash|NN SV *target|NULLOK OP *attrs
-S      |void   |apply_attrs_my |NN HV *stash|NN OP *target|NULLOK OP *attrs|NN OP **imopsp
-S      |void   |bad_type_pv    |I32 n|NN const char *t|NN const OP *o|NN const OP *kid
-S      |void   |bad_type_gv    |I32 n|NN GV *gv|NN const OP *kid|NN const char *t
-S      |void   |no_bareword_allowed|NN OP *o
-SR     |OP*    |no_fh_allowed|NN OP *o
-SR     |OP*    |too_few_arguments_pv|NN OP *o|NN const char* name|U32 flags
-S      |OP*    |too_many_arguments_pv|NN OP *o|NN const char* name|U32 flags
-S      |bool   |looks_like_bool|NN const OP* o
-S      |OP*    |newGIVWHENOP   |NULLOK OP* cond|NN OP *block \
-                               |I32 enter_opcode|I32 leave_opcode \
-                               |PADOFFSET entertarg
-S      |OP*    |ref_array_or_hash|NULLOK OP* cond
-S      |bool   |process_special_blocks |I32 floor \
-                                       |NN const char *const fullname\
-                                       |NN GV *const gv|NN CV *const cv
-S      |void   |clear_special_blocks   |NN const char *const fullname\
-                                       |NN GV *const gv|NN CV *const cv
-#endif
-XpR    |void*  |Slab_Alloc     |size_t sz
-Xp     |void   |Slab_Free      |NN void *op
-#if defined(PERL_DEBUG_READONLY_OPS)
-#    if defined(PERL_CORE)
-pe     |void   |Slab_to_ro     |NN OPSLAB *slab
-pe     |void   |Slab_to_rw     |NN OPSLAB *const slab
-#    endif
-: Used in OpREFCNT_inc() in sv.c
-poex   |OP *   |op_refcnt_inc  |NULLOK OP *o
-: FIXME - can be static.
-poex   |PADOFFSET      |op_refcnt_dec  |NN OP *o
-#endif
-
-#if defined(PERL_IN_PERL_C)
-S      |void   |find_beginning |NN SV* linestr_sv|NN PerlIO *rsfp
-S      |void   |forbid_setid   |const char flag|const bool suidscript
-S      |void   |incpush        |NN const char *const dir|STRLEN len \
-                               |U32 flags
-S      |SV*    |mayberelocate  |NN const char *const dir|STRLEN len \
-                               |U32 flags
-S      |void   |incpush_use_sep|NN const char *p|STRLEN len|U32 flags
-S      |void   |init_interp
-S      |void   |init_ids
-S      |void   |init_main_stash
-S      |void   |init_perllib
-S      |void   |init_postdump_symbols|int argc|NN char **argv|NULLOK char **env
-S      |void   |init_predump_symbols
-rS     |void   |my_exit_jump
-S      |void   |nuke_stacks
-S      |PerlIO *|open_script   |NN const char *scriptname|bool dosearch \
-                               |NN bool *suidscript
-Sr     |void   |usage
-#ifndef SETUID_SCRIPTS_ARE_SECURE_NOW
-So     |void   |validate_suid  |NN PerlIO *rsfp
-#endif
-Sr     |void   |minus_v
-
-S      |void*  |parse_body     |NULLOK char **env|XSINIT_t xsinit
-rS     |void   |run_body       |I32 oldscope
-#  ifndef PERL_IS_MINIPERL
-S      |SV *   |incpush_if_exists|NN AV *const av|NN SV *dir|NN SV *const stem
-#  endif
-#endif
-
-#if defined(PERL_IN_PP_C)
-S      |size_t |do_chomp       |NN SV *retval|NN SV *sv|bool chomping
-S      |OP*    |do_delete_local
-SR     |SV*    |refto          |NN SV* sv
-#endif
-#if defined(PERL_IN_PP_C) || defined(PERL_IN_PP_HOT_C)
-: Used in pp_hot.c
-pReo   |GV*    |softref2xv     |NN SV *const sv|NN const char *const what \
-                               |const svtype type|NN SV ***spp
-iTR    |bool   |lossless_NV_to_IV|const NV nv|NN IV * ivp
-#endif
-
-#if defined(PERL_IN_PP_PACK_C)
-S      |SSize_t|unpack_rec     |NN struct tempsym* symptr|NN const char *s \
-                               |NN const char *strbeg|NN const char *strend|NULLOK const char **new_s
-S      |SV **  |pack_rec       |NN SV *cat|NN struct tempsym* symptr|NN SV **beglist|NN SV **endlist
-S      |SV*    |mul128         |NN SV *sv|U8 m
-S      |SSize_t|measure_struct |NN struct tempsym* symptr
-S      |bool   |next_symbol    |NN struct tempsym* symptr
-SR     |SV*    |is_an_int      |NN const char *s|STRLEN l
-S      |int    |div128         |NN SV *pnum|NN bool *done
-S      |const char *|group_end |NN const char *patptr|NN const char *patend \
-                               |char ender
-SR     |const char *|get_num   |NN const char *patptr|NN SSize_t *lenptr
-TS     |bool   |need_utf8      |NN const char *pat|NN const char *patend
-TS     |char   |first_symbol   |NN const char *pat|NN const char *patend
-SR     |char * |sv_exp_grow    |NN SV *sv|STRLEN needed
-STR    |char * |my_bytes_to_utf8|NN const U8 *start|STRLEN len|NN char *dest \
-                               |const bool needs_swap
-#endif
-
-#if defined(PERL_IN_PP_CTL_C)
-SdR    |OP*    |docatch        |Perl_ppaddr_t firstpp
-SR     |OP*    |dofindlabel    |NN OP *o|NN const char *label|STRLEN len \
-                                |U32 flags|NN OP **opstack|NN OP **oplimit
-S      |MAGIC *|doparseform    |NN SV *sv
-STR    |bool   |num_overflow   |NV value|I32 fldsize|I32 frcsize
-SR     |I32    |dopoptoeval    |I32 startingblock
-SR     |I32    |dopoptogivenfor|I32 startingblock
-SR     |I32    |dopoptolabel   |NN const char *label|STRLEN len|U32 flags
-SR     |I32    |dopoptoloop    |I32 startingblock
-SR     |I32    |dopoptosub_at  |NN const PERL_CONTEXT* cxstk|I32 startingblock
-SR     |I32    |dopoptowhen    |I32 startingblock
-S      |void   |save_lines     |NULLOK AV *array|NN SV *sv
-S      |bool   |doeval_compile |U8 gimme \
-                               |NULLOK CV* outside|U32 seq|NULLOK HV* hh
-SR     |PerlIO *|check_type_and_open|NN SV *name
-#ifndef PERL_DISABLE_PMC
-SR     |PerlIO *|doopen_pm     |NN SV *name
-#endif
-iRT    |bool   |path_is_searchable|NN const char *name
-SR     |I32    |run_user_filter|int idx|NN SV *buf_sv|int maxlen
-SR     |PMOP*  |make_matcher   |NN REGEXP* re
-SR     |bool   |matcher_matches_sv|NN PMOP* matcher|NN SV* sv
-S      |void   |destroy_matcher|NN PMOP* matcher
-S      |OP*    |do_smartmatch  |NULLOK HV* seen_this \
-                               |NULLOK HV* seen_other|const bool copied
+SR     |Size_t |do_trans_complex       |NN SV * const sv|NN const OPtrans_map * const tbl
+SR     |Size_t |do_trans_invmap        |NN SV * const sv|NN AV * const map
+SR     |Size_t |do_trans_count_invmap  |NN SV * const sv|NN AV * const map
 #endif
 
-#if defined(PERL_IN_PP_HOT_C)
-S      |void   |do_oddball     |NN SV **oddkey|NN SV **firstkey
-i      |HV*    |opmethod_stash |NN SV* meth
+#if defined(PERL_IN_GV_C)
+S      |void   |gv_init_svtype |NN GV *gv|const svtype sv_type
+S      |void   |gv_magicalize_isa      |NN GV *gv
+S      |bool|parse_gv_stash_name|NN HV **stash|NN GV **gv \
+                     |NN const char **name|NN STRLEN *len \
+                     |NN const char *nambeg|STRLEN full_len \
+                     |const U32 is_utf8|const I32 add
+S      |bool|find_default_stash|NN HV **stash|NN const char *name \
+                     |STRLEN len|const U32 is_utf8|const I32 add \
+                     |const svtype sv_type
+S      |bool|gv_magicalize|NN GV *gv|NN HV *stash|NN const char *name \
+                     |STRLEN len \
+                     |const svtype sv_type
+S      |void|maybe_multimagic_gv|NN GV *gv|NN const char *name|const svtype sv_type
+S      |bool|gv_is_in_main|NN const char *name|STRLEN len \
+                      |const U32 is_utf8
+S      |void   |require_tie_mod|NN GV *gv|NN const char varname \
+                               |NN const char * name|STRLEN len \
+                               |const U32 flags
 #endif
 
-#if defined(PERL_IN_PP_SORT_C)
-S      |I32    |sv_ncmp        |NN SV *const a|NN SV *const b
-S      |I32    |sv_i_ncmp      |NN SV *const a|NN SV *const b
-S      |I32    |amagic_ncmp    |NN SV *const a|NN SV *const b
-S      |I32    |amagic_i_ncmp  |NN SV *const a|NN SV *const b
-S      |I32    |amagic_cmp     |NN SV *const str1|NN SV *const str2
-#  ifdef USE_LOCALE_COLLATE
-S      |I32    |amagic_cmp_locale|NN SV *const str1|NN SV *const str2
-#  endif
-S      |I32    |sortcv         |NN SV *const a|NN SV *const b
-S      |I32    |sortcv_xsub    |NN SV *const a|NN SV *const b
-S      |I32    |sortcv_stacked |NN SV *const a|NN SV *const b
+#if defined(PERL_IN_HV_C) || defined(PERL_IN_SV_C)
+po     |SV*    |hfree_next_entry       |NN HV *hv|NN STRLEN *indexp
 #endif
 
-#if defined(PERL_IN_PP_SYS_C)
-S      |OP*    |doform         |NN CV *cv|NN GV *gv|NULLOK OP *retop
-#  if !defined(HAS_MKDIR) || !defined(HAS_RMDIR)
-SR     |int    |dooneliner     |NN const char *cmd|NN const char *filename
-#  endif
-S      |SV *   |space_join_names_mortal|NULLOK char *const *array
+#if defined(PERL_IN_HV_C)
+S      |void   |hsplit         |NN HV *hv|STRLEN const oldsize|STRLEN newsize
+S      |void   |hv_free_entries|NN HV *hv
+S      |SV*    |hv_free_ent_ret|NN HV *hv|NN HE *entry
+SR     |HE*    |new_he
+SaTR   |HEK*   |save_hek_flags |NN const char *str|I32 len|U32 hash|int flags
+ST     |void   |hv_magic_check |NN HV *hv|NN bool *needs_copy|NN bool *needs_store
+S      |void   |unshare_hek_or_pvn|NULLOK const HEK* hek|NULLOK const char* str|I32 len|U32 hash
+SR     |HEK*   |share_hek_flags|NN const char *str|STRLEN len|U32 hash|int flags
+rS     |void   |hv_notallowed  |int flags|NN const char *key|I32 klen|NN const char *msg
+iT     |U32|ptr_hash|PTRV u
+S      |struct xpvhv_aux*|hv_auxinit|NN HV *hv
+ST     |struct xpvhv_aux*|hv_auxinit_internal|NN struct xpvhv_aux *iter
+Sx     |SV*    |hv_delete_common|NULLOK HV *hv|NULLOK SV *keysv \
+               |NULLOK const char *key|STRLEN klen|int k_flags|I32 d_flags \
+               |U32 hash
+Sx     |void   |clear_placeholders     |NN HV *hv|U32 items
 #endif
-p      |OP *   |tied_method|NN SV *methname|NN SV **sp \
-                               |NN SV *const sv|NN const MAGIC *const mg \
-                               |const U32 flags|U32 argc|...
 
-#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_REGEXEC_C)
-Ep     |void   |regprop        |NULLOK const regexp *prog|NN SV* sv|NN const regnode* o|NULLOK const regmatch_info *reginfo \
-                               |NULLOK const RExC_state_t *pRExC_state
-Ep     |int    |re_printf      |NN const char *fmt|...
-#endif
-#if defined(PERL_IN_REGCOMP_C)
-ES     |regnode_offset|reg     |NN RExC_state_t *pRExC_state \
-                               |I32 paren|NN I32 *flagp|U32 depth
-ES     |regnode_offset|regnode_guts|NN RExC_state_t *pRExC_state          \
-                               |const U8 op                               \
-                               |const STRLEN extra_len                    \
-                               |NN const char* const name
-ES     |void   |change_engine_size|NN RExC_state_t *pRExC_state|const Ptrdiff_t size
-ES     |regnode_offset|reganode|NN RExC_state_t *pRExC_state|U8 op \
-                               |U32 arg
-ES     |regnode_offset|reg2Lanode|NN RExC_state_t *pRExC_state            \
-                               |const U8 op                               \
-                               |const U32 arg1                            \
-                               |const I32 arg2
-ES     |regnode_offset|regatom |NN RExC_state_t *pRExC_state \
-                               |NN I32 *flagp|U32 depth
-ES     |regnode_offset|regbranch       |NN RExC_state_t *pRExC_state \
-                               |NN I32 *flagp|I32 first|U32 depth
-ES     |void    |set_ANYOF_arg |NN RExC_state_t* const pRExC_state \
-                               |NN regnode* const node                    \
-                               |NULLOK SV* const cp_list                  \
-                               |NULLOK SV* const runtime_defns            \
-                               |NULLOK SV* const only_utf8_locale_list
-ES     |void   |output_posix_warnings                                      \
-                               |NN RExC_state_t *pRExC_state               \
-                               |NN AV* posix_warnings
-EiT    |Size_t  |find_first_differing_byte_pos|NN const U8 * s1|NN const U8 * s2| const Size_t max
-ES     |AV*     |add_multi_match|NULLOK AV* multi_char_matches             \
-                               |NN SV* multi_string                        \
-                               |const STRLEN cp_count
-ES     |regnode_offset|regclass|NN RExC_state_t *pRExC_state                 \
-                               |NN I32 *flagp|U32 depth|const bool stop_at_1 \
-                               |bool allow_multi_fold                        \
-                               |const bool silence_non_portable              \
-                               |const bool strict                            \
-                               |bool optimizable                             \
-                               |NULLOK SV** ret_invlist
-ES     |void|add_above_Latin1_folds|NN RExC_state_t *pRExC_state|const U8 cp \
-                               |NN SV** invlist
-Ei     |regnode_offset|handle_named_backref|NN RExC_state_t *pRExC_state   \
-                               |NN I32 *flagp                              \
-                               |NN char * parse_start                      \
-                               |char ch
-ESTR   |unsigned int|regex_set_precedence|const U8 my_operator
-ES     |regnode_offset|handle_regex_sets|NN RExC_state_t *pRExC_state \
-                               |NULLOK SV ** return_invlist            \
-                               |NN I32 *flagp|U32 depth                \
-                               |NN char * const oregcomp_parse
-ES     |void   |set_regex_pv   |NN RExC_state_t *pRExC_state|NN REGEXP *Rx
-#if defined(DEBUGGING) && defined(ENABLE_REGEX_SETS_DEBUGGING)
-ES     |void   |dump_regex_sets_structures                                 \
-                               |NN RExC_state_t *pRExC_state               \
-                               |NN AV * stack                              \
-                               |const IV fence|NN AV * fence_stack
-#endif
-ES     |void|parse_lparen_question_flags|NN RExC_state_t *pRExC_state
-ES     |regnode_offset|reg_node|NN RExC_state_t *pRExC_state|U8 op
-ES     |regnode_offset|regpiece|NN RExC_state_t *pRExC_state \
-                               |NN I32 *flagp|U32 depth
-ES     |bool   |grok_bslash_N  |NN RExC_state_t *pRExC_state               \
-                               |NULLOK regnode_offset* nodep               \
-                               |NULLOK UV *code_point_p                    \
-                               |NULLOK int* cp_count                       \
-                               |NN I32 *flagp                              \
-                               |const bool strict                          \
-                               |const U32 depth
-ES     |void   |reginsert      |NN RExC_state_t *pRExC_state \
-                               |const U8 op                                \
-                               |const regnode_offset operand               \
-                               |const U32 depth
-ESR    |bool   |regtail        |NN RExC_state_t * pRExC_state              \
-                               |NN const regnode_offset p                  \
-                               |NN const regnode_offset val                \
-                               |const U32 depth
-ES     |SV *   |reg_scan_name  |NN RExC_state_t *pRExC_state \
-                               |U32 flags
-ES     |U32    |join_exact     |NN RExC_state_t *pRExC_state \
-                               |NN regnode *scan|NN UV *min_subtract  \
-                               |NN bool *unfolded_multi_char          \
-                               |U32 flags|NULLOK regnode *val|U32 depth
-EiT    |U8   |compute_EXACTish|NN RExC_state_t *pRExC_state
-ES     |void   |nextchar       |NN RExC_state_t *pRExC_state
-ES     |void   |skip_to_be_ignored_text|NN RExC_state_t *pRExC_state  \
-                               |NN char ** p                       \
-                               |const bool force_to_xmod
-EiT    |char * |reg_skipcomment|NN RExC_state_t *pRExC_state|NN char * p
-ES     |void   |scan_commit    |NN const RExC_state_t *pRExC_state \
-                               |NN struct scan_data_t *data        \
-                               |NN SSize_t *minlenp                \
-                               |int is_inf
-ES     |void   |populate_ANYOF_from_invlist|NN regnode *node|NN SV** invlist_ptr
-ES     |void   |ssc_anything   |NN regnode_ssc *ssc
-ESRT   |int    |ssc_is_anything|NN const regnode_ssc *ssc
-ES     |void   |ssc_init       |NN const RExC_state_t *pRExC_state \
-                               |NN regnode_ssc *ssc
-ESRT   |int    |ssc_is_cp_posixl_init|NN const RExC_state_t *pRExC_state \
-                               |NN const regnode_ssc *ssc
-ES     |void   |ssc_and        |NN const RExC_state_t *pRExC_state \
-                               |NN regnode_ssc *ssc                \
-                               |NN const regnode_charclass *and_with
-ES     |void   |ssc_or         |NN const RExC_state_t *pRExC_state \
-                               |NN regnode_ssc *ssc \
-                               |NN const regnode_charclass *or_with
-ES     |SV*    |get_ANYOF_cp_list_for_ssc                                 \
-                               |NN const RExC_state_t *pRExC_state \
-                               |NN const regnode_charclass* const node
-Ei     |void   |ssc_intersection|NN regnode_ssc *ssc \
-                               |NN SV* const invlist|const bool invert_2nd
-Ei     |void   |ssc_union      |NN regnode_ssc *ssc \
-                               |NN SV* const invlist|const bool invert_2nd
-Ei     |void   |ssc_add_range  |NN regnode_ssc *ssc \
-                               |UV const start|UV const end
-Ei     |void   |ssc_cp_and     |NN regnode_ssc *ssc \
-                               |UV const cp
-EiT    |void   |ssc_clear_locale|NN regnode_ssc *ssc
-ETS    |bool   |is_ssc_worth_it|NN const RExC_state_t * pRExC_state \
-                               |NN const regnode_ssc * ssc
-ES     |void   |ssc_finalize   |NN RExC_state_t *pRExC_state \
-                               |NN regnode_ssc *ssc
-ES     |SSize_t|study_chunk    |NN RExC_state_t *pRExC_state \
-                               |NN regnode **scanp|NN SSize_t *minlenp \
-                               |NN SSize_t *deltap|NN regnode *last \
-                               |NULLOK struct scan_data_t *data \
-                                |I32 stopparen|U32 recursed_depth \
-                               |NULLOK regnode_ssc *and_withp \
-                               |U32 flags|U32 depth
-ESR    |SV *   |get_ANYOFM_contents|NN const regnode * n
-ESRT   |U32    |add_data       |NN RExC_state_t* const pRExC_state \
-                               |NN const char* const s|const U32 n
-rS     |void   |re_croak2      |bool utf8|NN const char* pat1|NN const char* pat2|...
-ES     |int    |handle_possible_posix                                      \
-                               |NN RExC_state_t *pRExC_state               \
-                               |NN const char* const s                     \
-                               |NULLOK char ** updated_parse_ptr           \
-                               |NULLOK AV** posix_warnings                 \
-                               |const bool check_only
-ES     |I32    |make_trie      |NN RExC_state_t *pRExC_state \
-                               |NN regnode *startbranch|NN regnode *first \
-                               |NN regnode *last|NN regnode *tail \
-                               |U32 word_count|U32 flags|U32 depth
-ES     |regnode *|construct_ahocorasick_from_trie|NN RExC_state_t *pRExC_state \
-                                |NN regnode *source|U32 depth
-ETSR   |int    |edit_distance  |NN const UV *src                   \
-                               |NN const UV *tgt                   \
-                               |const STRLEN x                     \
-                               |const STRLEN y                     \
-                               |const SSize_t maxDistance
-EpX    |SV *   |parse_uniprop_string|NN const char * const name            \
-                                    |Size_t name_len                       \
-                                    |const bool is_utf8                    \
-                                    |const bool to_fold                    \
-                                    |const bool runtime                    \
-                                    |const bool deferrable                 \
-                                    |NN bool * user_defined_ptr            \
-                                    |NN SV * msg                           \
-                                    |const STRLEN level
-EXp    |SV *   |handle_user_defined_property|NN const char * name          \
-                                            |const STRLEN name_len         \
-                                            |const bool is_utf8            \
-                                            |const bool to_fold            \
-                                            |const bool runtime            \
-                                            |const bool deferrable         \
-                                            |NN SV* contents               \
-                                            |NN bool *user_defined_ptr     \
-                                            |NN SV * msg                   \
-                                            |const STRLEN level
-#  ifdef DEBUGGING
-Ep     |int    |re_indentf     |NN const char *fmt|U32 depth|...
-ES     |void        |regdump_intflags|NULLOK const char *lead| const U32 flags
-ES     |void   |regdump_extflags|NULLOK const char *lead| const U32 flags
-ES     |const regnode*|dumpuntil|NN const regexp *r|NN const regnode *start \
-                               |NN const regnode *node \
-                               |NULLOK const regnode *last \
-                               |NULLOK const regnode *plast \
-                               |NN SV* sv|I32 indent|U32 depth
-ES     |void   |put_code_point |NN SV* sv|UV c
-ES     |bool   |put_charclass_bitmap_innards|NN SV* sv             \
-                               |NULLOK char* bitmap                \
-                               |NULLOK SV* nonbitmap_invlist       \
-                               |NULLOK SV* only_utf8_locale_invlist\
-                               |NULLOK const regnode * const node  \
-                               |const U8 flags                     \
-                               |const bool force_as_is_display
-ES     |SV*    |put_charclass_bitmap_innards_common                \
-                               |NN SV* invlist                     \
-                               |NULLOK SV* posixes                 \
-                               |NULLOK SV* only_utf8               \
-                               |NULLOK SV* not_utf8                \
-                               |NULLOK SV* only_utf8_locale        \
-                               |const bool invert
-ES     |void   |put_charclass_bitmap_innards_invlist               \
-                               |NN SV *sv                          \
-                               |NN SV* invlist
-ES     |void   |put_range      |NN SV* sv|UV start|const UV end    \
-                               |const bool allow_literals
-ES     |void   |dump_trie      |NN const struct _reg_trie_data *trie\
-                               |NULLOK HV* widecharmap|NN AV *revcharmap\
-                               |U32 depth
-ES     |void   |dump_trie_interim_list|NN const struct _reg_trie_data *trie\
-                               |NULLOK HV* widecharmap|NN AV *revcharmap\
-                               |U32 next_alloc|U32 depth
-ES     |void   |dump_trie_interim_table|NN const struct _reg_trie_data *trie\
-                               |NULLOK HV* widecharmap|NN AV *revcharmap\
-                               |U32 next_alloc|U32 depth
-ESR    |bool   |regtail_study  |NN RExC_state_t *pRExC_state \
-                               |NN regnode_offset p|NN const regnode_offset val|U32 depth
+#if defined(PERL_IN_MG_C)
+S      |void   |save_magic_flags|I32 mgs_ix|NN SV *sv|U32 flags
+S      |int    |magic_methpack |NN SV *sv|NN const MAGIC *mg|NN SV *meth
+S      |SV*    |magic_methcall1|NN SV *sv|NN const MAGIC *mg \
+                               |NN SV *meth|U32 flags \
+                               |int n|NULLOK SV *val
+S      |void   |restore_magic  |NULLOK const void *p
+S      |void   |unwind_handler_stack|NULLOK const void *p
+S      |void   |fixup_errno_string|NN SV* sv
+
+#endif
+
+#if defined(PERL_IN_OP_C)
+SRT    |bool   |is_handle_constructor|NN const OP *o|I32 numargs
+SR     |I32    |assignment_type|NULLOK const OP *o
+S      |void   |forget_pmop    |NN PMOP *const o
+S      |void   |find_and_forget_pmops  |NN OP *o
+S      |void   |cop_free       |NN COP *cop
+S      |OP*    |modkids        |NULLOK OP *o|I32 type
+S      |OP*    |scalarboolean  |NN OP *o
+SR     |OP*    |search_const   |NN OP *o
+SR     |OP*    |new_logop      |I32 type|I32 flags|NN OP **firstp|NN OP **otherp
+S      |void   |simplify_sort  |NN OP *o
+SRT    |bool   |scalar_mod_type|NULLOK const OP *o|I32 type
+S      |OP *   |my_kid         |NULLOK OP *o|NULLOK OP *attrs|NN OP **imopsp
+S      |OP *   |dup_attrlist   |NN OP *o
+S      |void   |apply_attrs    |NN HV *stash|NN SV *target|NULLOK OP *attrs
+S      |void   |apply_attrs_my |NN HV *stash|NN OP *target|NULLOK OP *attrs|NN OP **imopsp
+S      |void   |bad_type_pv    |I32 n|NN const char *t|NN const OP *o|NN const OP *kid
+S      |void   |bad_type_gv    |I32 n|NN GV *gv|NN const OP *kid|NN const char *t
+S      |void   |no_bareword_allowed|NN OP *o
+SR     |OP*    |no_fh_allowed|NN OP *o
+SR     |OP*    |too_few_arguments_pv|NN OP *o|NN const char* name|U32 flags
+S      |OP*    |too_many_arguments_pv|NN OP *o|NN const char* name|U32 flags
+S      |bool   |looks_like_bool|NN const OP* o
+S      |OP*    |newGIVWHENOP   |NULLOK OP* cond|NN OP *block \
+                               |I32 enter_opcode|I32 leave_opcode \
+                               |PADOFFSET entertarg
+S      |OP*    |ref_array_or_hash|NULLOK OP* cond
+S      |bool   |process_special_blocks |I32 floor \
+                                       |NN const char *const fullname\
+                                       |NN GV *const gv|NN CV *const cv
+S      |void   |clear_special_blocks   |NN const char *const fullname\
+                                       |NN GV *const gv|NN CV *const cv
+#endif
+XpR    |void*  |Slab_Alloc     |size_t sz
+Xp     |void   |Slab_Free      |NN void *op
+#if defined(PERL_DEBUG_READONLY_OPS)
+#    if defined(PERL_CORE)
+pe     |void   |Slab_to_ro     |NN OPSLAB *slab
+pe     |void   |Slab_to_rw     |NN OPSLAB *const slab
+#    endif
+: Used in OpREFCNT_inc() in sv.c
+poex   |OP *   |op_refcnt_inc  |NULLOK OP *o
+: FIXME - can be static.
+poex   |PADOFFSET      |op_refcnt_dec  |NN OP *o
+#endif
+
+#if defined(PERL_IN_PERL_C)
+S      |void   |find_beginning |NN SV* linestr_sv|NN PerlIO *rsfp
+S      |void   |forbid_setid   |const char flag|const bool suidscript
+S      |void   |incpush        |NN const char *const dir|STRLEN len \
+                               |U32 flags
+S      |SV*    |mayberelocate  |NN const char *const dir|STRLEN len \
+                               |U32 flags
+S      |void   |incpush_use_sep|NN const char *p|STRLEN len|U32 flags
+S      |void   |init_interp
+S      |void   |init_ids
+S      |void   |init_main_stash
+S      |void   |init_perllib
+S      |void   |init_postdump_symbols|int argc|NN char **argv|NULLOK char **env
+S      |void   |init_predump_symbols
+rS     |void   |my_exit_jump
+S      |void   |nuke_stacks
+S      |PerlIO *|open_script   |NN const char *scriptname|bool dosearch \
+                               |NN bool *suidscript
+Sr     |void   |usage
+#ifndef SETUID_SCRIPTS_ARE_SECURE_NOW
+So     |void   |validate_suid  |NN PerlIO *rsfp
+#endif
+Sr     |void   |minus_v
+
+S      |void*  |parse_body     |NULLOK char **env|XSINIT_t xsinit
+rS     |void   |run_body       |I32 oldscope
+#  ifndef PERL_IS_MINIPERL
+S      |SV *   |incpush_if_exists|NN AV *const av|NN SV *dir|NN SV *const stem
 #  endif
 #endif
 
-#if defined(PERL_IN_REGEXEC_C) || defined(PERL_IN_UTF8_C)
-EXRp   |bool   |isFOO_lc       |const U8 classnum|const U8 character
+#if defined(PERL_IN_PP_C)
+S      |size_t |do_chomp       |NN SV *retval|NN SV *sv|bool chomping
+S      |OP*    |do_delete_local
+SR     |SV*    |refto          |NN SV* sv
+#endif
+#if defined(PERL_IN_PP_C) || defined(PERL_IN_PP_HOT_C)
+: Used in pp_hot.c
+pReo   |GV*    |softref2xv     |NN SV *const sv|NN const char *const what \
+                               |const svtype type|NN SV ***spp
+iTR    |bool   |lossless_NV_to_IV|const NV nv|NN IV * ivp
+#endif
+#if defined(PERL_IN_PP_HOT_C)
+IR     |bool   |should_we_output_Debug_r|NN regexp * prog
 #endif
 
-#if defined(PERL_IN_REGEXEC_C) || defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_TOKE_C)
-ERp    |bool   |is_grapheme    |NN const U8 * strbeg|NN const U8 * s|NN const U8 *strend|const UV cp
+#if defined(PERL_IN_PP_PACK_C)
+S      |SSize_t|unpack_rec     |NN struct tempsym* symptr|NN const char *s \
+                               |NN const char *strbeg|NN const char *strend|NULLOK const char **new_s
+S      |SV **  |pack_rec       |NN SV *cat|NN struct tempsym* symptr|NN SV **beglist|NN SV **endlist
+S      |SV*    |mul128         |NN SV *sv|U8 m
+S      |SSize_t|measure_struct |NN struct tempsym* symptr
+S      |bool   |next_symbol    |NN struct tempsym* symptr
+SR     |SV*    |is_an_int      |NN const char *s|STRLEN l
+S      |int    |div128         |NN SV *pnum|NN bool *done
+S      |const char *|group_end |NN const char *patptr|NN const char *patend \
+                               |char ender
+SR     |const char *|get_num   |NN const char *patptr|NN SSize_t *lenptr
+TS     |bool   |need_utf8      |NN const char *pat|NN const char *patend
+TS     |char   |first_symbol   |NN const char *pat|NN const char *patend
+SR     |char * |sv_exp_grow    |NN SV *sv|STRLEN needed
+STR    |char * |my_bytes_to_utf8|NN const U8 *start|STRLEN len|NN char *dest \
+                               |const bool needs_swap
 #endif
 
-#if defined(PERL_IN_REGEXEC_C)
-ERS    |bool   |isFOO_utf8_lc  |const U8 classnum|NN const U8* character|NN const U8* e
-ERTS   |U8 *   |find_next_masked|NN U8 * s                             \
-                                |NN const U8 * send                    \
-                                |const U8 byte|const U8 mask
-ERTS   |U8 *|find_span_end     |NN U8* s|NN const U8 * send|const U8 span_byte
-ERTS   |U8 *|find_span_end_mask|NN U8 * s|NN const U8 * send   \
-                               |const U8 span_byte|const U8 mask
-ERS    |SSize_t|regmatch       |NN regmatch_info *reginfo|NN char *startpos|NN regnode *prog
-WERS   |I32    |regrepeat      |NN regexp *prog|NN char **startposp \
-                               |NN const regnode *p \
-                               |NN char *loceol                \
-                               |NN regmatch_info *const reginfo \
-                               |I32 max
-ERS    |bool   |regtry         |NN regmatch_info *reginfo|NN char **startposp
-ERS    |bool   |reginclass     |NULLOK regexp * const prog  \
-                               |NN const regnode * const n  \
-                               |NN const U8 * const p       \
-                               |NN const U8 * const p_end   \
-                               |bool const utf8_target
-WES    |CHECKPOINT|regcppush   |NN const regexp *rex|I32 parenfloor\
-                               |U32 maxopenparen
-WES    |void   |regcppop       |NN regexp *rex|NN U32 *maxopenparen_p
-WES    |void   |regcp_restore  |NN regexp *rex|I32 ix|NN U32 *maxopenparen_p
-ERST   |U8*    |reghop3        |NN U8 *s|SSize_t off|NN const U8 *lim
-ERST   |U8*    |reghop4        |NN U8 *s|SSize_t off|NN const U8 *llim \
-                               |NN const U8 *rlim
-ERST   |U8*    |reghopmaybe3   |NN U8 *s|SSize_t off|NN const U8 * const lim
-ERS    |char*  |find_byclass   |NN regexp * prog|NN const regnode *c \
-                               |NN char *s|NN const char *strend \
-                               |NULLOK regmatch_info *reginfo
-ES     |void   |to_utf8_substr |NN regexp * prog
-ES     |bool   |to_byte_substr |NN regexp * prog
-ERST   |I32    |reg_check_named_buff_matched   |NN const regexp *rex \
-                                               |NN const regnode *scan
-ESR    |bool   |isGCB          |const GCB_enum before                  \
-                               |const GCB_enum after                   \
-                               |NN const U8 * const strbeg             \
-                               |NN const U8 * const curpos             \
-                               |const bool utf8_target
-ESR    |GCB_enum|backup_one_GCB|NN const U8 * const strbeg                     \
-                               |NN U8 ** curpos                                \
-                               |const bool utf8_target
-ESR    |bool   |isLB           |LB_enum before                         \
-                               |LB_enum after                          \
-                               |NN const U8 * const strbeg             \
-                               |NN const U8 * const curpos             \
-                               |NN const U8 * const strend             \
-                               |const bool utf8_target
-ESR    |LB_enum|advance_one_LB |NN U8 ** curpos                                \
-                               |NN const U8 * const strend                     \
-                               |const bool utf8_target
-ESR    |LB_enum|backup_one_LB  |NN const U8 * const strbeg                     \
-                               |NN U8 ** curpos                                \
-                               |const bool utf8_target
-ESR    |bool   |isSB           |SB_enum before                         \
-                               |SB_enum after                          \
-                               |NN const U8 * const strbeg                     \
-                               |NN const U8 * const curpos                     \
-                               |NN const U8 * const strend                     \
-                               |const bool utf8_target
-ESR    |SB_enum|advance_one_SB |NN U8 ** curpos                                \
-                               |NN const U8 * const strend                     \
-                               |const bool utf8_target
-ESR    |SB_enum|backup_one_SB  |NN const U8 * const strbeg                     \
-                               |NN U8 ** curpos                                \
-                               |const bool utf8_target
-ESR    |bool   |isWB           |WB_enum previous                               \
-                               |WB_enum before                         \
-                               |WB_enum after                          \
-                               |NN const U8 * const strbeg                     \
-                               |NN const U8 * const curpos                     \
-                               |NN const U8 * const strend                     \
-                               |const bool utf8_target
-ESR    |WB_enum|advance_one_WB |NN U8 ** curpos                                \
-                               |NN const U8 * const strend                     \
-                               |const bool utf8_target                         \
-                               |const bool skip_Extend_Format
-ESR    |WB_enum|backup_one_WB  |NN WB_enum * previous                  \
-                               |NN const U8 * const strbeg                     \
-                               |NN U8 ** curpos                                \
-                               |const bool utf8_target
-EiT    |I32    |foldEQ_latin1_s2_folded|NN const char* a|NN const char* b|I32 len
-#  ifdef DEBUGGING
-ES     |void   |dump_exec_pos  |NN const char *locinput|NN const regnode *scan|NN const char *loc_regeol\
-                               |NN const char *loc_bostr|NN const char *loc_reg_starttry|const bool do_utf8|const U32 depth
-ES     |void   |debug_start_match|NN const REGEXP *prog|const bool do_utf8\
-                               |NN const char *start|NN const char *end\
-                               |NN const char *blurb
+#if defined(PERL_IN_PP_CTL_C)
+SdR    |OP*    |docatch        |Perl_ppaddr_t firstpp
+SR     |OP*    |dofindlabel    |NN OP *o|NN const char *label|STRLEN len \
+                                |U32 flags|NN OP **opstack|NN OP **oplimit
+S      |MAGIC *|doparseform    |NN SV *sv
+STR    |bool   |num_overflow   |NV value|I32 fldsize|I32 frcsize
+SR     |I32    |dopoptoeval    |I32 startingblock
+SR     |I32    |dopoptogivenfor|I32 startingblock
+SR     |I32    |dopoptolabel   |NN const char *label|STRLEN len|U32 flags
+SR     |I32    |dopoptoloop    |I32 startingblock
+SR     |I32    |dopoptosub_at  |NN const PERL_CONTEXT* cxstk|I32 startingblock
+SR     |I32    |dopoptowhen    |I32 startingblock
+S      |void   |save_lines     |NULLOK AV *array|NN SV *sv
+S      |bool   |doeval_compile |U8 gimme \
+                               |NULLOK CV* outside|U32 seq|NULLOK HV* hh
+SR     |PerlIO *|check_type_and_open|NN SV *name
+#ifndef PERL_DISABLE_PMC
+SR     |PerlIO *|doopen_pm     |NN SV *name
+#endif
+iRT    |bool   |path_is_searchable|NN const char *name
+SR     |I32    |run_user_filter|int idx|NN SV *buf_sv|int maxlen
+SR     |PMOP*  |make_matcher   |NN REGEXP* re
+SR     |bool   |matcher_matches_sv|NN PMOP* matcher|NN SV* sv
+S      |void   |destroy_matcher|NN PMOP* matcher
+S      |OP*    |do_smartmatch  |NULLOK HV* seen_this \
+                               |NULLOK HV* seen_other|const bool copied
+#endif
+
+#if defined(PERL_IN_PP_HOT_C)
+S      |void   |do_oddball     |NN SV **oddkey|NN SV **firstkey
+i      |HV*    |opmethod_stash |NN SV* meth
+#endif
+
+#if defined(PERL_IN_PP_SORT_C)
+I      |I32    |sv_ncmp        |NN SV *const a|NN SV *const b
+I      |I32    |sv_ncmp_desc   |NN SV *const a|NN SV *const b
+I      |I32    |sv_i_ncmp      |NN SV *const a|NN SV *const b
+I      |I32    |sv_i_ncmp_desc |NN SV *const a|NN SV *const b
+I      |I32    |amagic_ncmp    |NN SV *const a|NN SV *const b
+I      |I32    |amagic_ncmp_desc       |NN SV *const a|NN SV *const b
+I      |I32    |amagic_i_ncmp  |NN SV *const a|NN SV *const b
+I      |I32    |amagic_i_ncmp_desc     |NN SV *const a|NN SV *const b
+I      |I32    |amagic_cmp     |NN SV *const str1|NN SV *const str2
+I      |I32    |amagic_cmp_desc        |NN SV *const str1|NN SV *const str2
+I      |I32    |cmp_desc       |NN SV *const str1|NN SV *const str2
+#  ifdef USE_LOCALE_COLLATE
+I      |I32    |amagic_cmp_locale     |NN SV *const str1|NN SV *const str2
+I      |I32    |amagic_cmp_locale_desc|NN SV *const str1|NN SV *const str2
+I      |I32    |cmp_locale_desc|NN SV *const str1|NN SV *const str2
+#  endif
+S      |I32    |sortcv         |NN SV *const a|NN SV *const b
+S      |I32    |sortcv_xsub    |NN SV *const a|NN SV *const b
+S      |I32    |sortcv_stacked |NN SV *const a|NN SV *const b
+I      |void   |sortsv_flags_impl      |NULLOK SV** array|size_t num_elts|NN SVCOMPARE_t cmp|U32 flags
+#endif
 
-Ep     |int    |re_exec_indentf        |NN const char *fmt|U32 depth|...
+#if defined(PERL_IN_PP_SYS_C)
+S      |OP*    |doform         |NN CV *cv|NN GV *gv|NULLOK OP *retop
+#  if !defined(HAS_MKDIR) || !defined(HAS_RMDIR)
+SR     |int    |dooneliner     |NN const char *cmd|NN const char *filename
 #  endif
+S      |SV *   |space_join_names_mortal|NULLOK char *const *array
 #endif
+Fp     |OP *   |tied_method|NN SV *methname|NN SV **sp \
+                               |NN SV *const sv|NN const MAGIC *const mg \
+                               |const U32 flags|U32 argc|...
 
 #if defined(PERL_IN_DUMP_C)
 S      |CV*    |deb_curcv      |I32 ix
@@ -2962,6 +3107,10 @@ EXpR     |SV*    |get_and_check_backslash_N_name|NN const char* s        \
                                |NN const char* const e                 \
                                |const bool is_utf8                     \
                                |NN const char** error_msg
+EXpR   |HV*    |load_charnames |NN SV * char_name                      \
+                               |NN const char * context                \
+                               |const STRLEN context_len               \
+                               |NN const char ** error_msg
 
 : For use ONLY in B::Hooks::Parser, by special dispensation
 EXpxR  |char*  |scan_str       |NN char *start|int keep_quoted \
@@ -3144,7 +3293,7 @@ Apd       |void   |sv_catpv_flags |NN SV *dstr|NN const char *sstr \
 Apd    |void   |sv_catsv_flags |NN SV *const dsv|NULLOK SV *const ssv|const I32 flags
 Amd    |STRLEN |sv_utf8_upgrade_flags|NN SV *const sv|const I32 flags
 Adp    |STRLEN |sv_utf8_upgrade_flags_grow|NN SV *const sv|const I32 flags|STRLEN extra
-Apd    |char*  |sv_pvn_force_flags|NN SV *const sv|NULLOK STRLEN *const lp|const I32 flags
+Apd    |char*  |sv_pvn_force_flags|NN SV *const sv|NULLOK STRLEN *const lp|const U32 flags
 AdpMb  |void   |sv_copypv      |NN SV *const dsv|NN SV *const ssv
 Amd    |void   |sv_copypv_nomg |NN SV *const dsv|NN SV *const ssv
 Apd    |void   |sv_copypv_flags        |NN SV *const dsv|NN SV *const ssv|const I32 flags
@@ -3236,8 +3385,8 @@ Sd        |PADOFFSET|pad_findlex  |NN const char *namepv|STRLEN namelen|U32 flags \
                                |NN PADNAME** out_name|NN int *out_flags
 #endif
 #ifdef DEBUGGING
-Apd    |SV*    |pad_sv         |PADOFFSET po
-Apd    |void   |pad_setsv      |PADOFFSET po|NN SV* sv
+Cpd    |SV*    |pad_sv         |PADOFFSET po
+Cpd    |void   |pad_setsv      |PADOFFSET po|NN SV* sv
 #endif
 pd     |void   |pad_block_start|int full
 Apd    |U32    |intro_my
@@ -3261,7 +3410,7 @@ Apd       |CV*    |cv_clone       |NN CV* proto
 p      |CV*    |cv_clone_into  |NN CV* proto|NN CV *target
 pd     |void   |pad_fixup_inner_anons|NN PADLIST *padlist|NN CV *old_cv|NN CV *new_cv
 pdX    |void   |pad_push       |NN PADLIST *padlist|int depth
-ApbdRM |HV*    |pad_compname_type|const PADOFFSET po
+ApbdDR |HV*    |pad_compname_type|const PADOFFSET po
 AxpdRT |PADNAME *|padnamelist_fetch|NN PADNAMELIST *pnl|SSize_t key
 Xop    |void   |padnamelist_free|NN PADNAMELIST *pnl
 Axpd   |PADNAME **|padnamelist_store|NN PADNAMELIST *pnl|SSize_t key \
@@ -3288,7 +3437,7 @@ pR        |int    |get_debug_opts |NN const char **s|bool givehelp
 #endif
 Ap     |void   |save_set_svflags|NN SV *sv|U32 mask|U32 val
 #ifdef DEBUGGING
-Apod   |void   |hv_assert      |NN HV *hv
+Cpod   |void   |hv_assert      |NN HV *hv
 #endif
 
 ApdR   |SV*    |hv_scalar      |NN HV *hv
@@ -3327,8 +3476,8 @@ Sxd       |SV*    |find_uninit_var|NULLOK const OP *const obase \
                |NN const char **desc_p
 #endif
 
-A    |GV*    |gv_fetchpvn_flags|NN const char* name|STRLEN len|I32 flags|const svtype sv_type
-A    |GV*    |gv_fetchsv|NN SV *name|I32 flags|const svtype sv_type
+Adp    |GV*    |gv_fetchpvn_flags|NN const char* name|STRLEN len|I32 flags|const svtype sv_type
+Adp    |GV*    |gv_fetchsv|NN SV *name|I32 flags|const svtype sv_type
 
 #ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
 : Used in sv.c
@@ -3341,8 +3490,8 @@ ApbM      |GV*    |gv_SVadd       |NULLOK GV *gv
 #if defined(PERL_IN_UTIL_C)
 S      |bool   |ckwarn_common  |U32 w
 #endif
-ApoP   |bool   |ckwarn         |U32 w
-ApoP   |bool   |ckwarn_d       |U32 w
+CpoP   |bool   |ckwarn         |U32 w
+CpoP   |bool   |ckwarn_d       |U32 w
 : FIXME - exported for ByteLoader - public or private?
 XEopxR |STRLEN *|new_warnings_bitfield|NULLOK STRLEN *buffer \
                                |NN const char *const bits|STRLEN size
@@ -3358,18 +3507,13 @@ pTd     |bool|quadmath_format_needed|NN const char* format
 pe     |void   |my_clearenv
 
 #ifdef PERL_IMPLICIT_CONTEXT
-#ifdef PERL_GLOBAL_STRUCT_PRIVATE
-Apo    |void*  |my_cxt_init    |NN const char *my_cxt_key|size_t size
-Apo    |int    |my_cxt_index   |NN const char *my_cxt_key
-#else
 Apo    |void*  |my_cxt_init    |NN int *indexp|size_t size
 #endif
-#endif
 #if defined(PERL_IN_UTIL_C)
 So     |void   |xs_version_bootcheck|U32 items|U32 ax|NN const char *xs_p \
                                |STRLEN xs_len
 #endif
-XpoT   |I32    |xs_handshake   |const U32 key|NN void * v_my_perl\
+FXpoT  |I32    |xs_handshake   |const U32 key|NN void * v_my_perl\
                                |NN const char * file| ...
 Xp     |void   |xs_boot_epilog |const I32 ax
 #ifndef HAS_STRLCAT
@@ -3438,9 +3582,9 @@ Apd       |void   |mro_method_changed_in  |NN HV* stash
 pde    |void   |mro_package_moved      |NULLOK HV * const stash|NULLOK HV * const oldstash|NN const GV * const gv|U32 flags
 : Only used in perl.c
 p      |void   |boot_core_mro
-ApoT   |void   |sys_init       |NN int* argc|NN char*** argv
-ApoT   |void   |sys_init3      |NN int* argc|NN char*** argv|NN char*** env
-ApoT   |void   |sys_term
+CpoT   |void   |sys_init       |NN int* argc|NN char*** argv
+CpoT   |void   |sys_init3      |NN int* argc|NN char*** argv|NN char*** env
+CpoT   |void   |sys_term
 Apxd   |const char *|cop_fetch_label|NN COP *const cop \
                |NULLOK STRLEN *len|NULLOK U32 *flags
 : Only used  in op.c and the perl compiler
@@ -3459,7 +3603,7 @@ ATop      |void   |clone_params_del|NN CLONE_PARAMS *param
 #endif
 
 : Used in perl.c and toke.c
-op     |void   |populate_isa   |NN const char *name|STRLEN len|...
+Fop    |void   |populate_isa   |NN const char *name|STRLEN len|...
 
 : Some static inline functions need predeclaration because they are used
 : inside other static inline functions.
@@ -3474,29 +3618,29 @@ Apx     |void   |leave_adjust_stacks|NN SV **from_sp|NN SV **to_sp \
                 |U8 gimme|int filter
 
 #ifndef PERL_NO_INLINE_FUNCTIONS
-Aixp   |U8     |gimme_V         |
-Aixp   |PERL_CONTEXT * |cx_pushblock|U8 type|U8 gimme|NN SV** sp|I32 saveix
-Aixp   |void   |cx_popblock|NN PERL_CONTEXT *cx
-Aixp   |void   |cx_topblock|NN PERL_CONTEXT *cx
-Aixp   |void   |cx_pushsub      |NN PERL_CONTEXT *cx|NN CV *cv \
+Cixp   |U8     |gimme_V         |
+Cixp   |PERL_CONTEXT * |cx_pushblock|U8 type|U8 gimme|NN SV** sp|I32 saveix
+Cixp   |void   |cx_popblock|NN PERL_CONTEXT *cx
+Cixp   |void   |cx_topblock|NN PERL_CONTEXT *cx
+Cixp   |void   |cx_pushsub      |NN PERL_CONTEXT *cx|NN CV *cv \
                                 |NULLOK OP *retop|bool hasargs
-Aixp   |void   |cx_popsub_common|NN PERL_CONTEXT *cx
-Aixp   |void   |cx_popsub_args  |NN PERL_CONTEXT *cx
-Aixp   |void   |cx_popsub       |NN PERL_CONTEXT *cx
-Aixp   |void   |cx_pushformat   |NN PERL_CONTEXT *cx|NN CV *cv \
+Cixp   |void   |cx_popsub_common|NN PERL_CONTEXT *cx
+Cixp   |void   |cx_popsub_args  |NN PERL_CONTEXT *cx
+Cixp   |void   |cx_popsub       |NN PERL_CONTEXT *cx
+Cixp   |void   |cx_pushformat   |NN PERL_CONTEXT *cx|NN CV *cv \
                                 |NULLOK OP *retop|NULLOK GV *gv
-Aixp   |void   |cx_popformat    |NN PERL_CONTEXT *cx
-Aixp   |void   |cx_pusheval     |NN PERL_CONTEXT *cx \
+Cixp   |void   |cx_popformat    |NN PERL_CONTEXT *cx
+Cixp   |void   |cx_pusheval     |NN PERL_CONTEXT *cx \
                                 |NULLOK OP *retop|NULLOK SV *namesv
-Aixp   |void   |cx_popeval      |NN PERL_CONTEXT *cx
-Aixp   |void   |cx_pushloop_plain|NN PERL_CONTEXT *cx
-Aixp   |void   |cx_pushloop_for |NN PERL_CONTEXT *cx \
+Cixp   |void   |cx_popeval      |NN PERL_CONTEXT *cx
+Cixp   |void   |cx_pushloop_plain|NN PERL_CONTEXT *cx
+Cixp   |void   |cx_pushloop_for |NN PERL_CONTEXT *cx \
                                 |NN void *itervarp|NULLOK SV *itersave
-Aixp   |void   |cx_poploop      |NN PERL_CONTEXT *cx
-Aixp   |void   |cx_pushwhen     |NN PERL_CONTEXT *cx
-Aixp   |void   |cx_popwhen      |NN PERL_CONTEXT *cx
-Aixp   |void   |cx_pushgiven    |NN PERL_CONTEXT *cx|NULLOK SV *orig_defsv
-Aixp   |void   |cx_popgiven     |NN PERL_CONTEXT *cx
+Cixp   |void   |cx_poploop      |NN PERL_CONTEXT *cx
+Cixp   |void   |cx_pushwhen     |NN PERL_CONTEXT *cx
+Cixp   |void   |cx_popwhen      |NN PERL_CONTEXT *cx
+Cixp   |void   |cx_pushgiven    |NN PERL_CONTEXT *cx|NULLOK SV *orig_defsv
+Cixp   |void   |cx_popgiven     |NN PERL_CONTEXT *cx
 #endif
 
 #ifdef USE_DTRACE
@@ -3508,4 +3652,8 @@ XEop      |void   |dtrace_probe_phase|enum perl_phase phase
 
 XEop   |STRLEN*|dup_warnings   |NULLOK STRLEN* warnings
 
+#ifndef USE_ITHREADS
+Amd    |void   |CopFILEGV_set  |NN COP * c|NN GV * gv
+#endif
+
 : ex: set ts=8 sts=4 sw=4 noet:
index 3525854..d1daa6f 100644 (file)
@@ -409,7 +409,7 @@ ok(!eval { $@ = 'string1'; Devel::PPPort::eval_pv('$@ = "string2"; die "string3"
 ok($@ =~ /^string3 at \(eval [0-9]+\) line 1\.\n$/);
 ok(!eval { Devel::PPPort::eval_pv('die False->new', 1); 1 }, 'check false value is rethrown');
 
-if ("$]" >= '5.007003' or ("$]" >= '5.006001' and "$]" < '5.007')) {
+if (ivers($]) >= ivers('5.007003') or (ivers($]) >= ivers('5.006001') and ivers($]) < ivers('5.007'))) {
     my $hashref = { key => 'value' };
     is(eval { Devel::PPPort::eval_pv('die $hashref', 1); 1 }, undef, 'check plain hashref is rethrown');
     is(ref($@), 'HASH', 'check $@ is hashref') and
@@ -436,7 +436,7 @@ ok(!eval { $@ = 'string1'; Devel::PPPort::eval_sv('$@ = "string2"; die "string3"
 ok($@ =~ /^string3 at \(eval [0-9]+\) line 1\.\n$/);
 ok(!eval { Devel::PPPort::eval_sv('die False->new', &Devel::PPPort::G_RETHROW); 1 }, 'check false value is rethrown');
 
-if ("$]" >= '5.007003' or ("$]" >= '5.006001' and "$]" < '5.007')) {
+if (ivers($]) >= ivers('5.007003') or (ivers($]) >= ivers('5.006001') and ivers($]) < ivers('5.007'))) {
     my $hashref = { key => 'value' };
     is(eval { Devel::PPPort::eval_sv('die $hashref', &Devel::PPPort::G_RETHROW); 1 }, undef, 'check plain hashref is rethrown');
     is(ref($@), 'HASH', 'check $@ is hashref') and
index c9a92ea..a05865f 100644 (file)
@@ -182,7 +182,7 @@ print "# $file\n";
 ok($file =~ /cop/i);
 
 BEGIN {
-  if ("$]" < 5.006000) {
+  if (ivers($]) < ivers('5.006000')) {
     skip("Perl version too early", 8);
     exit;
   }
index 094076f..800e03a 100644 (file)
@@ -93,7 +93,7 @@ OUTPUT:
 
 use Config;
 
-if ("$]" < '5.004') {
+if (ivers($]) < ivers('5.004')) {
     skip 'skip: No newSVpvf support', 5;
     exit;
 }
index 6f7119a..a0dc2ea 100644 (file)
 
 =provides
 
-GV_NOADD_MASK
-gv_fetchpvn_flags
-GvSVn
-isGV_with_GP
-gv_fetchsv
-get_cvn_flags
-gv_init_pvn
+__UNDEFINED__
 
 =implementation
 
@@ -25,8 +19,13 @@ gv_init_pvn
 #undef gv_fetchpvn_flags
 #endif
 
-__UNDEFINED__ GV_NOADD_MASK 0xE0
-__UNDEFINED__ gv_fetchpvn_flags(name, len, flags, sv_type) gv_fetchpv(SvPVX(sv_2mortal(newSVpvn((name), (len)))), ((flags) & GV_NOADD_MASK) ? FALSE : TRUE, (I32)(sv_type))
+#ifdef GV_NOADD_MASK
+#  define D_PPP_GV_NOADD_MASK  GV_NOADD_MASK
+#else
+#  define D_PPP_GV_NOADD_MASK  0xE0
+#endif
+
+__UNDEFINED__ gv_fetchpvn_flags(name, len, flags, sv_type) gv_fetchpv(SvPVX(sv_2mortal(newSVpvn((name), (len)))), ((flags) & D_PPP_GV_NOADD_MASK) ? FALSE : TRUE, (I32)(sv_type))
 
 __UNDEFINED__ GvSVn(gv)        GvSV(gv)
 __UNDEFINED__ isGV_with_GP(gv) isGV(gv)
index ba181fa..f5f712a 100644 (file)
@@ -1,5 +1,12 @@
 # These are tools that must be included in ppport.h.  It doesn't work if given
-# a .pl suffix
+# a .pl suffix.
+#
+# WARNING: Use only constructs that are legal as far back as D:P handles, as
+# this is run in the perl version being tested.
+
+# What revisions are legal, to be output as-is and converted into a pattern
+# that matches them precisely
+my $r_pat = "[57]";
 
 sub format_version
 {
@@ -20,43 +27,43 @@ sub format_version
 
 sub parse_version
 {
-  # Returns a triplet, (5, major, minor) from the input, treated as a string,
-  # which can be in any of several typical formats.
+  # Returns a triplet, (revision, major, minor) from the input, treated as a
+  # string, which can be in any of several typical formats.
 
   my $ver = shift;
   $ver = "" unless defined $ver;
 
   my($r,$v,$s);
 
-  if (   ($r, $v, $s) = $ver =~ /^(5)(\d{3})(\d{3})$/ # 5029010, from the file
+  if (   ($r, $v, $s) = $ver =~ /^([0-9]+)([0-9]{3})([0-9]{3})$/ # 5029010, from the file
                                                       # names in our
                                                       # parts/base/ and
                                                       # parts/todo directories
-      or ($r, $v, $s) = $ver =~ /^(\d+)\.(\d+)\.(\d+)$/   # 5.25.7
-      or ($r, $v, $s) = $ver =~ /^(\d+)\.(\d{3})(\d{3})$/ # 5.025008, from the
-                                                          # output of $]
-      or ($r, $v, $s) = $ver =~ /^(\d+)\.(\d{1,3})()$/    # 5.24, 5.004
-      or ($r, $v, $s) = $ver =~ /^(\d+)\.(00[1-5])_?(\d{2})$/  # 5.003_07
+      or ($r, $v, $s) = $ver =~ /^([0-9]+)\.([0-9]+)\.([0-9]+)$/  # 5.25.7
+      or ($r, $v, $s) = $ver =~ /^([0-9]+)\.([0-9]{3})([0-9]{3})$/ # 5.025008, from the
+                                                           # output of $]
+      or ($r, $v, $s) = $ver =~ /^([0-9]+)\.([0-9]{1,3})()$/    # 5.24, 5.004
+      or ($r, $v, $s) = $ver =~ /^([0-9]+)\.(00[1-5])_?([0-9]{2})$/ # 5.003_07
   ) {
 
     $s = 0 unless $s;
 
-    die "Only Perl 5 is supported '$ver'\n" if $r != 5;
+    die "Only Perl $r_pat are supported '$ver'\n" unless $r =~ / ^ $r_pat $ /x;
     die "Invalid version number: $ver\n" if $v >= 1000 || $s >= 1000;
-    return (5, 0 + $v, 0 + $s);
+    return (0 +$r, 0 + $v, 0 + $s);
   }
 
   # For some safety, don't assume something is a version number if it has a
   # literal dot as one of the three characters.  This will have to be fixed
-  # when we reach 5.46
+  # when we reach x.46 (since 46 is ord('.'))
   if ($ver !~ /\./ && (($r, $v, $s) = $ver =~ /^(.)(.)(.)$/))  # vstring 5.25.7
   {
     $r = ord $r;
     $v = ord $v;
     $s = ord $s;
 
-    die "Only Perl 5 is supported '$ver'\n" if $r != 5;
-    return (5, $v, $s);
+    die "Only Perl $r_pat are supported '$ver'\n" unless $r =~ / ^ $r_pat $ /x;
+    return ($r, $v, $s);
   }
 
   my $mesg = "";
@@ -82,24 +89,30 @@ sub format_version_line
     # Returns a floating point representation of the input version
 
     my $version = int_parse_version(shift);
-    $version =~ s/^5\B/5./;
+    $version =~ s/ ^  ( $r_pat ) \B /$1./x;
     return $version;
 }
 
-sub dictionary_order($$)    # Sort caselessly, ignoring punct
-{
+BEGIN {
+  if ("$]" < "5.006" ) {
+    # On early perls, the implicit pass by reference doesn't work, so we have
+    # to use the globals to initialize.
+    eval q[sub dictionary_order($$) { _dictionary_order($a, $b) } ];
+  } elsif ("$]" < "5.022" ) {
+    eval q[sub dictionary_order($$) { _dictionary_order(@_) } ];
+  } else {
+    eval q[sub dictionary_order :prototype($$) { _dictionary_order(@_) } ];
+  }
+}
+
+sub _dictionary_order { # Sort caselessly, ignoring punct
+    my ($valid_a, $valid_b) = @_;
+
     my ($lc_a, $lc_b);
     my ($squeezed_a, $squeezed_b);
-    my ($valid_a, $valid_b);    # Meaning valid for all releases
 
-    # On early perls, the implicit pass by reference doesn't work, so we have
-    # to use the globals to initialize.
-    if ("$]" < "5.006" ) {
-        $valid_a = $a; $valid_b = $b;
-    }
-    else {
-        ($valid_a, $valid_b) = @_;
-    }
+    $valid_a = '' unless defined $valid_a;
+    $valid_b = '' unless defined $valid_b;
 
     $lc_a = lc $valid_a;
     $lc_b = lc $valid_b;
index 699adfd..41e73e3 100644 (file)
@@ -4,8 +4,7 @@ __UNDEFINED__
 
 =implementation
 
-
-/* If this doesn't exist, it's not needed, so noop */
+/* If this doesn't exist, it's not needed, so is void noop */
 __UNDEFINED__  switch_to_global_locale()
 
 /* Originally, this didn't return a value, but in perls like that, the value
@@ -17,7 +16,7 @@ __UNDEFINED__  switch_to_global_locale()
 #    if { VERSION >= 5.21.3 }
 #      undef sync_locale
 #      define sync_locale() (Perl_sync_locale(aTHX), 1)
-#    elif defined(sync_locale)  /* These should be the 5.20 maints*/
+#    elif defined(sync_locale)  /* These should only be the 5.20 maints*/
 #      undef sync_locale        /* Just copy their defn and return 1 */
 #      define sync_locale() (new_ctype(setlocale(LC_CTYPE, NULL)),        \
                              new_collate(setlocale(LC_COLLATE, NULL)),    \
@@ -46,13 +45,13 @@ sync_locale()
 
 use Config;
 
-  # We don't know for sure that we are in the global locale for testing.  But
-  # if this is unthreaded, it almost certainly is.  But Configure can be called
-  # to force POSIX locales on unthreaded systems.  If this becomes a problem
-  # this check could be beefed up.
-  if ($Config{usethreads}) {
-    ok(1);
+# We don't know for sure that we are in the global locale for testing.  But
+# if this is unthreaded, it almost certainly is.  But Configure can be called
+# to force POSIX locales on unthreaded systems.  If this becomes a problem
+# this check could be beefed up.
+if ($Config{usethreads}) {
+    ok(1, "ironically we have to skip testing sync_locale under threads");
 }
 else {
-    ok(&Devel::PPPort::sync_locale());
+    ok(&Devel::PPPort::sync_locale(), "sync_locale returns TRUE");
 }
index 3d3b740..34e2b1d 100644 (file)
@@ -643,8 +643,8 @@ is($h{sv}, 'Perl');
 
 # v1 is treated as a bareword in older perls...
 my $ver = do { local $SIG{'__WARN__'} = sub {}; eval qq[v1.2.0] };
-ok("$]" < 5.009 || $@ eq '');
-ok("$]" < 5.009 || Devel::PPPort::SvVSTRING_mg($ver));
+ok(ivers($]) < ivers("5.009") || $@ eq '');
+ok(ivers($]) < ivers("5.009") || Devel::PPPort::SvVSTRING_mg($ver));
 ok(!Devel::PPPort::SvVSTRING_mg(4711));
 
 my $foo = 'bar';
@@ -686,7 +686,7 @@ $fetch = $negative;
 is tied($negative)->{fetch}, 1;
 is tied($negative)->{store}, 0;
 is Devel::PPPort::magic_SvIV_nomg($negative), -1;
-if (ivers($]) >= ivers(5.6)) {
+if (ivers($]) >= ivers("5.6")) {
     ok !Devel::PPPort::SVf_IVisUV($negative);
 } else {
     skip 'SVf_IVisUV is unsupported', 1;
@@ -694,7 +694,7 @@ if (ivers($]) >= ivers(5.6)) {
 is tied($negative)->{fetch}, 1;
 is tied($negative)->{store}, 0;
 Devel::PPPort::magic_SvUV_nomg($negative);
-if (ivers($]) >= ivers(5.6)) {
+if (ivers($]) >= ivers("5.6")) {
     ok !Devel::PPPort::SVf_IVisUV($negative);
 } else {
     skip 'SVf_IVisUV is unsupported', 1;
@@ -708,7 +708,7 @@ $fetch = $big;
 is tied($big)->{fetch}, 1;
 is tied($big)->{store}, 0;
 Devel::PPPort::magic_SvIV_nomg($big);
-if (ivers($]) >= ivers(5.6)) {
+if (ivers($]) >= ivers("5.6")) {
     ok Devel::PPPort::SVf_IVisUV($big);
 } else {
     skip 'SVf_IVisUV is unsupported', 1;
@@ -716,7 +716,7 @@ if (ivers($]) >= ivers(5.6)) {
 is tied($big)->{fetch}, 1;
 is tied($big)->{store}, 0;
 is Devel::PPPort::magic_SvUV_nomg($big), Devel::PPPort::above_IV_MAX();
-if (ivers($]) >= ivers(5.6)) {
+if (ivers($]) >= ivers("5.6")) {
     ok Devel::PPPort::SVf_IVisUV($big);
 } else {
     skip 'SVf_IVisUV is unsupported', 1;
index 14c7def..fccec70 100644 (file)
@@ -313,7 +313,7 @@ CODE:
 
 =tests plan => 102
 
-BEGIN { if ("$]" < '5.006') { $^W = 0; } }
+BEGIN { if (ivers($]) < ivers('5.006')) { $^W = 0; } }
 
 my $warn;
 my $die;
@@ -435,17 +435,17 @@ ok Devel::PPPort::mess_sv(do {my $tmp = "\xE1"}, 1) =~ /^\xE1 at \Q$0\E line /;
 ok Devel::PPPort::mess_sv("\xC3\xA1", 0) =~ /^\xC3\xA1 at \Q$0\E line /;
 ok Devel::PPPort::mess_sv(do {my $tmp = "\xC3\xA1"}, 1) =~ /^\xC3\xA1 at \Q$0\E line /;
 
-if ("$]" >= '5.006') {
-    BEGIN { if ("$]" >= '5.006' && "$]" < '5.008') { require utf8; utf8->import(); } }
+if (ivers($]) >= ivers('5.006')) {
+    BEGIN { if (ivers($]) >= ivers('5.006') && ivers($]) < ivers('5.008')) { require utf8; utf8->import(); } }
 
     undef $die;
     ok !defined eval { Devel::PPPort::croak_sv("\x{100}\n") };
-    if ("$]" < '5.007001' || "$]" > '5.007003') {
+    if (ivers($]) < ivers('5.007001') || ivers($]) > ivers('5.007003')) {
         is $@, "\x{100}\n";
     } else {
         skip 'skip: broken utf8 support in die hook', 1;
     }
-    if ("$]" < '5.007001' || "$]" > '5.008') {
+    if (ivers($]) < ivers('5.007001') || ivers($]) > ivers('5.008')) {
         is $die, "\x{100}\n";
     } else {
         skip 'skip: broken utf8 support in die hook', 1;
@@ -453,18 +453,18 @@ if ("$]" >= '5.006') {
 
     undef $die;
     ok !defined eval { Devel::PPPort::croak_sv("\x{100}") };
-    if ("$]" < '5.007001' || "$]" > '5.007003') {
+    if (ivers($]) < ivers('5.007001') || ivers($]) > ivers('5.007003')) {
         ok $@ =~ /^\x{100} at \Q$0\E line /;
     } else {
         skip 'skip: broken utf8 support in die hook', 1;
     }
-    if ("$]" < '5.007001' || "$]" > '5.008') {
+    if (ivers($]) < ivers('5.007001') || ivers($]) > ivers('5.008')) {
         ok $die =~ /^\x{100} at \Q$0\E line /;
     } else {
         skip 'skip: broken utf8 support in die hook', 1;
     }
 
-    if ("$]" < '5.007001' || "$]" > '5.008') {
+    if (ivers($]) < ivers('5.007001') || ivers($]) > ivers('5.008')) {
         undef $warn;
         Devel::PPPort::warn_sv("\x{100}\n");
         is $warn, "\x{100}\n";
@@ -487,9 +487,9 @@ if ("$]" >= '5.006') {
 
 if (ord('A') != 65) {
     skip 'skip: no ASCII support', 24;
-} elsif (      "$]" >= '5.008'
-         &&    "$]" != '5.013000'     # Broken in these ranges
-         && ! ("$]" >= '5.011005' && "$]" <= '5.012000'))
+} elsif (      ivers($]) >= ivers('5.008')
+         &&    ivers($]) != ivers('5.013000')     # Broken in these ranges
+         && ! (ivers($]) >= ivers('5.011005') && ivers($]) <= ivers('5.012000')))
 {
     undef $die;
     ok !defined eval { Devel::PPPort::croak_sv(eval '"\N{U+E1}\n"') };
@@ -533,7 +533,7 @@ if (ord('A') != 65) {
     Devel::PPPort::warn_sv("\xC3\xA1");
     ok $warn =~ eval 'qr/^\N{U+C3}\N{U+A1} at \Q$0\E line /';
 
-    if ("$]" < '5.004') {
+    if (ivers($]) < ivers('5.004')) {
         skip 'skip: no support for mess_sv', 8;
     }
     else {
@@ -553,7 +553,7 @@ if (ord('A') != 65) {
     skip 'skip: no support for \N{U+..} syntax', 24;
 }
 
-if ("$]" >= '5.007003' or ("$]" >= '5.006001' and "$]" < '5.007')) {
+if (ivers($]) >= ivers('5.007003') or (ivers($]) >= ivers('5.006001') and ivers($]) < ivers('5.007'))) {
     undef $die;
     ok !defined eval { Devel::PPPort::croak_sv($scalar_ref) };
     ok $@ == $scalar_ref;
index deb1fb8..78f55ed 100644 (file)
@@ -50,12 +50,23 @@ __UNDEFINED__ __ASSERT_(statement)  assert(statement),
 __UNDEFINED__ __ASSERT_(statement)
 #endif
 
+#ifndef WIDEST_UTYPE
+# ifdef QUADKIND
+#  ifdef U64TYPE
+#   define WIDEST_UTYPE U64TYPE
+#  else
+#   define WIDEST_UTYPE unsigned Quad_t
+#  endif
+# else
+#  define WIDEST_UTYPE U32
+# endif
+#endif
+
 /* These could become provided if/when they become part of the public API */
 __UNDEF_NOT_PROVIDED__ withinCOUNT(c, l, n)                                    \
    (((WIDEST_UTYPE) (((c)) - ((l) | 0))) <= (((WIDEST_UTYPE) ((n) | 0))))
 __UNDEF_NOT_PROVIDED__ inRANGE(c, l, u)                                        \
    (  (sizeof(c) == sizeof(U8))  ? withinCOUNT(((U8)  (c)), (l), ((u) - (l)))  \
-    : (sizeof(c) == sizeof(U16)) ? withinCOUNT(((U16) (c)), (l), ((u) - (l)))  \
     : (sizeof(c) == sizeof(U32)) ? withinCOUNT(((U32) (c)), (l), ((u) - (l)))  \
     : (withinCOUNT(((WIDEST_UTYPE) (c)), (l), ((u) - (l)))))
 
@@ -262,6 +273,7 @@ __UNDEFINED__  AvFILLp      AvFILL
 
 __UNDEFINED__  av_tindex    AvFILL
 __UNDEFINED__  av_top_index AvFILL
+__UNDEFINED__  av_count(av) (AvFILL(av)+1)
 
 __UNDEFINED__  ERRSV        get_sv("@",FALSE)
 
@@ -348,18 +360,6 @@ typedef OP* (CPERLscope(*Perl_check_t)) (pTHX_ OP*);
 
 #endif
 
-#ifndef WIDEST_UTYPE
-# ifdef QUADKIND
-#  ifdef U64TYPE
-#   define WIDEST_UTYPE U64TYPE
-#  else
-#   define WIDEST_UTYPE Quad_t
-#  endif
-# else
-#  define WIDEST_UTYPE U32
-# endif
-#endif
-
 /* On versions without NATIVE_TO_ASCII, only ASCII is supported */
 #if defined(EBCDIC) && defined(NATIVE_TO_ASCI)
 __UNDEFINED__ NATIVE_TO_LATIN1(c) NATIVE_TO_ASCII(c)
@@ -2527,7 +2527,15 @@ av_top_index(av)
         OUTPUT:
                 RETVAL
 
-=tests plan => 26826
+STRLEN
+av_count(av)
+        SV *av
+        CODE:
+                RETVAL = av_count((AV*)SvRV(av));
+        OUTPUT:
+                RETVAL
+
+=tests plan => 26827
 
 use vars qw($my_sv @my_av %my_hv);
 
@@ -2973,3 +2981,4 @@ for $name (keys %case_changing) {
 
 is(&Devel::PPPort::av_top_index([1,2,3]), 2);
 is(&Devel::PPPort::av_tindex([1,2,3,4]), 3);
+is(&Devel::PPPort::av_count([1,2,3,4]), 4);
index 22e2fb6..c17b6c9 100644 (file)
@@ -88,7 +88,7 @@ ok(!defined($s[4]));
 ok(@s == 1);
 is($s[0], "test");
 
-if ("$]" >= 5.008001) {
+if (ivers($]) >= ivers("5.008001")) {
   require utf8;
   ok(utf8::is_utf8($s[0]));
 }
index 975e3f6..5ac6ee8 100644 (file)
@@ -18,7 +18,7 @@ use strict;
 BEGIN { require warnings if "$]" > '5.006' }
 
 # Disable broken TRIE-optimization
-BEGIN { eval '${^RE_TRIE_MAXBUF} = -1' if "$]" >= 5.009004 && "$]" <= 5.009005 }
+BEGIN { eval '${^RE_TRIE_MAXBUF} = -1' if "$]" >= "5.009004" && "$]" <= "5.009005"}
 
 my $VERSION = __VERSION__;
 
@@ -92,7 +92,7 @@ my %API = map { /^(\w+)\|([^|]*)\|([^|]*)\|(\w*)$/
                       (index($4, 'V') >= 0 ? ( unverified => 1  ) : ()),
                     } )
                 : die "invalid spec: $_" } qw(
-__PERL_API__
+__ALL_ELEMENTS__
 );
 
 if (exists $opt{'list-unsupported'}) {
@@ -104,7 +104,9 @@ if (exists $opt{'list-unsupported'}) {
     next if $API{$f}{experimental};
     next unless $API{$f}{todo};
     next if int_parse_version($API{$f}{todo}) <= $int_min_perl;
-    print "$f ", '.'x(40-length($f)), " ", format_version($API{$f}{todo}), "\n";
+    my $repeat = 40 - length($f);
+    $repeat = 0 if $repeat < 0;
+    print "$f ", '.'x $repeat, " ", format_version($API{$f}{todo}), "\n";
   }
   exit 0;
 }
@@ -216,7 +218,6 @@ while (<DATA>) {
 
   # Set $replace to the number given for lines that look like
   # / * Replace: \d+ * /
-  # (blanks added to keep real C comments from appearing in this file)
   # Thus setting it to 1 starts a region where replacements are automatically
   # done, and setting it to 0 ends that region.
   $replace     = $1 if m{^\s*$rccs\s+Replace:\s+(\d+)\s+$rcce\s*$};
@@ -226,17 +227,14 @@ while (<DATA>) {
   $replace{$2} = $1 if $replace and m{^\s*#\s*define\s+(\w+)(?:\([^)]*\))?\s+(\w+)};
 
   # Add bar => foo to %replace for lines like '#define foo bar  / * Replace * /
-  # (blanks added to keep real C comments from appearing in this file)
   $replace{$2} = $1 if m{^\s*#\s*define\s+(\w+)(?:\([^)]*\))?\s+(\w+).*$rccs\s+Replace\s+$rcce};
 
   # Add foo => bar to %replace for lines like / * Replace foo with bar * /
-  # (blanks added to keep real C comments from appearing in this file)
-  $replace{$1} = $2 if m{^\s*$rccs\s+Replace (\w+) with (\w+)\s+$rcce\s*$};
+  $replace{$1} = $2 if m{^\s*$rccs\s+Replace (\w+) with (\w+.*?)\s+$rcce\s*$};
 
   # For lines like / * foo, bar depends on baz, bat * /
   # create a list of the elements on the rhs, and make that list apply to each
   # element in the lhs, which becomes a key in \%depends.
-  # (blanks added to keep real C comments from appearing in this file)
   if (m{^\s*$rccs\s+(\w+(\s*,\s*\w+)*)\s+depends\s+on\s+(\w+(\s*,\s*\w+)*)\s+$rcce\s*$}) {
     my @deps = map { s/\s+//g; $_ } split /,/, $3;
     my $d;
@@ -257,8 +255,29 @@ if (exists $opt{'api-info'}) {
   my $f;
   my $count = 0;
   my $match = $opt{'api-info'} =~ m!^/(.*)/$! ? $1 : "^\Q$opt{'api-info'}\E\$";
+
+  # Sort the names, and split into two classes; one for things that are part of
+  # the API; a second for things that aren't.
+  my @ok_to_use;
+  my @shouldnt_use;
   for $f (sort dictionary_order keys %API) {
     next unless $f =~ /$match/;
+    my $base = int_parse_version($API{$f}{base}) if $API{$f}{base};
+    if ($base && ! $API{$f}{inaccessible} && ! $API{$f}{core_only}) {
+        push @ok_to_use, $f;
+    }
+    else {
+        push @shouldnt_use, $f;
+    }
+  }
+
+  # We normally suppress non-API items.  But if the search matched no API
+  # items, output the non-ones.  This allows someone to get the info for an
+  # item if they ask for it specifically enough, but doesn't normally clutter
+  # the output with irrelevant results.
+  @ok_to_use = @shouldnt_use unless @ok_to_use;
+
+  for $f (@ok_to_use) {
     print "\n=== $f ===\n";
     my $info = 0;
     my $base;
@@ -266,8 +285,8 @@ if (exists $opt{'api-info'}) {
     my $todo;
     $todo = int_parse_version($API{$f}{todo}) if $API{$f}{todo};
 
-    # Output information if it is generally publicly usable
-    if ($base && ! $API{$f}{inaccessible} && ! $API{$f}{core_only}) {
+    # Output information
+    if ($base) {
         my $with_or= "";
         if (    $base <= $int_min_perl
             || (   (! $API{$f}{provided} && ! $todo)
@@ -275,7 +294,9 @@ if (exists $opt{'api-info'}) {
         {
             $with_or= " with or";
         }
-        print "\nSupported at least since perl-",
+
+        my $Supported = ($API{$f}{undocumented}) ? 'Available' : 'Supported';
+        print "\n$Supported at least since perl-",
               format_version($base), ",$with_or without $ppport.";
         if ($API{$f}{unverified}) {
             print "\nThis information is based on inspection of the source code",
@@ -594,7 +615,7 @@ for $filename (@files) {
         diag("Uses $func");
       }
     }
-    $warnings += hint($func);
+    $warnings += (hint($func) || 0);
   }
 
   unless ($opt{quiet}) {
@@ -882,7 +903,7 @@ sub hint
     $hint =~ s/^/   /mg;
     print "   --- hint for $func ---\n", $hint;
   }
-  $rv;
+  $rv || 0;
 }
 
 sub usage
index 57aa6ad..eae4afc 100644 (file)
@@ -54,7 +54,8 @@ ppport.h - Perl/Pollution/Portability version __VERSION__
                               from ppport.h
 
   --list-provided             list provided API
-  --list-unsupported          list unsupported API
+  --list-unsupported          list API that isn't supported all the way
+                              back
   --api-info=name             show Perl API portability information
 
 =head1 COMPATIBILITY
@@ -155,16 +156,23 @@ if it has dependencies, and if there are hints or warnings 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.
+Lists the API elements that are known not to be FULLY supported by F<ppport.h>,
+and below which version of Perl they probably won't be available or work.
+By FULLY, we mean that support isn't provided all the way back to the first
+version of Perl that F<ppport.h> supports at all.
 
 =head2 --api-info=I<name>
 
-Show portability information for API elements matching I<name>.
+Show portability information for elements matching I<name>.
 If I<name> is surrounded by slashes, it is interpreted as a regular
 expression.
 
+Normally, only API elements are shown, but if there are no matching API
+elements but there are some other matching elements, those are shown.  This
+allows you to conveniently find when functions internal to the core
+implementation were added; only people working on the core are likely to find
+this last part useful.
+
 =head1 DESCRIPTION
 
 In order for a Perl extension (XS) module to be as portable as possible
@@ -192,6 +200,50 @@ will provide wrappers for older Perl versions.
 
 =item *
 
+Although the purpose of F<ppport.h> is to keep you from having to concern
+yourself with what version you are running under, there may arise instances
+where you have to do so.  These macros, the same ones as in base Perl, are
+available to you in all versions, and are what you should use:
+
+=over 4
+
+=item C<PERL_VERSION_I<xx>(major, minor, patch)>
+
+Returns whether or not the perl currently being compiled has the specified
+relationship I<xx> to the perl given by the parameters.  I<xx> is one of
+C<EQ>, C<NE>, C<LT>, C<LE>, C<GT>, C<GE>.
+
+For example,
+
+ #if PERL_VERSION_GT(5,24,2)
+   code that will only be compiled on perls after v5.24.2
+ #else
+   fallback code
+ #endif
+
+Note that this is usable in making compile-time decisions
+
+You may use the special value '*' for the final number to mean ALL possible
+values for it.  Thus,
+
+ #if PERL_VERSION_EQ(5,31,'*')
+
+means all perls in the 5.31 series.  And
+
+ #if PERL_VERSION_NE(5,24,'*')
+
+means all perls EXCEPT 5.24 ones.  And
+
+ #if PERL_VERSION_LE(5,9,'*')
+
+is effectively
+
+ #if PERL_VERSION_LT(5,10,0)
+
+=back
+
+=item *
+
 If you use one of a few functions or variables 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
@@ -301,7 +353,7 @@ 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
-send a bug report to L<perlbug@perl.org|mailto:perlbug@perl.org>.
+file a bug report at L<https://github.com/Dual-Life/Devel-PPPort/issues>
 
 Please include the following information:
 
index 9b13279..cf64ab0 100644 (file)
@@ -614,8 +614,8 @@ ok($o !~ /Uses SvPVutf8_force/m);
 $o = ppport(qw(--nochanges --compat-version=5.999.999));
 ok($o !~ /Uses SvPVutf8_force/m);
 
-$o = ppport(qw(--nochanges --compat-version=6.0.0));
-ok($o =~ /Only Perl 5 is supported/m);
+$o = ppport(qw(--nochanges --compat-version=8.0.0));
+ok($o =~ /Only Perl \[57\] are supported/m);
 
 $o = ppport(qw(--nochanges --compat-version=5.1000.999));
 ok($o =~ /Invalid version number: 5.1000.999/m);
@@ -680,7 +680,10 @@ my %p;
 my $fail = 0;
 for (@o) {
   my($name, $flags) = /^(\w+)(?:\s+\[(\w+(?:,\s+\w+)*)\])?$/ or $fail++;
-  exists $p{$name} and $fail++;
+  {
+    'warnings'->unimport('uninitialized') if ivers($]) > ivers('5.006');
+    exists $p{$name} and $fail++;
+  }
   $p{$name} = defined $flags ? { map { ($_ => 1) } $flags =~ /(\w+)/g } : '';
 }
 ok(@o > 100);
@@ -720,8 +723,8 @@ my @o = ppport(qw(--list-unsupported));
 my %p;
 my $fail = 0;
 for (@o) {
-  my($name, $ver) = /^(\w+)\s*\.+\s*([\d._]+)$/ or $fail++;
-  exists $p{$name} and $fail++;
+  my($name, $ver) = /^(\w+)\s*\.*\s*([\d._]+)$/ or $fail++;
+  { exists $p{$name} and $fail++; }
   $p{$name} = $ver;
 }
 ok(@o > 100);
index c523d1c..baa3732 100644 (file)
@@ -252,7 +252,7 @@ pv_display()
 my $uni = &Devel::PPPort::pv_escape_can_unicode();
 
 # sanity check
-ok($uni ? "$]" >= 5.006 : "$]" < 5.008);
+ok($uni ? ivers($]) >= ivers("5.006") : ivers($]) < ivers("5.008"));
 
 my @r;
 
index c71e805..23b0da3 100644 (file)
@@ -283,24 +283,24 @@ tie %h, 'Tie::StdHash';
 $h{foo} = 'foo-';
 $h{bar} = '';
 
-is(&Devel::PPPort::vnewSVpvf(), "$]" >= 5.004 ? 'Perl-42' : '%s-%d');
-is(&Devel::PPPort::sv_vcatpvf('1-2-3-'), "$]" >= 5.004 ? '1-2-3-Perl-42' : '1-2-3-%s-%d');
-is(&Devel::PPPort::sv_vsetpvf('1-2-3-'), "$]" >= 5.004 ? 'Perl-42' : '%s-%d');
+is(&Devel::PPPort::vnewSVpvf(), ivers($]) >= ivers("5.004") ? 'Perl-42' : '%s-%d');
+is(&Devel::PPPort::sv_vcatpvf('1-2-3-'), ivers($]) >= ivers("5.004") ? '1-2-3-Perl-42' : '1-2-3-%s-%d');
+is(&Devel::PPPort::sv_vsetpvf('1-2-3-'), ivers($]) >= ivers("5.004") ? 'Perl-42' : '%s-%d');
 
 &Devel::PPPort::sv_catpvf_mg($h{foo});
-is($h{foo}, "$]" >= 5.004 ? 'foo-Perl-42' : 'foo-');
+is($h{foo}, ivers($]) >= ivers("5.004") ? 'foo-Perl-42' : 'foo-');
 
 &Devel::PPPort::Perl_sv_catpvf_mg($h{foo});
-is($h{foo}, "$]" >= 5.004 ? 'foo-Perl-42-Perl-43' : 'foo-');
+is($h{foo}, ivers($]) >= ivers("5.004") ? 'foo-Perl-42-Perl-43' : 'foo-');
 
 &Devel::PPPort::sv_catpvf_mg_nocontext($h{foo});
-is($h{foo}, "$]" >= 5.004 ? 'foo-Perl-42-Perl-43-Perl-44' : 'foo-');
+is($h{foo}, ivers($]) >= ivers("5.004") ? 'foo-Perl-42-Perl-43-Perl-44' : 'foo-');
 
 &Devel::PPPort::sv_setpvf_mg($h{bar});
-is($h{bar}, "$]" >= 5.004 ? 'mhx-42' : '');
+is($h{bar}, ivers($]) >= ivers("5.004") ? 'mhx-42' : '');
 
 &Devel::PPPort::Perl_sv_setpvf_mg($h{bar});
-is($h{bar}, "$]" >= 5.004 ? 'foo-43' : '');
+is($h{bar}, ivers($]) >= ivers("5.004") ? 'foo-43' : '');
 
 &Devel::PPPort::sv_setpvf_mg_nocontext($h{bar});
-is($h{bar}, "$]" >= 5.004 ? 'bar-44' : '');
+is($h{bar}, ivers($]) >= ivers("5.004") ? 'bar-44' : '');
index 28f01c0..cf5dec0 100644 (file)
@@ -127,17 +127,14 @@ __UNDEFINED__ UTF8_IS_INVARIANT(c)  (isASCII(c) || isCNTRL_L1(c))
 __UNDEFINED__ UVCHR_IS_INVARIANT(c)  UTF8_IS_INVARIANT(c)
 
 #ifdef UVCHR_IS_INVARIANT
-#  if 'A' == 65
-#    ifdef QUADKIND
-#      define D_PPP_UVCHR_SKIP_UPPER(c)                                         \
-          (WIDEST_UTYPE) (c) <                                                  \
-        (((WIDEST_UTYPE) 1) << (6 * D_PPP_BYTE_INFO_BITS)) ? 7 : 13
-#    else
-#      define D_PPP_UVCHR_SKIP_UPPER(c) 7  /* 32 bit platform */
-#    endif
-#  else
-     /* In the releases this is backported to, UTF-EBCDIC had a max of 2**31-1 */
+#  if 'A' != 65 || UVSIZE < 8
+     /* 32 bit platform, which includes UTF-EBCDIC on the releases this is
+      * backported to */
 #    define D_PPP_UVCHR_SKIP_UPPER(c) 7
+#  else
+#    define D_PPP_UVCHR_SKIP_UPPER(c)                                       \
+        (((WIDEST_UTYPE) (c)) <                                             \
+         (((WIDEST_UTYPE) 1) << (6 * D_PPP_BYTE_INFO_BITS)) ? 7 : 13)
 #  endif
 
 __UNDEFINED__ UVCHR_SKIP(c)                                                     \
@@ -821,7 +818,7 @@ else {
 
     # An empty input is an assertion failure on debugging builds.  It is
     # deliberately the first test.
-    require Config; import Config;
+    require Config; Config->import;
     use vars '%Config';
 
     # VMS doesn't put DEBUGGING in ccflags, and Windows doesn't have
index 96145e6..9332c21 100644 (file)
@@ -152,7 +152,7 @@ my_strnlen(s, max)
 
 =tests plan => 11
 
-BEGIN { require warnings if "$]" > '5.006' }
+BEGIN { require warnings if ivers($]) > ivers('5.006') }
 
 is(&Devel::PPPort::sv_setuv(42), 42);
 is(&Devel::PPPort::newSVuv(123), 123);
index cc984c8..08c26e5 100644 (file)
@@ -445,7 +445,7 @@ ok(!&Devel::PPPort::PL_sv_no());
 is(&Devel::PPPort::PL_na("abcd"), 4);
 is(&Devel::PPPort::PL_Sv(), "mhx");
 ok(defined &Devel::PPPort::PL_tokenbuf());
-ok("$]" >= 5.009005 || &Devel::PPPort::PL_parser());
+ok(ivers($]) >= ivers("5.009005") || &Devel::PPPort::PL_parser());
 ok(&Devel::PPPort::PL_hexdigit() =~ /^[0-9a-zA-Z]+$/);
 ok(defined &Devel::PPPort::PL_hints());
 is(&Devel::PPPort::PL_ppaddr("mhx"), "MHX");
@@ -461,7 +461,7 @@ for (&Devel::PPPort::other_variables()) {
     local $SIG{'__WARN__'} = sub { push @w, @_ };
     ok(&Devel::PPPort::dummy_parser_warning());
   }
-  if ("$]" >= 5.009005) {
+  if (ivers($]) >= ivers("5.009005")) {
     ok(@w >= 0);
     for (@w) {
       print "# $_";
@@ -477,11 +477,11 @@ for (&Devel::PPPort::other_variables()) {
   is($fail, 0);
 }
 
-ok(&Devel::PPPort::no_dummy_parser_vars(1) >= ("$]" < 5.009005 ? 1 : 0));
+ok(&Devel::PPPort::no_dummy_parser_vars(1) >= (ivers($]) < ivers("5.009005") ? 1 : 0));
 
 eval { &Devel::PPPort::no_dummy_parser_vars(0) };
 
-if ("$]" < 5.009005) {
+if (ivers($]) < ivers("5.009005")) {
   is($@, '');
 }
 else {
index c321b20..c15b50e 100644 (file)
 
 =provides
 
-PERL_REVISION
-PERL_VERSION
-PERL_SUBVERSION
-PERL_BCDVERSION
+__UNDEFINED__
 
 =dontwarn
 
+## We don't want people to be using these symbols so even though we provide
+## them, we don't publicly mention them
+
+PERL_REVISION
+PERL_VERSION
+PERL_SUBVERSION
 PERL_PATCHLEVEL_H_IMPLICIT
+PERL_BCDVERSION
 
 =implementation
 
-#ifndef PERL_REVISION
-#  if !defined(__PATCHLEVEL_H_INCLUDED__) && !(defined(PATCHLEVEL) && defined(SUBVERSION))
+#define D_PPP_RELEASE_DATE 1597104000 /* 2020-08-11 */
+
+#if ! defined(PERL_REVISION) && ! defined(PERL_VERSION_MAJOR)
+#  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)))
+#  if     ! defined(PERL_VERSION)                                               \
+     &&   ! defined(PERL_VERSION_MAJOR)                                         \
+     && ( ! 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
+
+#ifdef PERL_VERSION_MAJOR
+#  define D_PPP_MAJOR  PERL_VERSION_MAJOR
+#elif defined(PERL_REVISION)
+#  define D_PPP_MAJOR  PERL_REVISION
+#else
+#  define D_PPP_MAJOR  5
+#endif
+
+#ifdef PERL_VERSION_MINOR
+#  define D_PPP_MINOR  PERL_VERSION_MINOR
+#elif defined(PERL_VERSION)
+#  define D_PPP_MINOR  PERL_VERSION
+#elif defined(PATCHLEVEL)
+#  define D_PPP_MINOR  PATCHLEVEL
+#  define PERL_VERSION         PATCHLEVEL   /* back-compat */
+#else
+#  error Could not find a source for PERL_VERSION_MINOR
+#endif
+
+#ifdef PERL_VERSION_PATCH
+#  define D_PPP_PATCH  PERL_VERSION_PATCH
+#elif defined(PERL_SUBVERSION)
+#  define D_PPP_PATCH  PERL_SUBVERSION
+#elif defined(SUBVERSION)
+#  define D_PPP_PATCH  SUBVERSION
+#  define PERL_SUBVERSION      SUBVERSION   /* back-compat */
+#else
+#  error Could not find a source for PERL_VERSION_PATCH
+#endif
+
+#if D_PPP_MAJOR < 5 || D_PPP_MAJOR == 6
+#  error Devel::PPPort works only on Perl 5, Perl 7, ...
+#elif D_PPP_MAJOR != 5
+    /* Perl 7 and above: the old forms are deprecated, set up so that they
+     * assume Perl 5, and will make this look like 5.201.201.
+     *
+     * 201 is used so will be well above anything that would come from a 5
+     * series if we unexpectedly have to continue it, but still gives plenty of
+     * room, up to 255, of numbers that will fit into a byte in case there is
+     * something else unforeseen */
+#  undef  PERL_REVISION
+#  undef  PERL_VERSION
+#  undef  PERL_SUBVERSION
+#  define D_PPP_REVISION      5
+#  define D_PPP_VERSION     201
+#  define D_PPP_SUBVERSION  201
+#  if   (defined(__clang__)     /* _Pragma here doesn't work with gcc */  \
+     && (   (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L)    \
+         || defined(_STDC_C99)                                            \
+         || defined(__c99)))
+#    define D_PPP_STRINGIFY(x) #x
+#    define D_PPP_deprecate(xyz) _Pragma(D_PPP_STRINGIFY(GCC warning(D_PPP_STRINGIFY(xyz) " is deprecated")))
+#    define PERL_REVISION     (D_PPP_REVISION D_PPP_deprecate(PERL_REVISION))
+#    define PERL_VERSION      (D_PPP_REVISION D_PPP_deprecate(PERL_VERSION))
+#    define PERL_SUBVERSION   (D_PPP_SUBVERSION D_PPP_deprecate(PERL_SUBVERSION))
+#  else
+#    define PERL_REVISION     D_PPP_REVISION
+#    define PERL_VERSION      D_PPP_REVISION
+#    define PERL_SUBVERSION   D_PPP_SUBVERSION
 #  endif
 #endif
 
+/* Warning: PERL_PATCHLEVEL PATCHLEVEL SUBVERSION PERL_REVISION PERL_VERSION
+ *          PERL_SUBVERSION PERL_BCDVERSION
+ *
+ * You should be using PERL_VERSION_xy(maj,min,ptch) instead of this, where xy
+ * is one of EQ, NE, LE, GT, LT, GE
+ */
+
+/* Replace PERL_PATCHLEVEL with PERL_VERSION_xy(5,a,b) (where xy is EQ,LT,GT...) */
+/* Replace PATCHLEVEL with PERL_VERSION_xy(5,a,b) (where xy is EQ,LT,GT...) */
+/* Replace SUBVERSION with PERL_VERSION_xy(5,a,b) (where xy is EQ,LT,GT...) */
+/* Replace PERL_REVISION with PERL_VERSION_xy(a,b,c) (where xy is EQ,LT,GT...) */
+/* Replace PERL_VERSION with PERL_VERSION_xy(5,a,b) (where xy is EQ,LT,GT...) */
+/* Replace PERL_SUBVERSION with PERL_VERSION_xy(5,a,b) (where xy is EQ,LT,GT...) */
+/* Replace PERL_BCDVERSION with PERL_VERSION_xy(5,a,b) (where xy is EQ,LT,GT...) */
+
 #define D_PPP_DEC2BCD(dec) ((((dec)/100)<<8)|((((dec)%100)/10)<<4)|((dec)%10))
-#define PERL_BCDVERSION ((D_PPP_DEC2BCD(PERL_REVISION)<<24)|(D_PPP_DEC2BCD(PERL_VERSION)<<12)|D_PPP_DEC2BCD(PERL_SUBVERSION))
+#define D_PPP_JNP_TO_BCD(j,n,p) ((D_PPP_DEC2BCD(j)<<24)|(D_PPP_DEC2BCD(n)<<12)|D_PPP_DEC2BCD(p))
+#define PERL_BCDVERSION D_PPP_JNP_TO_BCD(D_PPP_MAJOR,           \
+                                          D_PPP_MINOR,          \
+                                          D_PPP_PATCH)
 
-/* 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 */
+/* These differ from the versions outside D:P in using PERL_BCDVERSION instead
+ * of PERL_DECIMAL_VERSION.  The formats printing in this module assume BCD, so
+ * always use it */
+#undef PERL_VERSION_EQ
+#undef PERL_VERSION_NE
+#undef PERL_VERSION_LT
+#undef PERL_VERSION_GE
+#undef PERL_VERSION_LE
+#undef PERL_VERSION_GT
+
+/* N.B. These don't work if the patch number is 42 or 92, as those are what '*'
+ * is in ASCII and EBCDIC respectively */
+__UNDEFINED__ PERL_VERSION_EQ(j,n,p)                                        \
+              (((p) == '*') ? (   (j) == D_PPP_VERSION_MAJOR                \
+                               && (n) == D_PPP_VERSION_MINOR)               \
+                            : (PERL_BCDVERSION == D_PPP_JNP_TO_BCD(j,n,p)))
+__UNDEFINED__ PERL_VERSION_NE(j,n,p) (! PERL_VERSION_EQ(j,n,p))
+
+__UNDEFINED__ PERL_VERSION_LT(j,n,p)      /* p=='*' means _LT(j,n,0) */     \
+    (PERL_BCDVERSION < D_PPP_JNP_TO_BCD(                    (j),            \
+                                                             (n),           \
+                                         (((p) == '*') ? 0 : (p))))
+__UNDEFINED__ PERL_VERSION_GE(j,n,p) (! PERL_VERSION_LT(j,n,p))
+
+__UNDEFINED__ PERL_VERSION_LE(j,n,p)      /* p=='*' means _LT(j,n+1,0) */   \
+    (PERL_BCDVERSION < D_PPP_JNP_TO_BCD(                          (j),      \
+                                         (((p) == '*') ? ((n)+1) : (n)),    \
+                                         (((p) == '*') ?   0     : (p))))
+__UNDEFINED__ PERL_VERSION_GT(j,n,p) (! PERL_VERSION_LE(j,n,p))
index 32c772e..d3c0d05 100644 (file)
@@ -147,15 +147,15 @@ $SIG{'__WARN__'} = sub { $warning = $_[0] };
 
 $warning = '';
 Devel::PPPort::warner();
-ok("$]" >= 5.004 ? $warning =~ /^warner bar:42/ : $warning eq '');
+ok(ivers($]) >= ivers("5.004") ? $warning =~ /^warner bar:42/ : $warning eq '');
 
 $warning = '';
 Devel::PPPort::Perl_warner();
-ok("$]" >= 5.004 ? $warning =~ /^Perl_warner bar:42/ : $warning eq '');
+ok(ivers($]) >= ivers("5.004") ? $warning =~ /^Perl_warner bar:42/ : $warning eq '');
 
 $warning = '';
 Devel::PPPort::Perl_warner_nocontext();
-ok("$]" >= 5.004 ? $warning =~ /^Perl_warner_nocontext bar:42/ : $warning eq '');
+ok(ivers($]) >= ivers("5.004") ? $warning =~ /^Perl_warner_nocontext bar:42/ : $warning eq '');
 
 $warning = '';
 Devel::PPPort::ckWARN();
@@ -165,4 +165,4 @@ $^W = 1;
 
 $warning = '';
 Devel::PPPort::ckWARN();
-ok("$]" >= 5.004 ? $warning =~ /^ckWARN bar:42/ : $warning eq '');
+ok(ivers($]) >= ivers("5.004") ? $warning =~ /^ckWARN bar:42/ : $warning eq '');
index 4d34f77..1c31f73 100644 (file)
 :
 ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
 :
-: This file lists all API functions/macros that are provided purely
-: by Devel::PPPort, or that are not public.  It is in the same format as the
-: F<embed.fnc> that ships with the Perl source code.
+: This file lists all functions/macros that are provided by Devel::PPPort that
+: would not be tested otherwise; because either they are not public, or they
+: exist only in D:P.  It is in the same format as the F<embed.fnc> that ships
+: with the Perl source code.
 :
 : Since these are used only to provide the argument types, it's ok to have the
-: return value be void for some where it's an issues
+: return value be void for some where it's a potential issue.
 
-Amn|void|aTHXR
-Amn|void|aTHXR_
-md|int|AvFILLp|AV* av
-Amn|void|DEFSV
-Amn|void|dMY_CXT_SV
-Amn|void|dNOOP
-Amn|void|dTHXR
-Amn|void|dXSTARG
-Amn|void|END_EXTERN_C
-Amn|void|EXTERN_C
-Amn|void|GV_NOADD_MASK
-Amn|void|IN_PERL_COMPILETIME
-Amn|void|NOOP
-Amn|void|PERL_BCDVERSION
-Amn|void|Perl_eval_pv
-Amn|void|Perl_eval_sv
-Amn|void|PERL_MAGIC_glob
-Amn|void|PERL_MAGIC_mutex
-Amn|void|PERL_MAGIC_overload
-Amn|void|PERL_MAGIC_overload_elem
-Amn|void|PERL_PV_PRETTY_DUMP
-Amn|void|PERL_PV_PRETTY_NOCLEAR
-Amn|void|PERL_PV_PRETTY_REGPROP
-Amn|void|PERL_SIGNALS_UNSAFE_FLAG
-Amn|void|PERL_UINT_MIN
-Amn|void|PERL_UNUSED_CONTEXT
-Amn|void|PERL_UNUSED_DECL
-Amn|void|PERL_USE_GCC_BRACE_GROUPS
-Amn|void|PL_bufend
-Amn|void|PL_bufptr
-Amn|void|PL_compiling
-Amn|void|PL_copline
-Amn|void|PL_DBsignal
-mnd|SV *|PL_DBsingle
-mnd|GV *|PL_DBsub
-mnd|SV *|PL_DBtrace
-Amn|void|PL_debstash
-Amn|void|PL_diehook
-Amn|void|PL_dirty
-mnd|U8|PL_dowarn
-Amn|void|PL_error_count
-Amn|void|PL_expect
-Amn|void|PL_hexdigit
-Amn|void|PL_hints
-Amn|void|PL_in_my
-Amn|void|PL_in_my_stash
-Amn|void|PL_laststatval
-Amn|void|PL_lex_state
-Amn|void|PL_lex_stuff
-Amn|void|PL_linestr
-Amn|void|PL_mess_sv
-Amn|void|PL_no_modify
-Amn|void|PL_perldb
-Amn|void|PL_ppaddr
-Amn|void|PL_rsfp
-Amn|void|PL_rsfp_filters
-Amn|void|PL_stack_base
-Amn|void|PL_stack_sp
-Amn|void|PL_statcache
-Amn|void|PL_stdingv
-Amn|void|PL_Sv
-Amn|void|PL_sv_arenaroot
-Amn|void|PL_tainted
-Amn|void|PL_tainting
-Amn|void|PL_tokenbuf
-Amn|void|PL_Xpv
-Amn|void|PTRV
-Amn|void|SAVE_DEFSV
-Amn|void|START_EXTERN_C
-Amn|void|SV_CONST_RETURN
-Amn|void|SV_COW_SHARED_HASH_KEYS
+AmnT|void|aTHXR
+AmnT|void|aTHXR_
+dm|int|AvFILLp|AV * av
+CprT|void|croak_memory_wrap|
+AmnT|void|dTHXR
+AmnT|void|dXSTARG
+Cdhm|char *|HvNAME_get|HV * stash
+AmnT|void|IV_MAX
+AmnT|void|IV_MIN
+AmnT|void|IVSIZE
+AmnT|void|IVTYPE
+AmnT|void|LONGSIZE
+CpR|SV *|newSVsv_flags|SV * const old|I32 flags
+Cdhm|void *|NUM2PTR|type|int value
+AmnT|void|NVTYPE
+AmnT|void|Perl_eval_pv
+AmnT|void|Perl_eval_sv
+AmnT|void|PERL_MAGIC_glob
+AmnT|void|PERL_MAGIC_mutex
+AmnT|void|PERL_MAGIC_overload
+AmnT|void|PERL_MAGIC_overload_elem
+Cdhmn||PERL_PV_PRETTY_DUMP
+Cdhmn||PERL_PV_PRETTY_NOCLEAR
+Cdhmn||PERL_PV_PRETTY_REGPROP
+AmnT|void|Perl_warner_nocontext
+AmnT|void|PL_bufend
+AmnT|void|PL_bufptr
+AmnT|void|PL_compiling
+AmnT|void|PL_copline
+AmnT|void|PL_DBsignal
+dmn|SV *|PL_DBsingle
+dmn|GV *|PL_DBsub
+dmn|SV *|PL_DBtrace
+AmnT|void|PL_debstash
+AmnT|void|PL_diehook
+AmnT|void|PL_dirty
+dmn|U8|PL_dowarn
+AmnT|void|PL_error_count
+AmnT|void|PL_expect
+AmnT|void|PL_hints
+AmnT|void|PL_in_my
+AmnT|void|PL_in_my_stash
+AmnT|void|PL_laststatval
+AmnT|void|PL_lex_state
+AmnT|void|PL_lex_stuff
+AmnT|void|PL_linestr
+AmnT|void|PL_mess_sv
+AmnT|void|PL_no_modify
+AmnT|void|PL_perldb
+AmnT|void|PL_ppaddr
+AmnT|void|PL_rsfp
+AmnT|void|PL_rsfp_filters
+AmnT|void|PL_signals
+AmnT|void|PL_stack_base
+AmnT|void|PL_stack_sp
+AmnT|void|PL_statcache
+AmnT|void|PL_stdingv
+AmnT|void|PL_sv_arenaroot
+AmnT|void|PL_tainted
+AmnT|void|PL_tainting
+AmnT|void|PL_tokenbuf
+AmnT|void|PL_Xpv
+bCdMmpR|char *|sv_2pvbyte_nolen|SV * sv
+Cdp|char *|sv_2pv_flags|SV * const sv|STRLEN * const lp|const U32 flags
+bCdMmpR|char *|sv_2pv_nolen|SV * sv
+bCMmp|UV|sv_2uv|SV * sv
+AmnT|void|SV_CONST_RETURN
+AmnT|void|SV_COW_SHARED_HASH_KEYS
+p|STRLEN|sv_len_utf8_nomg|SV * const sv
 Am|void|sv_magic_portable|NN SV* sv|NULLOK SV* obj|int how|NULLOK const char* name|I32 namlen
-Amn|void|SV_MUTABLE_RETURN
-Amn|void|SV_UTF8_NO_ENCODING
-Amn|void|WARN_ASSERTIONS
-Amn|void|XSprePUSH
+AmnT|void|SV_MUTABLE_RETURN
+bCDdp|UV|sv_uv|SV * sv
+AmnT|void|UV_MAX
+AmnT|void|UV_MIN
+AmnT|void|UVSIZE
+AmnT|void|UVTYPE
+AmnT|void|UVXf
+AmnT|void|WARN_ASSERTIONS
+AmnT|void|XSprePUSH
index c73e2b0..aa12cc2 100644 (file)
@@ -65,8 +65,8 @@ sub parse_todo
       my $code = $1;
       s/^\s+//; s/\s+$//;
       /^\s*$/ and next;
-      /^\w+$/ or die "invalid identifier: $_\n";
-      exists $todo{$_} and die "duplicate identifier: $_ ($todo{$_} <=> $version)\n";
+      /^\w+$/ or die "parse_todo: invalid identifier in $todo: $_\n";
+      exists $todo{$_} and die "parse_todo: duplicate identifier in $todo: $_ ($todo{$_} <=> $version)\n";
       $todo{$_}{'version'} = $version;
       $todo{$_}{'code'} = $code if $code;
     }
@@ -80,7 +80,7 @@ sub expand_version
 {
   my($op, $ver) = @_;
   my($r, $v, $s) = parse_version($ver);
-  $r == 5 or die "only Perl revision 5 is supported\n";
+  $r =~ / ^ [57] $ /x  or die "only Perl revisions [57] are supported\n";
   my $bcdver = sprintf "0x%d%03d%03d", $r, $v, $s;
   return "(PERL_BCDVERSION $op $bcdver)";
 }
@@ -299,7 +299,8 @@ sub trim_arg        # Splits the argument into type and name, returning the
   s/^\s+//; s/\s+$//;             # No leading, trailing spacd
   s/\s+/ /g;                      # Collapse multiple space into one
 
-  return ($_, $name);
+  return ($_, $name) if defined $name;
+  return $_;
 }
 
 sub parse_embed
@@ -362,6 +363,12 @@ sub parse_embed
           }
 
           if ($name =~ /^[^\W\d]\w*$/) {
+            my $cond = ppcond(\@pps);
+            if ($cond =~ /defined\(PERL_IN_[A-Z0-9_]+_[CH]/ && $flags =~ /A/)
+            {
+                warn "$name marked as API, but restricted scope: $cond\n";
+            }
+            #warn "$name: $cond" if length $cond && $flags =~ /A/;
             for (@args) {
               $_ = [trim_arg($_)];
             }
@@ -371,7 +378,7 @@ sub parse_embed
               flags => { map { $_, 1 } $flags =~ /./g },
               ret   => $ret,
               args  => \@args,
-              cond  => ppcond(\@pps),
+              cond  => $cond,
             };
             $func[-1]{'ppport_fnc'} = 1 if $file =~ /ppport\.fnc/;
           }
@@ -433,13 +440,19 @@ sub known_but_hard_to_test_for
     #
     # The values for the keys are each the version that ppport.h makes them
     # work on, and were gleaned by manually looking at the code parts/inc/*.
-    # For non-ppport.h, scanprov will automatically figure out the version
+    # For functions, scanprov will automatically figure out the version
     # they were introduced in.
 
     my %return;
 
-    for (qw(CLASS dXSI32 items ix pTHX_ RETVAL StructCopy svtype
-            STMT_START STMT_END STR_WITH_LEN THIS XS))
+
+
+
+
+for (qw(CLASS CPERLscope dMY_CXT_SV dXSI32 END_EXTERN_C EXTERN_C items
+        ix PERL_USE_GCC_BRACE_GROUPS PL_hexdigit pTHX_ PTRV
+        RETVAL START_EXTERN_C STMT_END STMT_START StructCopy
+        STR_WITH_LEN svtype THIS XS XSPROTO))
     {
         # __MIN_PERL__ is this at the time of this commit.  This is the
         # earliest these have been tested to at the time of the commit, but
@@ -449,6 +462,9 @@ sub known_but_hard_to_test_for
     for (qw(_pMY_CXT pMY_CXT_)) {
         $return{$_} = '5.9.0';
     }
+    for (qw(PERLIO_FUNCS_DECL)) {
+        $return{$_} = '5.9.3';
+    }
     for (qw(XopDISABLE XopENABLE XopENTRY XopENTRYCUSTOM XopENTRY_set)) {
         $return{$_} = '5.13.7';
     }
index fc87a0c..56461cf 100644 (file)
@@ -5,6 +5,7 @@ aTHX_                          # T
 aTHXR                          # T
 aTHXR_                         # T
 av_clear                       # T
+av_count                       # T
 av_extend                      # T
 av_fetch                       # T
 av_fill                        # T
@@ -21,25 +22,33 @@ av_top_index                   # T
 av_undef                       # T
 av_unshift                     # T
 ax                             # T
-BIN                            # T
 BOM_UTF8                       # T
 boolSV                         # T
-BYTEORDER                      # T
 call_argv                      # T
 call_method                    # T
 call_pv                        # T
 call_sv                        # T
 C_ARRAY_END                    # T
 C_ARRAY_LENGTH                 # T
-CASTFLAGS                      # T
 cBOOL                          # T
 ckWARN                         # T
+CLASS                          # X added by devel/scanprov
+CopFILE                        # T
+CopFILEAV                      # T
+CopFILEGV                      # T
+CopFILEGV_set                  # T
+CopFILE_set                    # T
+CopFILESV                      # T
+CopSTASH                       # T
+CopSTASH_eq                    # T
+CopSTASHPV                     # T
+CopSTASH_set                   # T
 Copy                           # T
 CopyD                          # T
-CPPMINUS                       # T
-CPPSTDIN                       # T
+CPERLscope                     # X added by devel/scanprov
 croak                          # T
 croak_memory_wrap              # T
+croak_nocontext                # T
 croak_no_modify                # T
 croak_sv                       # T
 croak_xs_usage                 # T
@@ -49,10 +58,10 @@ CvDEPTH                        # T
 CvGV                           # T
 CvSTASH                        # T
 cv_undef                       # T
-cxinc                          # T
 dAX                            # T
 dAXMARK                        # T
 DEFSV                          # T
+DEFSV_set                      # T
 die                            # T
 die_sv                         # T
 dITEMS                         # T
@@ -62,39 +71,42 @@ do_close                       # T
 do_join                        # T
 do_open                        # T
 dORIGMARK                      # T
-do_sprintf                     # T
-dounwind                       # T
 dowantarray                    # T
 dSP                            # T
+dTARGET                        # T
 dTHR                           # T
 dTHX                           # T
+dTHXa                          # T
+dTHXoa                         # T
 dTHXR                          # T
 dUNDERBAR                      # T
 dVAR                           # T
 dXCPT                          # T
 dXSARGS                        # T
+dXSI32                         # X added by devel/scanprov
 dXSTARG                        # T
-END_EXTERN_C                   # T
+END_EXTERN_C                   # X added by devel/scanprov
 ENTER                          # T
 ERRSV                          # T
 eval_pv                        # T
 eval_sv                        # T
 EXTEND                         # T
-EXTERN_C                       # T
+EXTERN_C                       # X added by devel/scanprov
 filter_add                     # T
 filter_del                     # T
 filter_read                    # T
-free_tmps                      # T
 FREETMPS                       # T
 G_ARRAY                        # T
 G_DISCARD                      # T
 get_av                         # T
 get_cv                         # T
 get_cvn_flags                  # T
+get_cvs                        # T
 get_hv                         # T
 get_sv                         # T
 G_EVAL                         # T
 GIMME                          # T
+G_KEEPERR                      # T
 G_METHOD                       # T
 G_NOARGS                       # T
 gp_free                        # T
@@ -109,9 +121,9 @@ grok_oct                       # T
 G_SCALAR                       # T
 GV_ADD                         # T
 GV_ADDMULTI                    # T
+GV_ADDWARN                     # T
 GvAV                           # T
 gv_AVadd                       # T
-gv_check                       # T
 GvCV                           # T
 gv_efullname                   # T
 gv_efullname3                  # T
@@ -120,6 +132,7 @@ gv_fetchmeth                   # T
 gv_fetchmethod                 # T
 gv_fetchpv                     # T
 gv_fetchpvn_flags              # T
+gv_fetchpvs                    # T
 gv_fetchsv                     # T
 gv_fullname                    # T
 gv_fullname3                   # T
@@ -128,12 +141,12 @@ gv_HVadd                       # T
 gv_init                        # T
 gv_init_pvn                    # T
 gv_IOadd                       # T
-GV_NOADD_MASK                  # T
 gv_stashpv                     # T
 gv_stashpvn                    # T
 gv_stashpvs                    # T
 gv_stashsv                     # T
 GvSV                           # T
+GvSVn                          # T
 HEf_SVKEY                      # T
 HeHASH                         # T
 HeKEY                          # T
@@ -159,6 +172,8 @@ hv_iterval                     # T
 hv_ksplit                      # T
 hv_magic                       # T
 HvNAME                         # T
+HvNAME_get                     # T
+HvNAMELEN_get                  # T
 hv_store                       # T
 hv_store_ent                   # T
 hv_stores                      # T
@@ -167,7 +182,7 @@ ibcmp                          # T
 IN_PERL_COMPILETIME            # T
 instr                          # T
 INT2PTR                        # T
-INTSIZE                        # T
+INTMAX_C                       # T
 isALNUM                        # T
 isALNUM_A                      # T
 isALNUMC                       # T
@@ -198,6 +213,7 @@ isDIGIT_L1                     # T
 isGRAPH                        # T
 isGRAPH_A                      # T
 isGRAPH_L1                     # T
+isGV_with_GP                   # T
 isIDCONT                       # T
 isIDCONT_A                     # T
 isIDCONT_L1                    # T
@@ -238,9 +254,13 @@ isXDIGIT                       # T
 isXDIGIT_A                     # T
 isXDIGIT_L1                    # T
 isXDIGIT_LC                    # T
+items                          # X added by devel/scanprov
 IVdf                           # T
+IV_MAX                         # T
+IV_MIN                         # T
 IVSIZE                         # T
 IVTYPE                         # T
+ix                             # X added by devel/scanprov
 LATIN1_TO_NATIVE               # T
 LEAVE                          # T
 leave_scope                    # T
@@ -262,7 +282,6 @@ mg_free                        # T
 mg_get                         # T
 mg_magical                     # T
 mg_set                         # T
-moreswitches                   # T
 Move                           # T
 MoveD                          # T
 mPUSHi                         # T
@@ -270,6 +289,8 @@ mPUSHn                         # T
 mPUSHp                         # T
 mPUSHs                         # T
 mPUSHu                         # T
+MUTABLE_PTR                    # T
+MUTABLE_SV                     # T
 mXPUSHi                        # T
 mXPUSHn                        # T
 mXPUSHp                        # T
@@ -349,6 +370,7 @@ Nullch                         # T
 Nullcv                         # T
 Nullhv                         # T
 Nullsv                         # T
+NUM2PTR                        # T
 NVef                           # T
 NVff                           # T
 NVgf                           # T
@@ -362,11 +384,10 @@ OpMORESIB_set                  # T
 OPpENTERSUB_AMPER              # T
 OpSIBLING                      # T
 ORIGMARK                       # T
-OSNAME                         # T
+packWARN                       # T
 pad_alloc                      # T
 PERL_ABS                       # T
 perl_alloc                     # T
-PERL_BCDVERSION                # T
 perl_construct                 # T
 Perl_eval_pv                   # T
 Perl_eval_sv                   # T
@@ -455,7 +476,6 @@ PERL_PV_PRETTY_QUOTE           # T
 PERL_PV_PRETTY_REGPROP         # T
 PERL_QUAD_MAX                  # T
 PERL_QUAD_MIN                  # T
-PERL_REVISION                  # T
 perl_run                       # T
 PERL_SCAN_ALLOW_UNDERSCORES    # T
 PERL_SCAN_DISALLOW_PREFIX      # T
@@ -473,13 +493,21 @@ PERL_UINT_MAX                  # T
 PERL_UINT_MIN                  # T
 PERL_ULONG_MAX                 # T
 PERL_ULONG_MIN                 # T
+PERL_UNUSED_ARG                # T
 PERL_UNUSED_CONTEXT            # T
 PERL_UNUSED_DECL               # T
+PERL_UNUSED_RESULT             # T
+PERL_UNUSED_VAR                # T
 PERL_UQUAD_MAX                 # T
 PERL_UQUAD_MIN                 # T
+PERL_USE_GCC_BRACE_GROUPS      # X added by devel/scanprov
 PERL_USHORT_MAX                # T
 PERL_USHORT_MIN                # T
 PERL_VERSION                   # T
+PERL_VERSION_GE                # T
+PERL_VERSION_GT                # T
+PERL_VERSION_LE                # T
+PERL_VERSION_LT                # T
 PL_bufend                      # T
 PL_bufptr                      # T
 PL_compiling                   # T
@@ -498,7 +526,7 @@ PL_dowarn                      # T
 PL_errgv                       # T
 PL_error_count                 # T
 PL_expect                      # T
-PL_hexdigit                    # T
+PL_hexdigit                    # X added by devel/scanprov
 PL_hints                       # T
 PL_in_my                       # T
 PL_laststatval                 # T
@@ -513,6 +541,7 @@ PL_perl_destruct_level         # T
 PL_ppaddr                      # T
 PL_rsfp                        # T
 PL_rsfp_filters                # T
+PL_signals                     # T
 PL_stack_base                  # T
 PL_stack_sp                    # T
 PL_statcache                   # T
@@ -538,12 +567,14 @@ POPs                           # T
 pop_scope                      # T
 pregexec                       # T
 pregfree                       # T
-PRIVLIB                        # T
 pTHX                           # T
+pTHX_                          # X added by devel/scanprov
 PTR2IV                         # T
+PTR2nat                        # T
 PTR2NV                         # T
+PTR2ul                         # T
 PTR2UV                         # T
-PTRV                           # T
+PTRV                           # X added by devel/scanprov
 PUSHi                          # T
 PUSHMARK                       # T
 PUSHmortal                     # T
@@ -556,48 +587,46 @@ PUTBACK                        # T
 pv_display                     # T
 pv_escape                      # T
 pv_pretty                      # T
-RANDBITS                       # T
 Renew                          # T
 Renewc                         # T
 repeatcpy                      # T
 REPLACEMENT_CHARACTER_UTF8     # T
+RETVAL                         # X added by devel/scanprov
 rninstr                        # T
 Safefree                       # T
 save_aptr                      # T
 save_ary                       # T
-save_clearsv                   # T
 SAVE_DEFSV                     # T
-save_delete                    # T
-save_freepv                    # T
-save_freesv                    # T
+SAVEDELETE                     # T
+SAVEFREEPV                     # T
+SAVEFREESV                     # T
 save_hash                      # T
 save_hptr                      # T
-save_I32                       # T
-save_int                       # T
+SAVEI32                        # T
+SAVEINT                        # T
 save_item                      # T
+SAVEIV                         # T
 save_list                      # T
-save_long                      # T
+SAVELONG                       # T
 save_nogv                      # T
-save_pptr                      # T
+SAVEPPTR                       # T
 savepv                         # T
 savepvn                        # T
 save_scalar                    # T
-save_sptr                      # T
+SAVESPTR                       # T
 savestack_grow                 # T
 save_svref                     # T
 SAVETMPS                       # T
 scan_hex                       # T
 scan_oct                       # T
 setdefout                      # T
-SITELIB                        # T
 SP                             # T
 SPAGAIN                        # T
 ST                             # T
-stack_grow                     # T
-START_EXTERN_C                 # T
-STARTPERL                      # T
+START_EXTERN_C                 # X added by devel/scanprov
 start_subparse                 # T
-STDCHAR                        # T
+STMT_END                       # X added by devel/scanprov
+STMT_START                     # X added by devel/scanprov
 strEQ                          # T
 strGE                          # T
 strGT                          # T
@@ -606,12 +635,11 @@ strLT                          # T
 strNE                          # T
 strnEQ                         # T
 strnNE                         # T
-sv_2bool                       # T
+StructCopy                     # X added by devel/scanprov
+STR_WITH_LEN                   # X added by devel/scanprov
 sv_2cv                         # T
 sv_2io                         # T
-sv_2iv                         # T
 sv_2mortal                     # T
-sv_2pv                         # T
 sv_2pvbyte                     # T
 sv_2pvbyte_nolen               # T
 sv_2pv_flags                   # T
@@ -647,7 +675,6 @@ SVf_UTF8                       # T
 SvGETMAGIC                     # T
 sv_gets                        # T
 SV_GMAGIC                      # T
-sv_grow                        # T
 SvGROW                         # T
 SV_HAS_TRAILING_NUL            # T
 SV_IMMEDIATE_UNREF             # T
@@ -674,7 +701,6 @@ sv_mortalcopy                  # T
 sv_mortalcopy_flags            # T
 SV_MUTABLE_RETURN              # T
 sv_newmortal                   # T
-sv_newref                      # T
 SvNIOK                         # T
 SvNIOK_off                     # T
 SvNIOKp                        # T
@@ -691,6 +717,7 @@ SvNVX                          # T
 SvNVx                          # T
 SvOK                           # T
 SvOOK                          # T
+SvOOK_off                      # T
 SvPOK                          # T
 SvPOK_off                      # T
 SvPOK_on                       # T
@@ -698,16 +725,33 @@ SvPOK_only                     # T
 SvPOKp                         # T
 SvPV                           # T
 SvPVbyte                       # T
+SvPV_const                     # T
+SvPV_flags                     # T
+SvPV_flags_const               # T
+SvPV_flags_const_nolen         # T
+SvPV_flags_mutable             # T
 SvPV_force                     # T
+SvPV_force_flags               # T
+SvPV_force_flags_mutable       # T
+SvPV_force_flags_nolen         # T
+SvPV_force_mutable             # T
+SvPV_force_nolen               # T
 SvPV_force_nomg                # T
-sv_pvn_force                   # T
+SvPV_force_nomg_nolen          # T
+SvPV_mutable                   # T
 sv_pvn_force_flags             # T
 SvPV_nolen                     # T
+SvPV_nolen_const               # T
 SvPV_nomg                      # T
+SvPV_nomg_const                # T
+SvPV_nomg_const_nolen          # T
 SvPV_nomg_nolen                # T
+SvPV_renew                     # T
 SvPV_set                       # T
 SvPVX                          # T
 SvPVx                          # T
+SvPVX_const                    # T
+SvPVX_mutable                  # T
 SvREADONLY                     # T
 SvREADONLY_off                 # T
 SvREADONLY_on                  # T
@@ -753,6 +797,7 @@ sv_setsv_mg                    # T
 sv_setsv_nomg                  # T
 sv_setuv                       # T
 sv_setuv_mg                    # T
+SvSHARED_HASH                  # T
 SV_SMAGIC                      # T
 SvSTASH                        # T
 SvSTASH_set                    # T
@@ -776,6 +821,7 @@ SvTRUE                         # T
 SvTRUE_nomg                    # T
 SvTRUEx                        # T
 SvTYPE                         # T
+svtype                         # X added by devel/scanprov
 sv_unmagic                     # T
 sv_unmagicext                  # T
 sv_unref                       # T
@@ -792,12 +838,14 @@ SvUV_set                       # T
 SvUVX                          # T
 SvUVx                          # T
 SvUVXx                         # T
+SvVSTRING_mg                   # T
 switch_to_global_locale        # T
 sync_locale                    # T
-taint_env                      # T
-taint_proper                   # T
+TARG                           # T
+THIS                           # X added by devel/scanprov
 toLOWER                        # T
 toUPPER                        # T
+UINTMAX_C                      # T
 UNDERBAR                       # T
 UNICODE_REPLACEMENT            # T
 UNI_TO_NATIVE                  # T
@@ -809,6 +857,8 @@ UTF8_IS_INVARIANT              # T
 UTF8_MAXBYTES_CASE             # T
 UVCHR_IS_INVARIANT             # T
 UVCHR_SKIP                     # T
+UV_MAX                         # T
+UV_MIN                         # T
 UVof                           # T
 UVSIZE                         # T
 UVTYPE                         # T
@@ -876,7 +926,9 @@ XPUSHn                         # T
 XPUSHp                         # T
 XPUSHs                         # T
 XPUSHu                         # T
+XS                             # X added by devel/scanprov
 XSprePUSH                      # T
+XSPROTO                        # X added by devel/scanprov
 XSRETURN                       # T
 XSRETURN_EMPTY                 # T
 XSRETURN_IV                    # T
@@ -897,16 +949,3 @@ XS_VERSION                     # T
 XS_VERSION_BOOTCHECK           # T
 Zero                           # T
 ZeroD                          # T
-CLASS                          # X added by devel/scanprov
-dXSI32                         # X added by devel/scanprov
-items                          # X added by devel/scanprov
-ix                             # X added by devel/scanprov
-pTHX_                          # X added by devel/scanprov
-RETVAL                         # X added by devel/scanprov
-STMT_END                       # X added by devel/scanprov
-STMT_START                     # X added by devel/scanprov
-StructCopy                     # X added by devel/scanprov
-STR_WITH_LEN                   # X added by devel/scanprov
-svtype                         # X added by devel/scanprov
-THIS                           # X added by devel/scanprov
-XS                             # X added by devel/scanprov
index ec16188..c65e972 100644 (file)
@@ -1,5 +1,4 @@
 5.004000
-ARCHNAME                       # E
 block_end                      # E (Perl_block_end)
 block_gimme                    # U
 block_start                    # E (Perl_block_start)
@@ -31,18 +30,19 @@ isSPACE_LC                     # U
 isUPPER_LC                     # U
 isWORDCHAR_LC                  # U
 mess                           # E (Perl_mess)
+mess_nocontext                 # U
 mess_sv                        # U
 my_failure_exit                # U
 newSVpvf                       # U
-PERL_USE_GCC_BRACE_GROUPS      # E
+Perl_warner_nocontext          # E
 PL_mess_sv                     # E
 POPu                           # E
 rsignal                        # E
 rsignal_state                  # E
 save_gp                        # U
-save_I16                       # U
+SAVEI16                        # U
+SAVESTACK_POS                  # U
 share_hek                      # E
-SHORTSIZE                      # E
 sv_catpvf                      # U
 sv_catpvf_mg                   # U
 sv_cmp_locale                  # U
@@ -53,12 +53,9 @@ SvSetMagicSV_nosteal           # U
 sv_setpvf                      # U
 sv_setpvf_mg                   # U
 SvSetSV_nosteal                # U
-sv_taint                       # U
-sv_tainted                     # U
 SvTAINTED                      # U
 SvTAINTED_off                  # U
 SvTAINTED_on                   # U
-sv_untaint                     # U
 sv_vcatpvf                     # U
 sv_vcatpvf_mg                  # U
 sv_vcatpvfn                    # U
@@ -69,3 +66,4 @@ toLOWER_LC                     # U
 vmess                          # U
 vnewSVpvf                      # U
 warner                         # U
+warner_nocontext               # U
index 216f581..7e58395 100644 (file)
@@ -1,8 +1,6 @@
 5.005000
-cx_dump                        # U
 debop                          # U
 debprofdump                    # U
-DOUBLESIZE                     # E
 fbm_compile                    # E (Perl_fbm_compile)
 fbm_instr                      # E (Perl_fbm_instr)
 get_op_descs                   # U
@@ -15,16 +13,5 @@ new_stackinfo                  # E
 PL_curpad                      # E
 PL_in_my_stash                 # E
 PL_modglobal                   # E
-PTRSIZE                        # E
-regdump                        # U
-regexec_flags                  # U
-regnext                        # E (Perl_regnext)
-runops_debug                   # U
-runops_standard                # U
-save_iv                        # U (save_iv)
-sv_iv                          # U
-sv_nv                          # U
 sv_peek                        # U
-sv_pvn                         # U
 sv_pvn_nomg                    # U
-sv_true                        # U
index 7785939..e114120 100644 (file)
@@ -3,40 +3,23 @@ av_delete                      # U
 av_exists                      # U
 call_atexit                    # E
 caller_cx                      # U
-cast_i32                       # U (cast_i32)
-cast_iv                        # U (cast_iv)
-cast_ulong                     # U
-cast_uv                        # U (cast_uv)
 ckWARN2                        # U
 ckWARN2_d                      # U
 ckWARN_d                       # U
-CPPLAST                        # E
-CPPRUN                         # E
-do_gv_dump                     # U
-do_gvgv_dump                   # U
-do_hv_dump                     # U
-do_magic_dump                  # U
-do_op_dump                     # U
+CopLINE                        # U
+die_nocontext                  # U
 do_open9                       # U
-do_pmop_dump                   # U
-do_sv_dump                     # U
 DO_UTF8                        # U
 dump_all                       # U
 dump_eval                      # U
 dump_form                      # U
-dump_indent                    # U
 dump_packsubs                  # U
 dump_sub                       # U
-dump_vindent                   # U
+form_nocontext                 # U
+fprintf_nocontext              # U
 get_context                    # U
 get_ppaddr                     # E
 gv_dump                        # U
-I16SIZE                        # E
-I16TYPE                        # E
-I32SIZE                        # E
-I32TYPE                        # E
-I8SIZE                         # E
-I8TYPE                         # E
 isALNUMC_LC                    # U
 isALPHA_LC_utf8_safe           # U
 isALPHANUMERIC_LC_utf8_safe    # U
@@ -90,67 +73,62 @@ isWORDCHAR_uvchr               # U
 isXDIGIT_LC_utf8_safe          # U
 isXDIGIT_utf8_safe             # U
 isXDIGIT_uvchr                 # U
-LSEEKSIZE                      # E
+load_module_nocontext          # U
 magic_dump                     # U
 my_atof                        # U
 my_fflush_all                  # U
 newANONATTRSUB                 # U
 newATTRSUB                     # U
+newSVpvf_nocontext             # U
 newXS                          # E (Perl_newXS)
 newXSproto                     # E
 op_dump                        # U
 OPpEARLY_CV                    # E
 PERL_EXIT_EXPECTED             # E
 perl_parse                     # E (perl_parse)
+PERL_REVISION                  # E
 PERL_SYS_INIT3                 # U
 PL_check                       # E
 PL_exit_flags                  # E
 PL_runops                      # E
 pmop_dump                      # U
 POPul                          # E
-reginitcolors                  # U
 require_pv                     # U (perl_require_pv)
 safesyscalloc                  # U
 safesysfree                    # U
 safesysmalloc                  # U
 safesysrealloc                 # U
 save_alloc                     # U
-save_destructor                # E (Perl_save_destructor)
-save_destructor_x              # E
-save_I8                        # U
-save_re_context                # U
+SAVEDESTRUCTOR                 # E
+SAVEI8                         # U
 save_vptr                      # U
 scan_bin                       # U
 set_context                    # U
 Strtol                         # U
 Strtoul                        # U
-str_to_version                 # U
 sv_2pvutf8                     # U
-sv_2pvutf8_nolen               # U
+sv_catpvf_mg_nocontext         # U
+sv_catpvf_nocontext            # U
 sv_force_normal                # U
 SvIOK_notUV                    # U
 SvIOK_only_UV                  # U
 SvIOK_UV                       # U
 sv_len_utf8                    # U
+sv_len_utf8_nomg               # U
 SvPOK_only_UTF8                # U
 sv_pos_b2u                     # U
 sv_pos_u2b                     # U
-sv_pv                          # U
-sv_pvbyte                      # U
-sv_pvbyten                     # U
-sv_pvbyten_force               # U
 SvPVbyte_nolen                 # U
 SvPVbytex                      # U
 SvPVbytex_force                # U
-sv_pvutf8                      # U
 SvPVutf8                       # U
 SvPVutf8_force                 # U
-sv_pvutf8n                     # U
-sv_pvutf8n_force               # U
 SvPVutf8_nolen                 # U
 SvPVutf8x                      # U
 SvPVutf8x_force                # U
 sv_rvweaken                    # U
+sv_setpvf_mg_nocontext         # U
+sv_setpvf_nocontext            # U
 SvUOK                          # U
 sv_utf8_decode                 # U
 sv_utf8_downgrade              # U
@@ -165,12 +143,6 @@ toTITLE_utf8_safe              # U
 toTITLE_uvchr                  # U
 toUPPER_utf8_safe              # U
 toUPPER_uvchr                  # U
-U16SIZE                        # E
-U16TYPE                        # E
-U32SIZE                        # E
-U32TYPE                        # E
-U8SIZE                         # E
-U8TYPE                         # E
 UTF8_CHK_SKIP                  # U
 utf8_distance                  # U
 utf8_hop                       # U
@@ -182,3 +154,4 @@ vcroak                         # U
 vform                          # U
 vwarn                          # U
 vwarner                        # U
+warn_nocontext                 # U
index bb08876..f589b8c 100644 (file)
@@ -6,7 +6,6 @@ gv_fullname4                   # U
 isPSXSPC_LC                    # U
 isUTF8_CHAR                    # U
 is_utf8_string                 # U
-NVSIZE                         # E
 save_generic_pvref             # U
 SvGAMAGIC                      # U
 utf8_to_bytes                  # U
index de1e84e..d2ceb0f 100644 (file)
@@ -1,6 +1,5 @@
 5.007001
 bytes_from_utf8                # U
-despatch_signals               # U
 do_openn                       # U
 gv_handler                     # U
 isALNUM_LC_uvchr               # U
@@ -19,10 +18,10 @@ my_popen_list                  # U
 PerlIO_apply_layers            # U
 PerlIO_binmode                 # U
 PerlIO_debug                   # U
+PERLIO_FUNCS_CAST              # E
 POPpbytex                      # E
 printf_nocontext               # U
-save_mortalizesv               # U
-scan_num                       # A
+SAVEMORTALIZESV                # U
 sv_force_normal_flags          # U
 sv_setref_uv                   # U
 sv_unref_flags                 # U
index e763ce3..0b101c5 100644 (file)
@@ -9,7 +9,6 @@ mfree                          # U
 mini_mktime                    # U
 my_strftime                    # U
 op_null                        # U
-OSVERS                         # E
 realloc                        # U
 sv_catpvn_flags                # U
 sv_catsv_flags                 # U
index 164ecfd..b706edf 100644 (file)
@@ -5,7 +5,6 @@ ckWARN4                        # U
 ckWARN4_d                      # U
 custom_op_desc                 # U
 custom_op_name                 # U
-cx_dup                         # E (Perl_cx_dup)
 deb                            # U
 deb_nocontext                  # U
 debstack                       # U
@@ -21,6 +20,10 @@ my_fork                        # U
 my_socketpair                  # U
 OP_DESC                        # U
 OP_NAME                        # U
+pack_cat                       # U
+packWARN2                      # U
+packWARN3                      # U
+packWARN4                      # U
 perl_destruct                  # E (perl_destruct)
 PERL_EXIT_DESTRUCT_END         # E
 PerlIO_clearerr                # U (PerlIO_clearerr)
index 97164b7..464a8e7 100644 (file)
@@ -1,15 +1,14 @@
 5.008001
 CvPADLIST                      # E
-doing_taint                    # U
 find_runcv                     # U
+IN_PERL_RUNTIME                # E
 is_utf8_string_loc             # U
 packlist                       # U
 pad_add_anon                   # U
 pad_new                        # E
-pad_setsv                      # U
 pad_tidy                       # E
 PL_comppad                     # E
-save_bool                      # U
+SAVEBOOL                       # U
 savestack_grow_cnt             # U
 seed                           # U
 sv_cat_decode                  # U
index 65bf569..129e018 100644 (file)
@@ -1,2 +1 @@
 5.008009
-hv_assert                      # U
index ecbaf1d..fa33a67 100644 (file)
@@ -7,15 +7,13 @@ hek_dup                        # U
 MY_CXT                         # E
 MY_CXT_CLONE                   # E
 MY_CXT_INIT                    # E
-my_cxt_init                    # U
 new_version                    # U
 parser_dup                     # U
+_pMY_CXT                       # X added by devel/scanprov
 pMY_CXT                        # E
-regdupe_internal               # U
+pMY_CXT_                       # X added by devel/scanprov
 save_set_svflags               # U
 SVs_PADSTALE                   # E
 vcmp                           # U
 vnumify                        # U
 vstringify                     # U
-_pMY_CXT                       # X added by devel/scanprov
-pMY_CXT_                       # X added by devel/scanprov
index 529dc08..c59b7a2 100644 (file)
@@ -1,7 +1,4 @@
 5.009003
-av_arylen_p                    # U
-ckwarn                         # U
-ckwarn_d                       # U
 dMULTICALL                     # E
 doref                          # U
 gv_const_sv                    # U
@@ -18,10 +15,13 @@ is_utf8_string_loclen          # U
 MULTICALL                      # E
 newGIVENOP                     # U
 newSVhek                       # U
+pad_compname_type              # U
+PERLIO_FUNCS_DECL              # X added by devel/scanprov
 PERL_MAGIC_arylen_p            # E
 PERL_MAGIC_rhash               # E
 PERL_MAGIC_symtab              # E
 POP_MULTICALL                  # E
 savepvs                        # U
 sortsv_flags                   # U
+SvPV_shrink_to_cur             # U
 vverify                        # U
index d100ab9..a486831 100644 (file)
@@ -1,5 +1,6 @@
 5.009004
 gv_name_set                    # U
+GV_NOTQUAL                     # E
 hv_copy_hints_hv               # U
 my_vsnprintf                   # U
 newXS_flags                    # U
index 38949ef..cf14699 100644 (file)
@@ -16,13 +16,6 @@ ptr_table_new                  # U
 ptr_table_split                # U
 ptr_table_store                # U
 re_compile                     # U
-regfree_internal               # U
-reg_named_buff_all             # U
-reg_named_buff_exists          # U
-reg_named_buff_fetch           # U
-reg_named_buff_firstkey        # U
-reg_named_buff_nextkey         # U
-reg_named_buff_scalar          # U
 savesharedpvn                  # U
 scan_vstring                   # E (Perl_scan_vstring)
 upg_version                    # E (Perl_upg_version)
index 0778e3e..9dc400c 100644 (file)
@@ -1,12 +1,4 @@
 5.010000
-hv_common                      # U
-hv_common_key_len              # U
-reentrant_free                 # U
-reentrant_init                 # U
-reentrant_retry                # U
-reentrant_size                 # U
+my_cxt_init                    # U
 START_MY_CXT                   # E
 sv_destroyable                 # U
-sys_init                       # U
-sys_init3                      # U
-sys_term                       # U
index 2c80afc..72b2419 100644 (file)
@@ -4,7 +4,12 @@ mro_get_private_data           # U
 mro_register                   # U
 mro_set_mro                    # U
 mro_set_private_data           # U
-save_freeop                    # U (Perl_save_freeop)
+MUTABLE_AV                     # U
+MUTABLE_CV                     # U
+MUTABLE_GV                     # U
+MUTABLE_HV                     # U
+MUTABLE_IO                     # U
+SAVEFREEOP                     # U
 save_hints                     # U
 save_op                        # U (Perl_save_op)
 save_padsv_and_mortalize       # U
index cbeace0..72eafe1 100644 (file)
@@ -1,12 +1,10 @@
 5.011000
-av_iter_p                      # U
 gv_add_by_type                 # U
 Gv_AMupdate                    # A
 is_ascii_string                # U
 is_invariant_string            # U
 is_utf8_invariant_string       # U
 PL_opfreehook                  # E
-pregfree2                      # U
 PUSH_MULTICALL                 # U
 re_dup_guts                    # U
 save_adelete                   # U
index 906e256..4600eff 100644 (file)
@@ -1,5 +1,4 @@
 5.011002
-CHARBITS                       # E
 ENTER_with_name                # U
 LEAVE_with_name                # U
 lex_bufutf8                    # U
index 49dbd43..5e4aa77 100644 (file)
@@ -4,6 +4,7 @@ ck_entersub_args_proto         # U
 ck_entersub_args_proto_or_list # U
 cv_get_call_checker            # E
 cv_set_call_checker            # E
+gv_fetchpvn                    # U
 lex_stuff_pv                   # U
 LINKLIST                       # U
 mg_free_type                   # U
@@ -20,7 +21,6 @@ RV2CVOPCV_MARK_EARLY           # E
 RV2CVOPCV_RETURN_NAME_GV       # E
 savesharedpvs                  # U
 savesharedsvpv                 # U
-sv_2bool_flags                 # U
 sv_catpv_flags                 # U
 sv_catpv_nomg                  # U
 sv_catpvs_flags                # U
index 8b9162e..5bbabe1 100644 (file)
@@ -36,9 +36,9 @@ parse_block                    # U
 parse_label                    # U
 PARSE_OPTIONAL                 # E
 PL_phase                       # E
-XopFLAGS                       # E
 XopDISABLE                     # X added by devel/scanprov
 XopENABLE                      # X added by devel/scanprov
 XopENTRY                       # X added by devel/scanprov
 XopENTRYCUSTOM                 # X added by devel/scanprov
 XopENTRY_set                   # X added by devel/scanprov
+XopFLAGS                       # E
index 8e95c5d..71d593b 100644 (file)
@@ -1,5 +1,4 @@
 5.013008
-foldEQ_latin1                  # U
 parse_arithexpr                # U
 parse_fullexpr                 # U
 parse_listexpr                 # U
index 20e036e..13e40fa 100644 (file)
@@ -1,2 +1,4 @@
 5.015003
 GV_ADDMG                       # E
+gv_fetchsv_nomg                # U
+GV_NO_SVGMAGIC                 # E
index a58995e..7350b4a 100644 (file)
@@ -1,2 +1,3 @@
 5.017001
 alloccopstash                  # U
+CopSTASHPV_set                 # A
index ecfffd7..4d2165c 100644 (file)
@@ -6,3 +6,5 @@ isPSXSPC_LC_uvchr              # U
 isWORDCHAR_LC_uvchr            # U
 isXDIGIT_LC_uvchr              # U
 SvREFCNT_dec_NN                # U
+SvTRUE_NN                      # U
+SvTRUE_nomg_NN                 # U
index d3f7e99..6fe629a 100644 (file)
@@ -1,5 +1,4 @@
 5.021006
-DOUBLEKIND                     # E
 newDEFSVOP                     # U
 op_convert_list                # U
 WARN_LOCALE                    # E
index 50ed05a..e461a32 100644 (file)
@@ -1,8 +1 @@
 5.023000
-DOUBLEINFBYTES                 # E
-DOUBLEMANTBITS                 # E
-DOUBLENANBYTES                 # E
-LONGDBLINFBYTES                # E
-LONGDBLMANTBITS                # E
-LONGDBLNANBYTES                # E
-NVMANTBITS                     # E
index 938c65b..b3bb4a7 100644 (file)
@@ -1,18 +1,4 @@
 5.023008
 clear_defarray                 # U
-cx_popblock                    # U
-cx_popeval                     # U
-cx_popformat                   # U
-cx_poploop                     # U
-cx_popsub                      # U
-cx_popsub_args                 # U
-cx_popsub_common               # U
-cx_pushblock                   # U
-cx_pusheval                    # U
-cx_pushformat                  # U
-cx_pushloop_for                # U
-cx_pushloop_plain              # U
-cx_pushsub                     # U
-cx_topblock                    # U
 leave_adjust_stacks            # U
 savetmps                       # U
index d8981f7..8a325ab 100644 (file)
@@ -1,7 +1,3 @@
 5.027008
-cx_popgiven                    # U
-cx_popwhen                     # U
-cx_pushgiven                   # U
-cx_pushwhen                    # U
 newWHENOP                      # U
 WARN_EXPERIMENTAL__SCRIPT_RUN  # E
diff --git a/dist/Devel-PPPort/parts/todo/5028002 b/dist/Devel-PPPort/parts/todo/5028002
new file mode 100644 (file)
index 0000000..9d2f06d
--- /dev/null
@@ -0,0 +1 @@
+5.028002
diff --git a/dist/Devel-PPPort/parts/todo/5028003 b/dist/Devel-PPPort/parts/todo/5028003
new file mode 100644 (file)
index 0000000..f4b5772
--- /dev/null
@@ -0,0 +1 @@
+5.028003
diff --git a/dist/Devel-PPPort/parts/todo/5030001 b/dist/Devel-PPPort/parts/todo/5030001
new file mode 100644 (file)
index 0000000..1aa762f
--- /dev/null
@@ -0,0 +1 @@
+5.030001
diff --git a/dist/Devel-PPPort/parts/todo/5030002 b/dist/Devel-PPPort/parts/todo/5030002
new file mode 100644 (file)
index 0000000..2db920e
--- /dev/null
@@ -0,0 +1 @@
+5.030002
diff --git a/dist/Devel-PPPort/parts/todo/5030003 b/dist/Devel-PPPort/parts/todo/5030003
new file mode 100644 (file)
index 0000000..33b044f
--- /dev/null
@@ -0,0 +1 @@
+5.030003
diff --git a/dist/Devel-PPPort/parts/todo/5031000 b/dist/Devel-PPPort/parts/todo/5031000
new file mode 100644 (file)
index 0000000..02126a5
--- /dev/null
@@ -0,0 +1 @@
+5.031000
index fc93346..e6f25bf 100644 (file)
@@ -1,5 +1,4 @@
 5.031005
-gimme_V                        # U
 isALPHANUMERIC_utf8            # A
 isALPHA_utf8                   # A
 isASCII_utf8                   # A
index 0cd061b..9a62d89 100644 (file)
@@ -1,7 +1,3 @@
 5.031007
-csighandler                    # E (Perl_csighandler)
-csighandler1                   # U
-csighandler3                   # E
-perly_sighandler               # E
 sv_isa_sv                      # U
 WARN_EXPERIMENTAL__ISA         # E
diff --git a/dist/Devel-PPPort/parts/todo/5031009 b/dist/Devel-PPPort/parts/todo/5031009
new file mode 100644 (file)
index 0000000..7928b44
--- /dev/null
@@ -0,0 +1 @@
+5.031009
diff --git a/dist/Devel-PPPort/parts/todo/5031010 b/dist/Devel-PPPort/parts/todo/5031010
new file mode 100644 (file)
index 0000000..fbca57c
--- /dev/null
@@ -0,0 +1 @@
+5.031010
diff --git a/dist/Devel-PPPort/parts/todo/5031011 b/dist/Devel-PPPort/parts/todo/5031011
new file mode 100644 (file)
index 0000000..3493c29
--- /dev/null
@@ -0,0 +1 @@
+5.031011
diff --git a/dist/Devel-PPPort/parts/todo/5032000 b/dist/Devel-PPPort/parts/todo/5032000
new file mode 100644 (file)
index 0000000..b84852a
--- /dev/null
@@ -0,0 +1 @@
+5.032000
diff --git a/dist/Devel-PPPort/parts/todo/5033000 b/dist/Devel-PPPort/parts/todo/5033000
new file mode 100644 (file)
index 0000000..f2d593f
--- /dev/null
@@ -0,0 +1 @@
+5.033000
diff --git a/dist/Devel-PPPort/parts/todo/5033001 b/dist/Devel-PPPort/parts/todo/5033001
new file mode 100644 (file)
index 0000000..7dcaa75
--- /dev/null
@@ -0,0 +1,2 @@
+5.033001
+dMY_CXT_SV                     # E
diff --git a/dist/Devel-PPPort/parts/todo/5033002 b/dist/Devel-PPPort/parts/todo/5033002
new file mode 100644 (file)
index 0000000..3e0fcf0
--- /dev/null
@@ -0,0 +1,3 @@
+5.033002
+PERL_VERSION_EQ                # E
+PERL_VERSION_NE                # E
diff --git a/dist/Devel-PPPort/t/01_test.t b/dist/Devel-PPPort/t/01_test.t
deleted file mode 100644 (file)
index 0215f90..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-################################################################################
-#
-#            !!!!!   Do NOT edit this file directly!   !!!!!
-#
-#            Edit mktests.PL and/or parts/inc/01_test instead.
-#
-#  This file was automatically generated from the definition files in the
-#  parts/inc/ subdirectory by mktests.PL. To learn more about how all this
-#  works, please read the F<HACKERS> file that came with this distribution.
-#
-################################################################################
-
-use FindBin ();
-
-BEGIN {
-  if ($ENV{'PERL_CORE'}) {
-    chdir 't' if -d 't';
-    unshift @INC, '../lib' 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;
-    }
-  }
-
-  use lib "$FindBin::Bin";
-  use lib "$FindBin::Bin/../parts/inc";
-
-  die qq[Cannot find "$FindBin::Bin/../parts/inc"] unless -d "$FindBin::Bin/../parts/inc";
-
-  sub load {
-    require 'testutil.pl';
-    require 'inctools';
-  }
-
-  if (1) {
-    load();
-    plan(tests => 1);
-  }
-}
-
-use Devel::PPPort;
-use strict;
-BEGIN { $^W = 1; }
-
-package Devel::PPPort;
-use vars '@ISA';
-require DynaLoader;
-@ISA = qw(DynaLoader);
-bootstrap Devel::PPPort;
-
-package main;
-
-# This test file is used as target dependency for Makefile
-ok 1;
-
diff --git a/dist/Devel-PPPort/t/HvNAME.t b/dist/Devel-PPPort/t/HvNAME.t
deleted file mode 100644 (file)
index f0212e0..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-################################################################################
-#
-#            !!!!!   Do NOT edit this file directly!   !!!!!
-#
-#            Edit mktests.PL and/or parts/inc/HvNAME instead.
-#
-#  This file was automatically generated from the definition files in the
-#  parts/inc/ subdirectory by mktests.PL. To learn more about how all this
-#  works, please read the F<HACKERS> file that came with this distribution.
-#
-################################################################################
-
-use FindBin ();
-
-BEGIN {
-  if ($ENV{'PERL_CORE'}) {
-    chdir 't' if -d 't';
-    unshift @INC, '../lib' 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;
-    }
-  }
-
-  use lib "$FindBin::Bin";
-  use lib "$FindBin::Bin/../parts/inc";
-
-  die qq[Cannot find "$FindBin::Bin/../parts/inc"] unless -d "$FindBin::Bin/../parts/inc";
-
-  sub load {
-    require 'testutil.pl';
-    require 'inctools';
-  }
-
-  if (4) {
-    load();
-    plan(tests => 4);
-  }
-}
-
-use Devel::PPPort;
-use strict;
-BEGIN { $^W = 1; }
-
-package Devel::PPPort;
-use vars '@ISA';
-require DynaLoader;
-@ISA = qw(DynaLoader);
-bootstrap Devel::PPPort;
-
-package main;
-
-is(Devel::PPPort::HvNAME_get(\%Devel::PPPort::), 'Devel::PPPort');
-ok(!defined Devel::PPPort::HvNAME_get({}));
-
-is(Devel::PPPort::HvNAMELEN_get(\%Devel::PPPort::), length('Devel::PPPort'));
-is(Devel::PPPort::HvNAMELEN_get({}), 0);
-
diff --git a/dist/Devel-PPPort/t/MY_CXT.t b/dist/Devel-PPPort/t/MY_CXT.t
deleted file mode 100644 (file)
index 7a7ce39..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-################################################################################
-#
-#            !!!!!   Do NOT edit this file directly!   !!!!!
-#
-#            Edit mktests.PL and/or parts/inc/MY_CXT instead.
-#
-#  This file was automatically generated from the definition files in the
-#  parts/inc/ subdirectory by mktests.PL. To learn more about how all this
-#  works, please read the F<HACKERS> file that came with this distribution.
-#
-################################################################################
-
-use FindBin ();
-
-BEGIN {
-  if ($ENV{'PERL_CORE'}) {
-    chdir 't' if -d 't';
-    unshift @INC, '../lib' 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;
-    }
-  }
-
-  use lib "$FindBin::Bin";
-  use lib "$FindBin::Bin/../parts/inc";
-
-  die qq[Cannot find "$FindBin::Bin/../parts/inc"] unless -d "$FindBin::Bin/../parts/inc";
-
-  sub load {
-    require 'testutil.pl';
-    require 'inctools';
-  }
-
-  if (3) {
-    load();
-    plan(tests => 3);
-  }
-}
-
-use Devel::PPPort;
-use strict;
-BEGIN { $^W = 1; }
-
-package Devel::PPPort;
-use vars '@ISA';
-require DynaLoader;
-@ISA = qw(DynaLoader);
-bootstrap Devel::PPPort;
-
-package main;
-
-ok(&Devel::PPPort::MY_CXT_1());
-ok(&Devel::PPPort::MY_CXT_2());
-ok(&Devel::PPPort::MY_CXT_CLONE());
-
diff --git a/dist/Devel-PPPort/t/SvPV.t b/dist/Devel-PPPort/t/SvPV.t
deleted file mode 100644 (file)
index 7da38e2..0000000
+++ /dev/null
@@ -1,124 +0,0 @@
-################################################################################
-#
-#            !!!!!   Do NOT edit this file directly!   !!!!!
-#
-#            Edit mktests.PL and/or parts/inc/SvPV instead.
-#
-#  This file was automatically generated from the definition files in the
-#  parts/inc/ subdirectory by mktests.PL. To learn more about how all this
-#  works, please read the F<HACKERS> file that came with this distribution.
-#
-################################################################################
-
-use FindBin ();
-
-BEGIN {
-  if ($ENV{'PERL_CORE'}) {
-    chdir 't' if -d 't';
-    unshift @INC, '../lib' 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;
-    }
-  }
-
-  use lib "$FindBin::Bin";
-  use lib "$FindBin::Bin/../parts/inc";
-
-  die qq[Cannot find "$FindBin::Bin/../parts/inc"] unless -d "$FindBin::Bin/../parts/inc";
-
-  sub load {
-    require 'testutil.pl';
-    require 'inctools';
-  }
-
-  if (49) {
-    load();
-    plan(tests => 49);
-  }
-}
-
-use Devel::PPPort;
-use strict;
-BEGIN { $^W = 1; }
-
-package Devel::PPPort;
-use vars '@ISA';
-require DynaLoader;
-@ISA = qw(DynaLoader);
-bootstrap Devel::PPPort;
-
-package main;
-
-my $mhx = "mhx";
-
-is(&Devel::PPPort::SvPVbyte($mhx), 3);
-
-my $i = 42;
-
-is(&Devel::PPPort::SvPV_nolen($mhx), $i++);
-is(&Devel::PPPort::SvPV_const($mhx), $i++);
-is(&Devel::PPPort::SvPV_mutable($mhx), $i++);
-is(&Devel::PPPort::SvPV_flags($mhx), $i++);
-is(&Devel::PPPort::SvPV_flags_const($mhx), $i++);
-
-is(&Devel::PPPort::SvPV_flags_const_nolen($mhx), $i++);
-is(&Devel::PPPort::SvPV_flags_mutable($mhx), $i++);
-is(&Devel::PPPort::SvPV_force($mhx), $i++);
-is(&Devel::PPPort::SvPV_force_nolen($mhx), $i++);
-is(&Devel::PPPort::SvPV_force_mutable($mhx), $i++);
-
-is(&Devel::PPPort::SvPV_force_nomg($mhx), $i++);
-is(&Devel::PPPort::SvPV_force_nomg_nolen($mhx), $i++);
-is(&Devel::PPPort::SvPV_force_flags($mhx), $i++);
-is(&Devel::PPPort::SvPV_force_flags_nolen($mhx), $i++);
-is(&Devel::PPPort::SvPV_force_flags_mutable($mhx), $i++);
-
-is(&Devel::PPPort::SvPV_nolen_const($mhx), $i++);
-is(&Devel::PPPort::SvPV_nomg($mhx), $i++);
-is(&Devel::PPPort::SvPV_nomg_const($mhx), $i++);
-is(&Devel::PPPort::SvPV_nomg_const_nolen($mhx), $i++);
-is(&Devel::PPPort::SvPV_nomg_nolen($mhx), $i++);
-
-$mhx = 42; is(&Devel::PPPort::SvPV_nolen($mhx), 0);
-$mhx = 42; is(&Devel::PPPort::SvPV_const($mhx), 2);
-$mhx = 42; is(&Devel::PPPort::SvPV_mutable($mhx), 2);
-$mhx = 42; is(&Devel::PPPort::SvPV_flags($mhx), 2);
-$mhx = 42; is(&Devel::PPPort::SvPV_flags_const($mhx), 2);
-
-$mhx = 42; is(&Devel::PPPort::SvPV_flags_const_nolen($mhx), 0);
-$mhx = 42; is(&Devel::PPPort::SvPV_flags_mutable($mhx), 2);
-$mhx = 42; is(&Devel::PPPort::SvPV_force($mhx), 2);
-$mhx = 42; is(&Devel::PPPort::SvPV_force_nolen($mhx), 0);
-$mhx = 42; is(&Devel::PPPort::SvPV_force_mutable($mhx), 2);
-
-$mhx = 42; is(&Devel::PPPort::SvPV_force_nomg($mhx), 2);
-$mhx = 42; is(&Devel::PPPort::SvPV_force_nomg_nolen($mhx), 0);
-$mhx = 42; is(&Devel::PPPort::SvPV_force_flags($mhx), 2);
-$mhx = 42; is(&Devel::PPPort::SvPV_force_flags_nolen($mhx), 0);
-$mhx = 42; is(&Devel::PPPort::SvPV_force_flags_mutable($mhx), 2);
-
-$mhx = 42; is(&Devel::PPPort::SvPV_nolen_const($mhx), 0);
-$mhx = 42; is(&Devel::PPPort::SvPV_nomg($mhx), 2);
-$mhx = 42; is(&Devel::PPPort::SvPV_nomg_const($mhx), 2);
-$mhx = 42; is(&Devel::PPPort::SvPV_nomg_const_nolen($mhx), 0);
-$mhx = 42; is(&Devel::PPPort::SvPV_nomg_nolen($mhx), 0);
-
-my $str = "";
-&Devel::PPPort::SvPV_force($str);
-my($s2, $before, $after) = &Devel::PPPort::SvPV_renew($str, 81, "x"x80);
-is($str, "x"x80);
-is($s2, "x"x80);
-ok($before < 81);
-is($after, 81);
-
-$str = "x"x400;
-&Devel::PPPort::SvPV_force($str);
-($s2, $before, $after) = &Devel::PPPort::SvPV_renew($str, 41, "x"x40);
-is($str, "x"x40);
-is($s2, "x"x40);
-ok($before > 41);
-is($after, 41);
-
diff --git a/dist/Devel-PPPort/t/SvREFCNT.t b/dist/Devel-PPPort/t/SvREFCNT.t
deleted file mode 100644 (file)
index d918e2b..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-################################################################################
-#
-#            !!!!!   Do NOT edit this file directly!   !!!!!
-#
-#            Edit mktests.PL and/or parts/inc/SvREFCNT instead.
-#
-#  This file was automatically generated from the definition files in the
-#  parts/inc/ subdirectory by mktests.PL. To learn more about how all this
-#  works, please read the F<HACKERS> file that came with this distribution.
-#
-################################################################################
-
-use FindBin ();
-
-BEGIN {
-  if ($ENV{'PERL_CORE'}) {
-    chdir 't' if -d 't';
-    unshift @INC, '../lib' 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;
-    }
-  }
-
-  use lib "$FindBin::Bin";
-  use lib "$FindBin::Bin/../parts/inc";
-
-  die qq[Cannot find "$FindBin::Bin/../parts/inc"] unless -d "$FindBin::Bin/../parts/inc";
-
-  sub load {
-    require 'testutil.pl';
-    require 'inctools';
-  }
-
-  if (14) {
-    load();
-    plan(tests => 14);
-  }
-}
-
-use Devel::PPPort;
-use strict;
-BEGIN { $^W = 1; }
-
-package Devel::PPPort;
-use vars '@ISA';
-require DynaLoader;
-@ISA = qw(DynaLoader);
-bootstrap Devel::PPPort;
-
-package main;
-
-for (Devel::PPPort::SvREFCNT()) {
-  ok(defined $_ and $_);
-}
-
diff --git a/dist/Devel-PPPort/t/Sv_set.t b/dist/Devel-PPPort/t/Sv_set.t
deleted file mode 100644 (file)
index 821cf01..0000000
+++ /dev/null
@@ -1,117 +0,0 @@
-################################################################################
-#
-#            !!!!!   Do NOT edit this file directly!   !!!!!
-#
-#            Edit mktests.PL and/or parts/inc/Sv_set instead.
-#
-#  This file was automatically generated from the definition files in the
-#  parts/inc/ subdirectory by mktests.PL. To learn more about how all this
-#  works, please read the F<HACKERS> file that came with this distribution.
-#
-################################################################################
-
-use FindBin ();
-
-BEGIN {
-  if ($ENV{'PERL_CORE'}) {
-    chdir 't' if -d 't';
-    unshift @INC, '../lib' 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;
-    }
-  }
-
-  use lib "$FindBin::Bin";
-  use lib "$FindBin::Bin/../parts/inc";
-
-  die qq[Cannot find "$FindBin::Bin/../parts/inc"] unless -d "$FindBin::Bin/../parts/inc";
-
-  sub load {
-    require 'testutil.pl';
-    require 'inctools';
-  }
-
-  if (15) {
-    load();
-    plan(tests => 15);
-  }
-}
-
-use Devel::PPPort;
-use strict;
-BEGIN { $^W = 1; }
-
-package Devel::PPPort;
-use vars '@ISA';
-require DynaLoader;
-@ISA = qw(DynaLoader);
-bootstrap Devel::PPPort;
-
-package main;
-
-my $foo = 5;
-is(&Devel::PPPort::TestSvUV_set($foo, 12345), 42);
-is(&Devel::PPPort::TestSvPVX_const("mhx"), 43);
-is(&Devel::PPPort::TestSvPVX_mutable("mhx"), 44);
-
-my $bar = [];
-
-bless $bar, 'foo';
-is($bar->x(), 'foobar');
-
-Devel::PPPort::TestSvSTASH_set($bar, 'bar');
-is($bar->x(), 'hacker');
-
-    if (ivers($]) != ivers(5.7.2)) {
-        ok(Devel::PPPort::Test_sv_setsv_SV_NOSTEAL());
-    }
-    else {
-        skip("7.2 broken for NOSTEAL", 1);
-    }
-
-    tie my $scalar, 'TieScalarCounter', 'string';
-
-    is tied($scalar)->{fetch}, 0;
-    is tied($scalar)->{store}, 0;
-    my $copy = Devel::PPPort::newSVsv_nomg($scalar);
-    is tied($scalar)->{fetch}, 0;
-    is tied($scalar)->{store}, 0;
-
-    my $fetch = $scalar;
-    is tied($scalar)->{fetch}, 1;
-    is tied($scalar)->{store}, 0;
-    my $copy2 = Devel::PPPort::newSVsv_nomg($scalar);
-    is tied($scalar)->{fetch}, 1;
-    is tied($scalar)->{store}, 0;
-    is $copy2, 'string';
-
-package TieScalarCounter;
-
-sub TIESCALAR {
-    my ($class, $value) = @_;
-    return bless { fetch => 0, store => 0, value => $value }, $class;
-}
-
-sub FETCH {
-    my ($self) = @_;
-    $self->{fetch}++;
-    return $self->{value};
-}
-
-sub STORE {
-    my ($self, $value) = @_;
-    $self->{store}++;
-    $self->{value} = $value;
-}
-
-package foo;
-
-sub x { 'foobar' }
-
-package bar;
-
-sub x { 'hacker' }
-
diff --git a/dist/Devel-PPPort/t/call.t b/dist/Devel-PPPort/t/call.t
deleted file mode 100644 (file)
index c26a5a6..0000000
+++ /dev/null
@@ -1,165 +0,0 @@
-################################################################################
-#
-#            !!!!!   Do NOT edit this file directly!   !!!!!
-#
-#            Edit mktests.PL and/or parts/inc/call instead.
-#
-#  This file was automatically generated from the definition files in the
-#  parts/inc/ subdirectory by mktests.PL. To learn more about how all this
-#  works, please read the F<HACKERS> file that came with this distribution.
-#
-################################################################################
-
-use FindBin ();
-
-BEGIN {
-  if ($ENV{'PERL_CORE'}) {
-    chdir 't' if -d 't';
-    unshift @INC, '../lib' 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;
-    }
-  }
-
-  use lib "$FindBin::Bin";
-  use lib "$FindBin::Bin/../parts/inc";
-
-  die qq[Cannot find "$FindBin::Bin/../parts/inc"] unless -d "$FindBin::Bin/../parts/inc";
-
-  sub load {
-    require 'testutil.pl';
-    require 'inctools';
-  }
-
-  if (88) {
-    load();
-    plan(tests => 88);
-  }
-}
-
-use Devel::PPPort;
-use strict;
-BEGIN { $^W = 1; }
-
-package Devel::PPPort;
-use vars '@ISA';
-require DynaLoader;
-@ISA = qw(DynaLoader);
-bootstrap Devel::PPPort;
-
-package main;
-
-sub f
-{
-  shift;
-  unshift @_, 'b';
-  pop @_;
-  @_, defined wantarray ? wantarray ? 'x' : 'y' : 'z';
-}
-
-my $obj = bless [], 'Foo';
-
-sub Foo::meth
-{
-  return 'bad_self' unless @_ && ref $_[0] && ref($_[0]) eq 'Foo';
-  shift;
-  shift;
-  unshift @_, 'b';
-  pop @_;
-  @_, defined wantarray ? wantarray ? 'x' : 'y' : 'z';
-}
-
-my $test;
-
-for $test (
-    # flags                      args           expected         description
-    [ &Devel::PPPort::G_SCALAR,  [ ],           [ qw(y 1) ],     '0 args, G_SCALAR'  ],
-    [ &Devel::PPPort::G_SCALAR,  [ qw(a p q) ], [ qw(y 1) ],     '3 args, G_SCALAR'  ],
-    [ &Devel::PPPort::G_ARRAY,   [ ],           [ qw(x 1) ],     '0 args, G_ARRAY'   ],
-    [ &Devel::PPPort::G_ARRAY,   [ qw(a p q) ], [ qw(b p x 3) ], '3 args, G_ARRAY'   ],
-    [ &Devel::PPPort::G_DISCARD, [ ],           [ qw(0) ],       '0 args, G_DISCARD' ],
-    [ &Devel::PPPort::G_DISCARD, [ qw(a p q) ], [ qw(0) ],       '3 args, G_DISCARD' ],
-)
-{
-    my ($flags, $args, $expected, $description) = @$test;
-    print "# --- $description ---\n";
-    ok(eq_array( [ &Devel::PPPort::call_sv(\&f, $flags, @$args) ], $expected));
-    ok(eq_array( [ &Devel::PPPort::call_sv(*f,  $flags, @$args) ], $expected));
-    ok(eq_array( [ &Devel::PPPort::call_sv('f', $flags, @$args) ], $expected));
-    ok(eq_array( [ &Devel::PPPort::call_pv('f', $flags, @$args) ], $expected));
-    ok(eq_array( [ &Devel::PPPort::call_argv('f', $flags, @$args) ], $expected));
-    ok(eq_array( [ &Devel::PPPort::eval_sv("f(qw(@$args))", $flags) ], $expected));
-    ok(eq_array( [ &Devel::PPPort::call_method('meth', $flags, $obj, @$args) ], $expected));
-    ok(eq_array( [ &Devel::PPPort::call_sv_G_METHOD('meth', $flags, $obj, @$args) ], $expected));
-};
-
-is(&Devel::PPPort::eval_pv('f()', 0), 'y');
-is(&Devel::PPPort::eval_pv('f(qw(a b c))', 0), 'y');
-
-is(!defined $::{'less::'}, 1, "Hadn't loaded less yet");
-Devel::PPPort::load_module(0, "less", undef);
-is(defined $::{'less::'}, 1, "Have now loaded less");
-
-ok(eval { Devel::PPPort::eval_pv('die', 0); 1 });
-ok(!eval { Devel::PPPort::eval_pv('die', 1); 1 });
-ok($@ =~ /^Died at \(eval [0-9]+\) line 1\.\n$/);
-ok(eval { $@ = 'string1'; Devel::PPPort::eval_pv('', 0); 1 });
-ok(eval { $@ = 'string1'; Devel::PPPort::eval_pv('', 1); 1 });
-ok(eval { $@ = 'string1'; Devel::PPPort::eval_pv('$@ = "string2"', 0); 1 });
-ok(eval { $@ = 'string1'; Devel::PPPort::eval_pv('$@ = "string2"', 1); 1 });
-ok(eval { $@ = 'string1'; Devel::PPPort::eval_pv('$@ = "string2"; die "string3"', 0); 1 });
-ok(!eval { $@ = 'string1'; Devel::PPPort::eval_pv('$@ = "string2"; die "string3"', 1); 1 });
-ok($@ =~ /^string3 at \(eval [0-9]+\) line 1\.\n$/);
-ok(!eval { Devel::PPPort::eval_pv('die False->new', 1); 1 }, 'check false value is rethrown');
-
-if ("$]" >= '5.007003' or ("$]" >= '5.006001' and "$]" < '5.007')) {
-    my $hashref = { key => 'value' };
-    is(eval { Devel::PPPort::eval_pv('die $hashref', 1); 1 }, undef, 'check plain hashref is rethrown');
-    is(ref($@), 'HASH', 'check $@ is hashref') and
-        is($@->{key}, 'value', 'check $@ hashref has correct value');
-
-    my $false = False->new;
-    ok(!$false);
-    is(eval { Devel::PPPort::eval_pv('die $false', 1); 1 }, undef, 'check false objects are rethrown');
-    is(ref($@), 'False', 'check that $@ contains False object');
-    is("$@", "$false", 'check we got the expected object');
-} else {
-    skip 'skip: no support for references in $@', 7;
-}
-
-ok(eval { Devel::PPPort::eval_sv('die', 0); 1 });
-ok(!eval { Devel::PPPort::eval_sv('die', &Devel::PPPort::G_RETHROW); 1 });
-ok($@ =~ /^Died at \(eval [0-9]+\) line 1\.\n$/);
-ok(eval { $@ = 'string1'; Devel::PPPort::eval_sv('', 0); 1 });
-ok(eval { $@ = 'string1'; Devel::PPPort::eval_sv('', &Devel::PPPort::G_RETHROW); 1 });
-ok(eval { $@ = 'string1'; Devel::PPPort::eval_sv('$@ = "string2"', 0); 1 });
-ok(eval { $@ = 'string1'; Devel::PPPort::eval_sv('$@ = "string2"', &Devel::PPPort::G_RETHROW); 1 });
-ok(eval { $@ = 'string1'; Devel::PPPort::eval_sv('$@ = "string2"; die "string3"', 0); 1 });
-ok(!eval { $@ = 'string1'; Devel::PPPort::eval_sv('$@ = "string2"; die "string3"', &Devel::PPPort::G_RETHROW); 1 });
-ok($@ =~ /^string3 at \(eval [0-9]+\) line 1\.\n$/);
-ok(!eval { Devel::PPPort::eval_sv('die False->new', &Devel::PPPort::G_RETHROW); 1 }, 'check false value is rethrown');
-
-if ("$]" >= '5.007003' or ("$]" >= '5.006001' and "$]" < '5.007')) {
-    my $hashref = { key => 'value' };
-    is(eval { Devel::PPPort::eval_sv('die $hashref', &Devel::PPPort::G_RETHROW); 1 }, undef, 'check plain hashref is rethrown');
-    is(ref($@), 'HASH', 'check $@ is hashref') and
-        is($@->{key}, 'value', 'check $@ hashref has correct value');
-
-    my $false = False->new;
-    ok(!$false);
-    is(eval { Devel::PPPort::eval_sv('die $false', &Devel::PPPort::G_RETHROW); 1 }, undef, 'check false objects are rethrown');
-    is(ref($@), 'False', 'check that $@ contains False object');
-    is("$@", "$false", 'check we got the expected object');
-} else {
-    skip 'skip: no support for references in $@', 7;
-}
-
-{
-    package False;
-    use overload bool => sub { 0 }, '""' => sub { 'Foo' };
-    sub new { bless {}, shift }
-}
-
diff --git a/dist/Devel-PPPort/t/cop.t b/dist/Devel-PPPort/t/cop.t
deleted file mode 100644 (file)
index 649b45d..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
-################################################################################
-#
-#            !!!!!   Do NOT edit this file directly!   !!!!!
-#
-#            Edit mktests.PL and/or parts/inc/cop instead.
-#
-#  This file was automatically generated from the definition files in the
-#  parts/inc/ subdirectory by mktests.PL. To learn more about how all this
-#  works, please read the F<HACKERS> file that came with this distribution.
-#
-################################################################################
-
-use FindBin ();
-
-BEGIN {
-  if ($ENV{'PERL_CORE'}) {
-    chdir 't' if -d 't';
-    unshift @INC, '../lib' 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;
-    }
-  }
-
-  use lib "$FindBin::Bin";
-  use lib "$FindBin::Bin/../parts/inc";
-
-  die qq[Cannot find "$FindBin::Bin/../parts/inc"] unless -d "$FindBin::Bin/../parts/inc";
-
-  sub load {
-    require 'testutil.pl';
-    require 'inctools';
-  }
-
-  if (8) {
-    load();
-    plan(tests => 8);
-  }
-}
-
-use Devel::PPPort;
-use strict;
-BEGIN { $^W = 1; }
-
-package Devel::PPPort;
-use vars '@ISA';
-require DynaLoader;
-@ISA = qw(DynaLoader);
-bootstrap Devel::PPPort;
-
-package main;
-
-my $package;
-{
-  package MyPackage;
-  $package = &Devel::PPPort::CopSTASHPV();
-}
-print "# $package\n";
-is($package, "MyPackage");
-
-my $file = &Devel::PPPort::CopFILE();
-print "# $file\n";
-ok($file =~ /cop/i);
-
-BEGIN {
-  if ("$]" < 5.006000) {
-    skip("Perl version too early", 8);
-    exit;
-  }
-}
-
-BEGIN {
-    package DB;
-    no strict "refs";
-    local $^P = 1;
-    sub sub { &$DB::sub }
-}
-
-{ package One; sub one { Devel::PPPort::caller_cx($_[0]) } }
-{
-    package Two;
-    sub two { One::one(@_) }
-    sub dbtwo {
-        BEGIN { $^P = 1 }
-        One::one(@_);
-        BEGIN { $^P = 0 }
-    }
-}
-
-for (
-    # This is rather confusing. The package is the package the call is
-    # made *from*, the sub name is the sub the call is made *to*. When
-    # DB::sub is involved the first call is to DB::sub from the calling
-    # package, the second is to the real sub from package DB.
-    [\&One::one, 0, qw/main one main one/],
-    [\&One::one, 2, ],
-    [\&Two::two, 0, qw/Two one Two one/],
-    [\&Two::two, 1, qw/main two main two/],
-    [\&Two::dbtwo, 0, qw/Two sub DB one/],
-    [\&Two::dbtwo, 1, qw/main dbtwo main dbtwo/],
-) {
-    my ($sub, $arg, @want) = @$_;
-    my @got = $sub->($arg);
-    ok(eq_array(\@got, \@want));
-}
-
diff --git a/dist/Devel-PPPort/t/exception.t b/dist/Devel-PPPort/t/exception.t
deleted file mode 100644 (file)
index 0963363..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-################################################################################
-#
-#            !!!!!   Do NOT edit this file directly!   !!!!!
-#
-#            Edit mktests.PL and/or parts/inc/exception instead.
-#
-#  This file was automatically generated from the definition files in the
-#  parts/inc/ subdirectory by mktests.PL. To learn more about how all this
-#  works, please read the F<HACKERS> file that came with this distribution.
-#
-################################################################################
-
-use FindBin ();
-
-BEGIN {
-  if ($ENV{'PERL_CORE'}) {
-    chdir 't' if -d 't';
-    unshift @INC, '../lib' 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;
-    }
-  }
-
-  use lib "$FindBin::Bin";
-  use lib "$FindBin::Bin/../parts/inc";
-
-  die qq[Cannot find "$FindBin::Bin/../parts/inc"] unless -d "$FindBin::Bin/../parts/inc";
-
-  sub load {
-    require 'testutil.pl';
-    require 'inctools';
-  }
-
-  if (7) {
-    load();
-    plan(tests => 7);
-  }
-}
-
-use Devel::PPPort;
-use strict;
-BEGIN { $^W = 1; }
-
-package Devel::PPPort;
-use vars '@ISA';
-require DynaLoader;
-@ISA = qw(DynaLoader);
-bootstrap Devel::PPPort;
-
-package main;
-
-my $rv;
-
-$Devel::PPPort::exception_caught = undef;
-
-$rv = eval { &Devel::PPPort::exception(0) };
-is($@, '');
-ok(defined $rv);
-is($rv, 42);
-is($Devel::PPPort::exception_caught, 0);
-
-$Devel::PPPort::exception_caught = undef;
-
-$rv = eval { &Devel::PPPort::exception(1) };
-is($@, "boo\n");
-ok(not defined $rv);
-is($Devel::PPPort::exception_caught, 1);
-
diff --git a/dist/Devel-PPPort/t/format.t b/dist/Devel-PPPort/t/format.t
deleted file mode 100644 (file)
index ef471e0..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-################################################################################
-#
-#            !!!!!   Do NOT edit this file directly!   !!!!!
-#
-#            Edit mktests.PL and/or parts/inc/format instead.
-#
-#  This file was automatically generated from the definition files in the
-#  parts/inc/ subdirectory by mktests.PL. To learn more about how all this
-#  works, please read the F<HACKERS> file that came with this distribution.
-#
-################################################################################
-
-use FindBin ();
-
-BEGIN {
-  if ($ENV{'PERL_CORE'}) {
-    chdir 't' if -d 't';
-    unshift @INC, '../lib' 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;
-    }
-  }
-
-  use lib "$FindBin::Bin";
-  use lib "$FindBin::Bin/../parts/inc";
-
-  die qq[Cannot find "$FindBin::Bin/../parts/inc"] unless -d "$FindBin::Bin/../parts/inc";
-
-  sub load {
-    require 'testutil.pl';
-    require 'inctools';
-  }
-
-  if (5) {
-    load();
-    plan(tests => 5);
-  }
-}
-
-use Devel::PPPort;
-use strict;
-BEGIN { $^W = 1; }
-
-package Devel::PPPort;
-use vars '@ISA';
-require DynaLoader;
-@ISA = qw(DynaLoader);
-bootstrap Devel::PPPort;
-
-package main;
-
-use Config;
-
-if ("$]" < '5.004') {
-    skip 'skip: No newSVpvf support', 5;
-    exit;
-}
-
-my $num = 1.12345678901234567890;
-
-eval { Devel::PPPort::croak_NVgf($num) };
-ok($@ =~ /^1.1234567890/);
-
-is(Devel::PPPort::sprintf_iv(-8), 'XX_-8_XX');
-is(Devel::PPPort::sprintf_uv(15), 'XX_15_XX');
-
-my $ivsize = $Config::Config{ivsize};
-if ($ivsize && ($ivsize == 4 || $ivsize == 8)) {
-    my $ivmax = ($ivsize == 4) ? '2147483647' : '9223372036854775807';
-    my $uvmax = ($ivsize == 4) ? '4294967295' : '18446744073709551615';
-    is(Devel::PPPort::sprintf_ivmax(), $ivmax);
-    is(Devel::PPPort::sprintf_uvmax(), $uvmax);
-}
-else {
-    skip 'skip: unknown ivsize', 2;
-}
-
diff --git a/dist/Devel-PPPort/t/grok.t b/dist/Devel-PPPort/t/grok.t
deleted file mode 100644 (file)
index 98c54a4..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-################################################################################
-#
-#            !!!!!   Do NOT edit this file directly!   !!!!!
-#
-#            Edit mktests.PL and/or parts/inc/grok instead.
-#
-#  This file was automatically generated from the definition files in the
-#  parts/inc/ subdirectory by mktests.PL. To learn more about how all this
-#  works, please read the F<HACKERS> file that came with this distribution.
-#
-################################################################################
-
-use FindBin ();
-
-BEGIN {
-  if ($ENV{'PERL_CORE'}) {
-    chdir 't' if -d 't';
-    unshift @INC, '../lib' 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;
-    }
-  }
-
-  use lib "$FindBin::Bin";
-  use lib "$FindBin::Bin/../parts/inc";
-
-  die qq[Cannot find "$FindBin::Bin/../parts/inc"] unless -d "$FindBin::Bin/../parts/inc";
-
-  sub load {
-    require 'testutil.pl';
-    require 'inctools';
-  }
-
-  if (10) {
-    load();
-    plan(tests => 10);
-  }
-}
-
-use Devel::PPPort;
-use strict;
-BEGIN { $^W = 1; }
-
-package Devel::PPPort;
-use vars '@ISA';
-require DynaLoader;
-@ISA = qw(DynaLoader);
-bootstrap Devel::PPPort;
-
-package main;
-
-is(&Devel::PPPort::grok_number("42"), 42);
-ok(!defined(&Devel::PPPort::grok_number("A")));
-is(&Devel::PPPort::grok_bin("10000001"), 129);
-is(&Devel::PPPort::grok_hex("deadbeef"), 0xdeadbeef);
-is(&Devel::PPPort::grok_oct("377"), 255);
-
-is(&Devel::PPPort::Perl_grok_number("42"), 42);
-ok(!defined(&Devel::PPPort::Perl_grok_number("A")));
-is(&Devel::PPPort::Perl_grok_bin("10000001"), 129);
-is(&Devel::PPPort::Perl_grok_hex("deadbeef"), 0xdeadbeef);
-is(&Devel::PPPort::Perl_grok_oct("377"), 255);
-
diff --git a/dist/Devel-PPPort/t/gv.t b/dist/Devel-PPPort/t/gv.t
deleted file mode 100644 (file)
index 6e80768..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-################################################################################
-#
-#            !!!!!   Do NOT edit this file directly!   !!!!!
-#
-#            Edit mktests.PL and/or parts/inc/gv instead.
-#
-#  This file was automatically generated from the definition files in the
-#  parts/inc/ subdirectory by mktests.PL. To learn more about how all this
-#  works, please read the F<HACKERS> file that came with this distribution.
-#
-################################################################################
-
-use FindBin ();
-
-BEGIN {
-  if ($ENV{'PERL_CORE'}) {
-    chdir 't' if -d 't';
-    unshift @INC, '../lib' 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;
-    }
-  }
-
-  use lib "$FindBin::Bin";
-  use lib "$FindBin::Bin/../parts/inc";
-
-  die qq[Cannot find "$FindBin::Bin/../parts/inc"] unless -d "$FindBin::Bin/../parts/inc";
-
-  sub load {
-    require 'testutil.pl';
-    require 'inctools';
-  }
-
-  if (7) {
-    load();
-    plan(tests => 7);
-  }
-}
-
-use Devel::PPPort;
-use strict;
-BEGIN { $^W = 1; }
-
-package Devel::PPPort;
-use vars '@ISA';
-require DynaLoader;
-@ISA = qw(DynaLoader);
-bootstrap Devel::PPPort;
-
-package main;
-
-is(Devel::PPPort::GvSVn(), 1);
-
-is(Devel::PPPort::isGV_with_GP(), 2);
-
-is(Devel::PPPort::get_cvn_flags(), 3);
-
-is(Devel::PPPort::gv_fetchpvn_flags(), \*Devel::PPPort::VERSION);
-
-is(Devel::PPPort::gv_fetchsv("Devel::PPPort::VERSION"), \*Devel::PPPort::VERSION);
-
-is(Devel::PPPort::gv_init_type("sanity_check", 0, 0), "*main::sanity_check");
-ok($::{sanity_check});
-
diff --git a/dist/Devel-PPPort/t/limits.t b/dist/Devel-PPPort/t/limits.t
deleted file mode 100644 (file)
index d2dfc7f..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-################################################################################
-#
-#            !!!!!   Do NOT edit this file directly!   !!!!!
-#
-#            Edit mktests.PL and/or parts/inc/limits instead.
-#
-#  This file was automatically generated from the definition files in the
-#  parts/inc/ subdirectory by mktests.PL. To learn more about how all this
-#  works, please read the F<HACKERS> file that came with this distribution.
-#
-################################################################################
-
-use FindBin ();
-
-BEGIN {
-  if ($ENV{'PERL_CORE'}) {
-    chdir 't' if -d 't';
-    unshift @INC, '../lib' 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;
-    }
-  }
-
-  use lib "$FindBin::Bin";
-  use lib "$FindBin::Bin/../parts/inc";
-
-  die qq[Cannot find "$FindBin::Bin/../parts/inc"] unless -d "$FindBin::Bin/../parts/inc";
-
-  sub load {
-    require 'testutil.pl';
-    require 'inctools';
-  }
-
-  if (4) {
-    load();
-    plan(tests => 4);
-  }
-}
-
-use Devel::PPPort;
-use strict;
-BEGIN { $^W = 1; }
-
-package Devel::PPPort;
-use vars '@ISA';
-require DynaLoader;
-@ISA = qw(DynaLoader);
-bootstrap Devel::PPPort;
-
-package main;
-
-ok(&Devel::PPPort::iv_size());
-ok(&Devel::PPPort::uv_size());
-ok(&Devel::PPPort::iv_type());
-ok(&Devel::PPPort::uv_type());
-
diff --git a/dist/Devel-PPPort/t/locale.t b/dist/Devel-PPPort/t/locale.t
deleted file mode 100644 (file)
index 67929c4..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-################################################################################
-#
-#            !!!!!   Do NOT edit this file directly!   !!!!!
-#
-#            Edit mktests.PL and/or parts/inc/locale instead.
-#
-#  This file was automatically generated from the definition files in the
-#  parts/inc/ subdirectory by mktests.PL. To learn more about how all this
-#  works, please read the F<HACKERS> file that came with this distribution.
-#
-################################################################################
-
-use FindBin ();
-
-BEGIN {
-  if ($ENV{'PERL_CORE'}) {
-    chdir 't' if -d 't';
-    unshift @INC, '../lib' 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;
-    }
-  }
-
-  use lib "$FindBin::Bin";
-  use lib "$FindBin::Bin/../parts/inc";
-
-  die qq[Cannot find "$FindBin::Bin/../parts/inc"] unless -d "$FindBin::Bin/../parts/inc";
-
-  sub load {
-    require 'testutil.pl';
-    require 'inctools';
-  }
-
-  if (1) {
-    load();
-    plan(tests => 1);
-  }
-}
-
-use Devel::PPPort;
-use strict;
-BEGIN { $^W = 1; }
-
-package Devel::PPPort;
-use vars '@ISA';
-require DynaLoader;
-@ISA = qw(DynaLoader);
-bootstrap Devel::PPPort;
-
-package main;
-
-use Config;
-
-  # We don't know for sure that we are in the global locale for testing.  But
-  # if this is unthreaded, it almost certainly is.  But Configure can be called
-  # to force POSIX locales on unthreaded systems.  If this becomes a problem
-  # this check could be beefed up.
-  if ($Config{usethreads}) {
-    ok(1);
-}
-else {
-    ok(&Devel::PPPort::sync_locale());
-}
-
diff --git a/dist/Devel-PPPort/t/mPUSH.t b/dist/Devel-PPPort/t/mPUSH.t
deleted file mode 100644 (file)
index fd4b499..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-################################################################################
-#
-#            !!!!!   Do NOT edit this file directly!   !!!!!
-#
-#            Edit mktests.PL and/or parts/inc/mPUSH instead.
-#
-#  This file was automatically generated from the definition files in the
-#  parts/inc/ subdirectory by mktests.PL. To learn more about how all this
-#  works, please read the F<HACKERS> file that came with this distribution.
-#
-################################################################################
-
-use FindBin ();
-
-BEGIN {
-  if ($ENV{'PERL_CORE'}) {
-    chdir 't' if -d 't';
-    unshift @INC, '../lib' 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;
-    }
-  }
-
-  use lib "$FindBin::Bin";
-  use lib "$FindBin::Bin/../parts/inc";
-
-  die qq[Cannot find "$FindBin::Bin/../parts/inc"] unless -d "$FindBin::Bin/../parts/inc";
-
-  sub load {
-    require 'testutil.pl';
-    require 'inctools';
-  }
-
-  if (10) {
-    load();
-    plan(tests => 10);
-  }
-}
-
-use Devel::PPPort;
-use strict;
-BEGIN { $^W = 1; }
-
-package Devel::PPPort;
-use vars '@ISA';
-require DynaLoader;
-@ISA = qw(DynaLoader);
-bootstrap Devel::PPPort;
-
-package main;
-
-is(join(':', &Devel::PPPort::mPUSHs()), "foo:bar:42");
-is(join(':', &Devel::PPPort::mPUSHp()), "one:two:three");
-is(join(':', &Devel::PPPort::mPUSHn()), "0.5:-0.25:0.125");
-is(join(':', &Devel::PPPort::mPUSHi()), "-1:2:-3");
-is(join(':', &Devel::PPPort::mPUSHu()), "1:2:3");
-
-is(join(':', &Devel::PPPort::mXPUSHs()), "foo:bar:42");
-is(join(':', &Devel::PPPort::mXPUSHp()), "one:two:three");
-is(join(':', &Devel::PPPort::mXPUSHn()), "0.5:-0.25:0.125");
-is(join(':', &Devel::PPPort::mXPUSHi()), "-1:2:-3");
-is(join(':', &Devel::PPPort::mXPUSHu()), "1:2:3");
-
diff --git a/dist/Devel-PPPort/t/magic.t b/dist/Devel-PPPort/t/magic.t
deleted file mode 100644 (file)
index 471c485..0000000
+++ /dev/null
@@ -1,229 +0,0 @@
-################################################################################
-#
-#            !!!!!   Do NOT edit this file directly!   !!!!!
-#
-#            Edit mktests.PL and/or parts/inc/magic instead.
-#
-#  This file was automatically generated from the definition files in the
-#  parts/inc/ subdirectory by mktests.PL. To learn more about how all this
-#  works, please read the F<HACKERS> file that came with this distribution.
-#
-################################################################################
-
-use FindBin ();
-
-BEGIN {
-  if ($ENV{'PERL_CORE'}) {
-    chdir 't' if -d 't';
-    unshift @INC, '../lib' 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;
-    }
-  }
-
-  use lib "$FindBin::Bin";
-  use lib "$FindBin::Bin/../parts/inc";
-
-  die qq[Cannot find "$FindBin::Bin/../parts/inc"] unless -d "$FindBin::Bin/../parts/inc";
-
-  sub load {
-    require 'testutil.pl';
-    require 'inctools';
-  }
-
-  if (63) {
-    load();
-    plan(tests => 63);
-  }
-}
-
-use Devel::PPPort;
-use strict;
-BEGIN { $^W = 1; }
-
-package Devel::PPPort;
-use vars '@ISA';
-require DynaLoader;
-@ISA = qw(DynaLoader);
-bootstrap Devel::PPPort;
-
-package main;
-
-# Find proper magic
-ok(my $obj1 = Devel::PPPort->new_with_mg());
-is(Devel::PPPort::as_string($obj1), 'hello');
-
-# Find with no magic
-my $obj = bless {}, 'Fake::Class';
-is(Devel::PPPort::as_string($obj), "Sorry, your princess is in another castle.");
-
-# Find with other magic (not the magic we are looking for)
-ok($obj = Devel::PPPort->new_with_other_mg());
-is(Devel::PPPort::as_string($obj), "Sorry, your princess is in another castle.");
-
-# Okay, attempt to remove magic that isn't there
-Devel::PPPort::remove_other_magic($obj1);
-is(Devel::PPPort::as_string($obj1), 'hello');
-
-# Remove magic that IS there
-Devel::PPPort::remove_null_magic($obj1);
-is(Devel::PPPort::as_string($obj1), "Sorry, your princess is in another castle.");
-
-# Removing when no magic present
-Devel::PPPort::remove_null_magic($obj1);
-is(Devel::PPPort::as_string($obj1), "Sorry, your princess is in another castle.");
-
-use Tie::Hash;
-my %h;
-tie %h, 'Tie::StdHash';
-$h{foo} = 'foo';
-$h{bar} = '';
-
-&Devel::PPPort::sv_catpv_mg($h{foo}, 'bar');
-is($h{foo}, 'foobar');
-
-&Devel::PPPort::sv_catpvn_mg($h{bar}, 'baz');
-is($h{bar}, 'baz');
-
-&Devel::PPPort::sv_catsv_mg($h{foo}, '42');
-is($h{foo}, 'foobar42');
-
-&Devel::PPPort::sv_setiv_mg($h{bar}, 42);
-is($h{bar}, 42);
-
-&Devel::PPPort::sv_setnv_mg($h{PI}, 3.14159);
-ok(abs($h{PI} - 3.14159) < 0.01);
-
-&Devel::PPPort::sv_setpv_mg($h{mhx}, 'mhx');
-is($h{mhx}, 'mhx');
-
-&Devel::PPPort::sv_setpvn_mg($h{mhx}, 'Marcus');
-is($h{mhx}, 'Marcus');
-
-&Devel::PPPort::sv_setsv_mg($h{sv}, 'SV');
-is($h{sv}, 'SV');
-
-&Devel::PPPort::sv_setuv_mg($h{sv}, 4711);
-is($h{sv}, 4711);
-
-&Devel::PPPort::sv_usepvn_mg($h{sv}, 'Perl');
-is($h{sv}, 'Perl');
-
-# v1 is treated as a bareword in older perls...
-my $ver = do { local $SIG{'__WARN__'} = sub {}; eval qq[v1.2.0] };
-ok("$]" < 5.009 || $@ eq '');
-ok("$]" < 5.009 || Devel::PPPort::SvVSTRING_mg($ver));
-ok(!Devel::PPPort::SvVSTRING_mg(4711));
-
-my $foo = 'bar';
-ok(Devel::PPPort::sv_magic_portable($foo));
-ok($foo eq 'bar');
-
-    tie my $scalar, 'TieScalarCounter', 10;
-    my $fetch = $scalar;
-
-    is tied($scalar)->{fetch}, 1;
-    is tied($scalar)->{store}, 0;
-    is Devel::PPPort::magic_SvIV_nomg($scalar), 10;
-    is tied($scalar)->{fetch}, 1;
-    is tied($scalar)->{store}, 0;
-    is Devel::PPPort::magic_SvUV_nomg($scalar), 10;
-    is tied($scalar)->{fetch}, 1;
-    is tied($scalar)->{store}, 0;
-    is Devel::PPPort::magic_SvNV_nomg($scalar), 10;
-    is tied($scalar)->{fetch}, 1;
-    is tied($scalar)->{store}, 0;
-    is Devel::PPPort::magic_SvPV_nomg_nolen($scalar), 10;
-    is tied($scalar)->{fetch}, 1;
-    is tied($scalar)->{store}, 0;
-    ok Devel::PPPort::magic_SvTRUE_nomg($scalar);
-    is tied($scalar)->{fetch}, 1;
-    is tied($scalar)->{store}, 0;
-
-    my $object = OverloadedObject->new('string', 5.5, 0);
-
-    is Devel::PPPort::magic_SvIV_nomg($object), 5;
-    is Devel::PPPort::magic_SvUV_nomg($object), 5;
-    is Devel::PPPort::magic_SvNV_nomg($object), 5.5;
-    is Devel::PPPort::magic_SvPV_nomg_nolen($object), 'string';
-    ok !Devel::PPPort::magic_SvTRUE_nomg($object);
-
-tie my $negative, 'TieScalarCounter', -1;
-$fetch = $negative;
-
-is tied($negative)->{fetch}, 1;
-is tied($negative)->{store}, 0;
-is Devel::PPPort::magic_SvIV_nomg($negative), -1;
-if (ivers($]) >= ivers(5.6)) {
-    ok !Devel::PPPort::SVf_IVisUV($negative);
-} else {
-    skip 'SVf_IVisUV is unsupported', 1;
-}
-is tied($negative)->{fetch}, 1;
-is tied($negative)->{store}, 0;
-Devel::PPPort::magic_SvUV_nomg($negative);
-if (ivers($]) >= ivers(5.6)) {
-    ok !Devel::PPPort::SVf_IVisUV($negative);
-} else {
-    skip 'SVf_IVisUV is unsupported', 1;
-}
-is tied($negative)->{fetch}, 1;
-is tied($negative)->{store}, 0;
-
-tie my $big, 'TieScalarCounter', Devel::PPPort::above_IV_MAX();
-$fetch = $big;
-
-is tied($big)->{fetch}, 1;
-is tied($big)->{store}, 0;
-Devel::PPPort::magic_SvIV_nomg($big);
-if (ivers($]) >= ivers(5.6)) {
-    ok Devel::PPPort::SVf_IVisUV($big);
-} else {
-    skip 'SVf_IVisUV is unsupported', 1;
-}
-is tied($big)->{fetch}, 1;
-is tied($big)->{store}, 0;
-is Devel::PPPort::magic_SvUV_nomg($big), Devel::PPPort::above_IV_MAX();
-if (ivers($]) >= ivers(5.6)) {
-    ok Devel::PPPort::SVf_IVisUV($big);
-} else {
-    skip 'SVf_IVisUV is unsupported', 1;
-}
-is tied($big)->{fetch}, 1;
-is tied($big)->{store}, 0;
-
-package TieScalarCounter;
-
-sub TIESCALAR {
-    my ($class, $value) = @_;
-    return bless { fetch => 0, store => 0, value => $value }, $class;
-}
-
-sub FETCH {
-    my ($self) = @_;
-    $self->{fetch}++;
-    return $self->{value};
-}
-
-sub STORE {
-    my ($self, $value) = @_;
-    $self->{store}++;
-    $self->{value} = $value;
-}
-
-package OverloadedObject;
-
-sub new {
-    my ($class, $str, $num, $bool) = @_;
-    return bless { str => $str, num => $num, bool => $bool }, $class;
-}
-
-use overload
-    '""' => sub { $_[0]->{str} },
-    '0+' => sub { $_[0]->{num} },
-    'bool' => sub { $_[0]->{bool} },
-    ;
-
diff --git a/dist/Devel-PPPort/t/memory.t b/dist/Devel-PPPort/t/memory.t
deleted file mode 100644 (file)
index 45bda3b..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-################################################################################
-#
-#            !!!!!   Do NOT edit this file directly!   !!!!!
-#
-#            Edit mktests.PL and/or parts/inc/memory instead.
-#
-#  This file was automatically generated from the definition files in the
-#  parts/inc/ subdirectory by mktests.PL. To learn more about how all this
-#  works, please read the F<HACKERS> file that came with this distribution.
-#
-################################################################################
-
-use FindBin ();
-
-BEGIN {
-  if ($ENV{'PERL_CORE'}) {
-    chdir 't' if -d 't';
-    unshift @INC, '../lib' 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;
-    }
-  }
-
-  use lib "$FindBin::Bin";
-  use lib "$FindBin::Bin/../parts/inc";
-
-  die qq[Cannot find "$FindBin::Bin/../parts/inc"] unless -d "$FindBin::Bin/../parts/inc";
-
-  sub load {
-    require 'testutil.pl';
-    require 'inctools';
-  }
-
-  if (1) {
-    load();
-    plan(tests => 1);
-  }
-}
-
-use Devel::PPPort;
-use strict;
-BEGIN { $^W = 1; }
-
-package Devel::PPPort;
-use vars '@ISA';
-require DynaLoader;
-@ISA = qw(DynaLoader);
-bootstrap Devel::PPPort;
-
-package main;
-
-is(Devel::PPPort::checkmem(), 6);
-
diff --git a/dist/Devel-PPPort/t/mess.t b/dist/Devel-PPPort/t/mess.t
deleted file mode 100644 (file)
index 986d79b..0000000
+++ /dev/null
@@ -1,327 +0,0 @@
-################################################################################
-#
-#            !!!!!   Do NOT edit this file directly!   !!!!!
-#
-#            Edit mktests.PL and/or parts/inc/mess instead.
-#
-#  This file was automatically generated from the definition files in the
-#  parts/inc/ subdirectory by mktests.PL. To learn more about how all this
-#  works, please read the F<HACKERS> file that came with this distribution.
-#
-################################################################################
-
-use FindBin ();
-
-BEGIN {
-  if ($ENV{'PERL_CORE'}) {
-    chdir 't' if -d 't';
-    unshift @INC, '../lib' 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;
-    }
-  }
-
-  use lib "$FindBin::Bin";
-  use lib "$FindBin::Bin/../parts/inc";
-
-  die qq[Cannot find "$FindBin::Bin/../parts/inc"] unless -d "$FindBin::Bin/../parts/inc";
-
-  sub load {
-    require 'testutil.pl';
-    require 'inctools';
-  }
-
-  if (102) {
-    load();
-    plan(tests => 102);
-  }
-}
-
-use Devel::PPPort;
-use strict;
-BEGIN { $^W = 1; }
-
-package Devel::PPPort;
-use vars '@ISA';
-require DynaLoader;
-@ISA = qw(DynaLoader);
-bootstrap Devel::PPPort;
-
-package main;
-
-BEGIN { if ("$]" < '5.006') { $^W = 0; } }
-
-my $warn;
-my $die;
-local $SIG{__WARN__} = sub { $warn = $_[0] };
-local $SIG{__DIE__} = sub { $die = $_[0] };
-
-my $scalar_ref = \do {my $tmp = 10};
-my $array_ref = [];
-my $hash_ref = {};
-my $obj = bless {}, 'Package';
-
-undef $die;
-ok !defined eval { Devel::PPPort::croak_sv("\xE1\n") };
-is $@, "\xE1\n";
-is $die, "\xE1\n";
-
-undef $die;
-ok !defined eval { Devel::PPPort::croak_sv(10) };
-ok $@ =~ /^10 at \Q$0\E line /;
-ok $die =~ /^10 at \Q$0\E line /;
-
-undef $die;
-$@ = 'should not be visible (1)';
-ok !defined eval {
-    $@ = 'should not be visible (2)';
-    Devel::PPPort::croak_sv('');
-};
-ok $@ =~ /^ at \Q$0\E line /;
-ok $die =~ /^ at \Q$0\E line /;
-
-undef $die;
-$@ = 'should not be visible';
-ok !defined eval {
-    $@ = 'this must be visible';
-    Devel::PPPort::croak_sv($@)
-};
-ok $@ =~ /^this must be visible at \Q$0\E line /;
-ok $die =~ /^this must be visible at \Q$0\E line /;
-
-undef $die;
-$@ = 'should not be visible';
-ok !defined eval {
-    $@ = "this must be visible\n";
-    Devel::PPPort::croak_sv($@)
-};
-is $@, "this must be visible\n";
-is $die, "this must be visible\n";
-
-undef $die;
-$@ = 'should not be visible';
-ok !defined eval {
-    $@ = 'this must be visible';
-    Devel::PPPort::croak_sv_errsv()
-};
-ok $@ =~ /^this must be visible at \Q$0\E line /;
-ok $die =~ /^this must be visible at \Q$0\E line /;
-
-undef $die;
-$@ = 'should not be visible';
-ok !defined eval {
-    $@ = "this must be visible\n";
-    Devel::PPPort::croak_sv_errsv()
-};
-is $@, "this must be visible\n";
-is $die, "this must be visible\n";
-
-undef $die;
-ok !defined eval { Devel::PPPort::croak_sv_with_counter("message\n") };
-is $@, "message\n";
-is Devel::PPPort::get_counter(), 1;
-
-undef $die;
-ok !defined eval { Devel::PPPort::croak_sv('') };
-ok $@ =~ /^ at \Q$0\E line /;
-ok $die =~ /^ at \Q$0\E line /;
-
-undef $die;
-ok !defined eval { Devel::PPPort::croak_sv("\xE1") };
-ok $@ =~ /^\xE1 at \Q$0\E line /;
-ok $die =~ /^\xE1 at \Q$0\E line /;
-
-undef $die;
-ok !defined eval { Devel::PPPort::croak_sv("\xC3\xA1") };
-ok $@ =~ /^\xC3\xA1 at \Q$0\E line /;
-ok $die =~ /^\xC3\xA1 at \Q$0\E line /;
-
-undef $warn;
-Devel::PPPort::warn_sv("\xE1\n");
-is $warn, "\xE1\n";
-
-undef $warn;
-Devel::PPPort::warn_sv(10);
-ok $warn =~ /^10 at \Q$0\E line /;
-
-undef $warn;
-Devel::PPPort::warn_sv('');
-ok $warn =~ /^ at \Q$0\E line /;
-
-undef $warn;
-Devel::PPPort::warn_sv("\xE1");
-ok $warn =~ /^\xE1 at \Q$0\E line /;
-
-undef $warn;
-Devel::PPPort::warn_sv("\xC3\xA1");
-ok $warn =~ /^\xC3\xA1 at \Q$0\E line /;
-
-is Devel::PPPort::mess_sv("\xE1\n", 0), "\xE1\n";
-is Devel::PPPort::mess_sv(do {my $tmp = "\xE1\n"}, 1), "\xE1\n";
-
-ok Devel::PPPort::mess_sv(10, 0) =~ /^10 at \Q$0\E line /;
-ok Devel::PPPort::mess_sv(do {my $tmp = 10}, 1) =~ /^10 at \Q$0\E line /;
-
-ok Devel::PPPort::mess_sv('', 0) =~ /^ at \Q$0\E line /;
-ok Devel::PPPort::mess_sv(do {my $tmp = ''}, 1) =~ /^ at \Q$0\E line /;
-
-ok Devel::PPPort::mess_sv("\xE1", 0) =~ /^\xE1 at \Q$0\E line /;
-ok Devel::PPPort::mess_sv(do {my $tmp = "\xE1"}, 1) =~ /^\xE1 at \Q$0\E line /;
-
-ok Devel::PPPort::mess_sv("\xC3\xA1", 0) =~ /^\xC3\xA1 at \Q$0\E line /;
-ok Devel::PPPort::mess_sv(do {my $tmp = "\xC3\xA1"}, 1) =~ /^\xC3\xA1 at \Q$0\E line /;
-
-if ("$]" >= '5.006') {
-    BEGIN { if ("$]" >= '5.006' && "$]" < '5.008') { require utf8; utf8->import(); } }
-
-    undef $die;
-    ok !defined eval { Devel::PPPort::croak_sv("\x{100}\n") };
-    if ("$]" < '5.007001' || "$]" > '5.007003') {
-        is $@, "\x{100}\n";
-    } else {
-        skip 'skip: broken utf8 support in die hook', 1;
-    }
-    if ("$]" < '5.007001' || "$]" > '5.008') {
-        is $die, "\x{100}\n";
-    } else {
-        skip 'skip: broken utf8 support in die hook', 1;
-    }
-
-    undef $die;
-    ok !defined eval { Devel::PPPort::croak_sv("\x{100}") };
-    if ("$]" < '5.007001' || "$]" > '5.007003') {
-        ok $@ =~ /^\x{100} at \Q$0\E line /;
-    } else {
-        skip 'skip: broken utf8 support in die hook', 1;
-    }
-    if ("$]" < '5.007001' || "$]" > '5.008') {
-        ok $die =~ /^\x{100} at \Q$0\E line /;
-    } else {
-        skip 'skip: broken utf8 support in die hook', 1;
-    }
-
-    if ("$]" < '5.007001' || "$]" > '5.008') {
-        undef $warn;
-        Devel::PPPort::warn_sv("\x{100}\n");
-        is $warn, "\x{100}\n";
-
-        undef $warn;
-        Devel::PPPort::warn_sv("\x{100}");
-        ok (my $tmp = $warn) =~ /^\x{100} at \Q$0\E line /;
-    } else {
-        skip 'skip: broken utf8 support in warn hook', 2;
-    }
-
-    is Devel::PPPort::mess_sv("\x{100}\n", 0), "\x{100}\n";
-    is Devel::PPPort::mess_sv(do {my $tmp = "\x{100}\n"}, 1), "\x{100}\n";
-
-    ok Devel::PPPort::mess_sv("\x{100}", 0) =~ /^\x{100} at \Q$0\E line /;
-    ok Devel::PPPort::mess_sv(do {my $tmp = "\x{100}"}, 1) =~ /^\x{100} at \Q$0\E line /;
-} else {
-    skip 'skip: no utf8 support', 12;
-}
-
-if (ord('A') != 65) {
-    skip 'skip: no ASCII support', 24;
-} elsif (      "$]" >= '5.008'
-         &&    "$]" != '5.013000'     # Broken in these ranges
-         && ! ("$]" >= '5.011005' && "$]" <= '5.012000'))
-{
-    undef $die;
-    ok !defined eval { Devel::PPPort::croak_sv(eval '"\N{U+E1}\n"') };
-    is $@, "\xE1\n";
-    is $die, "\xE1\n";
-
-    undef $die;
-    ok !defined eval { Devel::PPPort::croak_sv(eval '"\N{U+E1}"') };
-    ok $@ =~ /^\xE1 at \Q$0\E line /;
-    ok $die =~ /^\xE1 at \Q$0\E line /;
-
-    {
-        undef $die;
-        my $expect = eval '"\N{U+C3}\N{U+A1}\n"';
-        ok !defined eval { Devel::PPPort::croak_sv("\xC3\xA1\n") };
-        is $@, $expect;
-        is $die, $expect;
-    }
-
-    {
-        undef $die;
-        my $expect = eval 'qr/^\N{U+C3}\N{U+A1} at \Q$0\E line /';
-        ok !defined eval { Devel::PPPort::croak_sv("\xC3\xA1") };
-        ok $@ =~ $expect;
-        ok $die =~ $expect;
-    }
-
-    undef $warn;
-    Devel::PPPort::warn_sv(eval '"\N{U+E1}\n"');
-    is $warn, "\xE1\n";
-
-    undef $warn;
-    Devel::PPPort::warn_sv(eval '"\N{U+E1}"');
-    ok $warn =~ /^\xE1 at \Q$0\E line /;
-
-    undef $warn;
-    Devel::PPPort::warn_sv("\xC3\xA1\n");
-    is $warn, eval '"\N{U+C3}\N{U+A1}\n"';
-
-    undef $warn;
-    Devel::PPPort::warn_sv("\xC3\xA1");
-    ok $warn =~ eval 'qr/^\N{U+C3}\N{U+A1} at \Q$0\E line /';
-
-    if ("$]" < '5.004') {
-        skip 'skip: no support for mess_sv', 8;
-    }
-    else {
-      is Devel::PPPort::mess_sv(eval('"\N{U+E1}\n"'), 0), eval '"\N{U+E1}\n"';
-      is Devel::PPPort::mess_sv(do {my $tmp = eval '"\N{U+E1}\n"'}, 1), eval '"\N{U+E1}\n"';
-
-      ok Devel::PPPort::mess_sv(eval('"\N{U+E1}"'), 0) =~ eval 'qr/^\N{U+E1} at \Q$0\E line /';
-      ok Devel::PPPort::mess_sv(do {my $tmp = eval '"\N{U+E1}"'}, 1) =~ eval 'qr/^\N{U+E1} at \Q$0\E line /';
-
-      is Devel::PPPort::mess_sv("\xC3\xA1\n", 0), eval '"\N{U+C3}\N{U+A1}\n"';
-      is Devel::PPPort::mess_sv(do {my $tmp = "\xC3\xA1\n"}, 1), eval '"\N{U+C3}\N{U+A1}\n"';
-
-      ok Devel::PPPort::mess_sv("\xC3\xA1", 0) =~ eval 'qr/^\N{U+C3}\N{U+A1} at \Q$0\E line /';
-      ok Devel::PPPort::mess_sv(do {my $tmp = "\xC3\xA1"}, 1) =~ eval 'qr/^\N{U+C3}\N{U+A1} at \Q$0\E line /';
-    }
-} else {
-    skip 'skip: no support for \N{U+..} syntax', 24;
-}
-
-if ("$]" >= '5.007003' or ("$]" >= '5.006001' and "$]" < '5.007')) {
-    undef $die;
-    ok !defined eval { Devel::PPPort::croak_sv($scalar_ref) };
-    ok $@ == $scalar_ref;
-    ok $die == $scalar_ref;
-
-    undef $die;
-    ok !defined eval { Devel::PPPort::croak_sv($array_ref) };
-    ok $@ == $array_ref;
-    ok $die == $array_ref;
-
-    undef $die;
-    ok !defined eval { Devel::PPPort::croak_sv($hash_ref) };
-    ok $@ == $hash_ref;
-    ok $die == $hash_ref;
-
-    undef $die;
-    ok !defined eval { Devel::PPPort::croak_sv($obj) };
-    ok $@ == $obj;
-    ok $die == $obj;
-} else {
-    skip 'skip: no support for exceptions', 12;
-}
-
-ok !defined eval { Devel::PPPort::croak_no_modify() };
-ok $@ =~ /^Modification of a read-only value attempted at \Q$0\E line /;
-
-ok !defined eval { Devel::PPPort::croak_memory_wrap() };
-ok $@ =~ /^panic: memory wrap at \Q$0\E line /;
-
-ok !defined eval { Devel::PPPort::croak_xs_usage("params") };
-ok $@ =~ /^Usage: Devel::PPPort::croak_xs_usage\(params\) at \Q$0\E line /;
-
diff --git a/dist/Devel-PPPort/t/misc.t b/dist/Devel-PPPort/t/misc.t
deleted file mode 100644 (file)
index 6901a19..0000000
+++ /dev/null
@@ -1,499 +0,0 @@
-################################################################################
-#
-#            !!!!!   Do NOT edit this file directly!   !!!!!
-#
-#            Edit mktests.PL and/or parts/inc/misc instead.
-#
-#  This file was automatically generated from the definition files in the
-#  parts/inc/ subdirectory by mktests.PL. To learn more about how all this
-#  works, please read the F<HACKERS> file that came with this distribution.
-#
-################################################################################
-
-use FindBin ();
-
-BEGIN {
-  if ($ENV{'PERL_CORE'}) {
-    chdir 't' if -d 't';
-    unshift @INC, '../lib' 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;
-    }
-  }
-
-  use lib "$FindBin::Bin";
-  use lib "$FindBin::Bin/../parts/inc";
-
-  die qq[Cannot find "$FindBin::Bin/../parts/inc"] unless -d "$FindBin::Bin/../parts/inc";
-
-  sub load {
-    require 'testutil.pl';
-    require 'inctools';
-  }
-
-  if (26826) {
-    load();
-    plan(tests => 26826);
-  }
-}
-
-use Devel::PPPort;
-use strict;
-BEGIN { $^W = 1; }
-
-package Devel::PPPort;
-use vars '@ISA';
-require DynaLoader;
-@ISA = qw(DynaLoader);
-bootstrap Devel::PPPort;
-
-package main;
-
-use vars qw($my_sv @my_av %my_hv);
-
-ok(&Devel::PPPort::boolSV(1), "Verify boolSV(1) is true");
-ok(!&Devel::PPPort::boolSV(0), "Verify boolSV(0) is false");
-
-$_ = "Fred";
-is(&Devel::PPPort::DEFSV(), "Fred", '$_ is FRED; Verify DEFSV is FRED');
-is(&Devel::PPPort::UNDERBAR(), "Fred", 'And verify UNDERBAR is FRED');
-
-if (ivers($]) >= ivers(5.9.2) && ivers($]) < ivers(5.23)) {
-  eval q{
-    no warnings "deprecated";
-    no if $^V >= v5.17.9, warnings => "experimental::lexical_topic";
-    my $_ = "Tony";
-    is(&Devel::PPPort::DEFSV(), "Fred", 'lexical_topic eval: $_ is Tony; Verify DEFSV is Fred');
-    is(&Devel::PPPort::UNDERBAR(), "Tony", 'And verify UNDERBAR is Tony');
-  };
-  die __FILE__ . __LINE__ . ": $@" if $@;
-}
-else {
-  skip("perl version outside testing range of lexical_topic", 2);
-}
-
-my @r = &Devel::PPPort::DEFSV_modify();
-
-ok(@r == 3, "Verify got 3 elements");
-is($r[0], 'Fred');
-is($r[1], 'DEFSV');
-is($r[2], 'Fred');
-
-is(&Devel::PPPort::DEFSV(), "Fred");
-
-eval { 1 };
-ok(!&Devel::PPPort::ERRSV(), "Verify ERRSV on true is false");
-eval { cannot_call_this_one() };
-ok(&Devel::PPPort::ERRSV(), "Verify ERRSV on false is true");
-
-ok(&Devel::PPPort::gv_stashpvn('Devel::PPPort', 0));
-ok(!&Devel::PPPort::gv_stashpvn('does::not::exist', 0));
-ok(&Devel::PPPort::gv_stashpvn('does::not::exist', 1));
-
-$my_sv = 1;
-ok(&Devel::PPPort::get_sv('my_sv', 0));
-ok(!&Devel::PPPort::get_sv('not_my_sv', 0));
-ok(&Devel::PPPort::get_sv('not_my_sv', 1));
-
-@my_av = (1);
-ok(&Devel::PPPort::get_av('my_av', 0));
-ok(!&Devel::PPPort::get_av('not_my_av', 0));
-ok(&Devel::PPPort::get_av('not_my_av', 1));
-
-%my_hv = (a=>1);
-ok(&Devel::PPPort::get_hv('my_hv', 0));
-ok(!&Devel::PPPort::get_hv('not_my_hv', 0));
-ok(&Devel::PPPort::get_hv('not_my_hv', 1));
-
-sub my_cv { 1 };
-ok(&Devel::PPPort::get_cv('my_cv', 0));
-ok(!&Devel::PPPort::get_cv('not_my_cv', 0));
-ok(&Devel::PPPort::get_cv('not_my_cv', 1));
-
-is(Devel::PPPort::dXSTARG(42), 43);
-is(Devel::PPPort::dAXMARK(4711), 4710);
-
-is(Devel::PPPort::prepush(), 42);
-
-is(join(':', Devel::PPPort::xsreturn(0)), 'test1');
-is(join(':', Devel::PPPort::xsreturn(1)), 'test1:test2');
-
-is(Devel::PPPort::PERL_ABS(42), 42, "Verify PERL_ABS(42) is 42");
-is(Devel::PPPort::PERL_ABS(-13), 13, "Verify PERL_ABS(-13) is 13");
-
-is(Devel::PPPort::SVf(42), ivers($]) >= ivers(5.4) ? '[42]' : '42');
-is(Devel::PPPort::SVf('abc'), ivers($]) >= ivers(5.4) ? '[abc]' : 'abc');
-
-is(&Devel::PPPort::Perl_ppaddr_t("FOO"), "foo");
-
-is(&Devel::PPPort::ptrtests(), 63);
-
-is(&Devel::PPPort::OpSIBLING_tests(), 0);
-
-if (ivers($]) >= ivers(5.9)) {
-  eval q{
-    is(&Devel::PPPort::check_HeUTF8("hello"), "norm");
-    is(&Devel::PPPort::check_HeUTF8("\N{U+263a}"), "utf8");
-  };
-} else {
-  skip("Too early perl version", 2);
-}
-
-@r = &Devel::PPPort::check_c_array();
-is($r[0], 4);
-is($r[1], "13");
-
-ok(!Devel::PPPort::SvRXOK(""));
-ok(!Devel::PPPort::SvRXOK(bless [], "Regexp"));
-
-if (ivers($]) < ivers(5.5)) {
-        skip 'no qr// objects in this perl', 2;
-} else {
-        my $qr = eval 'qr/./';
-        ok(Devel::PPPort::SvRXOK($qr), "SVRXOK(qr) is true");
-        ok(Devel::PPPort::SvRXOK(bless $qr, "Surprise"));
-}
-
-ok( Devel::PPPort::NATIVE_TO_LATIN1(0xB6) == 0xB6);
-ok( Devel::PPPort::NATIVE_TO_LATIN1(0x1) == 0x1);
-ok( Devel::PPPort::NATIVE_TO_LATIN1(ord("A")) == 0x41);
-ok( Devel::PPPort::NATIVE_TO_LATIN1(ord("0")) == 0x30);
-
-ok( Devel::PPPort::LATIN1_TO_NATIVE(0xB6) == 0xB6, "Verify LATIN1_TO_NATIVE(0xB6) is 0xB6");
-if (ord("A") == 65) {
-    ok( Devel::PPPort::LATIN1_TO_NATIVE(0x41) == 0x41);
-    ok( Devel::PPPort::LATIN1_TO_NATIVE(0x30) == 0x30);
-}
-else {
-    ok( Devel::PPPort::LATIN1_TO_NATIVE(0x41) == 0xC1);
-    ok( Devel::PPPort::LATIN1_TO_NATIVE(0x30) == 0xF0);
-}
-
-ok(  Devel::PPPort::isALNUMC_L1(ord("5")));
-ok(  Devel::PPPort::isALNUMC_L1(0xFC));
-ok(! Devel::PPPort::isALNUMC_L1(0xB6));
-
-ok(  Devel::PPPort::isOCTAL(ord("7")), "Verify '7' is OCTAL");
-ok(! Devel::PPPort::isOCTAL(ord("8")), "Verify '8' isn't OCTAL");
-
-ok(  Devel::PPPort::isOCTAL_A(ord("0")), "Verify '0' is OCTAL_A");
-ok(! Devel::PPPort::isOCTAL_A(ord("9")), "Verify '9' isn't OCTAL_A");
-
-ok(  Devel::PPPort::isOCTAL_L1(ord("2")), "Verify '2' is OCTAL_L1");
-ok(! Devel::PPPort::isOCTAL_L1(ord("8")), "Verify '8' isn't OCTAL_L1");
-
-my $way_too_early_msg = 'UTF-8 not implemented on this perl';
-
-# For the other properties, we test every code point from 0.255, and a
-# smattering of higher ones.  First populate a hash with keys like '65:ALPHA'
-# to indicate that the code point there is alphabetic
-my $i;
-my %types;
-for $i (0x41..0x5A, 0x61..0x7A, 0xAA, 0xB5, 0xBA, 0xC0..0xD6, 0xD8..0xF6,
-        0xF8..0x101)
-{
-    my $native = Devel::PPPort::LATIN1_TO_NATIVE($i);
-    $types{"$native:ALPHA"} = 1;
-    $types{"$native:ALPHANUMERIC"} = 1;
-    $types{"$native:IDFIRST"} = 1;
-    $types{"$native:IDCONT"} = 1;
-    $types{"$native:PRINT"} = 1;
-    $types{"$native:WORDCHAR"} = 1;
-}
-for $i (0x30..0x39, 0x660, 0xFF19) {
-    my $native = Devel::PPPort::LATIN1_TO_NATIVE($i);
-    $types{"$native:ALPHANUMERIC"} = 1;
-    $types{"$native:DIGIT"} = 1;
-    $types{"$native:IDCONT"} = 1;
-    $types{"$native:WORDCHAR"} = 1;
-    $types{"$native:GRAPH"} = 1;
-    $types{"$native:PRINT"} = 1;
-    $types{"$native:XDIGIT"} = 1 if $i < 255 || ($i >= 0xFF10 && $i <= 0xFF19);
-}
-
-for $i (0..0x7F) {
-    my $native = Devel::PPPort::LATIN1_TO_NATIVE($i);
-    $types{"$native:ASCII"} = 1;
-}
-for $i (0..0x1f, 0x7F..0x9F) {
-    my $native = Devel::PPPort::LATIN1_TO_NATIVE($i);
-    $types{"$native:CNTRL"} = 1;
-}
-for $i (0x21..0x7E, 0xA1..0x101, 0x660) {
-    my $native = Devel::PPPort::LATIN1_TO_NATIVE($i);
-    $types{"$native:GRAPH"} = 1;
-    $types{"$native:PRINT"} = 1;
-}
-for $i (0x09, 0x20, 0xA0) {
-    my $native = Devel::PPPort::LATIN1_TO_NATIVE($i);
-    $types{"$native:BLANK"} = 1;
-    $types{"$native:SPACE"} = 1;
-    $types{"$native:PSXSPC"} = 1;
-    $types{"$native:PRINT"} = 1 if $i > 0x09;
-}
-for $i (0x09..0x0D, 0x85, 0x2029) {
-    my $native = Devel::PPPort::LATIN1_TO_NATIVE($i);
-    $types{"$native:SPACE"} = 1;
-    $types{"$native:PSXSPC"} = 1;
-}
-for $i (0x41..0x5A, 0xC0..0xD6, 0xD8..0xDE, 0x100) {
-    my $native = Devel::PPPort::LATIN1_TO_NATIVE($i);
-    $types{"$native:UPPER"} = 1;
-    $types{"$native:XDIGIT"} = 1 if $i < 0x47;
-}
-for $i (0x61..0x7A, 0xAA, 0xB5, 0xBA, 0xDF..0xF6, 0xF8..0xFF, 0x101) {
-    my $native = Devel::PPPort::LATIN1_TO_NATIVE($i);
-    $types{"$native:LOWER"} = 1;
-    $types{"$native:XDIGIT"} = 1 if $i < 0x67;
-}
-for $i (0x21..0x2F, 0x3A..0x40, 0x5B..0x60, 0x7B..0x7E, 0xB6, 0xA1, 0xA7, 0xAB,
-        0xB7, 0xBB, 0xBF, 0x5BE)
-{
-    my $native = Devel::PPPort::LATIN1_TO_NATIVE($i);
-    $types{"$native:PUNCT"} = 1;
-    $types{"$native:GRAPH"} = 1;
-    $types{"$native:PRINT"} = 1;
-}
-
-$i = ord('_');
-$types{"$i:WORDCHAR"} = 1;
-$types{"$i:IDFIRST"} = 1;
-$types{"$i:IDCONT"} = 1;
-
-# Now find all the unique code points included above.
-my %code_points_to_test;
-my $key;
-for $key (keys %types) {
-    $key =~ s/:.*//;
-    $code_points_to_test{$key} = 1;
-}
-
-# And test each one
-for $i (sort { $a <=> $b } keys %code_points_to_test) {
-    my $native = Devel::PPPort::LATIN1_TO_NATIVE($i);
-    my $hex = sprintf("0x%02X", $native);
-
-    # And for each code point test each of the classes
-    my $class;
-    for $class (qw(ALPHA ALPHANUMERIC ASCII BLANK CNTRL DIGIT GRAPH IDCONT
-                   IDFIRST LOWER PRINT PSXSPC PUNCT SPACE UPPER WORDCHAR
-                   XDIGIT))
-    {
-        if ($i < 256) {  # For the ones that can fit in a byte, test each of
-                         # three macros.
-            my $suffix;
-            for $suffix ("", "_A", "_L1", "_uvchr") {
-                my $should_be = ($i > 0x7F && $suffix !~ /_(uvchr|L1)/)
-                                ? 0     # Fail on non-ASCII unless unicode
-                                : ($types{"$native:$class"} || 0);
-                if (ivers($]) < ivers(5.6) && $suffix eq '_uvchr') {
-                    skip("No UTF-8 on this perl", 1);
-                    next;
-                }
-
-                my $eval_string = "Devel::PPPort::is${class}$suffix($hex)";
-                local $SIG{__WARN__} = sub {};
-                my $is = eval $eval_string || 0;
-                die "eval 'For $i: $eval_string' gave $@" if $@;
-                is($is, $should_be, "'$eval_string'");
-            }
-        }
-
-        # For all code points, test the '_utf8' macros
-        my $sub_fcn;
-        for $sub_fcn ("", "_LC") {
-            my $skip = "";
-            if (ivers($]) < ivers(5.6)) {
-                $skip = $way_too_early_msg;
-            }
-            elsif (ivers($]) < ivers(5.7) && $native > 255) {
-                $skip = "Perls earlier than 5.7 give wrong answers for above Latin1 code points";
-            }
-            elsif (ivers($]) <= ivers(5.11.3) && $native == 0x2029 && ($class eq 'PRINT' || $class eq 'GRAPH')) {
-                $skip = "Perls earlier than 5.11.3 considered high space characters as isPRINT and isGRAPH";
-            }
-            elsif ($sub_fcn eq '_LC' && $i < 256) {
-                $skip = "Testing of code points whose results depend on locale is skipped ";
-            }
-            my $fcn = "Devel::PPPort::is${class}${sub_fcn}_utf8_safe";
-            my $utf8;
-
-            if ($skip) {
-                skip $skip, 1;
-            }
-            else {
-                $utf8 = quotemeta Devel::PPPort::uvchr_to_utf8($native);
-                my $should_be = $types{"$native:$class"} || 0;
-                my $eval_string = "$fcn(\"$utf8\", 0)";
-                local $SIG{__WARN__} = sub {};
-                my $is = eval $eval_string || 0;
-                die "eval 'For $i, $eval_string' gave $@" if $@;
-                is($is, $should_be, sprintf("For U+%04X '%s'", $native, $eval_string));
-            }
-
-            # And for the high code points, test that a too short malformation (the
-            # -1) causes it to fail
-            if ($i > 255) {
-                if ($skip) {
-                    skip $skip, 1;
-                }
-                elsif (ivers($]) >= ivers(5.25.9)) {
-                    skip("Prints an annoying error message that khw doesn't know how to easily suppress", 1);
-                }
-                else {
-                    my $eval_string = "$fcn(\"$utf8\", -1)";
-                    local $SIG{__WARN__} = sub {};
-                    my $is = eval "$eval_string" || 0;
-                    die "eval '$eval_string' gave $@" if $@;
-                    is($is, 0, sprintf("For U+%04X '%s'", $native, $eval_string));
-                }
-            }
-        }
-    }
-}
-
-my %case_changing = ( 'LOWER' => [ [ ord('A'), ord('a') ],
-                                   [ Devel::PPPort::LATIN1_TO_NATIVE(0xC0),
-                                     Devel::PPPort::LATIN1_TO_NATIVE(0xE0) ],
-                                   [ 0x100, 0x101 ],
-                                 ],
-                      'FOLD'  => [ [ ord('C'), ord('c') ],
-                                   [ Devel::PPPort::LATIN1_TO_NATIVE(0xC0),
-                                     Devel::PPPort::LATIN1_TO_NATIVE(0xE0) ],
-                                   [ 0x104, 0x105 ],
-                                   [ Devel::PPPort::LATIN1_TO_NATIVE(0xDF),
-                                     'ss' ],
-                                 ],
-                      'UPPER' => [ [ ord('a'), ord('A'),  ],
-                                   [ Devel::PPPort::LATIN1_TO_NATIVE(0xE0),
-                                     Devel::PPPort::LATIN1_TO_NATIVE(0xC0) ],
-                                   [ 0x101, 0x100 ],
-                                   [ Devel::PPPort::LATIN1_TO_NATIVE(0xDF),
-                                     'SS' ],
-                                 ],
-                      'TITLE' => [ [ ord('c'), ord('C'),  ],
-                                   [ Devel::PPPort::LATIN1_TO_NATIVE(0xE2),
-                                     Devel::PPPort::LATIN1_TO_NATIVE(0xC2) ],
-                                   [ 0x103, 0x102 ],
-                                   [ Devel::PPPort::LATIN1_TO_NATIVE(0xDF),
-                                     'Ss' ],
-                                 ],
-                    );
-
-my $name;
-for $name (keys %case_changing) {
-    my @code_points_to_test = @{$case_changing{$name}};
-    my $unchanged;
-    for $unchanged (@code_points_to_test) {
-        my @pair = @$unchanged;
-        my $original = $pair[0];
-        my $changed = $pair[1];
-        my $utf8_changed = $changed;
-        my $is_cp = $utf8_changed =~ /^\d+$/;
-        my $should_be_bytes;
-        if (ivers($]) >= ivers(5.6)) {
-            if ($is_cp) {
-                $utf8_changed = Devel::PPPort::uvchr_to_utf8($changed);
-                $should_be_bytes = Devel::PPPort::UTF8_SAFE_SKIP($utf8_changed, 0);
-            }
-            else {
-                die("Test currently doesn't work for non-ASCII multi-char case changes") if eval '$utf8_changed =~ /[[:^ascii:]]/';
-                $should_be_bytes = length $utf8_changed;
-            }
-        }
-
-        my $fcn = "to${name}_uvchr";
-        my $skip = "";
-
-        if (ivers($]) < ivers(5.6)) {
-            $skip = $way_too_early_msg;
-        }
-        elsif (! $is_cp) {
-            $skip = "Can't do uvchr on a multi-char string";
-        }
-        if ($skip) {
-            skip $skip, 4;
-        }
-        else {
-            if ($is_cp) {
-                $utf8_changed = Devel::PPPort::uvchr_to_utf8($changed);
-                $should_be_bytes = Devel::PPPort::UTF8_SAFE_SKIP($utf8_changed, 0);
-            }
-            else {
-                my $non_ascii_re = (ivers($]) >= ivers(5.6)) ? '[[:^ascii:]]' : '[^\x00-\x7F]';
-                die("Test currently doesn't work for non-ASCII multi-char case changes") if eval '$utf8_changed =~ /$non_ascii_re/';
-                $should_be_bytes = length $utf8_changed;
-            }
-
-            my $ret = eval "Devel::PPPort::$fcn($original)";
-            my $fail = $@;  # Have to save $@, as it gets destroyed
-            is ($fail, "", "$fcn($original) didn't fail");
-            my $first = (ivers($]) != ivers(5.6))
-                        ? substr($utf8_changed, 0, 1)
-                        : $utf8_changed, 0, 1;
-            is($ret->[0], ord $first,
-               "ord of $fcn($original) is $changed");
-            is($ret->[1], $utf8_changed,
-               "UTF-8 of of $fcn($original) is correct");
-            is($ret->[2], $should_be_bytes,
-               "Length of $fcn($original) is $should_be_bytes");
-        }
-
-        my $truncate;
-        for $truncate (0..2) {
-            my $skip;
-            if (ivers($]) < ivers(5.6)) {
-                $skip = $way_too_early_msg;
-            }
-            elsif (! $is_cp && ivers($]) < ivers(5.7.3)) {
-                $skip = "Multi-character case change not implemented until 5.7.3";
-            }
-            elsif ($truncate == 2 && ivers($]) > ivers(5.25.8)) {
-                $skip = "Zero length inputs cause assertion failure; test dies in modern perls";
-            }
-            elsif ($truncate > 0 && length $changed > 1) {
-                $skip = "Don't test shortened multi-char case changes";
-            }
-            elsif ($truncate > 0 && Devel::PPPort::UVCHR_IS_INVARIANT($original)) {
-                $skip = "Don't try to test shortened single bytes";
-            }
-            if ($skip) {
-                skip $skip, 4;
-            }
-            else {
-                my $fcn = "to${name}_utf8_safe";
-                my $utf8 = quotemeta Devel::PPPort::uvchr_to_utf8($original);
-                my $real_truncate = ($truncate < 2)
-                                    ? $truncate : $should_be_bytes;
-                my $eval_string = "Devel::PPPort::$fcn(\"$utf8\", $real_truncate)";
-                my $ret = eval "no warnings; $eval_string" || 0;
-                my $fail = $@;  # Have to save $@, as it gets destroyed
-                if ($truncate == 0) {
-                    is ($fail, "", "Didn't fail on full length input");
-                    my $first = (ivers($]) != ivers(5.6))
-                                ? substr($utf8_changed, 0, 1)
-                                : $utf8_changed, 0, 1;
-                    is($ret->[0], ord $first,
-                       "ord of $fcn($original) is $changed");
-                    is($ret->[1], $utf8_changed,
-                       "UTF-8 of of $fcn($original) is correct");
-                    is($ret->[2], $should_be_bytes,
-                    "Length of $fcn($original) is $should_be_bytes");
-                }
-                else {
-                    is ($fail, eval 'qr/Malformed UTF-8 character/',
-                        "Gave appropriate error for short char: $original");
-                    skip("Expected failure means remaining tests for"
-                       . " this aren't relevant", 3);
-                }
-            }
-        }
-    }
-}
-
-is(&Devel::PPPort::av_top_index([1,2,3]), 2);
-is(&Devel::PPPort::av_tindex([1,2,3,4]), 3);
-
diff --git a/dist/Devel-PPPort/t/newCONSTSUB.t b/dist/Devel-PPPort/t/newCONSTSUB.t
deleted file mode 100644 (file)
index f279875..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-################################################################################
-#
-#            !!!!!   Do NOT edit this file directly!   !!!!!
-#
-#            Edit mktests.PL and/or parts/inc/newCONSTSUB instead.
-#
-#  This file was automatically generated from the definition files in the
-#  parts/inc/ subdirectory by mktests.PL. To learn more about how all this
-#  works, please read the F<HACKERS> file that came with this distribution.
-#
-################################################################################
-
-use FindBin ();
-
-BEGIN {
-  if ($ENV{'PERL_CORE'}) {
-    chdir 't' if -d 't';
-    unshift @INC, '../lib' 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;
-    }
-  }
-
-  use lib "$FindBin::Bin";
-  use lib "$FindBin::Bin/../parts/inc";
-
-  die qq[Cannot find "$FindBin::Bin/../parts/inc"] unless -d "$FindBin::Bin/../parts/inc";
-
-  sub load {
-    require 'testutil.pl';
-    require 'inctools';
-  }
-
-  if (3) {
-    load();
-    plan(tests => 3);
-  }
-}
-
-use Devel::PPPort;
-use strict;
-BEGIN { $^W = 1; }
-
-package Devel::PPPort;
-use vars '@ISA';
-require DynaLoader;
-@ISA = qw(DynaLoader);
-bootstrap Devel::PPPort;
-
-package main;
-
-&Devel::PPPort::call_newCONSTSUB_1();
-is(&Devel::PPPort::test_value_1(), 1);
-
-&Devel::PPPort::call_newCONSTSUB_2();
-is(&Devel::PPPort::test_value_2(), 2);
-
-&Devel::PPPort::call_newCONSTSUB_3();
-is(&Devel::PPPort::test_value_3(), 3);
-
diff --git a/dist/Devel-PPPort/t/newRV.t b/dist/Devel-PPPort/t/newRV.t
deleted file mode 100644 (file)
index 211cdd6..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-################################################################################
-#
-#            !!!!!   Do NOT edit this file directly!   !!!!!
-#
-#            Edit mktests.PL and/or parts/inc/newRV instead.
-#
-#  This file was automatically generated from the definition files in the
-#  parts/inc/ subdirectory by mktests.PL. To learn more about how all this
-#  works, please read the F<HACKERS> file that came with this distribution.
-#
-################################################################################
-
-use FindBin ();
-
-BEGIN {
-  if ($ENV{'PERL_CORE'}) {
-    chdir 't' if -d 't';
-    unshift @INC, '../lib' 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;
-    }
-  }
-
-  use lib "$FindBin::Bin";
-  use lib "$FindBin::Bin/../parts/inc";
-
-  die qq[Cannot find "$FindBin::Bin/../parts/inc"] unless -d "$FindBin::Bin/../parts/inc";
-
-  sub load {
-    require 'testutil.pl';
-    require 'inctools';
-  }
-
-  if (2) {
-    load();
-    plan(tests => 2);
-  }
-}
-
-use Devel::PPPort;
-use strict;
-BEGIN { $^W = 1; }
-
-package Devel::PPPort;
-use vars '@ISA';
-require DynaLoader;
-@ISA = qw(DynaLoader);
-bootstrap Devel::PPPort;
-
-package main;
-
-is(&Devel::PPPort::newRV_inc_REFCNT, 1);
-is(&Devel::PPPort::newRV_noinc_REFCNT, 1);
-
diff --git a/dist/Devel-PPPort/t/newSV_type.t b/dist/Devel-PPPort/t/newSV_type.t
deleted file mode 100644 (file)
index 1f82d4a..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-################################################################################
-#
-#            !!!!!   Do NOT edit this file directly!   !!!!!
-#
-#            Edit mktests.PL and/or parts/inc/newSV_type instead.
-#
-#  This file was automatically generated from the definition files in the
-#  parts/inc/ subdirectory by mktests.PL. To learn more about how all this
-#  works, please read the F<HACKERS> file that came with this distribution.
-#
-################################################################################
-
-use FindBin ();
-
-BEGIN {
-  if ($ENV{'PERL_CORE'}) {
-    chdir 't' if -d 't';
-    unshift @INC, '../lib' 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;
-    }
-  }
-
-  use lib "$FindBin::Bin";
-  use lib "$FindBin::Bin/../parts/inc";
-
-  die qq[Cannot find "$FindBin::Bin/../parts/inc"] unless -d "$FindBin::Bin/../parts/inc";
-
-  sub load {
-    require 'testutil.pl';
-    require 'inctools';
-  }
-
-  if (1) {
-    load();
-    plan(tests => 1);
-  }
-}
-
-use Devel::PPPort;
-use strict;
-BEGIN { $^W = 1; }
-
-package Devel::PPPort;
-use vars '@ISA';
-require DynaLoader;
-@ISA = qw(DynaLoader);
-bootstrap Devel::PPPort;
-
-package main;
-
-is(Devel::PPPort::newSV_type(), 4);
-
diff --git a/dist/Devel-PPPort/t/newSVpv.t b/dist/Devel-PPPort/t/newSVpv.t
deleted file mode 100644 (file)
index a0a54e0..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-################################################################################
-#
-#            !!!!!   Do NOT edit this file directly!   !!!!!
-#
-#            Edit mktests.PL and/or parts/inc/newSVpv instead.
-#
-#  This file was automatically generated from the definition files in the
-#  parts/inc/ subdirectory by mktests.PL. To learn more about how all this
-#  works, please read the F<HACKERS> file that came with this distribution.
-#
-################################################################################
-
-use FindBin ();
-
-BEGIN {
-  if ($ENV{'PERL_CORE'}) {
-    chdir 't' if -d 't';
-    unshift @INC, '../lib' 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;
-    }
-  }
-
-  use lib "$FindBin::Bin";
-  use lib "$FindBin::Bin/../parts/inc";
-
-  die qq[Cannot find "$FindBin::Bin/../parts/inc"] unless -d "$FindBin::Bin/../parts/inc";
-
-  sub load {
-    require 'testutil.pl';
-    require 'inctools';
-  }
-
-  if (15) {
-    load();
-    plan(tests => 15);
-  }
-}
-
-use Devel::PPPort;
-use strict;
-BEGIN { $^W = 1; }
-
-package Devel::PPPort;
-use vars '@ISA';
-require DynaLoader;
-@ISA = qw(DynaLoader);
-bootstrap Devel::PPPort;
-
-package main;
-
-my @s = &Devel::PPPort::newSVpvn();
-ok(@s == 5);
-is($s[0], "test");
-is($s[1], "te");
-is($s[2], "");
-ok(!defined($s[3]));
-ok(!defined($s[4]));
-
-@s = &Devel::PPPort::newSVpvn_flags();
-ok(@s == 5);
-is($s[0], "test");
-is($s[1], "te");
-is($s[2], "");
-ok(!defined($s[3]));
-ok(!defined($s[4]));
-
-@s = &Devel::PPPort::newSVpvn_utf8();
-ok(@s == 1);
-is($s[0], "test");
-
-if ("$]" >= 5.008001) {
-  require utf8;
-  ok(utf8::is_utf8($s[0]));
-}
-else {
-  skip("skip: no is_utf8()", 1);
-}
-
diff --git a/dist/Devel-PPPort/t/podtest.t b/dist/Devel-PPPort/t/podtest.t
deleted file mode 100644 (file)
index 73173b4..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-################################################################################
-#
-#            !!!!!   Do NOT edit this file directly!   !!!!!
-#
-#            Edit mktests.PL and/or parts/inc/podtest instead.
-#
-#  This file was automatically generated from the definition files in the
-#  parts/inc/ subdirectory by mktests.PL. To learn more about how all this
-#  works, please read the F<HACKERS> file that came with this distribution.
-#
-################################################################################
-
-use FindBin ();
-
-BEGIN {
-  if ($ENV{'PERL_CORE'}) {
-    chdir 't' if -d 't';
-    unshift @INC, '../lib' 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;
-    }
-  }
-
-  use lib "$FindBin::Bin";
-  use lib "$FindBin::Bin/../parts/inc";
-
-  die qq[Cannot find "$FindBin::Bin/../parts/inc"] unless -d "$FindBin::Bin/../parts/inc";
-
-  sub load {
-    require 'testutil.pl';
-    require 'inctools';
-  }
-
-  if (0) {
-    load();
-    plan(tests => 0);
-  }
-}
-
-use Devel::PPPort;
-use strict;
-BEGIN { $^W = 1; }
-
-package Devel::PPPort;
-use vars '@ISA';
-require DynaLoader;
-@ISA = qw(DynaLoader);
-bootstrap Devel::PPPort;
-
-package main;
-
-my @pods = qw( HACKERS PPPort.pm ppport.h soak devel/regenerate devel/buildperl.pl );
-
-my $reason = '';
-
-if ($ENV{'SKIP_SLOW_TESTS'}) {
-  $reason = 'SKIP_SLOW_TESTS';
-}
-else {
-  # Try loading Test::Pod
-  eval q{
-    use Test::Pod;
-    $Test::Pod::VERSION >= 1.41
-        or die "Test::Pod version only $Test::Pod::VERSION";
-    import Test::Pod tests => scalar @pods;
-  };
-  $reason = 'Test::Pod >= 1.41 required' if $@;
-}
-
-if ($reason) {
-  load();
-  plan(tests => scalar @pods);
-}
-
-for (@pods) {
-  print "# checking $_\n";
-  if ($reason) {
-    skip("skip: $reason", 1);
-  }
-  else {
-    pod_file_ok($_);
-  }
-}
-
diff --git a/dist/Devel-PPPort/t/ppphtest.t b/dist/Devel-PPPort/t/ppphtest.t
deleted file mode 100644 (file)
index 70a1b44..0000000
+++ /dev/null
@@ -1,942 +0,0 @@
-################################################################################
-#
-#            !!!!!   Do NOT edit this file directly!   !!!!!
-#
-#            Edit mktests.PL and/or parts/inc/ppphtest instead.
-#
-#  This file was automatically generated from the definition files in the
-#  parts/inc/ subdirectory by mktests.PL. To learn more about how all this
-#  works, please read the F<HACKERS> file that came with this distribution.
-#
-################################################################################
-
-use FindBin ();
-
-BEGIN {
-  if ($ENV{'PERL_CORE'}) {
-    chdir 't' if -d 't';
-    unshift @INC, '../lib' 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;
-    }
-  }
-
-  use lib "$FindBin::Bin";
-  use lib "$FindBin::Bin/../parts/inc";
-
-  die qq[Cannot find "$FindBin::Bin/../parts/inc"] unless -d "$FindBin::Bin/../parts/inc";
-
-  sub load {
-    require 'testutil.pl';
-    require 'inctools';
-  }
-
-  if (238) {
-    load();
-    plan(tests => 238);
-  }
-}
-
-use Devel::PPPort;
-use strict;
-BEGIN { $^W = 1; }
-
-package Devel::PPPort;
-use vars '@ISA';
-require DynaLoader;
-@ISA = qw(DynaLoader);
-bootstrap Devel::PPPort;
-
-package main;
-
-BEGIN {
-  if ($ENV{'SKIP_SLOW_TESTS'}) {
-    skip("skip: SKIP_SLOW_TESTS", 238);
-    exit 0;
-  }
-}
-
-use File::Path qw/rmtree mkpath/;
-use Config;
-
-my $tmp = 'ppptmp';
-my $inc = '';
-my $isVMS = $^O eq 'VMS';
-my $isMAC = $^O eq 'MacOS';
-my $perl = find_perl();
-
-rmtree($tmp) if -d $tmp;
-mkpath($tmp) or die "mkpath $tmp: $!\n";
-chdir($tmp) or die "chdir $tmp: $!\n";
-
-if ($ENV{'PERL_CORE'}) {
-  if (-d '../../lib') {
-    if ($isVMS) {
-      $inc = '"-I../../lib"';
-    }
-    elsif ($isMAC) {
-      $inc = '-I:::lib';
-    }
-    else {
-      $inc = '-I../../lib';
-    }
-    unshift @INC, '../../lib';
-  }
-}
-if ($perl =~ m!^\./!) {
-  $perl = ".$perl";
-}
-
-END {
-  chdir('..') if !-d $tmp && -d "../$tmp";
-  rmtree($tmp) if -d $tmp;
-}
-
-ok(&Devel::PPPort::WriteFile("ppport.h"));
-
-# Check GetFileContents()
-is(-e "ppport.h", 1);
-
-my $data;
-
-open(F, "<ppport.h") or die "Failed to open ppport.h: $!";
-while(<F>) {
-  $data .= $_;
-}
-close(F);
-
-is(Devel::PPPort::GetFileContents("ppport.h"), $data);
-is(Devel::PPPort::GetFileContents(), $data);
-
-sub comment
-{
-  my $c = shift;
-  my $x = 0;
-  $c =~ s/^/sprintf("# %2d| ", ++$x)/meg;
-  $c .= "\n" unless $c =~ /[\r\n]$/;
-  print $c;
-}
-
-sub ppport
-{
-  my @args = ('ppport.h', @_);
-  unshift @args, $inc if $inc;
-  my $run = $perl =~ m/\s/ ? qq("$perl") : $perl;
-  $run .= ' -MMac::err=unix' if $isMAC;
-  for (@args) {
-    $_ = qq("$_") if $isVMS && /^[^"]/;
-    $run .= " $_";
-  }
-  print "# *** running $run ***\n";
-  $run .= ' 2>&1' unless $isMAC;
-  my @out = `$run`;
-  my $out = join '', @out;
-  comment($out);
-  return wantarray ? @out : $out;
-}
-
-sub matches
-{
-  my($str, $re, $mod) = @_;
-  my @n;
-  eval "\@n = \$str =~ /$re/g$mod;";
-  if ($@) {
-    my $err = $@;
-    $err =~ s/^/# *** /mg;
-    print "# *** ERROR ***\n$err\n";
-  }
-  return $@ ? -42 : scalar @n;
-}
-
-sub eq_files
-{
-  my($f1, $f2) = @_;
-  return 0 unless -e $f1 && -e $f2;
-  local *F;
-  for ($f1, $f2) {
-    print "# File: $_\n";
-    unless (open F, $_) {
-      print "# couldn't open $_: $!\n";
-      return 0;
-    }
-    $_ = do { local $/; <F> };
-    close F;
-    comment($_);
-  }
-  return $f1 eq $f2;
-}
-
-my @tests;
-
-for (split /\s*={70,}\s*/, do { local $/; <DATA> }) {
-  s/^\s+//; s/\s+$//;
-  my($c, %f);
-  ($c, @f{m/-{20,}\s+(\S+)\s+-{20,}/g}) = split /\s*-{20,}\s+\S+\s+-{20,}\s*/;
-  push @tests, { code => $c, files => \%f };
-}
-
-my $t;
-for $t (@tests) {
-  print "#\n", ('# ', '-'x70, "\n")x3, "#\n";
-  my $f;
-  for $f (keys %{$t->{files}}) {
-    my @f = split /\//, $f;
-    if (@f > 1) {
-      pop @f;
-      my $path = join '/', @f;
-      mkpath($path) or die "mkpath('$path'): $!\n";
-    }
-    my $txt = $t->{files}{$f};
-    local *F;
-    open F, ">$f" or die "open $f: $!\n";
-    print F "$txt\n";
-    close F;
-    print "# *** writing $f ***\n";
-    comment($txt);
-  }
-
-  print "# *** evaluating test code ***\n";
-  comment($t->{code});
-
-  eval $t->{code};
-  if ($@) {
-    my $err = $@;
-    $err =~ s/^/# *** /mg;
-    print "# *** ERROR ***\n$err\n";
-  }
-  is($@, '');
-
-  for (keys %{$t->{files}}) {
-    unlink $_ or die "unlink('$_'): $!\n";
-  }
-}
-
-sub find_perl
-{
-  my $perl = $^X;
-
-  return $perl if $isVMS;
-
-  my $exe = $Config{'_exe'} || '';
-
-  if ($perl =~ /^perl\Q$exe\E$/i) {
-    $perl = "perl$exe";
-    eval "require File::Spec";
-    if ($@) {
-      $perl = "./$perl";
-    } else {
-      $perl = File::Spec->catfile(File::Spec->curdir(), $perl);
-    }
-  }
-
-  if ($perl !~ /\Q$exe\E$/i) {
-    $perl .= $exe;
-  }
-
-  warn "find_perl: cannot find $perl from $^X" unless -f $perl;
-
-  return $perl;
-}
-
-__DATA__
-
-my $o = ppport(qw(--help));
-ok($o =~ /^Usage:.*ppport\.h/m);
-ok($o =~ /--help/m);
-
-$o = ppport(qw(--version));
-ok($o =~ /^This is.*ppport.*\d+\.\d+(?:_?\d+)?\.$/);
-
-$o = ppport(qw(--nochanges));
-ok($o =~ /^Scanning.*test\.xs/mi);
-ok($o =~ /Analyzing.*test\.xs/mi);
-is(matches($o, '^Scanning', 'm'), 1);
-is(matches($o, 'Analyzing', 'm'), 1);
-ok($o =~ /Uses Perl_newSViv instead of newSViv/);
-
-$o = ppport(qw(--quiet --nochanges));
-ok($o =~ /^\s*$/);
-
----------------------------- test.xs ------------------------------------------
-
-Perl_newSViv();
-
-===============================================================================
-
-# check if C and C++ comments are filtered correctly
-
-my $o = ppport(qw(--copy=a));
-ok($o =~ /^Scanning.*MyExt\.xs/mi);
-ok($o =~ /Analyzing.*MyExt\.xs/mi);
-is(matches($o, '^Scanning', 'm'), 1);
-ok($o =~ /^Needs to include.*ppport\.h/m);
-ok($o !~ /^Uses grok_bin/m);
-ok($o !~ /^Uses newSVpv/m);
-ok($o =~ /Uses 1 C\+\+ style comment/m);
-ok(eq_files('MyExt.xsa', 'MyExt.ra'));
-
-# check if C++ are left untouched with --cplusplus
-
-$o = ppport(qw(--copy=b --cplusplus));
-ok($o =~ /^Scanning.*MyExt\.xs/mi);
-ok($o =~ /Analyzing.*MyExt\.xs/mi);
-is(matches($o, '^Scanning', 'm'), 1);
-ok($o =~ /^Needs to include.*ppport\.h/m);
-ok($o !~ /^Uses grok_bin/m);
-ok($o !~ /^Uses newSVpv/m);
-ok($o !~ /Uses \d+ C\+\+ style comment/m);
-ok(eq_files('MyExt.xsb', 'MyExt.rb'));
-
-unlink qw(MyExt.xsa MyExt.xsb);
-
----------------------------- MyExt.xs -----------------------------------------
-
-newSVuv();
-    // newSVpv();
-  XPUSHs(foo);
-/* grok_bin(); */
-
----------------------------- MyExt.ra -----------------------------------------
-
-#include "ppport.h"
-newSVuv();
-    /* newSVpv(); */
-  XPUSHs(foo);
-/* grok_bin(); */
-
----------------------------- MyExt.rb -----------------------------------------
-
-#include "ppport.h"
-newSVuv();
-    // newSVpv();
-  XPUSHs(foo);
-/* grok_bin(); */
-
-===============================================================================
-
-my $o = ppport(qw(--nochanges file1.xs));
-ok($o =~ /^Scanning.*file1\.xs/mi);
-ok($o =~ /Analyzing.*file1\.xs/mi);
-ok($o !~ /^Scanning.*file2\.xs/mi);
-ok($o =~ /^Uses newCONSTSUB/m);
-ok($o =~ /^Uses PL_expect/m);
-ok($o =~ /^Uses SvPV_nolen.*depends.*sv_2pv_flags/m);
-ok($o =~ /WARNING: PL_expect/m);
-ok($o =~ /hint for newCONSTSUB/m);
-ok($o =~ /^Analysis completed \(1 warning\)/m);
-ok($o =~ /^Looks good/m);
-
-$o = ppport(qw(--nochanges --nohints file1.xs));
-ok($o =~ /^Scanning.*file1\.xs/mi);
-ok($o =~ /Analyzing.*file1\.xs/mi);
-ok($o !~ /^Scanning.*file2\.xs/mi);
-ok($o =~ /^Uses newCONSTSUB/m);
-ok($o =~ /^Uses PL_expect/m);
-ok($o =~ /^Uses SvPV_nolen.*depends.*sv_2pv_flags/m);
-ok($o =~ /WARNING: PL_expect/m);
-ok($o !~ /hint for newCONSTSUB/m);
-ok($o =~ /^Analysis completed \(1 warning\)/m);
-ok($o =~ /^Looks good/m);
-
-$o = ppport(qw(--nochanges --nohints --nodiag file1.xs));
-ok($o =~ /^Scanning.*file1\.xs/mi);
-ok($o =~ /Analyzing.*file1\.xs/mi);
-ok($o !~ /^Scanning.*file2\.xs/mi);
-ok($o !~ /^Uses newCONSTSUB/m);
-ok($o !~ /^Uses PL_expect/m);
-ok($o !~ /^Uses SvPV_nolen/m);
-ok($o =~ /WARNING: PL_expect/m);
-ok($o !~ /hint for newCONSTSUB/m);
-ok($o =~ /^Analysis completed \(1 warning\)/m);
-ok($o =~ /^Looks good/m);
-
-$o = ppport(qw(--nochanges --quiet file1.xs));
-ok($o =~ /^\s*$/);
-
-$o = ppport(qw(--nochanges file2.xs));
-ok($o =~ /^Scanning.*file2\.xs/mi);
-ok($o =~ /Analyzing.*file2\.xs/mi);
-ok($o !~ /^Scanning.*file1\.xs/mi);
-ok($o =~ /^Uses mXPUSHp/m);
-ok($o =~ /^Needs to include.*ppport\.h/m);
-ok($o !~ /^Looks good/m);
-ok($o =~ /^1 potentially required change detected/m);
-
-$o = ppport(qw(--nochanges --nohints file2.xs));
-ok($o =~ /^Scanning.*file2\.xs/mi);
-ok($o =~ /Analyzing.*file2\.xs/mi);
-ok($o !~ /^Scanning.*file1\.xs/mi);
-ok($o =~ /^Uses mXPUSHp/m);
-ok($o =~ /^Needs to include.*ppport\.h/m);
-ok($o !~ /^Looks good/m);
-ok($o =~ /^1 potentially required change detected/m);
-
-$o = ppport(qw(--nochanges --nohints --nodiag file2.xs));
-ok($o =~ /^Scanning.*file2\.xs/mi);
-ok($o =~ /Analyzing.*file2\.xs/mi);
-ok($o !~ /^Scanning.*file1\.xs/mi);
-ok($o !~ /^Uses mXPUSHp/m);
-ok($o !~ /^Needs to include.*ppport\.h/m);
-ok($o !~ /^Looks good/m);
-ok($o =~ /^1 potentially required change detected/m);
-
-$o = ppport(qw(--nochanges --quiet file2.xs));
-ok($o =~ /^\s*$/);
-
----------------------------- file1.xs -----------------------------------------
-
-#define NEED_newCONSTSUB
-#define NEED_PL_parser
-#include "ppport.h"
-
-newCONSTSUB();
-SvPV_nolen();
-PL_expect = 0;
-
----------------------------- file2.xs -----------------------------------------
-
-mXPUSHp(foo);
-
-===============================================================================
-
-my $o = ppport(qw(--nochanges));
-ok($o =~ /^Scanning.*FooBar\.xs/mi);
-ok($o =~ /Analyzing.*FooBar\.xs/mi);
-is(matches($o, '^Scanning', 'm'), 1);
-ok($o !~ /^Looks good/m);
-ok($o =~ /^Uses grok_bin/m);
-
----------------------------- FooBar.xs ----------------------------------------
-
-newSViv();
-XPUSHs(foo);
-grok_bin();
-
-===============================================================================
-
-my $o = ppport(qw(--nochanges));
-ok($o =~ /^Scanning.*First\.xs/mi);
-ok($o =~ /Analyzing.*First\.xs/mi);
-ok($o =~ /^Scanning.*second\.h/mi);
-ok($o =~ /Analyzing.*second\.h/mi);
-ok($o =~ /^Scanning.*sub.*third\.c/mi);
-ok($o =~ /Analyzing.*sub.*third\.c/mi);
-ok($o !~ /^Scanning.*foobar/mi);
-is(matches($o, '^Scanning', 'm'), 3);
-
----------------------------- First.xs -----------------------------------------
-
-one
-
----------------------------- foobar.xyz ---------------------------------------
-
-two
-
----------------------------- second.h -----------------------------------------
-
-three
-
----------------------------- sub/third.c --------------------------------------
-
-four
-
-===============================================================================
-
-my $o = ppport(qw(--nochanges));
-ok($o =~ /Possibly wrong #define NEED_foobar in.*test.xs/i);
-
----------------------------- test.xs ------------------------------------------
-
-#define NEED_foobar
-
-===============================================================================
-
-# And now some complex "real-world" example
-
-my $o = ppport(qw(--copy=f));
-for (qw(main.xs mod1.c mod2.c mod3.c mod4.c mod5.c)) {
-  ok($o =~ /^Scanning.*\Q$_\E/mi);
-  ok($o =~ /Analyzing.*\Q$_\E/i);
-}
-is(matches($o, '^Scanning', 'm'), 6);
-
-is(matches($o, '^Writing copy of', 'm'), 5);
-ok(!-e "mod5.cf");
-
-for (qw(main.xs mod1.c mod2.c mod3.c mod4.c)) {
-  ok($o =~ /^Writing copy of.*\Q$_\E.*with changes/mi);
-  ok(-e "${_}f");
-  ok(eq_files("${_}f", "${_}r"));
-  unlink "${_}f";
-}
-
----------------------------- main.xs ------------------------------------------
-
-#include "EXTERN.h"
-#include "perl.h"
-#include "XSUB.h"
-
-#define NEED_newCONSTSUB
-#define NEED_grok_hex_GLOBAL
-#include "ppport.h"
-
-newCONSTSUB();
-grok_hex();
-Perl_grok_bin(aTHX_ foo, bar);
-
-/* some comment */
-
-perl_eval_pv();
-grok_bin();
-Perl_grok_bin(bar, sv_no);
-
----------------------------- mod1.c -------------------------------------------
-
-#include "EXTERN.h"
-#include "perl.h"
-#include "XSUB.h"
-
-#define NEED_grok_bin_GLOBAL
-#define NEED_newCONSTSUB
-#include "ppport.h"
-
-newCONSTSUB();
-grok_bin();
-{
-  Perl_croak ("foo");
-  Perl_sv_catpvf();  /* I know it's wrong ;-) */
-}
-
----------------------------- mod2.c -------------------------------------------
-
-#include "EXTERN.h"
-#include "perl.h"
-#include "XSUB.h"
-
-#define NEED_eval_pv
-#include "ppport.h"
-
-newSViv();
-
-/*
-   eval_pv();
-*/
-
----------------------------- mod3.c -------------------------------------------
-
-#include "EXTERN.h"
-#include "perl.h"
-#include "XSUB.h"
-
-grok_oct();
-eval_pv();
-
----------------------------- mod4.c -------------------------------------------
-
-#include "EXTERN.h"
-#include "perl.h"
-#include "XSUB.h"
-
-START_MY_CXT;
-
----------------------------- mod5.c -------------------------------------------
-
-#include "EXTERN.h"
-#include "perl.h"
-#include "XSUB.h"
-
-#include "ppport.h"
-call_pv();
-
----------------------------- main.xsr -----------------------------------------
-
-#include "EXTERN.h"
-#include "perl.h"
-#include "XSUB.h"
-
-#define NEED_eval_pv_GLOBAL
-#define NEED_grok_hex
-#define NEED_newCONSTSUB_GLOBAL
-#include "ppport.h"
-
-newCONSTSUB();
-grok_hex();
-grok_bin(foo, bar);
-
-/* some comment */
-
-eval_pv();
-grok_bin();
-grok_bin(bar, PL_sv_no);
-
----------------------------- mod1.cr ------------------------------------------
-
-#include "EXTERN.h"
-#include "perl.h"
-#include "XSUB.h"
-
-#define NEED_grok_bin_GLOBAL
-#include "ppport.h"
-
-newCONSTSUB();
-grok_bin();
-{
-  Perl_croak (aTHX_ "foo");
-  Perl_sv_catpvf(aTHX);  /* I know it's wrong ;-) */
-}
-
----------------------------- mod2.cr ------------------------------------------
-
-#include "EXTERN.h"
-#include "perl.h"
-#include "XSUB.h"
-
-
-newSViv();
-
-/*
-   eval_pv();
-*/
-
----------------------------- mod3.cr ------------------------------------------
-
-#include "EXTERN.h"
-#include "perl.h"
-#include "XSUB.h"
-#define NEED_grok_oct
-#include "ppport.h"
-
-grok_oct();
-eval_pv();
-
----------------------------- mod4.cr ------------------------------------------
-
-#include "EXTERN.h"
-#include "perl.h"
-#include "XSUB.h"
-#include "ppport.h"
-
-START_MY_CXT;
-
-===============================================================================
-
-my $o = ppport(qw(--nochanges));
-ok($o =~ /Uses grok_hex/m);
-ok($o !~ /Looks good/m);
-
-$o = ppport(qw(--nochanges --compat-version=5.8.0));
-ok($o !~ /Uses grok_hex/m);
-ok($o =~ /Looks good/m);
-
----------------------------- FooBar.xs ----------------------------------------
-
-grok_hex();
-
-===============================================================================
-
-my $o = ppport(qw(--nochanges));
-ok($o =~ /Uses SvPVutf8_force, which may not be portable/m);
-
-$o = ppport(qw(--nochanges --compat-version=5.5.3));
-ok($o =~ /Uses SvPVutf8_force, which may not be portable/m);
-
-$o = ppport(qw(--nochanges --compat-version=5.005_03));
-ok($o =~ /Uses SvPVutf8_force, which may not be portable/m);
-
-$o = ppport(qw(--nochanges --compat-version=5.6.0));
-ok($o !~ /Uses SvPVutf8_force/m);
-
-$o = ppport(qw(--nochanges --compat-version=5.006));
-ok($o !~ /Uses SvPVutf8_force/m);
-
-$o = ppport(qw(--nochanges --compat-version=5.999.999));
-ok($o !~ /Uses SvPVutf8_force/m);
-
-$o = ppport(qw(--nochanges --compat-version=6.0.0));
-ok($o =~ /Only Perl 5 is supported/m);
-
-$o = ppport(qw(--nochanges --compat-version=5.1000.999));
-ok($o =~ /Invalid version number: 5.1000.999/m);
-
-$o = ppport(qw(--nochanges --compat-version=5.999.1000));
-ok($o =~ /Invalid version number: 5.999.1000/m);
-
----------------------------- FooBar.xs ----------------------------------------
-
-SvPVutf8_force();
-
-===============================================================================
-
-my $o = ppport(qw(--nochanges));
-ok($o !~ /potentially required change/);
-is(matches($o, '^Looks good', 'm'), 2);
-
----------------------------- FooBar.xs ----------------------------------------
-
-#define NEED_grok_numeric_radix
-#define NEED_grok_number
-#include "ppport.h"
-
-GROK_NUMERIC_RADIX();
-grok_number();
-
----------------------------- foo.c --------------------------------------------
-
-#include "ppport.h"
-
-call_pv();
-
-===============================================================================
-
-# check --api-info option
-
-my $o = ppport(qw(--api-info=INT2PTR));
-my %found = map {($_ => 1)} $o =~ /^===\s+(\w+)\s+===/mg;
-is(scalar keys %found, 1, "found 1 key");
-ok(exists $found{INT2PTR});
-is(matches($o, '^Supported at least since perl-5\.6\.0', 'm'), 1, "INT2PTR supported without ppport.h to 5.6.0");
-is(matches($o, '^ppport.h additionally provides support at least back to perl-5\.003', 'm'), 1, "INT2PTR supported with ppport.h to 5.003");
-
-$o = ppport(qw(--api-info=Zero));
-%found = map {($_ => 1)} $o =~ /^===\s+(\w+)\s+===/mg;
-is(scalar keys %found, 1, "found 1 key");
-ok(exists $found{Zero});
-is(matches($o, '^Supported at least since perl-5.003', 'm'), 1, "Zero supported to 5.003");
-
-$o = ppport(qw(--api-info=/Zero/));
-%found = map {($_ => 1)} $o =~ /^===\s+(\w+)\s+===/mg;
-is(scalar keys %found, 2, "found 2 keys");
-ok(exists $found{Zero});
-ok(exists $found{ZeroD});
-
-===============================================================================
-
-# check --list-provided option
-
-my @o = ppport(qw(--list-provided));
-my %p;
-my $fail = 0;
-for (@o) {
-  my($name, $flags) = /^(\w+)(?:\s+\[(\w+(?:,\s+\w+)*)\])?$/ or $fail++;
-  exists $p{$name} and $fail++;
-  $p{$name} = defined $flags ? { map { ($_ => 1) } $flags =~ /(\w+)/g } : '';
-}
-ok(@o > 100);
-is($fail, 0);
-
-ok(exists $p{call_pv});
-ok(not ref $p{call_pv});
-
-ok(exists $p{grok_bin});
-is(ref $p{grok_bin}, 'HASH');
-is(scalar keys %{$p{grok_bin}}, 2);
-ok($p{grok_bin}{explicit});
-ok($p{grok_bin}{depend});
-
-ok(exists $p{gv_stashpvn});
-is(ref $p{gv_stashpvn}, 'HASH');
-is(scalar keys %{$p{gv_stashpvn}}, 2);
-ok($p{gv_stashpvn}{depend});
-ok($p{gv_stashpvn}{hint});
-
-ok(exists $p{sv_catpvf_mg});
-is(ref $p{sv_catpvf_mg}, 'HASH');
-is(scalar keys %{$p{sv_catpvf_mg}}, 2);
-ok($p{sv_catpvf_mg}{explicit});
-ok($p{sv_catpvf_mg}{depend});
-
-ok(exists $p{PL_signals});
-is(ref $p{PL_signals}, 'HASH');
-is(scalar keys %{$p{PL_signals}}, 1);
-ok($p{PL_signals}{explicit});
-
-===============================================================================
-
-# check --list-unsupported option
-
-my @o = ppport(qw(--list-unsupported));
-my %p;
-my $fail = 0;
-for (@o) {
-  my($name, $ver) = /^(\w+)\s*\.+\s*([\d._]+)$/ or $fail++;
-  exists $p{$name} and $fail++;
-  $p{$name} = $ver;
-}
-ok(@o > 100);
-is($fail, 0);
-
-ok(exists $p{utf8_distance});
-is($p{utf8_distance}, '5.6.0');
-
-ok(exists $p{save_generic_svref});
-is($p{save_generic_svref}, '5.005_03');
-
-===============================================================================
-
-# check --nofilter option
-
-my $o = ppport(qw(--nochanges));
-ok($o =~ /^Scanning.*foo\.cpp/mi);
-ok($o =~ /Analyzing.*foo\.cpp/mi);
-is(matches($o, '^Scanning', 'm'), 1);
-is(matches($o, 'Analyzing', 'm'), 1);
-
-$o = ppport(qw(--nochanges foo.cpp foo.o Makefile.PL));
-ok($o =~ /Skipping the following files \(use --nofilter to avoid this\):/m);
-is(matches($o, '^\|\s+foo\.o', 'mi'), 1);
-is(matches($o, '^\|\s+Makefile\.PL', 'mi'), 1);
-ok($o =~ /^Scanning.*foo\.cpp/mi);
-ok($o =~ /Analyzing.*foo\.cpp/mi);
-is(matches($o, '^Scanning', 'm'), 1);
-is(matches($o, 'Analyzing', 'm'), 1);
-
-$o = ppport(qw(--nochanges --nofilter foo.cpp foo.o Makefile.PL));
-ok($o =~ /^Scanning.*foo\.cpp/mi);
-ok($o =~ /Analyzing.*foo\.cpp/mi);
-ok($o =~ /^Scanning.*foo\.o/mi);
-ok($o =~ /Analyzing.*foo\.o/mi);
-ok($o =~ /^Scanning.*Makefile/mi);
-ok($o =~ /Analyzing.*Makefile/mi);
-is(matches($o, '^Scanning', 'm'), 3);
-is(matches($o, 'Analyzing', 'm'), 3);
-
----------------------------- foo.cpp ------------------------------------------
-
-newSViv();
-
----------------------------- foo.o --------------------------------------------
-
-newSViv();
-
----------------------------- Makefile.PL --------------------------------------
-
-newSViv();
-
-===============================================================================
-
-# check if explicit variables are handled propery
-
-my $o = ppport(qw(--copy=a));
-ok($o =~ /^Needs to include.*ppport\.h/m);
-ok($o =~ /^Uses PL_signals/m);
-ok($o =~ /^File needs PL_signals, adding static request/m);
-ok(eq_files('MyExt.xsa', 'MyExt.ra'));
-
-unlink qw(MyExt.xsa);
-
----------------------------- MyExt.xs -----------------------------------------
-
-PL_signals = 123;
-if (PL_signals == 42)
-  foo();
-
----------------------------- MyExt.ra -----------------------------------------
-
-#define NEED_PL_signals
-#include "ppport.h"
-PL_signals = 123;
-if (PL_signals == 42)
-  foo();
-
-===============================================================================
-
-my $o = ppport(qw(--nochanges file.xs));
-ok($o =~ /^Uses PL_copline/m);
-ok($o =~ /WARNING: PL_copline/m);
-ok($o =~ /^Uses SvUOK/m);
-ok($o =~ /WARNING: Uses SvUOK, which may not be portable/m);
-ok($o =~ /^Analysis completed \(2 warnings\)/m);
-ok($o =~ /^Looks good/m);
-
-$o = ppport(qw(--nochanges --compat-version=5.8.0 file.xs));
-ok($o =~ /^Uses PL_copline/m);
-ok($o =~ /WARNING: PL_copline/m);
-ok($o !~ /WARNING: Uses SvUOK, which may not be portable/m);
-ok($o =~ /^Analysis completed \(1 warning\)/m);
-ok($o =~ /^Looks good/m);
-
----------------------------- file.xs -----------------------------------------
-
-#define NEED_PL_parser
-#include "ppport.h"
-SvUOK
-PL_copline
-
-===============================================================================
-
-my $o = ppport(qw(--copy=f));
-
-for (qw(file.xs)) {
-  ok($o =~ /^Writing copy of.*\Q$_\E.*with changes/mi);
-  ok(-e "${_}f");
-  ok(eq_files("${_}f", "${_}r"));
-  unlink "${_}f";
-}
-
----------------------------- file.xs -----------------------------------------
-
-a_string = "sv_undef"
-a_char = 'sv_yes'
-#define SOMETHING defgv
-/* C-comment: sv_tainted */
-#
-# This is just a big XS comment using sv_no
-#
-/* The following, is NOT an XS comment! */
-#  define SOMETHING_ELSE defgv + \
-                         sv_undef
-
----------------------------- file.xsr -----------------------------------------
-
-#include "ppport.h"
-a_string = "sv_undef"
-a_char = 'sv_yes'
-#define SOMETHING PL_defgv
-/* C-comment: sv_tainted */
-#
-# This is just a big XS comment using sv_no
-#
-/* The following, is NOT an XS comment! */
-#  define SOMETHING_ELSE PL_defgv + \
-                         PL_sv_undef
-
-===============================================================================
-
-my $o = ppport(qw(--copy=f));
-
-for (qw(file.xs)) {
-  ok($o =~ /^Writing copy of.*\Q$_\E.*with changes/mi);
-  ok(-e "${_}f");
-  ok(eq_files("${_}f", "${_}r"));
-  unlink "${_}f";
-}
-
----------------------------- file.xs -----------------------------------------
-
-#define NEED_warner
-#include "ppport.h"
-Perl_croak_nocontext("foo");
-Perl_croak("bar");
-croak("foo");
-croak_nocontext("foo");
-Perl_warner_nocontext("foo");
-Perl_warner("foo");
-warner_nocontext("foo");
-warner("foo");
-
----------------------------- file.xsr -----------------------------------------
-
-#define NEED_warner
-#include "ppport.h"
-Perl_croak_nocontext("foo");
-Perl_croak(aTHX_ "bar");
-croak("foo");
-croak_nocontext("foo");
-Perl_warner_nocontext("foo");
-Perl_warner(aTHX_ "foo");
-warner_nocontext("foo");
-warner("foo");
-
diff --git a/dist/Devel-PPPort/t/pv_tools.t b/dist/Devel-PPPort/t/pv_tools.t
deleted file mode 100644 (file)
index d887eea..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-################################################################################
-#
-#            !!!!!   Do NOT edit this file directly!   !!!!!
-#
-#            Edit mktests.PL and/or parts/inc/pv_tools instead.
-#
-#  This file was automatically generated from the definition files in the
-#  parts/inc/ subdirectory by mktests.PL. To learn more about how all this
-#  works, please read the F<HACKERS> file that came with this distribution.
-#
-################################################################################
-
-use FindBin ();
-
-BEGIN {
-  if ($ENV{'PERL_CORE'}) {
-    chdir 't' if -d 't';
-    unshift @INC, '../lib' 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;
-    }
-  }
-
-  use lib "$FindBin::Bin";
-  use lib "$FindBin::Bin/../parts/inc";
-
-  die qq[Cannot find "$FindBin::Bin/../parts/inc"] unless -d "$FindBin::Bin/../parts/inc";
-
-  sub load {
-    require 'testutil.pl';
-    require 'inctools';
-  }
-
-  if (13) {
-    load();
-    plan(tests => 13);
-  }
-}
-
-use Devel::PPPort;
-use strict;
-BEGIN { $^W = 1; }
-
-package Devel::PPPort;
-use vars '@ISA';
-require DynaLoader;
-@ISA = qw(DynaLoader);
-bootstrap Devel::PPPort;
-
-package main;
-
-my $uni = &Devel::PPPort::pv_escape_can_unicode();
-
-# sanity check
-ok($uni ? "$]" >= 5.006 : "$]" < 5.008);
-
-my @r;
-
-@r = &Devel::PPPort::pv_pretty();
-is($r[0], $r[1]);
-is($r[0], "foobarbaz");
-is($r[2], $r[3]);
-is($r[2], '<leftpv_p\retty\nright>');
-is($r[4], $r[5]);
-if(ord("A") == 65) {
-    is($r[4], $uni ? 'N\375 Batter\355' : 'N\303\275 Batter\303');
-}
-else {
-    skip("Skip for non-ASCII platform");
-}
-is($r[6], $r[7]);
-if(ord("A") == 65) {
-    is($r[6], $uni ? '\301g\346tis Byrju...' : '\303\201g\303\246t...');
-}
-else {
-    skip("Skip for non-ASCII platform");
-}
-
-@r = &Devel::PPPort::pv_display();
-is($r[0], $r[1]);
-is($r[0], '"foob\0rbaz"\0');
-is($r[2], $r[3]);
-ok($r[2] eq '"pv_di"...\0' ||
-   $r[2] eq '"pv_d"...\0');  # some perl implementations are broken... :(
-
diff --git a/dist/Devel-PPPort/t/pvs.t b/dist/Devel-PPPort/t/pvs.t
deleted file mode 100644 (file)
index 7b96bb5..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-################################################################################
-#
-#            !!!!!   Do NOT edit this file directly!   !!!!!
-#
-#            Edit mktests.PL and/or parts/inc/pvs instead.
-#
-#  This file was automatically generated from the definition files in the
-#  parts/inc/ subdirectory by mktests.PL. To learn more about how all this
-#  works, please read the F<HACKERS> file that came with this distribution.
-#
-################################################################################
-
-use FindBin ();
-
-BEGIN {
-  if ($ENV{'PERL_CORE'}) {
-    chdir 't' if -d 't';
-    unshift @INC, '../lib' 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;
-    }
-  }
-
-  use lib "$FindBin::Bin";
-  use lib "$FindBin::Bin/../parts/inc";
-
-  die qq[Cannot find "$FindBin::Bin/../parts/inc"] unless -d "$FindBin::Bin/../parts/inc";
-
-  sub load {
-    require 'testutil.pl';
-    require 'inctools';
-  }
-
-  if (12) {
-    load();
-    plan(tests => 12);
-  }
-}
-
-use Devel::PPPort;
-use strict;
-BEGIN { $^W = 1; }
-
-package Devel::PPPort;
-use vars '@ISA';
-require DynaLoader;
-@ISA = qw(DynaLoader);
-bootstrap Devel::PPPort;
-
-package main;
-
-my $x = 'foo';
-
-is(Devel::PPPort::newSVpvs(), "newSVpvs");
-is(Devel::PPPort::newSVpvs_flags(), "newSVpvs_flags");
-is(Devel::PPPort::newSVpvs_share(), 3);
-
-Devel::PPPort::sv_catpvs($x);
-is($x, "foosv_catpvs");
-
-Devel::PPPort::sv_setpvs($x);
-is($x, "sv_setpvs");
-
-my %h = ('hv_fetchs' => 42);
-Devel::PPPort::hv_stores(\%h, 4711);
-is(scalar keys %h, 2);
-ok(exists $h{'hv_stores'});
-is($h{'hv_stores'}, 4711);
-is(Devel::PPPort::hv_fetchs(\%h), 42);
-is(Devel::PPPort::gv_fetchpvs(), \*Devel::PPPort::VERSION);
-is(Devel::PPPort::gv_stashpvs(), \%Devel::PPPort::);
-
-is(Devel::PPPort::get_cvs(), 3);
-
diff --git a/dist/Devel-PPPort/t/shared_pv.t b/dist/Devel-PPPort/t/shared_pv.t
deleted file mode 100644 (file)
index c705b18..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-################################################################################
-#
-#            !!!!!   Do NOT edit this file directly!   !!!!!
-#
-#            Edit mktests.PL and/or parts/inc/shared_pv instead.
-#
-#  This file was automatically generated from the definition files in the
-#  parts/inc/ subdirectory by mktests.PL. To learn more about how all this
-#  works, please read the F<HACKERS> file that came with this distribution.
-#
-################################################################################
-
-use FindBin ();
-
-BEGIN {
-  if ($ENV{'PERL_CORE'}) {
-    chdir 't' if -d 't';
-    unshift @INC, '../lib' 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;
-    }
-  }
-
-  use lib "$FindBin::Bin";
-  use lib "$FindBin::Bin/../parts/inc";
-
-  die qq[Cannot find "$FindBin::Bin/../parts/inc"] unless -d "$FindBin::Bin/../parts/inc";
-
-  sub load {
-    require 'testutil.pl';
-    require 'inctools';
-  }
-
-  if (1) {
-    load();
-    plan(tests => 1);
-  }
-}
-
-use Devel::PPPort;
-use strict;
-BEGIN { $^W = 1; }
-
-package Devel::PPPort;
-use vars '@ISA';
-require DynaLoader;
-@ISA = qw(DynaLoader);
-bootstrap Devel::PPPort;
-
-package main;
-
-is(&Devel::PPPort::newSVpvn_share(), 6);
-
diff --git a/dist/Devel-PPPort/t/snprintf.t b/dist/Devel-PPPort/t/snprintf.t
deleted file mode 100644 (file)
index 5e6bb33..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-################################################################################
-#
-#            !!!!!   Do NOT edit this file directly!   !!!!!
-#
-#            Edit mktests.PL and/or parts/inc/snprintf instead.
-#
-#  This file was automatically generated from the definition files in the
-#  parts/inc/ subdirectory by mktests.PL. To learn more about how all this
-#  works, please read the F<HACKERS> file that came with this distribution.
-#
-################################################################################
-
-use FindBin ();
-
-BEGIN {
-  if ($ENV{'PERL_CORE'}) {
-    chdir 't' if -d 't';
-    unshift @INC, '../lib' 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;
-    }
-  }
-
-  use lib "$FindBin::Bin";
-  use lib "$FindBin::Bin/../parts/inc";
-
-  die qq[Cannot find "$FindBin::Bin/../parts/inc"] unless -d "$FindBin::Bin/../parts/inc";
-
-  sub load {
-    require 'testutil.pl';
-    require 'inctools';
-  }
-
-  if (2) {
-    load();
-    plan(tests => 2);
-  }
-}
-
-use Devel::PPPort;
-use strict;
-BEGIN { $^W = 1; }
-
-package Devel::PPPort;
-use vars '@ISA';
-require DynaLoader;
-@ISA = qw(DynaLoader);
-bootstrap Devel::PPPort;
-
-package main;
-
-my($l, $s) = Devel::PPPort::my_snprintf();
-is($l, 8);
-is($s, "foobar42");
-
diff --git a/dist/Devel-PPPort/t/sprintf.t b/dist/Devel-PPPort/t/sprintf.t
deleted file mode 100644 (file)
index 51a42b0..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-################################################################################
-#
-#            !!!!!   Do NOT edit this file directly!   !!!!!
-#
-#            Edit mktests.PL and/or parts/inc/sprintf instead.
-#
-#  This file was automatically generated from the definition files in the
-#  parts/inc/ subdirectory by mktests.PL. To learn more about how all this
-#  works, please read the F<HACKERS> file that came with this distribution.
-#
-################################################################################
-
-use FindBin ();
-
-BEGIN {
-  if ($ENV{'PERL_CORE'}) {
-    chdir 't' if -d 't';
-    unshift @INC, '../lib' 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;
-    }
-  }
-
-  use lib "$FindBin::Bin";
-  use lib "$FindBin::Bin/../parts/inc";
-
-  die qq[Cannot find "$FindBin::Bin/../parts/inc"] unless -d "$FindBin::Bin/../parts/inc";
-
-  sub load {
-    require 'testutil.pl';
-    require 'inctools';
-  }
-
-  if (2) {
-    load();
-    plan(tests => 2);
-  }
-}
-
-use Devel::PPPort;
-use strict;
-BEGIN { $^W = 1; }
-
-package Devel::PPPort;
-use vars '@ISA';
-require DynaLoader;
-@ISA = qw(DynaLoader);
-bootstrap Devel::PPPort;
-
-package main;
-
-my($l, $s) = Devel::PPPort::my_sprintf();
-is($l, 8);
-is($s, "foobar42");
-
diff --git a/dist/Devel-PPPort/t/strlfuncs.t b/dist/Devel-PPPort/t/strlfuncs.t
deleted file mode 100644 (file)
index dee840c..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-################################################################################
-#
-#            !!!!!   Do NOT edit this file directly!   !!!!!
-#
-#            Edit mktests.PL and/or parts/inc/strlfuncs instead.
-#
-#  This file was automatically generated from the definition files in the
-#  parts/inc/ subdirectory by mktests.PL. To learn more about how all this
-#  works, please read the F<HACKERS> file that came with this distribution.
-#
-################################################################################
-
-use FindBin ();
-
-BEGIN {
-  if ($ENV{'PERL_CORE'}) {
-    chdir 't' if -d 't';
-    unshift @INC, '../lib' 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;
-    }
-  }
-
-  use lib "$FindBin::Bin";
-  use lib "$FindBin::Bin/../parts/inc";
-
-  die qq[Cannot find "$FindBin::Bin/../parts/inc"] unless -d "$FindBin::Bin/../parts/inc";
-
-  sub load {
-    require 'testutil.pl';
-    require 'inctools';
-  }
-
-  if (13) {
-    load();
-    plan(tests => 13);
-  }
-}
-
-use Devel::PPPort;
-use strict;
-BEGIN { $^W = 1; }
-
-package Devel::PPPort;
-use vars '@ISA';
-require DynaLoader;
-@ISA = qw(DynaLoader);
-bootstrap Devel::PPPort;
-
-package main;
-
-my @e = (3, 'foo',
-         6, 'foobar',
-         9, 'foobarb',
-         10, '1234567',
-         4, '1234',
-         16, '1234567',
-        );
-my @r = Devel::PPPort::my_strlfunc();
-
-ok(@e == @r);
-
-for (0 .. $#e) {
-  is($r[$_], $e[$_]);
-}
-
diff --git a/dist/Devel-PPPort/t/sv_xpvf.t b/dist/Devel-PPPort/t/sv_xpvf.t
deleted file mode 100644 (file)
index 3ab10c9..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-################################################################################
-#
-#            !!!!!   Do NOT edit this file directly!   !!!!!
-#
-#            Edit mktests.PL and/or parts/inc/sv_xpvf instead.
-#
-#  This file was automatically generated from the definition files in the
-#  parts/inc/ subdirectory by mktests.PL. To learn more about how all this
-#  works, please read the F<HACKERS> file that came with this distribution.
-#
-################################################################################
-
-use FindBin ();
-
-BEGIN {
-  if ($ENV{'PERL_CORE'}) {
-    chdir 't' if -d 't';
-    unshift @INC, '../lib' 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;
-    }
-  }
-
-  use lib "$FindBin::Bin";
-  use lib "$FindBin::Bin/../parts/inc";
-
-  die qq[Cannot find "$FindBin::Bin/../parts/inc"] unless -d "$FindBin::Bin/../parts/inc";
-
-  sub load {
-    require 'testutil.pl';
-    require 'inctools';
-  }
-
-  if (9) {
-    load();
-    plan(tests => 9);
-  }
-}
-
-use Devel::PPPort;
-use strict;
-BEGIN { $^W = 1; }
-
-package Devel::PPPort;
-use vars '@ISA';
-require DynaLoader;
-@ISA = qw(DynaLoader);
-bootstrap Devel::PPPort;
-
-package main;
-
-use Tie::Hash;
-my %h;
-tie %h, 'Tie::StdHash';
-$h{foo} = 'foo-';
-$h{bar} = '';
-
-is(&Devel::PPPort::vnewSVpvf(), "$]" >= 5.004 ? 'Perl-42' : '%s-%d');
-is(&Devel::PPPort::sv_vcatpvf('1-2-3-'), "$]" >= 5.004 ? '1-2-3-Perl-42' : '1-2-3-%s-%d');
-is(&Devel::PPPort::sv_vsetpvf('1-2-3-'), "$]" >= 5.004 ? 'Perl-42' : '%s-%d');
-
-&Devel::PPPort::sv_catpvf_mg($h{foo});
-is($h{foo}, "$]" >= 5.004 ? 'foo-Perl-42' : 'foo-');
-
-&Devel::PPPort::Perl_sv_catpvf_mg($h{foo});
-is($h{foo}, "$]" >= 5.004 ? 'foo-Perl-42-Perl-43' : 'foo-');
-
-&Devel::PPPort::sv_catpvf_mg_nocontext($h{foo});
-is($h{foo}, "$]" >= 5.004 ? 'foo-Perl-42-Perl-43-Perl-44' : 'foo-');
-
-&Devel::PPPort::sv_setpvf_mg($h{bar});
-is($h{bar}, "$]" >= 5.004 ? 'mhx-42' : '');
-
-&Devel::PPPort::Perl_sv_setpvf_mg($h{bar});
-is($h{bar}, "$]" >= 5.004 ? 'foo-43' : '');
-
-&Devel::PPPort::sv_setpvf_mg_nocontext($h{bar});
-is($h{bar}, "$]" >= 5.004 ? 'bar-44' : '');
-
diff --git a/dist/Devel-PPPort/t/threads.t b/dist/Devel-PPPort/t/threads.t
deleted file mode 100644 (file)
index 0e16cc7..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-################################################################################
-#
-#            !!!!!   Do NOT edit this file directly!   !!!!!
-#
-#            Edit mktests.PL and/or parts/inc/threads instead.
-#
-#  This file was automatically generated from the definition files in the
-#  parts/inc/ subdirectory by mktests.PL. To learn more about how all this
-#  works, please read the F<HACKERS> file that came with this distribution.
-#
-################################################################################
-
-use FindBin ();
-
-BEGIN {
-  if ($ENV{'PERL_CORE'}) {
-    chdir 't' if -d 't';
-    unshift @INC, '../lib' 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;
-    }
-  }
-
-  use lib "$FindBin::Bin";
-  use lib "$FindBin::Bin/../parts/inc";
-
-  die qq[Cannot find "$FindBin::Bin/../parts/inc"] unless -d "$FindBin::Bin/../parts/inc";
-
-  sub load {
-    require 'testutil.pl';
-    require 'inctools';
-  }
-
-  if (2) {
-    load();
-    plan(tests => 2);
-  }
-}
-
-use Devel::PPPort;
-use strict;
-BEGIN { $^W = 1; }
-
-package Devel::PPPort;
-use vars '@ISA';
-require DynaLoader;
-@ISA = qw(DynaLoader);
-bootstrap Devel::PPPort;
-
-package main;
-
-is(&Devel::PPPort::no_THX_arg("42"), 43);
-eval { &Devel::PPPort::with_THX_arg("yes\n"); };
-ok($@ =~ /^yes/);
-
diff --git a/dist/Devel-PPPort/t/utf8.t b/dist/Devel-PPPort/t/utf8.t
deleted file mode 100644 (file)
index 12a593e..0000000
+++ /dev/null
@@ -1,300 +0,0 @@
-################################################################################
-#
-#            !!!!!   Do NOT edit this file directly!   !!!!!
-#
-#            Edit mktests.PL and/or parts/inc/utf8 instead.
-#
-#  This file was automatically generated from the definition files in the
-#  parts/inc/ subdirectory by mktests.PL. To learn more about how all this
-#  works, please read the F<HACKERS> file that came with this distribution.
-#
-################################################################################
-
-use FindBin ();
-
-BEGIN {
-  if ($ENV{'PERL_CORE'}) {
-    chdir 't' if -d 't';
-    unshift @INC, '../lib' 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;
-    }
-  }
-
-  use lib "$FindBin::Bin";
-  use lib "$FindBin::Bin/../parts/inc";
-
-  die qq[Cannot find "$FindBin::Bin/../parts/inc"] unless -d "$FindBin::Bin/../parts/inc";
-
-  sub load {
-    require 'testutil.pl';
-    require 'inctools';
-  }
-
-  if (98) {
-    load();
-    plan(tests => 98);
-  }
-}
-
-use Devel::PPPort;
-use strict;
-BEGIN { $^W = 1; }
-
-package Devel::PPPort;
-use vars '@ISA';
-require DynaLoader;
-@ISA = qw(DynaLoader);
-bootstrap Devel::PPPort;
-
-package main;
-
-BEGIN {
-    # skip tests on 5.6.0 and earlier, plus 5.7.0
-    if (ivers($]) <= ivers(5.6) || ivers($]) == ivers(5.7) ) {
-        skip 'skip: broken utf8 support', 98;
-        exit;
-    }
-    require warnings;
-}
-
-is(Devel::PPPort::UTF8f(42), '[42]');
-is(Devel::PPPort::UTF8f('abc'), '[abc]');
-is(Devel::PPPort::UTF8f("\x{263a}"), "[\x{263a}]");
-
-my $str = "\x{A8}";
-if (ivers($]) >= ivers(5.8)) { eval q{utf8::upgrade($str)} }
-is(Devel::PPPort::UTF8f($str), "[\x{A8}]");
-if (ivers($]) >= ivers(5.8)) { eval q{utf8::downgrade($str)} }
-is(Devel::PPPort::UTF8f($str), "[\x{A8}]");
-
-is(&Devel::PPPort::UTF8_SAFE_SKIP("A", 0), 1);
-is(&Devel::PPPort::UTF8_SAFE_SKIP("A", -1), 0);
-
-is(&Devel::PPPort::isUTF8_CHAR("A", -1), 0);
-is(&Devel::PPPort::isUTF8_CHAR("A",  0), 1);
-is(&Devel::PPPort::isUTF8_CHAR("\x{100}",  -1), 0);
-is(&Devel::PPPort::isUTF8_CHAR("\x{100}",  0), 2);
-
-is(&Devel::PPPort::UVCHR_IS_INVARIANT(ord("A")), 1);
-ok(! &Devel::PPPort::UVCHR_IS_INVARIANT(0xb6));
-ok(! &Devel::PPPort::UVCHR_IS_INVARIANT(0x100));
-
-is(&Devel::PPPort::UVCHR_SKIP(ord("A")), 1);
-is(&Devel::PPPort::UVCHR_SKIP(0xb6),     2, "This is a test");
-is(&Devel::PPPort::UVCHR_SKIP(0x3FF),    2);
-is(&Devel::PPPort::UVCHR_SKIP(0x3FFF),   3);
-is(&Devel::PPPort::UVCHR_SKIP(0x3FFFF),  4);
-is(&Devel::PPPort::UVCHR_SKIP(0x3FFFFF), 5);
-is(&Devel::PPPort::UVCHR_SKIP(0x3FFFFFF), ord("A") == 65 ? 5 : 6);
-is(&Devel::PPPort::UVCHR_SKIP(0x4000000), ord("A") == 65 ? 6 : 7);
-if (ord("A") != 65) {
-    skip("Test not valid on EBCDIC", 1)
-}
-else {
-    is(&Devel::PPPort::UVCHR_SKIP(0xFFFFFFFF), 7);
-}
-
-if (ivers($]) < ivers(5.8)) {
-    skip("Perl version too early", 3);
-}
-else {
-    is(&Devel::PPPort::foldEQ_utf8("A\x{100}", 3, 1, "a\x{101}", 3, 1), 1);
-    is(&Devel::PPPort::foldEQ_utf8("A\x{100}", 3, 1, "a\x{102}", 3, 1), 0);
-    is(&Devel::PPPort::foldEQ_utf8("A\x{100}", 3, 1, "b\x{101}", 3, 1), 0);
-}
-
-my $ret = &Devel::PPPort::utf8_to_uvchr("A");
-is($ret->[0], ord("A"));
-is($ret->[1], 1);
-
-$ret = &Devel::PPPort::utf8_to_uvchr("\0");
-is($ret->[0], 0);
-is($ret->[1], 1);
-
-$ret = &Devel::PPPort::utf8_to_uvchr_buf("A", 0);
-is($ret->[0], ord("A"));
-is($ret->[1], 1);
-
-$ret = &Devel::PPPort::utf8_to_uvchr_buf("\0", 0);
-is($ret->[0], 0);
-is($ret->[1], 1);
-
-my @buf_tests = (
-    {
-        input      => "A",
-        adjustment => -1,
-        warning    => eval "qr/empty/",
-        no_warnings_returned_length => 0,
-    },
-    {
-        input      => "\xc4\xc5",
-        adjustment => 0,
-        warning    => eval "qr/non-continuation/",
-        no_warnings_returned_length => 1,
-    },
-    {
-        input      => "\xc4\x80",
-        adjustment => -1,
-        warning    => eval "qr/short|1 byte, need 2/",
-        no_warnings_returned_length => 1,
-    },
-    {
-        input      => "\xc0\x81",
-        adjustment => 0,
-        warning    => eval "qr/overlong|2 bytes, need 1/",
-        no_warnings_returned_length => 2,
-    },
-    {
-        input      => "\xe0\x80\x81",
-        adjustment => 0,
-        warning    => eval "qr/overlong|3 bytes, need 1/",
-        no_warnings_returned_length => 3,
-    },
-    {
-        input      => "\xf0\x80\x80\x81",
-        adjustment => 0,
-        warning    => eval "qr/overlong|4 bytes, need 1/",
-        no_warnings_returned_length => 4,
-    },
-    {                 # Old algorithm failed to detect this
-        input      => "\xff\x80\x90\x90\x90\xbf\xbf\xbf\xbf\xbf\xbf\xbf\xbf",
-        adjustment => 0,
-        warning    => eval "qr/overflow/",
-        no_warnings_returned_length => 13,
-    },
-);
-
-if (ord("A") != 65) {   # tests not valid for EBCDIC
-    skip("Perl version too early", 2 + 4 + (scalar @buf_tests * 5));
-}
-else {
-    $ret = &Devel::PPPort::utf8_to_uvchr_buf("\xc4\x80", 0);
-    is($ret->[0], 0x100);
-    is($ret->[1], 2);
-
-    my @warnings;
-    local $SIG{__WARN__} = sub { push @warnings, @_; };
-
-    {
-        use warnings 'utf8';
-        $ret = &Devel::PPPort::utf8_to_uvchr("\xe0\0\x80");
-        is($ret->[0], 0);
-        is($ret->[1], -1);
-
-        no warnings 'utf8';
-        $ret = &Devel::PPPort::utf8_to_uvchr("\xe0\0\x80");
-        is($ret->[0], 0xFFFD);
-        is($ret->[1], 1);
-    }
-
-
-    # An empty input is an assertion failure on debugging builds.  It is
-    # deliberately the first test.
-    require Config; import Config;
-    use vars '%Config';
-
-    # VMS doesn't put DEBUGGING in ccflags, and Windows doesn't have
-    # $Config{config_args}.  When 5.14 or later can be assumed, use
-    # Config::non_bincompat_options(), but for now we're stuck with this.
-    if (   $Config{ccflags} =~ /-DDEBUGGING/
-        || $^O eq 'VMS' && $Config{config_args} =~ /\bDDEBUGGING\b/)
-    {
-        shift @buf_tests;
-        skip("Test not valid on DEBUGGING builds", 5);
-    }
-
-    my $test;
-    for $test (@buf_tests) {
-        my $input = $test->{'input'};
-        my $adjustment = $test->{'adjustment'};
-        my $display = 'utf8_to_uvchr_buf("';
-        my $i;
-        for ($i = 0; $i < length($input) + $adjustment; $i++) {
-            $display .= sprintf "\\x%02x", ord substr($input, $i, 1);
-        }
-
-        $display .= '")';
-        my $warning = $test->{'warning'};
-
-        undef @warnings;
-        use warnings 'utf8';
-        $ret = &Devel::PPPort::utf8_to_uvchr_buf($input, $adjustment);
-        is($ret->[0], 0,  "returned value $display; warnings enabled");
-        is($ret->[1], -1, "returned length $display; warnings enabled");
-        my $all_warnings = join "; ", @warnings;
-        my $contains = grep { $_ =~ $warning } $all_warnings;
-        is($contains, 1, $display
-                    . "; Got: '$all_warnings', which should contain '$warning'");
-
-        undef @warnings;
-        no warnings 'utf8';
-        $ret = &Devel::PPPort::utf8_to_uvchr_buf($input, $adjustment);
-        is($ret->[0], 0xFFFD,  "returned value $display; warnings disabled");
-        is($ret->[1], $test->{'no_warnings_returned_length'},
-                      "returned length $display; warnings disabled");
-    }
-}
-
-if (ivers($]) ge ivers(5.008)) {
-    BEGIN { if (ivers($]) ge ivers(5.008)) { require utf8; "utf8"->import() } }
-
-    is(Devel::PPPort::sv_len_utf8("aščť"), 4);
-    is(Devel::PPPort::sv_len_utf8_nomg("aščť"), 4);
-
-    my $str = "áíé";
-    utf8::downgrade($str);
-    is(Devel::PPPort::sv_len_utf8($str), 3);
-    utf8::downgrade($str);
-    is(Devel::PPPort::sv_len_utf8_nomg($str), 3);
-    utf8::upgrade($str);
-    is(Devel::PPPort::sv_len_utf8($str), 3);
-    utf8::upgrade($str);
-    is(Devel::PPPort::sv_len_utf8_nomg($str), 3);
-
-    tie my $scalar, 'TieScalarCounter', "é";
-
-    is(tied($scalar)->{fetch}, 0);
-    is(tied($scalar)->{store}, 0);
-    is(Devel::PPPort::sv_len_utf8($scalar), 2);
-    is(tied($scalar)->{fetch}, 1);
-    is(tied($scalar)->{store}, 0);
-    is(Devel::PPPort::sv_len_utf8($scalar), 3);
-    is(tied($scalar)->{fetch}, 2);
-    is(tied($scalar)->{store}, 0);
-    is(Devel::PPPort::sv_len_utf8($scalar), 4);
-    is(tied($scalar)->{fetch}, 3);
-    is(tied($scalar)->{store}, 0);
-    is(Devel::PPPort::sv_len_utf8_nomg($scalar), 4);
-    is(tied($scalar)->{fetch}, 3);
-    is(tied($scalar)->{store}, 0);
-    is(Devel::PPPort::sv_len_utf8_nomg($scalar), 4);
-    is(tied($scalar)->{fetch}, 3);
-    is(tied($scalar)->{store}, 0);
-} else {
-    skip 'skip: no utf8::downgrade/utf8::upgrade support', 23;
-}
-
-package TieScalarCounter;
-
-sub TIESCALAR {
-    my ($class, $value) = @_;
-    return bless { fetch => 0, store => 0, value => $value }, $class;
-}
-
-sub FETCH {
-    BEGIN { if (main::ivers($]) ge main::ivers(5.008)) { require utf8; "utf8"->import() } }
-    my ($self) = @_;
-    $self->{fetch}++;
-    return $self->{value} .= "é";
-}
-
-sub STORE {
-    my ($self, $value) = @_;
-    $self->{store}++;
-    $self->{value} = $value;
-}
-
diff --git a/dist/Devel-PPPort/t/uv.t b/dist/Devel-PPPort/t/uv.t
deleted file mode 100644 (file)
index e915cfd..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-################################################################################
-#
-#            !!!!!   Do NOT edit this file directly!   !!!!!
-#
-#            Edit mktests.PL and/or parts/inc/uv instead.
-#
-#  This file was automatically generated from the definition files in the
-#  parts/inc/ subdirectory by mktests.PL. To learn more about how all this
-#  works, please read the F<HACKERS> file that came with this distribution.
-#
-################################################################################
-
-use FindBin ();
-
-BEGIN {
-  if ($ENV{'PERL_CORE'}) {
-    chdir 't' if -d 't';
-    unshift @INC, '../lib' 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;
-    }
-  }
-
-  use lib "$FindBin::Bin";
-  use lib "$FindBin::Bin/../parts/inc";
-
-  die qq[Cannot find "$FindBin::Bin/../parts/inc"] unless -d "$FindBin::Bin/../parts/inc";
-
-  sub load {
-    require 'testutil.pl';
-    require 'inctools';
-  }
-
-  if (11) {
-    load();
-    plan(tests => 11);
-  }
-}
-
-use Devel::PPPort;
-use strict;
-BEGIN { $^W = 1; }
-
-package Devel::PPPort;
-use vars '@ISA';
-require DynaLoader;
-@ISA = qw(DynaLoader);
-bootstrap Devel::PPPort;
-
-package main;
-
-BEGIN { require warnings if "$]" > '5.006' }
-
-is(&Devel::PPPort::sv_setuv(42), 42);
-is(&Devel::PPPort::newSVuv(123), 123);
-is(&Devel::PPPort::sv_2uv("4711"), 4711);
-is(&Devel::PPPort::sv_2uv("1735928559"), 1735928559);
-is(&Devel::PPPort::SvUVx("1735928559"), 1735928559);
-is(&Devel::PPPort::SvUVx(1735928559), 1735928559);
-is(&Devel::PPPort::SvUVx(0xdeadbeef), 0xdeadbeef);
-is(&Devel::PPPort::XSRETURN_UV(), 42);
-is(&Devel::PPPort::PUSHu(), 42);
-is(&Devel::PPPort::XPUSHu(), 43);
-is(&Devel::PPPort::my_strnlen("abc\0def", 7), 3);
-
diff --git a/dist/Devel-PPPort/t/variables.t b/dist/Devel-PPPort/t/variables.t
deleted file mode 100644 (file)
index fb836f1..0000000
+++ /dev/null
@@ -1,111 +0,0 @@
-################################################################################
-#
-#            !!!!!   Do NOT edit this file directly!   !!!!!
-#
-#            Edit mktests.PL and/or parts/inc/variables instead.
-#
-#  This file was automatically generated from the definition files in the
-#  parts/inc/ subdirectory by mktests.PL. To learn more about how all this
-#  works, please read the F<HACKERS> file that came with this distribution.
-#
-################################################################################
-
-use FindBin ();
-
-BEGIN {
-  if ($ENV{'PERL_CORE'}) {
-    chdir 't' if -d 't';
-    unshift @INC, '../lib' 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;
-    }
-  }
-
-  use lib "$FindBin::Bin";
-  use lib "$FindBin::Bin/../parts/inc";
-
-  die qq[Cannot find "$FindBin::Bin/../parts/inc"] unless -d "$FindBin::Bin/../parts/inc";
-
-  sub load {
-    require 'testutil.pl';
-    require 'inctools';
-  }
-
-  if (52) {
-    load();
-    plan(tests => 52);
-  }
-}
-
-use Devel::PPPort;
-use strict;
-BEGIN { $^W = 1; }
-
-package Devel::PPPort;
-use vars '@ISA';
-require DynaLoader;
-@ISA = qw(DynaLoader);
-bootstrap Devel::PPPort;
-
-package main;
-
-ok(Devel::PPPort::compare_PL_signals());
-
-ok(!defined(&Devel::PPPort::PL_sv_undef()));
-ok(&Devel::PPPort::PL_sv_yes());
-ok(!&Devel::PPPort::PL_sv_no());
-is(&Devel::PPPort::PL_na("abcd"), 4);
-is(&Devel::PPPort::PL_Sv(), "mhx");
-ok(defined &Devel::PPPort::PL_tokenbuf());
-ok("$]" >= 5.009005 || &Devel::PPPort::PL_parser());
-ok(&Devel::PPPort::PL_hexdigit() =~ /^[0-9a-zA-Z]+$/);
-ok(defined &Devel::PPPort::PL_hints());
-is(&Devel::PPPort::PL_ppaddr("mhx"), "MHX");
-
-for (&Devel::PPPort::other_variables()) {
-  ok($_ != 0);
-}
-
-{
-  my @w;
-  my $fail = 0;
-  {
-    local $SIG{'__WARN__'} = sub { push @w, @_ };
-    ok(&Devel::PPPort::dummy_parser_warning());
-  }
-  if ("$]" >= 5.009005) {
-    ok(@w >= 0);
-    for (@w) {
-      print "# $_";
-      unless (/^warning: dummy PL_bufptr used in.*module3.*:\d+/i) {
-        warn $_;
-        $fail++;
-      }
-    }
-  }
-  else {
-    ok(@w == 0);
-  }
-  is($fail, 0);
-}
-
-ok(&Devel::PPPort::no_dummy_parser_vars(1) >= ("$]" < 5.009005 ? 1 : 0));
-
-eval { &Devel::PPPort::no_dummy_parser_vars(0) };
-
-if ("$]" < 5.009005) {
-  is($@, '');
-}
-else {
-  if ($@) {
-    print "# $@";
-    ok($@ =~ /^panic: PL_parser == NULL in.*module2.*:\d+/i);
-  }
-  else {
-    ok(1);
-  }
-}
-
diff --git a/dist/Devel-PPPort/t/warn.t b/dist/Devel-PPPort/t/warn.t
deleted file mode 100644 (file)
index 734332a..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-################################################################################
-#
-#            !!!!!   Do NOT edit this file directly!   !!!!!
-#
-#            Edit mktests.PL and/or parts/inc/warn instead.
-#
-#  This file was automatically generated from the definition files in the
-#  parts/inc/ subdirectory by mktests.PL. To learn more about how all this
-#  works, please read the F<HACKERS> file that came with this distribution.
-#
-################################################################################
-
-use FindBin ();
-
-BEGIN {
-  if ($ENV{'PERL_CORE'}) {
-    chdir 't' if -d 't';
-    unshift @INC, '../lib' 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;
-    }
-  }
-
-  use lib "$FindBin::Bin";
-  use lib "$FindBin::Bin/../parts/inc";
-
-  die qq[Cannot find "$FindBin::Bin/../parts/inc"] unless -d "$FindBin::Bin/../parts/inc";
-
-  sub load {
-    require 'testutil.pl';
-    require 'inctools';
-  }
-
-  if (5) {
-    load();
-    plan(tests => 5);
-  }
-}
-
-use Devel::PPPort;
-use strict;
-BEGIN { $^W = 1; }
-
-package Devel::PPPort;
-use vars '@ISA';
-require DynaLoader;
-@ISA = qw(DynaLoader);
-bootstrap Devel::PPPort;
-
-package main;
-
-$^W = 0;
-
-my $warning;
-
-$SIG{'__WARN__'} = sub { $warning = $_[0] };
-
-$warning = '';
-Devel::PPPort::warner();
-ok("$]" >= 5.004 ? $warning =~ /^warner bar:42/ : $warning eq '');
-
-$warning = '';
-Devel::PPPort::Perl_warner();
-ok("$]" >= 5.004 ? $warning =~ /^Perl_warner bar:42/ : $warning eq '');
-
-$warning = '';
-Devel::PPPort::Perl_warner_nocontext();
-ok("$]" >= 5.004 ? $warning =~ /^Perl_warner_nocontext bar:42/ : $warning eq '');
-
-$warning = '';
-Devel::PPPort::ckWARN();
-is($warning, '');
-
-$^W = 1;
-
-$warning = '';
-Devel::PPPort::ckWARN();
-ok("$]" >= 5.004 ? $warning =~ /^ckWARN bar:42/ : $warning eq '');
-
index ba87751..6162199 100644 (file)
@@ -14,8 +14,6 @@ BEGIN {
        $^W = 0;
 }
 
-our ( $foo, @bar, %baz );
-
 use lib ("./t/lib");
 use TieOut;
 use Test::More tests => 88;
@@ -28,7 +26,10 @@ ok( $d = Dumpvalue->new(), 'create a new Dumpvalue object' );
 $d->set( globPrint => 1, dumpReused => 1 );
 is( $d->{globPrint}, 1, 'set an option correctly' );
 is( $d->get('globPrint'), 1, 'get an option correctly' );
-is( $d->get('globPrint', 'dumpReused'), qw( 1 1 ), 'get multiple options' );
+is_deeply( [ $d->get('globPrint', 'dumpReused') ],
+    [ 1, 1 ],
+    'get multiple options'
+);
 
 # check to see if unctrl works
 is( ref( Dumpvalue::unctrl(*FOO) ), 'GLOB', 'unctrl should not modify GLOB' );
@@ -179,13 +180,13 @@ undef $DB::signal;
 $foo = 1;
 $d->dumpglob( '', 2, 'foo', local *foo = \$foo );
 is( $out->read, "  \$foo = 1\n", 'dumped glob for $foo correctly' );
-@bar = (1, 2);
+our @bar = (1, 2);
 
 # the key name is a little different here
 $d->dumpglob( '', 0, 'boo', *bar );
 is( $out->read, "\@boo = (\n   0..1  1 2\n)\n", 'dumped glob for @bar fine' );
 
-%baz = ( one => 1, two => 2 );
+our %baz = ( one => 1, two => 2 );
 $d->dumpglob( '', 0, 'baz', *baz );
 is( $out->read, "\%baz = (\n   'one' => 1, 'two' => 2\n)\n",
        'dumped glob for %baz fine' );
@@ -223,8 +224,11 @@ like( $out->read, qr/&TieOut::read in/, 'dumpsub found sub fine' );
 
 # test findsubs
 is( $d->findsubs(), undef, 'findsubs returns nothing without %DB::sub' );
-$DB::sub{'TieOut::read'} = 'TieOut';
-is( $d->findsubs( \&TieOut::read ), 'TieOut::read', 'findsubs reported sub' );
+{
+    no warnings 'once';
+    $DB::sub{'TieOut::read'} = 'TieOut';
+    is( $d->findsubs( \&TieOut::read ), 'TieOut::read', 'findsubs reported sub' );
+}
 
 # now that it's capable of finding the package...
 $d->dumpsub( '', 'TieOut::read' );
@@ -256,26 +260,26 @@ is( $d->hashUsage({ one => [ 1, 2, 3 ]}, 'c'), 6, 'complex hash okay' );
 is( $out->read, "\%c = 1 item (keys: 3; values: 3; total: 6 bytes)\n",
        'hashUsage complex message okay' );
 
-$foo = 'one';
-@foo = ('two');
-%foo = ( three => '123' );
-is( $d->globUsage(\*foo, 'foo'), 14, 'globUsage reports length correctly' );
-like( $out->read, qr/\@foo =.+\%foo =/s, 'globValue message okay' );
+our $folly = 'one';
+our @folly = ('two');
+our %folly = ( three => '123' );
+is( $d->globUsage(\*folly, 'folly'), 14, 'globUsage reports length correctly' );
+like( $out->read, qr/\@folly =.+\%folly =/s, 'globValue message okay' );
 
 # and now, the real show
 $d->dumpValue(undef);
 is( $out->read, "undef\n", 'dumpValue caught undef value okay' );
-$d->dumpValue($foo);
+$d->dumpValue($folly);
 is( $out->read, "'one'\n", 'dumpValue worked' );
-$d->dumpValue(@foo);
+$d->dumpValue(@folly);
 is( $out->read, "'two'\n", 'dumpValue worked on array' );
-$d->dumpValue(\$foo);
+$d->dumpValue(\$folly);
 is( $out->read, "-> 'one'\n", 'dumpValue worked on scalar ref' );
 
 # dumpValues (the rest of these should be caught by unwrap)
 $d->dumpValues(undef);
 is( $out->read, "undef\n", 'dumpValues caught undef value fine' );
-$d->dumpValues(\@foo);
+$d->dumpValues(\@folly);
 is( $out->read, "0  0..0  'two'\n", 'dumpValues worked on array ref' );
 $d->dumpValues('one', 'two');
 is( $out->read, "0..1  'one' 'two'\n", 'dumpValues worked on multiple values' );
index 19d7645..aee00c5 100644 (file)
@@ -9,7 +9,7 @@ require 5.006;
 our $Debug = 0;
 our $ExportLevel = 0;
 our $Verbose ||= 0;
-our $VERSION = '5.74';
+our $VERSION = '5.75';
 our (%Cache);
 
 sub as_heavy {
index 004815e..d7daf6e 100644 (file)
@@ -4,7 +4,7 @@ use strict;
 no strict 'refs';
 
 # On one line so MakeMaker will see it.
-require Exporter;  our $VERSION = $Exporter::VERSION;
+our $VERSION = '5.75';
 
 =head1 NAME
 
index 0518080..4215d7e 100644 (file)
@@ -18,7 +18,7 @@ sub ok ($;$) {
 
 BEGIN {
     $test = 1;
-    print "1..33\n";
+    print "1..34\n";
     require Exporter;
     ok( 1, 'Exporter compiled' );
 }
@@ -253,3 +253,8 @@ sub TIESCALAR{bless[]}
  }
 }
 ::ok(1, 'import with tied $_');
+
+# this should be loaded, but make sure
+require Exporter::Heavy;
+::ok(Exporter->VERSION eq Exporter::Heavy->VERSION,
+    'Exporter and Exporter::Heavy have matching versions');
index fba7f4d..18ed08f 100644 (file)
@@ -11,7 +11,7 @@ use Symbol;
 
 our $VERSION;
 BEGIN {
-  $VERSION = '3.40';
+  $VERSION = '3.41';
   require ExtUtils::ParseXS::Constants; ExtUtils::ParseXS::Constants->VERSION($VERSION);
   require ExtUtils::ParseXS::CountLines; ExtUtils::ParseXS::CountLines->VERSION($VERSION);
   require ExtUtils::ParseXS::Utilities; ExtUtils::ParseXS::Utilities->VERSION($VERSION);
@@ -911,7 +911,7 @@ EOF
   #-Wall: if there is no $self->{Full_func_name} there are no xsubs in this .xs
   #so 'file' is unused
   print Q(<<"EOF") if $self->{Full_func_name};
-##if (PERL_REVISION == 5 && PERL_VERSION < 9)
+##if PERL_VERSION_LT(5, 9, 0)
 #    char* file = __FILE__;
 ##else
 #    const char* file = __FILE__;
@@ -954,7 +954,7 @@ EOF
 
   print Q(<<"EOF") if ($self->{Overload});
 #    /* register the overloading (type 'A') magic */
-##if (PERL_REVISION == 5 && PERL_VERSION < 9)
+##if PERL_VERSION_LT(5, 9, 0)
 #    PL_amagic_generation++;
 ##endif
 #    /* The magic for overload gets a GV* via gv_fetchmeth as */
index 2c392e3..a972b63 100644 (file)
@@ -3,7 +3,7 @@ use strict;
 use warnings;
 use Symbol;
 
-our $VERSION = '3.40';
+our $VERSION = '3.41';
 
 =head1 NAME
 
index a9258f9..bb6450e 100644 (file)
@@ -1,7 +1,7 @@
 package ExtUtils::ParseXS::CountLines;
 use strict;
 
-our $VERSION = '3.40';
+our $VERSION = '3.41';
 
 our $SECTION_END_MARKER;
 
index 840bac7..97aea54 100644 (file)
@@ -2,7 +2,7 @@ package ExtUtils::ParseXS::Eval;
 use strict;
 use warnings;
 
-our $VERSION = '3.40';
+our $VERSION = '3.41';
 
 =head1 NAME
 
index 58f3856..37b89de 100644 (file)
@@ -5,7 +5,7 @@ use Exporter;
 use File::Spec;
 use ExtUtils::ParseXS::Constants ();
 
-our $VERSION = '3.40';
+our $VERSION = '3.41';
 
 our (@ISA, @EXPORT_OK);
 @ISA = qw(Exporter);
index 04ba981..031de24 100644 (file)
@@ -15,13 +15,14 @@ push @INC, '.';
 
 use Carp; $SIG{__WARN__} = \&Carp::cluck;
 
-# Some trickery for Android. If we leave @INC as-is, it'll have '.' in it.
-# Later on, the 'require XSTest' end up in DynaLoader looking for
-# ./PL_XSTest.so, but unless our current directory happens to be in
-# LD_LIBRARY_PATH, Android's linker will never find the file, and the test
-# will fail.  Instead, if we have all absolute paths, it'll just work.
-@INC = map { File::Spec->rel2abs($_) } @INC
-    if $^O =~ /android/;
+# The linker on some platforms doesn't like loading libraries using relative
+# paths. Android won't find relative paths, and system perl on macOS will
+# refuse to load relative paths. The path that DynaLoader uses to load the
+# .so or .bundle file is based on the @INC path that the library is loaded
+# from. The XSTest module we're using for testing is in the current directory,
+# so we need an absolute path in @INC rather than '.'. Just convert all of the
+# paths to absolute for simplicity.
+@INC = map { File::Spec->rel2abs($_) } @INC;
 
 #########################
 
index e982290..3ea89c2 100644 (file)
@@ -22,8 +22,7 @@ push @INC, '.';
 use Carp; $SIG{__WARN__} = \&Carp::cluck;
 
 # See the comments about this in 001-basics.t
-@INC = map { File::Spec->rel2abs($_) } @INC
-    if $^O =~ /android/;
+@INC = map { File::Spec->rel2abs($_) } @INC;
 
 #########################
 
index 00dfe0b..52b9903 100644 (file)
@@ -23,8 +23,7 @@ push @INC, '.';
 use Carp; $SIG{__WARN__} = \&Carp::cluck;
 
 # See the comments about this in 001-basics.t
-@INC = map { File::Spec->rel2abs($_) } @INC
-    if $^O =~ /android/;
+@INC = map { File::Spec->rel2abs($_) } @INC;
 
 #########################
 
index 5ed2b46..52f74df 100644 (file)
@@ -1,3 +1,16 @@
+IO 1.44
+  * IO::Handle::error() now checks both the input and output stream
+    for error.  This is an issue for sockets and character devices.  GH #6799
+  * IO::Handle::clearerr() now clears the error on both input and
+    output streams.
+
+IO 1.43
+  * only cache the protocol for sockets when one is supplied,
+    otherwise protocol could return an incorrect protocol.  This means
+    that on platforms that don't support SO_PROTOCOL (or don't support
+    it for some socket types) protocol() can now return undef.
+
+
 IO 1.42 - Jan 20 2020 - Todd Rinaldo
   * Point IO support to perl/perl5 not dual-life/IO
 
index eacd4c2..5b637df 100644 (file)
@@ -7,7 +7,7 @@ use Carp;
 use strict;
 use warnings;
 
-our $VERSION = "1.43";
+our $VERSION = "1.44";
 XSLoader::load 'IO', $VERSION;
 
 sub import {
index 68b7352..f0b161c 100644 (file)
@@ -194,7 +194,7 @@ fgetpos(handle)
     CODE:
        if (handle) {
 #ifdef PerlIO
-#if PERL_VERSION < 8
+#if PERL_VERSION_LT(5,8,0)
            Fpos_t pos;
            ST(0) = sv_newmortal();
            if (PerlIO_getpos(handle, &pos) != 0) {
@@ -214,7 +214,7 @@ fgetpos(handle)
            if (fgetpos(handle, &pos)) {
                ST(0) = &PL_sv_undef;
            } else {
-#  if PERL_VERSION >= 11
+#  if PERL_VERSION_GE(5,11,0)
                ST(0) = newSVpvn_flags((char*)&pos, sizeof(Fpos_t), SVs_TEMP);
 #  else
                ST(0) = sv_2mortal(newSVpvn((char*)&pos, sizeof(Fpos_t)));
@@ -234,7 +234,7 @@ fsetpos(handle, pos)
     CODE:
        if (handle) {
 #ifdef PerlIO
-#if PERL_VERSION < 8
+#if PERL_VERSION_LT(5,8,0)
            char *p;
            STRLEN len;
            if (SvOK(pos) && (p = SvPV(pos,len)) && len == sizeof(Fpos_t)) {
@@ -389,13 +389,17 @@ ungetc(handle, c)
 
 int
 ferror(handle)
-       InputStream     handle
+       SV *    handle
+    PREINIT:
+        IO *io = sv_2io(handle);
+        InputStream in = IoIFP(io);
+        OutputStream out = IoOFP(io);
     CODE:
-       if (handle)
+       if (in)
 #ifdef PerlIO
-           RETVAL = PerlIO_error(handle);
+           RETVAL = PerlIO_error(in) || (out && in != out && PerlIO_error(out));
 #else
-           RETVAL = ferror(handle);
+           RETVAL = ferror(in) || (out && in != out && ferror(out));
 #endif
        else {
            RETVAL = -1;
@@ -406,13 +410,21 @@ ferror(handle)
 
 int
 clearerr(handle)
-       InputStream     handle
+       SV *    handle
+    PREINIT:
+        IO *io = sv_2io(handle);
+        InputStream in = IoIFP(io);
+        OutputStream out = IoOFP(io);
     CODE:
        if (handle) {
 #ifdef PerlIO
-           PerlIO_clearerr(handle);
+           PerlIO_clearerr(in);
+            if (in != out)
+                PerlIO_clearerr(out);
 #else
-           clearerr(handle);
+           clearerr(in);
+            if (in != out)
+                clearerr(out);
 #endif
            RETVAL = 0;
        }
index 327bb27..665c0c4 100644 (file)
@@ -11,7 +11,7 @@ my $define = "";
 
 unless ( $PERL_CORE or exists $Config{'i_poll'} ) {
     my @inc = split( /\s+/, join( " ", $Config{'usrinc'}, $Config{'incpth'}, $Config{'locincpth'} ) );
-    foreach $path (@inc) {
+    foreach my $path (@inc) {
         if ( -f $path . "/poll.h" ) {
             $define .= "-DI_POLL ";
             last;
index f10ac37..ad8966d 100644 (file)
@@ -23,7 +23,7 @@ require IO::Socket::UNIX if ($^O ne 'epoc' && $^O ne 'symbian');
 
 our @ISA = qw(IO::Handle);
 
-our $VERSION = "1.43";
+our $VERSION = "1.44";
 
 our @EXPORT_OK = qw(sockatmark);
 
@@ -120,7 +120,7 @@ sub connect {
        if (defined $timeout && ($!{EINPROGRESS} || $!{EWOULDBLOCK})) {
            require IO::Select;
 
-           my $sel = new IO::Select $sock;
+           my $sel = IO::Select->new( $sock );
 
            undef $!;
            my($r,$w,$e) = IO::Select::select(undef,$sel,$sel,$timeout);
@@ -243,7 +243,7 @@ sub accept {
     if(defined $timeout) {
        require IO::Select;
 
-       my $sel = new IO::Select $sock;
+       my $sel = IO::Select->new( $sock );
 
        unless ($sel->can_read($timeout)) {
            $@ = 'accept: timeout';
index 04b36ea..14d0b27 100644 (file)
@@ -11,7 +11,7 @@ use IO::Socket;
 use Carp;
 
 our @ISA = qw(IO::Socket);
-our $VERSION = "1.41";
+our $VERSION = "1.42";
 
 IO::Socket::UNIX->register_domain( AF_UNIX );
 
@@ -30,6 +30,10 @@ sub configure {
     $sock->socket(AF_UNIX, $type, 0) or
        return undef;
 
+    if(exists $arg->{Blocking}) {
+        $sock->blocking($arg->{Blocking}) or
+           return undef;
+    }
     if(exists $arg->{Local}) {
        my $addr = sockaddr_un($arg->{Local});
        $sock->bind($addr) or
index e0dde1e..718d01d 100644 (file)
@@ -50,7 +50,7 @@ my $p = $listener->protocol();
     # This is a TODO instead of a skip so if these ever implement SO_PROTOCOL
     # we'll be notified about the passing TODO so the test can be updated.
     local $TODO = "$^O doesn't support SO_PROTOCOL on AF_UNIX"
-        if $^O =~ /^(netbsd|darwin|cygwin|hpux|solaris|dragonfly|os390)$/;
+        if $^O =~ /^(netbsd|darwin|cygwin|hpux|solaris|dragonfly|os390|gnu)$/;
     ok(defined($p), 'protocol defined');
 }
 my $d = $listener->sockdomain();
@@ -105,7 +105,7 @@ SKIP: {
     {
         # see comment above
         local $TODO = "$^O doesn't support SO_PROTOCOL on AF_UNIX"
-            if $^O =~ /^(netbsd|darwin|cygwin|hpux|solaris|dragonfly|os390)$/;
+            if $^O =~ /^(netbsd|darwin|cygwin|hpux|solaris|dragonfly|os390|gnu)$/;
         ok(defined($p), 'protocol defined');
     }
     $d = $listener->sockdomain();
index f6f83c1..5e92172 100644 (file)
@@ -14,6 +14,7 @@ use IO::Handle;
 print "1..6\n";
 my $i = 1;
 foreach (qw(SEEK_SET SEEK_CUR SEEK_END     _IOFBF    _IOLBF    _IONBF)) {
+    no strict 'refs';
     my $d1 = defined(&{"IO::Handle::" . $_}) ? 1 : 0;
     my $v1 = $d1 ? &{"IO::Handle::" . $_}() : undef;
     my $v2 = IO::Handle::constant($_);
index 6c30143..53122f3 100644 (file)
@@ -1,5 +1,11 @@
 #!./perl
 
+use strict;
+use File::Temp qw( tempdir );
+use Cwd;
+
+no strict 'subs';
+
 BEGIN {
     require($ENV{PERL_CORE} ? "../../t/test.pl" : "./t/test.pl");
     plan(16);
@@ -8,10 +14,6 @@ BEGIN {
     IO::Dir->import(DIR_UNLINK);
 }
 
-use strict;
-use File::Temp qw( tempdir );
-use Cwd;
-
 my $cwd = cwd();
 
 {
index 6afc96a..dc5cadf 100644 (file)
@@ -21,11 +21,11 @@ print "1..6\n";
 
 print "ok 1\n";
 
-$dupout = IO::Handle->new->fdopen( \*STDOUT ,"w");
-$duperr = IO::Handle->new->fdopen( \*STDERR ,"w");
+my $dupout = IO::Handle->new->fdopen( \*STDOUT ,"w");
+my $duperr = IO::Handle->new->fdopen( \*STDERR ,"w");
 
-$stdout = \*STDOUT; bless $stdout, "IO::File"; # "IO::Handle";
-$stderr = \*STDERR; bless $stderr, "IO::Handle";
+my $stdout = \*STDOUT; bless $stdout, "IO::File"; # "IO::Handle";
+my $stderr = \*STDERR; bless $stderr, "IO::Handle";
 
 $stdout->open( "Io.dup","w") || die "Can't open stdout";
 $stderr->fdopen($stdout,"w");
@@ -34,9 +34,9 @@ print $stdout "ok 2\n";
 print $stderr "ok 3\n";
 
 # Since some systems don't have echo, we use Perl.
-$echo = qq{$^X -le "print q(ok %d)"};
+my $echo = qq{$^X -le "print q(ok %d)"};
 
-$cmd = sprintf $echo, 4;
+my $cmd = sprintf $echo, 4;
 print `$cmd`;
 
 $cmd = sprintf "$echo 1>&2", 5;
index 734854b..d315c37 100644 (file)
@@ -7,7 +7,7 @@ my $File;
 
 BEGIN {
     $File = __FILE__;
-    require strict; import strict;
+    require strict; strict->import();
 }
 
 use Test::More tests => 12;
index f2a8e11..a63d873 100644 (file)
@@ -29,7 +29,7 @@ watchdog(15);
 
 package Multi;
 require IO::Socket::INET;
-@ISA=qw(IO::Socket::INET);
+our @ISA=qw(IO::Socket::INET);
 
 use Socket qw(inet_aton inet_ntoa unpack_sockaddr_in);
 
@@ -74,7 +74,7 @@ package main;
 
 use IO::Socket;
 
-$listen = IO::Socket::INET->new(LocalAddr => 'localhost',
+my $listen = IO::Socket::INET->new(LocalAddr => 'localhost',
                                Listen => 2,
                                Proto => 'tcp',
                                Timeout => 5,
@@ -82,11 +82,11 @@ $listen = IO::Socket::INET->new(LocalAddr => 'localhost',
 
 print "ok 1\n";
 
-$port = $listen->sockport;
+my $port = $listen->sockport;
 
-if($pid = fork()) {
+if (my $pid = fork()) {
 
-    $sock = $listen->accept() or die "$!";
+    my $sock = $listen->accept() or die "$!";
     print "ok 5\n";
 
     print $sock->getline();
@@ -100,7 +100,7 @@ if($pid = fork()) {
 
 } elsif(defined $pid) {
 
-    $sock = Multi->new(PeerPort => $port,
+    my $sock = Multi->new(PeerPort => $port,
                       Proto => 'tcp',
                       PeerAddr => 'localhost',
                       MultiHomed => 1,
index e4f5f19..e196014 100644 (file)
@@ -37,18 +37,20 @@ my $is_win32=$^O eq 'MSWin32' ? "MSWin32 has broken pipes" : "";
 $| = 1;
 print "1..10\n";
 
+my $pipe;
+
 if ($is_win32) {
     print "ok $_ # skipped: $is_win32\n" for 1..4;
 } else {
-    $pipe = new IO::Pipe->reader($perl, '-e', 'print qq(not ok 1\n)');
+    $pipe = IO::Pipe->new()->reader($perl, '-e', 'print qq(not ok 1\n)');
     while (<$pipe>) {
       s/^not //;
       print;
     }
     $pipe->close or print "# \$!=$!\nnot ";
     print "ok 2\n";
-    $cmd = 'BEGIN{$SIG{ALRM} = sub {print qq(not ok 4\n); exit}; alarm 10} s/not //';
-    $pipe = new IO::Pipe->writer($perl, '-pe', $cmd);
+    my $cmd = 'BEGIN{$SIG{ALRM} = sub {print qq(not ok 4\n); exit}; alarm 10} s/not //';
+    $pipe = IO::Pipe->new()->writer($perl, '-pe', $cmd);
     print $pipe "not ok 3\n" ;
     $pipe->close or print "# \$!=$!\nnot ";
     print "ok 4\n";
@@ -61,9 +63,9 @@ if ($^O eq 'os2' and
     exit 0;
 }
 
-$pipe = new IO::Pipe;
+$pipe = IO::Pipe->new();
 
-$pid = fork();
+my $pid = fork();
 
 if($pid)
  {
@@ -76,7 +78,7 @@ if($pid)
 elsif(defined $pid)
  {
   $pipe->reader;
-  $stdin = bless \*STDIN, "IO::Handle";
+  my $stdin = bless \*STDIN, "IO::Handle";
   $stdin->fdopen($pipe,"r");
   exec $^X, '-pne', 'tr/YX/ko/';
  }
@@ -88,8 +90,8 @@ else
 if ($is_win32) {
     print "ok $_ # skipped: $is_win32\n" for 7..8;
 } else {
-    $pipe = new IO::Pipe;
-    $pid = fork();
+    $pipe = IO::Pipe->new();
+    my $pid = fork();
 
     if($pid)
  {
@@ -105,7 +107,7 @@ if ($is_win32) {
  {
   $pipe->writer;
 
-  $stdout = bless \*STDOUT, "IO::Handle";
+  my $stdout = bless \*STDOUT, "IO::Handle";
   $stdout->fdopen($pipe,"w");
   print STDOUT "not ok 7\n";
   my @echo = 'echo';
@@ -122,7 +124,7 @@ if ($is_win32) {
 if ($is_win32) {
     print "ok $_ # skipped: $is_win32\n" for 9;
 } else {
-    $pipe = new IO::Pipe;
+    $pipe = IO::Pipe->new;
     $pipe->writer;
 
     $SIG{'PIPE'} = 'broken_pipe';
index ec32eb6..0a6b228 100644 (file)
@@ -8,7 +8,7 @@ print "1..12\n";
 use IO::Handle;
 use IO::Poll qw(/POLL/);
 
-my $poll = new IO::Poll;
+my $poll = IO::Poll->new();
 
 my $stdout = \*STDOUT;
 my $dupout = IO::Handle->new_from_fd(fileno($stdout),"w");
index 34af03a..80cd72a 100644 (file)
@@ -7,14 +7,14 @@ print "1..27\n";
 
 use IO::Select 1.09;
 
-my $sel = new IO::Select(\*STDIN);
+my $sel = IO::Select->new(\*STDIN);
 $sel->add(4, 5) == 2 or print "not ";
 print "ok 1\n";
 
 $sel->add([\*STDOUT, 'foo']) == 1 or print "not ";
 print "ok 2\n";
 
-@handles = $sel->handles;
+my @handles = $sel->handles;
 print "not " unless $sel->count == 4 && @handles == 4;
 print "ok 3\n";
 #print $sel->as_string, "\n";
@@ -34,7 +34,7 @@ $sel->remove(1, 4);
 print "not " unless $sel->count == 0 && !defined($sel->bits);
 print "ok 7\n";
 
-$sel = new IO::Select;
+$sel = IO::Select->new();
 print "not " unless $sel->count == 0 && !defined($sel->bits);
 print "ok 8\n";
 
@@ -50,7 +50,7 @@ if ( grep $^O eq $_, qw(MSWin32 NetWare dos VMS riscos beos) ) {
     goto POST_SOCKET;
 }
 
-@a = $sel->can_read();  # should return immediately
+my @a = $sel->can_read();  # should return immediately
 print "not " unless @a == 0;
 print "ok 10\n";
 
@@ -70,7 +70,7 @@ $sel->add(\*STDOUT);  # update
 print "not " unless @a == 3;
 print "ok 13\n";
 
-($r, $w, $e) = @a;
+my ($r, $w, $e) = @a;
 
 print "not " unless @$r == 0 && @$w == 1 && @$e == 0;
 print "ok 14\n";
index c7b9557..3bc5118 100644 (file)
@@ -25,7 +25,7 @@ BEGIN {
     }
 }
 
-my $has_perlio = find PerlIO::Layer 'perlio';
+my $has_perlio = PerlIO::Layer->find( 'perlio' );
 
 $| = 1;
 print "1..26\n";
@@ -37,7 +37,7 @@ eval {
 
 use IO::Socket;
 
-$listen = IO::Socket::INET->new(LocalAddr => 'localhost',
+my $listen = IO::Socket::INET->new(LocalAddr => 'localhost',
                                Listen => 2,
                                Proto => 'tcp',
                                # some systems seem to need as much as 10,
@@ -54,11 +54,11 @@ if ($^O eq 'os2' and
     exit 0;
 }
 
-$port = $listen->sockport;
+my $port = $listen->sockport;
 
-if($pid = fork()) {
+if(my $pid = fork()) {
 
-    $sock = $listen->accept() or die "accept failed: $!";
+    my $sock = $listen->accept() or die "accept failed: $!";
     print "ok 2\n";
 
     $sock->autoflush(1);
@@ -74,7 +74,7 @@ if($pid = fork()) {
 
 } elsif(defined $pid) {
 
-    $sock = IO::Socket::INET->new(PeerPort => $port,
+    my $sock = IO::Socket::INET->new(PeerPort => $port,
                                  Proto => 'tcp',
                                  PeerAddr => 'localhost'
                                 )
@@ -102,10 +102,10 @@ if($pid = fork()) {
 $listen = IO::Socket::INET->new(LocalAddr => 'localhost', Listen => '', Timeout => 15) or die "$!";
 $port = $listen->sockport;
 
-if($pid = fork()) {
+if(my $pid = fork()) {
   SERVER_LOOP:
     while (1) {
-       last SERVER_LOOP unless $sock = $listen->accept;
+       last SERVER_LOOP unless my $sock = $listen->accept;
        while (<$sock>) {
            last SERVER_LOOP if /^quit/;
            last if /^done/;
@@ -116,7 +116,7 @@ if($pid = fork()) {
     $listen->close;
 } elsif (defined $pid) {
     # child, try various ways to connect
-    $sock = IO::Socket::INET->new("localhost:$port")
+    my $sock = IO::Socket::INET->new("localhost:$port")
          || IO::Socket::INET->new("127.0.0.1:$port");
     if ($sock) {
        print "not " unless $sock->connected;
@@ -171,7 +171,7 @@ if($pid = fork()) {
 }
 
 # Then test UDP sockets
-$server = IO::Socket->new(Domain => AF_INET,
+my $server = IO::Socket->new(Domain => AF_INET,
                           Proto  => 'udp',
                           LocalAddr => 'localhost')
        || IO::Socket->new(Domain => AF_INET,
@@ -179,13 +179,13 @@ $server = IO::Socket->new(Domain => AF_INET,
                           LocalAddr => '127.0.0.1');
 $port = $server->sockport;
 
-if ($pid = fork()) {
+if (my $pid = fork()) {
     my $buf;
     $server->recv($buf, 100);
     print $buf;
 } elsif (defined($pid)) {
     #child
-    $sock = IO::Socket::INET->new(Proto => 'udp',
+    my $sock = IO::Socket::INET->new(Proto => 'udp',
                                   PeerAddr => "localhost:$port")
          || IO::Socket::INET->new(Proto => 'udp',
                                   PeerAddr => "127.0.0.1:$port");
@@ -214,7 +214,7 @@ if ( $^O eq 'qnx' ) {
 ### Set up some data to be transferred between the server and
 ### the client. We'll use own source code ...
 #
-local @data;
+my @data;
 if( !open( SRC, '<', $0)) {
     print "not ok 15 - $!\n";
 } else {
@@ -226,7 +226,7 @@ if( !open( SRC, '<', $0)) {
 ### TEST 16
 ### Start the server
 #
-my $listen = IO::Socket::INET->new(LocalAddr => 'localhost', Listen => 2, Proto => 'tcp', Timeout => 15) ||
+$listen = IO::Socket::INET->new(LocalAddr => 'localhost', Listen => 2, Proto => 'tcp', Timeout => 15) ||
     print "not ";
 print "ok 16\n";
 die if( !defined( $listen));
@@ -241,7 +241,7 @@ if( $server_pid) {
     ### TEST 18
     ### Get data from the server using a single stream
     #
-    $sock = IO::Socket::INET->new("localhost:$serverport")
+    my $sock = IO::Socket::INET->new("localhost:$serverport")
          || IO::Socket::INET->new("127.0.0.1:$serverport");
 
     if ($sock) {
@@ -343,7 +343,7 @@ if( $server_pid) {
     ### Child
     #
     SERVER_LOOP: while (1) {
-       last SERVER_LOOP unless $sock = $listen->accept;
+       last SERVER_LOOP unless my $sock = $listen->accept;
        # Do not print ok/not ok for this binmode() since there's
        # a race condition with our client, just die if we fail.
        if ($has_perlio) { binmode($sock, ":utf8") or die }
@@ -383,7 +383,7 @@ if( $server_pid) {
 
 # test Blocking option in constructor
 
-$sock = IO::Socket::INET->new(Blocking => 0)
+my $sock = IO::Socket::INET->new(Blocking => 0)
     or print "not ";
 print "ok 25\n";
 
index 7c3ffe6..8a599c3 100644 (file)
@@ -24,11 +24,11 @@ plan(tests => 5);
 END { unlink "./__taint__$$" }
 
 use IO::File;
-my $x = new IO::File "> ./__taint__$$" || die("Cannot open ./__taint__$$\n");
+my $x = IO::File->new( "> ./__taint__$$" ) || die("Cannot open ./__taint__$$\n");
 print $x "$$\n";
 $x->close;
 
-$x = new IO::File "< ./__taint__$$" || die("Cannot open ./__taint__$$\n");
+$x = IO::File->new( "< ./__taint__$$" ) || die("Cannot open ./__taint__$$\n");
 chop(my $unsafe = <$x>);
 eval { kill 0 * $unsafe };
 SKIP: {
@@ -39,7 +39,7 @@ $x->close;
 
 # We could have just done a seek on $x, but technically we haven't tested
 # seek yet...
-$x = new IO::File "< ./__taint__$$" || die("Cannot open ./__taint__$$\n");
+$x = IO::File->new( "< ./__taint__$$" ) || die("Cannot open ./__taint__$$\n");
 $x->untaint;
 ok(!$?); # Calling the method worked
 chop($unsafe = <$x>);
index 3f8ad30..62a0a77 100644 (file)
@@ -1,5 +1,6 @@
 #!./perl
 
+my $tell_file;
 BEGIN {
     $tell_file = "Makefile.PL";
 }
@@ -17,20 +18,20 @@ print "1..13\n";
 
 use IO::File;
 
-$tst = IO::File->new("$tell_file","r") || die("Can't open $tell_file");
+my $tst = IO::File->new("$tell_file","r") || die("Can't open $tell_file");
 binmode $tst; # its a nop unless it matters. Was only if ($^O eq 'MSWin32' or $^O eq 'dos');
 if ($tst->eof) { print "not ok 1\n"; } else { print "ok 1\n"; }
 
-$firstline = <$tst>;
-$secondpos = tell;
+my $firstline = <$tst>;
+my $secondpos = tell;
 
-$x = 0;
+my $x = 0;
 while (<$tst>) {
     if (eof) {$x++;}
 }
 if ($x == 1) { print "ok 2\n"; } else { print "not ok 2\n"; }
 
-$lastpos = tell;
+my $lastpos = tell;
 
 unless (eof) { print "not ok 3\n"; } else { print "ok 3\n"; }
 
index 93cddfb..cb442db 100644 (file)
@@ -43,7 +43,7 @@ BEGIN {
     }
 }
 
-$PATH = "sock-$$";
+my $PATH = "sock-$$";
 
 if ($^O eq 'os2') {    # Can't create sockets with relative path...
   require Cwd;
@@ -64,7 +64,7 @@ unlink($PATH) or $^O eq 'os2' or die "Can't unlink $PATH: $!";
 $| = 1;
 print "1..5\n";
 
-$listen = IO::Socket::UNIX->new(Local => $PATH, Listen => 0);
+my $listen = IO::Socket::UNIX->new(Local => $PATH, Listen => 0);
 
 # Sometimes UNIX filesystems are mounted for security reasons
 # with "nodev" option which spells out "no" for creating UNIX
@@ -73,7 +73,7 @@ $listen = IO::Socket::UNIX->new(Local => $PATH, Listen => 0);
 unless (defined $listen) {
     eval { require File::Temp };
     unless ($@) {
-       import File::Temp 'mktemp';
+       File::Temp->import( 'mktemp' );
        for my $TMPDIR ($ENV{TMPDIR}, "/tmp") {
            if (defined $TMPDIR && -d $TMPDIR && -w $TMPDIR) {
                $PATH = mktemp("$TMPDIR/sXXXXXXXX");
@@ -86,9 +86,9 @@ unless (defined $listen) {
 }
 print "ok 1\n";
 
-if($pid = fork()) {
+if (my $pid = fork()) {
 
-    $sock = $listen->accept();
+    my $sock = $listen->accept();
 
     if (defined $sock) {
        print "ok 2\n";
@@ -111,7 +111,7 @@ if($pid = fork()) {
     }
 } elsif(defined $pid) {
 
-    $sock = IO::Socket::UNIX->new(Peer => $PATH) or die "$!";
+    my $sock = IO::Socket::UNIX->new(Peer => $PATH) or die "$!";
 
     print $sock "ok 3\n";
 
index 1125155..14abc4a 100644 (file)
@@ -1,7 +1,7 @@
 #!./perl
 
 BEGIN {
-    unless (find PerlIO::Layer 'perlio') {
+    unless ( PerlIO::Layer->find('perlio') ) {
        print "1..0 # Skip: not perlio\n";
        exit 0;
     }
index b637070..76095a5 100644 (file)
@@ -1,7 +1,7 @@
 #!./perl
 
 BEGIN {
-    unless (find PerlIO::Layer 'perlio') {
+    unless ( PerlIO::Layer->find('perlio') ) {
        print "1..0 # Skip: not perlio\n";
        exit 0;
     }
index f7d7258..4657088 100644 (file)
@@ -11,11 +11,11 @@ BEGIN {
     }
 }
 
-use Test::More tests => 5;
+use Test::More tests => 10;
 use IO::File;
 use IO::Seekable;
 
-$x = new_tmpfile IO::File;
+my $x = IO::File->new_tmpfile();
 ok($x, "new_tmpfile");
 print $x "ok 2\n";
 $x->seek(0,SEEK_SET);
@@ -24,7 +24,7 @@ is($line, "ok 2\n", "check we can write to the tempfile");
 
 $x->seek(0,SEEK_SET);
 print $x "not ok 3\n";
-$p = $x->getpos;
+my $p = $x->getpos;
 print $x "ok 3\n";
 $x->flush;
 $x->setpos($p);
@@ -50,3 +50,30 @@ SKIP:
     ok($fh->sync, "sync to a read only handle")
        or diag "sync(): ", $!;
 }
+
+
+SKIP: {
+    # gh 6799
+    #
+    # This isn't really a Linux/BSD specific test, but /dev/full is (I
+    # hope) reasonably well defined on these.  Patches welcome if your platform
+    # also supports it (or something like it)
+    skip "no /dev/full or not a /dev/full platform", 3
+      unless $^O =~ /^(linux|netbsd|freebsd)$/ && -c "/dev/full";
+    open my $fh, ">", "/dev/full"
+      or skip "Could not open /dev/full: $!", 3;
+    $fh->print("a" x 1024);
+    ok(!$fh->flush, "should fail to flush");
+    ok($fh->error, "stream should be in error");
+    $fh->clearerr;
+    ok(!$fh->error, "check clearerr removed the error");
+    close $fh; # silently ignore the error
+}
+
+{
+    # [GH #18019] IO::Handle->error misreported an error after successully
+    # opening a regular file for reading. It was a regression in GH #6799 fix.
+    ok(open(my $fh, '<', __FILE__), "a regular file opened for reading");
+    ok(!$fh->error, "no spurious error reported by error()");
+    close $fh;
+}
index 3de34d5..b7e548a 100644 (file)
@@ -1,3 +1,6 @@
+5.20200820
+  - Updated for v5.33.1
+
 5.20200717
   - Updated for v5.33.0
 
index 3d2706a..f17d9ff 100644 (file)
@@ -224,7 +224,15 @@ if ($Opts{diff}) {
     my ($old_ver, $new_ver) = @ARGV;
 
     my $old = numify_version($old_ver);
+    if ( !Module::CoreList->find_version($old) ) {
+        print "\nModule::CoreList has no info on perl $old_ver\n\n";
+        exit 1;
+    }
     my $new = numify_version($new_ver);
+    if ( !Module::CoreList->find_version($new) ) {
+        print "\nModule::CoreList has no info on perl $new_ver\n\n";
+        exit 1;
+    }
 
     my %diff = Module::CoreList::changes_between($old, $new);
 
index 2540251..649cbf5 100644 (file)
@@ -4,7 +4,7 @@ use strict;
 our ( %released, %version, %families, %upstream, %bug_tracker, %deprecated, %delta );
 
 use version;
-our $VERSION = '5.20200717';
+our $VERSION = '5.20200820';
 
 sub PKG_PATTERN () { q#\A[a-zA-Z_][0-9a-zA-Z_]*(?:(::|')[0-9a-zA-Z_]+)*\z# }
 sub _looks_like_invocant ($) { local $@; !!eval { $_[0]->isa(__PACKAGE__) } }
@@ -134,8 +134,8 @@ sub changes_between {
   my $left_ver = shift;
   my $right_ver = shift;
 
-  my $left  = $version{ $left_ver };
-  my $right = $version{ $right_ver };
+  my $left  = $version{ $left_ver } || {};
+  my $right = $version{ $right_ver } || {};
 
   my %uniq = (%$left, %$right);
 
@@ -367,6 +367,7 @@ sub changes_between {
     5.030003 => '2020-06-01',
     5.032000 => '2020-06-20',
     5.033000 => '2020-07-17',
+    5.033001 => '2020-08-20',
   );
 
 for my $version ( sort { $a <=> $b } keys %released ) {
@@ -17528,6 +17529,65 @@ for my $version ( sort { $a <=> $b } keys %released ) {
         removed => {
         }
     },
+    5.033001 => {
+        delta_from => 5.033,
+        changed => {
+            'B'                     => '1.81',
+            'B::Deparse'            => '1.55',
+            'B::Op_private'         => '5.033001',
+            'Config'                => '5.033001',
+            'Data::Dumper'          => '2.175',
+            'Devel::PPPort'         => '3.60',
+            'Devel::Peek'           => '1.29',
+            'DynaLoader'            => '1.48',
+            'Errno'                 => '1.31',
+            'Exporter'              => '5.75',
+            'Exporter::Heavy'       => '5.75',
+            'ExtUtils::Miniperl'    => '1.10',
+            'ExtUtils::PL2Bat'      => '0.002',
+            'ExtUtils::ParseXS'     => '3.41',
+            'ExtUtils::ParseXS::Constants'=> '3.41',
+            'ExtUtils::ParseXS::CountLines'=> '3.41',
+            'ExtUtils::ParseXS::Eval'=> '3.41',
+            'ExtUtils::ParseXS::Utilities'=> '3.41',
+            'Fcntl'                 => '1.14',
+            'File::Path'            => '2.17',
+            'Hash::Util'            => '0.24',
+            'Hash::Util::FieldHash' => '1.21',
+            'IO'                    => '1.44',
+            'IO::Socket'            => '1.44',
+            'IO::Socket::UNIX'      => '1.42',
+            'IPC::Msg'              => '2.08',
+            'IPC::Semaphore'        => '2.08',
+            'IPC::SharedMem'        => '2.08',
+            'IPC::SysV'             => '2.08',
+            'JSON::PP'              => '4.05',
+            'JSON::PP::Boolean'     => '4.05',
+            'Math::Complex'         => '1.5902',
+            'Module::CoreList'      => '5.20200820',
+            'Module::CoreList::Utils'=> '5.20200820',
+            'Net::Ping'             => '2.73_01',
+            'POSIX'                 => '1.95',
+            'PerlIO::mmap'          => '0.017',
+            'Pod::Usage'            => '1.70',
+            'Safe'                  => '2.42',
+            'Socket'                => '2.030',
+            'Storable'              => '3.22',
+            'Time::HiRes'           => '1.9765',
+            'Unicode::Normalize'    => '1.28',
+            'XS::APItest'           => '1.11',
+            'XS::Typemap'           => '0.18',
+            'feature'               => '1.60',
+            'mro'                   => '1.24',
+            'strict'                => '1.12',
+            'threads'               => '2.26',
+            'threads::shared'       => '1.62',
+            'warnings'              => '1.48',
+        },
+        removed => {
+            'Moped::Msg'            => 1,
+        }
+    },
 );
 
 sub is_core
@@ -18656,6 +18716,13 @@ sub is_core
         removed => {
         }
     },
+    5.033001 => {
+        delta_from => 5.033000,
+        changed => {
+        },
+        removed => {
+        }
+    },
 );
 
 %deprecated = _undelta(\%deprecated);
@@ -18787,6 +18854,7 @@ sub is_core
     'ExtUtils::Manifest'    => 'cpan',
     'ExtUtils::Mkbootstrap' => 'cpan',
     'ExtUtils::Mksymlists'  => 'cpan',
+    'ExtUtils::PL2Bat'      => 'cpan',
     'ExtUtils::Packlist'    => 'cpan',
     'ExtUtils::testlib'     => 'cpan',
     'Fatal'                 => 'cpan',
@@ -19209,6 +19277,7 @@ sub is_core
     'ExtUtils::Manifest'    => 'http://github.com/Perl-Toolchain-Gang/ExtUtils-Manifest/issues',
     'ExtUtils::Mkbootstrap' => 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker',
     'ExtUtils::Mksymlists'  => 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker',
+    'ExtUtils::PL2Bat'      => 'http://rt.cpan.org/Public/Dist/Display.html?Name=ExtUtils-PL2Bat',
     'ExtUtils::Packlist'    => 'https://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-Install',
     'ExtUtils::testlib'     => 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker',
     'Fatal'                 => 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=autodie',
index 2976135..61fa17a 100644 (file)
@@ -4,7 +4,7 @@ use strict;
 use warnings;
 use Module::CoreList;
 
-our $VERSION = '5.20200717';
+our $VERSION = '5.20200820';
 our %utilities;
 
 sub utilities {
@@ -1629,6 +1629,13 @@ my %delta = (
         removed => {
         }
     },
+    5.033001 => {
+        delta_from => 5.033000,
+        changed => {
+        },
+        removed => {
+        }
+    },
 );
 
 %utilities = Module::CoreList::_undelta(\%delta);
index 7da4ef2..51d6550 100644 (file)
@@ -1,5 +1,11 @@
 CHANGES
 -------
+2.73  Thu Feb 27 14:32:25 CET 2020 (rurban)
+      Bugfixes
+       - Fix shadowing of hash options in constructor (Patrick Heesom, RT #131919)
+       - Fix icmp v4 length with given bytes/data_size option (Patrick Heesom, RT #131919)
+       - Call _resolv as class method (Marc Reissner, GH #16)
+
 2.72  Thu 28 Mar 2019 09:01:39 AM CET (rurban)
       Features
       - add .cirrus.yml smoker https://cirrus-ci.com/github/rurban/Net-Ping
index 932fde5..779e55d 100644 (file)
@@ -4,7 +4,9 @@ require 5.002;
 require Exporter;
 
 use strict;
-our $hires;
+use vars qw(@ISA @EXPORT @EXPORT_OK $VERSION
+            $def_timeout $def_proto $def_factor $def_family
+            $max_datasize $pingstring $hires $source_verify $syn_forking);
 use Fcntl qw( F_GETFL F_SETFL O_NONBLOCK );
 use Socket qw( SOCK_DGRAM SOCK_STREAM SOCK_RAW AF_INET PF_INET IPPROTO_TCP
               SOL_SOCKET SO_ERROR SO_BROADCAST
@@ -16,22 +18,22 @@ use FileHandle;
 use Carp;
 use Time::HiRes;
 
-our @ISA = qw(Exporter);
-our @EXPORT = qw(pingecho);
-our @EXPORT_OK = qw(wakeonlan);
-our $VERSION = "2.72";
+@ISA = qw(Exporter);
+@EXPORT = qw(pingecho);
+@EXPORT_OK = qw(wakeonlan);
+$VERSION = "2.73_01";
 
 # Globals
 
-our $def_timeout = 5;           # Default timeout to wait for a reply
-our $def_proto = "tcp";         # Default protocol to use for pinging
-our $def_factor = 1.2;          # Default exponential backoff rate.
-our $def_family = AF_INET;      # Default family.
-our $max_datasize = 65535;      # Maximum data bytes. recommended: 1472 (Ethernet MTU: 1500)
+$def_timeout = 5;           # Default timeout to wait for a reply
+$def_proto = "tcp";         # Default protocol to use for pinging
+$def_factor = 1.2;          # Default exponential backoff rate.
+$def_family = AF_INET;      # Default family.
+$max_datasize = 65535;      # Maximum data bytes. recommended: 1472 (Ethernet MTU: 1500)
 # The data we exchange with the server for the stream protocol
-our $pingstring = "pingschwingping!\n";
-our $source_verify = 1;         # Default is to verify source endpoint
-our $syn_forking = 0;
+$pingstring = "pingschwingping!\n";
+$source_verify = 1;         # Default is to verify source endpoint
+$syn_forking = 0;
 
 # Constants
 
@@ -118,6 +120,13 @@ sub new
         # some are still globals
         if ($k eq 'pingstring') { $pingstring = $proto->{$k} }
         if ($k eq 'source_verify') { $source_verify = $proto->{$k} }
+        # and some are local
+        $timeout = $proto->{$k}   if ($k eq 'timeout');
+        $data_size = $proto->{$k} if ($k eq 'data_size');
+        $device = $proto->{$k}    if ($k eq 'device');
+        $tos = $proto->{$k}       if ($k eq 'tos');
+        $ttl = $proto->{$k}       if ($k eq 'ttl');
+        $family = $proto->{$k}    if ($k eq 'family');
         delete $proto->{$k};
       }
     }
@@ -143,7 +152,7 @@ sub new
 
   if ($self->{'host'}) {
     my $host = $self->{'host'};
-    my $ip = _resolv($host) or
+    my $ip = $self->_resolv($host) or
       carp("could not resolve host $host");
     $self->{host} = $ip;
     $self->{family} = $ip->{family};
@@ -151,7 +160,7 @@ sub new
 
   if ($self->{bind}) {
     my $addr = $self->{bind};
-    my $ip = _resolv($addr)
+    my $ip = $self->_resolv($addr)
       or carp("could not resolve local addr $addr");
     $self->{local_addr} = $ip;
   } else {
@@ -245,7 +254,7 @@ sub new
     $self->_setopts();
     if ($self->{'gateway'}) {
       my $g = $self->{gateway};
-      my $ip = _resolv($g)
+      my $ip = $self->_resolv($g)
         or croak("nonexistent gateway $g");
       $self->{family} eq $AF_INET6
         or croak("gateway requires the AF_INET6 family");
@@ -687,6 +696,7 @@ sub ping_icmp
       $done,              # set to 1 when we are done
       $ret,               # Return value
       $recv_msg,          # Received message including IP header
+      $recv_msg_len,      # Length of recevied message, less any additional data
       $from_saddr,        # sockaddr_in of sender
       $from_port,         # Port packet was sent from
       $from_ip,           # Packed IP of sender
@@ -769,6 +779,7 @@ sub ping_icmp
       $from_pid = -1;
       $from_seq = -1;
       $from_saddr = recv($self->{fh}, $recv_msg, 1500, ICMP_FLAGS);
+      $recv_msg_len = length($recv_msg) - length($self->{data});
       ($from_port, $from_ip) = _unpack_sockaddr_in($from_saddr, $ip->{family});
       ($from_type, $from_subcode) = unpack("C2", substr($recv_msg, 20, 2));
       if ($from_type == ICMP_TIMESTAMP_REPLY) {
@@ -777,9 +788,9 @@ sub ping_icmp
       } elsif ($from_type == ICMP_ECHOREPLY) {
         #warn "ICMP_ECHOREPLY: ", $ip->{family}, " ",$recv_msg, ":", length($recv_msg);
         ($from_pid, $from_seq) = unpack("n2", substr($recv_msg, 24, 4))
-          if ($ip->{family} == AF_INET && length $recv_msg == 28);
+          if ($ip->{family} == AF_INET && $recv_msg_len == 28);
         ($from_pid, $from_seq) = unpack("n2", substr($recv_msg, 4, 4))
-          if ($ip->{family} == $AF_INET6 && length $recv_msg == 8);
+          if ($ip->{family} == $AF_INET6 && $recv_msg_len == 8);
       } elsif ($from_type == ICMPv6_ECHOREPLY) {
         #($from_pid, $from_seq) = unpack("n3", substr($recv_msg, 24, 4))
         #  if length $recv_msg >= 28;
@@ -787,7 +798,7 @@ sub ping_icmp
         #  if ($ip->{family} == AF_INET && length $recv_msg == 28);
         #warn "ICMPv6_ECHOREPLY: ", $ip->{family}, " ",$recv_msg, ":", length($recv_msg);
         ($from_pid, $from_seq) = unpack("n2", substr($recv_msg, 4, 4))
-          if ($ip->{family} == $AF_INET6 && length $recv_msg == 8);
+          if ($ip->{family} == $AF_INET6 && $recv_msg_len == 8);
       #} elsif ($from_type == ICMPv6_NI_REPLY) {
       #  ($from_pid, $from_seq) = unpack("n2", substr($recv_msg, 4, 4))
       #    if ($ip->{family} == $AF_INET6 && length $recv_msg == 8);
index 5cf7445..203d86b 100644 (file)
@@ -78,7 +78,7 @@ is($p->ping("127.0.0.1"), 1, 'first port is reachable');
 $p->{port_num} = $port2;
 
 {
-    local $TODO = "Believed not to work on $^O" if $^O =~ /^(?:hpux|os390|freebsd)$/;
+    local $TODO = "Believed not to work on $^O" if $^O =~ /^(?:hpux|MSWin32|os390|freebsd)$/;
     is($p->ping("127.0.0.1"), 1, 'second port is reachable');
 }
 
index 3f4cb21..1ed1ee9 100644 (file)
@@ -3,7 +3,7 @@ package Safe;
 use 5.003_11;
 use Scalar::Util qw(reftype refaddr);
 
-$Safe::VERSION = "2.41";
+$Safe::VERSION = "2.42";
 
 # *** Don't declare any lexicals above this point ***
 #
@@ -67,7 +67,7 @@ require utf8;
 # particular code points don't cause it to load.
 # (Swashes are cached internally by perl in PL_utf8_* variables
 # independent of being inside/outside of Safe. So once loaded they can be)
-do { my $a = pack('U',0x100); my $b = chr 0x101; utf8::upgrade $b; $a =~ /$b/i };
+do { my $a = pack('U',0x100); $a =~ m/\x{1234}/; $a =~ tr/\x{1234}//; };
 # now we can safely include utf8::SWASHNEW in $default_share defined below.
 
 my $default_root  = 0;
index 9a87aa9..c58f7e5 100644 (file)
@@ -22,11 +22,7 @@ $safe->deny_only();
 # Fails with "Undefined subroutine PLPerl::utf8::SWASHNEW called"
 # if SWASHNEW is not shared, else returns true if unicode logic is working.
 # (For early Perls we don't take into account EBCDIC, so will fail there
-my $trigger = q{ my $a = pack('U',0xC4); my $b = chr }
-            . (($] lt 5.007_003) ? "" : 'utf8::unicode_to_native(')
-            . '0xE4'
-            . (($] lt 5.007_003) ? "" : ')')
-            . q{; utf8::upgrade $b; $a =~ /$b/i };
+my $trigger = q{ my $a = pack('U',0xC4); $a =~ tr/\x{1234}//rd };
 
 ok $safe->reval( $trigger ), 'trigger expression should return true';
 is $@, '', 'trigger expression should not die';
index 1a750f1..661b586 100644 (file)
@@ -28,7 +28,7 @@ our @EXPORT_OK = qw(
 our ($canonical, $forgive_me);
 
 BEGIN {
-  our $VERSION = '3.21';
+  our $VERSION = '3.22';
 }
 
 our $recursion_limit;
index 4c4c268..70dddf3 100644 (file)
 #include <perl.h>
 #include <XSUB.h>
 
-#ifndef PATCHLEVEL
-#include <patchlevel.h>                /* Perl's one, needed since 5.6 */
-#endif
-
-#if !defined(PERL_VERSION) || PERL_VERSION < 10 || (PERL_VERSION == 10 && PERL_SUBVERSION < 1)
-#define NEED_PL_parser
-#define NEED_sv_2pv_flags
-#define NEED_load_module
-#define NEED_vload_module
-#define NEED_newCONSTSUB
-#define NEED_newSVpvn_flags
-#define NEED_newRV_noinc
+#ifndef PERL_VERSION_LT
+# if !defined(PERL_VERSION) || !defined(PERL_REVISION) || ( PERL_REVISION == 5 && ( PERL_VERSION < 10 || (PERL_VERSION == 10 && PERL_SUBVERSION < 1) ) )
+#   define NEED_PL_parser
+#   define NEED_sv_2pv_flags
+#   define NEED_load_module
+#   define NEED_vload_module
+#   define NEED_newCONSTSUB
+#   define NEED_newSVpvn_flags
+#   define NEED_newRV_noinc
+# endif
 #include "ppport.h"             /* handle old perls */
 #endif
 
@@ -521,7 +519,7 @@ static MAGIC *THX_sv_magicext(pTHX_
 
 #if defined(MULTIPLICITY) || defined(PERL_OBJECT) || defined(PERL_CAPI)
 
-#if (PATCHLEVEL <= 4) && (SUBVERSION < 68)
+#if PERL_VERSION_LT(5,4,68)
 #define dSTCXT_SV                                               \
     SV *perinterp_sv = get_sv(MY_VERSION, 0)
 #else  /* >= perl5.004_68 */
@@ -1012,22 +1010,22 @@ static const char byteorderstr_56[] = {BYTEORDER_BYTES_56, 0};
 #define STORABLE_BIN_MAJOR     2               /* Binary major "version" */
 #define STORABLE_BIN_MINOR     11              /* Binary minor "version" */
 
-#if (PATCHLEVEL <= 5)
+#if PERL_VERSION_LT(5,6,0)
 #define STORABLE_BIN_WRITE_MINOR       4
 #elif !defined (SvVOK)
 /*
  * Perl 5.6.0-5.8.0 can do weak references, but not vstring magic.
 */
 #define STORABLE_BIN_WRITE_MINOR       8
-#elif PATCHLEVEL >= 19
+#elif PERL_VERSION_GE(5,19,0)
 /* Perl 5.19 takes away the special meaning of PL_sv_undef in arrays. */
 /* With 3.x we added LOBJECT */
 #define STORABLE_BIN_WRITE_MINOR       11
 #else
 #define STORABLE_BIN_WRITE_MINOR       9
-#endif /* (PATCHLEVEL <= 5) */
+#endif /* PERL_VERSION_LT(5,6,0) */
 
-#if (PATCHLEVEL < 8 || (PATCHLEVEL == 8 && SUBVERSION < 1))
+#if PERL_VERSION_LT(5,8,1)
 #define PL_sv_placeholder PL_sv_undef
 #endif
 
@@ -1354,7 +1352,7 @@ static U32 Sntohl(U32 x) {
  * sortsv is not available ( <= 5.6.1 ).
  */
 
-#if (PATCHLEVEL <= 6)
+#if PERL_VERSION_LT(5,7,0)
 
 #if defined(USE_ITHREADS)
 
@@ -1373,12 +1371,12 @@ static U32 Sntohl(U32 x) {
 
 #endif  /* USE_ITHREADS */
 
-#else /* PATCHLEVEL > 6 */
+#else /* PERL >= 5.7.0 */
 
 #define STORE_HASH_SORT \
     sortsv(AvARRAY(av), len, Perl_sv_cmp);
 
-#endif /* PATCHLEVEL <= 6 */
+#endif /* PERL_VERSION_LT(5,7,0) */
 
 static int store(pTHX_ stcxt_t *cxt, SV *sv);
 static SV *retrieve(pTHX_ stcxt_t *cxt, const char *cname);
@@ -1650,7 +1648,7 @@ static void init_store_context(pTHX_
      *
      * It is reported fixed in 5.005, hence the #if.
      */
-#if PERL_VERSION >= 5
+#if PERL_VERSION_GE(5,5,0)
 #define HBUCKETS       4096            /* Buckets for %hseen */
 #ifndef USE_PTR_TABLE
     HvMAX(cxt->hseen) = HBUCKETS - 1;  /* keys %hseen = $HBUCKETS; */
@@ -1667,7 +1665,7 @@ static void init_store_context(pTHX_
 
     cxt->hclass = newHV();             /* Where seen classnames are stored */
 
-#if PERL_VERSION >= 5
+#if PERL_VERSION_GE(5,5,0)
     HvMAX(cxt->hclass) = HBUCKETS - 1; /* keys %hclass = $HBUCKETS; */
 #endif
 
@@ -2244,7 +2242,7 @@ static AV *array_call(pTHX_
     return av;
 }
 
-#if PERL_VERSION < 15
+#if PERL_VERSION_LT(5,15,0)
 static void
 cleanup_recursive_av(pTHX_ AV* av) {
     SSize_t i = AvFILLp(av);
@@ -2252,7 +2250,7 @@ cleanup_recursive_av(pTHX_ AV* av) {
     if (SvMAGICAL(av)) return;
     while (i >= 0) {
         if (arr[i]) {
-#if PERL_VERSION < 14
+#if PERL_VERSION_LT(5,14,0)
             arr[i] = NULL;
 #else
             SvREFCNT_dec(arr[i]);
@@ -2283,7 +2281,7 @@ cleanup_recursive_hv(pTHX_ HV* hv) {
         }
         i--;
     }
-#if PERL_VERSION < 8
+#if PERL_VERSION_LT(5,8,0)
     ((XPVHV*)SvANY(hv))->xhv_array = NULL;
 #else
     HvARRAY(hv) = NULL;
@@ -2394,7 +2392,7 @@ static int store_ref(pTHX_ stcxt_t *cxt, SV *sv)
     TRACEME((">ref recur_depth %" IVdf ", recur_sv (0x%" UVxf ") max %" IVdf, cxt->recur_depth,
              PTR2UV(cxt->recur_sv), cxt->max_recur_depth));
     if (RECURSION_TOO_DEEP()) {
-#if PERL_VERSION < 15
+#if PERL_VERSION_LT(5,15,0)
         cleanup_recursive_data(aTHX_ (SV*)sv);
 #endif
         CROAK((MAX_DEPTH_ERROR));
@@ -2498,7 +2496,7 @@ static int store_scalar(pTHX_ stcxt_t *cxt, SV *sv)
         /* public string - go direct to string read.  */
         goto string_readlen;
     } else if (
-#if (PATCHLEVEL <= 6)
+#if PERL_VERSION_LT(5,7,0)
                /* For 5.6 and earlier NV flag trumps IV flag, so only use integer
                   direct if NV flag is off.  */
                (flags & (SVf_NOK | SVf_IOK)) == SVf_IOK
@@ -2576,7 +2574,7 @@ static int store_scalar(pTHX_ stcxt_t *cxt, SV *sv)
         */
         Zero(&nv, 1, NV_bytes);
 #endif
-#if (PATCHLEVEL <= 6)
+#if PERL_VERSION_LT(5,7,0)
         nv.nv = SvNV(sv);
         /*
          * Watch for number being an integer in disguise.
@@ -2699,7 +2697,7 @@ static int store_array(pTHX_ stcxt_t *cxt, AV *av)
     if (recur_sv != (SV*)av) {
         if (RECURSION_TOO_DEEP()) {
             /* with <= 5.14 it recurses in the cleanup also, needing 2x stack size */
-#if PERL_VERSION < 15
+#if PERL_VERSION_LT(5,15,0)
             cleanup_recursive_data(aTHX_ (SV*)av);
 #endif
             CROAK((MAX_DEPTH_ERROR));
@@ -2717,7 +2715,7 @@ static int store_array(pTHX_ stcxt_t *cxt, AV *av)
             STORE_SV_UNDEF();
             continue;
         }
-#if PATCHLEVEL >= 19
+#if PERL_VERSION_GE(5,19,0)
         /* In 5.19.3 and up, &PL_sv_undef can actually be stored in
          * an array; it no longer represents nonexistent elements.
          * Historically, we have used SX_SV_UNDEF in arrays for
@@ -2748,7 +2746,7 @@ static int store_array(pTHX_ stcxt_t *cxt, AV *av)
 }
 
 
-#if (PATCHLEVEL <= 6)
+#if PERL_VERSION_LT(5,7,0)
 
 /*
  * sortcmp
@@ -2765,7 +2763,7 @@ sortcmp(const void *a, const void *b)
     return sv_cmp(*(SV * const *) a, *(SV * const *) b);
 }
 
-#endif /* PATCHLEVEL <= 6 */
+#endif /* PERL_VERSION_LT(5,7,0) */
 
 /*
  * store_hash
@@ -2861,7 +2859,7 @@ static int store_hash(pTHX_ stcxt_t *cxt, HV *hv)
         ++cxt->recur_depth;
     }
     if (RECURSION_TOO_DEEP_HASH()) {
-#if PERL_VERSION < 15
+#if PERL_VERSION_LT(5,15,0)
         cleanup_recursive_data(aTHX_ (SV*)hv);
 #endif
         CROAK((MAX_DEPTH_ERROR));
@@ -3275,7 +3273,7 @@ static int store_lhash(pTHX_ stcxt_t *cxt, HV *hv, unsigned char hash_flags)
         ++cxt->recur_depth;
     }
     if (RECURSION_TOO_DEEP_HASH()) {
-#if PERL_VERSION < 15
+#if PERL_VERSION_LT(5,15,0)
         cleanup_recursive_data(aTHX_ (SV*)hv);
 #endif
         CROAK((MAX_DEPTH_ERROR));
@@ -3311,7 +3309,7 @@ static int store_lhash(pTHX_ stcxt_t *cxt, HV *hv, unsigned char hash_flags)
  */
 static int store_code(pTHX_ stcxt_t *cxt, CV *cv)
 {
-#if PERL_VERSION < 6
+#if PERL_VERSION_LT(5,6,0)
     /*
      * retrieve_code does not work with perl 5.005 or less
      */
@@ -3410,10 +3408,10 @@ static int store_code(pTHX_ stcxt_t *cxt, CV *cv)
 #endif
 }
 
-#if PERL_VERSION < 8
+#if PERL_VERSION_LT(5,8,0)
 #   define PERL_MAGIC_qr                  'r' /* precompiled qr// regex */
 #   define BFD_Svs_SMG_OR_RMG SVs_RMG
-#elif ((PERL_VERSION==8) && (PERL_SUBVERSION >= 1) || (PERL_VERSION>8))
+#elif PERL_VERSION_GE(5,8,1)
 #   define BFD_Svs_SMG_OR_RMG SVs_SMG
 #   define MY_PLACEHOLDER PL_sv_placeholder
 #else
@@ -3424,7 +3422,7 @@ static int store_code(pTHX_ stcxt_t *cxt, CV *cv)
 static int get_regexp(pTHX_ stcxt_t *cxt, SV* sv, SV **re, SV **flags) {
     dSP;
     SV* rv;
-#if PERL_VERSION >= 12
+#if PERL_VERSION_GE(5,12,0)
     CV *cv = get_cv("re::regexp_pattern", 0);
 #else
     CV *cv = get_cv("Storable::_regexp_pattern", 0);
@@ -4286,7 +4284,7 @@ static int sv_type(pTHX_ SV *sv)
 {
     switch (SvTYPE(sv)) {
     case SVt_NULL:
-#if PERL_VERSION <= 10
+#if PERL_VERSION_LT(5,11,0)
     case SVt_IV:
 #endif
     case SVt_NV:
@@ -4296,7 +4294,7 @@ static int sv_type(pTHX_ SV *sv)
          */
         return svis_SCALAR;
     case SVt_PV:
-#if PERL_VERSION <= 10
+#if PERL_VERSION_LT(5,11,0)
     case SVt_RV:
 #else
     case SVt_IV:
@@ -4314,7 +4312,7 @@ static int sv_type(pTHX_ SV *sv)
          */
         return SvROK(sv) ? svis_REF : svis_SCALAR;
     case SVt_PVMG:
-#if PERL_VERSION <= 10
+#if PERL_VERSION_LT(5,11,0)
         if ((SvFLAGS(sv) & (SVs_OBJECT|SVf_OK|SVs_GMG|SVs_SMG|SVs_RMG))
                  == (SVs_OBJECT|BFD_Svs_SMG_OR_RMG)
            && mg_find(sv, PERL_MAGIC_qr)) {
@@ -4327,7 +4325,7 @@ static int sv_type(pTHX_ SV *sv)
             (mg_find(sv, 'p')))
             return svis_TIED_ITEM;
         /* FALL THROUGH */
-#if PERL_VERSION < 9
+#if PERL_VERSION_LT(5,9,0)
     case SVt_PVBM:
 #endif
         if ((SvFLAGS(sv) & (SVs_GMG|SVs_SMG|SVs_RMG)) ==
@@ -4345,10 +4343,10 @@ static int sv_type(pTHX_ SV *sv)
         return svis_HASH;
     case SVt_PVCV:
         return svis_CODE;
-#if PERL_VERSION > 8
+#if PERL_VERSION_GE(5,9,0)
        /* case SVt_INVLIST: */
 #endif
-#if PERL_VERSION > 10
+#if PERL_VERSION_GE(5,11,0)
     case SVt_REGEXP:
         return svis_REGEXP;
 #endif
@@ -6689,7 +6687,7 @@ static SV *retrieve_flag_hash(pTHX_ stcxt_t *cxt, const char *cname)
  */
 static SV *retrieve_code(pTHX_ stcxt_t *cxt, const char *cname)
 {
-#if PERL_VERSION < 6
+#if PERL_VERSION_LT(5,6,0)
     CROAK(("retrieve_code does not work with perl 5.005 or less\n"));
 #else
     dSP;
@@ -6817,7 +6815,7 @@ static SV *retrieve_code(pTHX_ stcxt_t *cxt, const char *cname)
 }
 
 static SV *retrieve_regexp(pTHX_ stcxt_t *cxt, const char *cname) {
-#if PERL_VERSION >= 8
+#if PERL_VERSION_GE(5,8,0)
     int op_flags;
     U32 re_len;
     STRLEN flags_len;
@@ -7582,7 +7580,7 @@ static SV *do_retrieve(
 
     if (!sv) {
         TRACEMED(("retrieve ERROR"));
-#if (PATCHLEVEL <= 4)
+#if PERL_VERSION_LT(5,5,0)
         /* perl 5.00405 seems to screw up at this point with an
            'attempt to modify a read only value' error reported in the
            eval { $self = pretrieve(*FILE) } in _retrieve.
@@ -7712,7 +7710,7 @@ static SV *dclone(pTHX_ SV *sv)
      */
 
     if ((SvTYPE(sv) == SVt_PVLV
-#if PERL_VERSION < 8
+#if PERL_VERSION_LT(5,8,0)
          || SvTYPE(sv) == SVt_PVMG
 #endif
          ) && (SvFLAGS(sv) & (SVs_GMG|SVs_SMG|SVs_RMG)) ==
index 5888863..8adae95 100644 (file)
@@ -63,7 +63,7 @@ sub test_hash {
   is (ref $clone, "HASH", "Get hash back");
   is (scalar keys %$clone, 1, "with 1 key");
   is ((keys %$clone)[0], "perl", "which is correct");
-  is ($clone->{perl}, "rules");
+  is ($clone->{perl}, "rules", "Got expected value when looking up key in clone");
 }
 
 sub test_header {
@@ -238,7 +238,7 @@ sub test_things {
   }
 }
 
-ok (defined store(\%hash, $file));
+ok (defined store(\%hash, $file), "store() returned defined value");
 
 my $expected = 20 + length ($file_magic_str) + $other_magic + $fancy;
 my $length = -s $file;
@@ -266,7 +266,7 @@ test_things($stored, \&freeze_and_thaw, 'string');
 # Network order.
 unlink $file or die "Can't unlink '$file': $!";
 
-ok (defined nstore(\%hash, $file));
+ok (defined nstore(\%hash, $file), "nstore() returned defined value");
 
 $expected = 20 + length ($file_magic_str) + $network_magic + $fancy;
 $length = -s $file;
index 827baf3..96f058a 100644 (file)
@@ -2,6 +2,20 @@ Revision history for the Perl extension Time::HiRes.
 
 {{NEXT}}
 
+ - Remove obsolete vms code
+ - Use core version compare
+
+1.9764 [2020-08-10]
+ - Fix a bunch of repeated-word typos
+ - Fix compilation with Visual C++ 2013 and older
+ - Implement clock_gettime() and clock_getres() for win32
+ - Remove workaround for an ancient Devel::PPPort bug
+ - Remove the remains of MacOS classic support
+ - Remove code for perls older than 5.6
+ - Remove vestiges of mpeix support (removed in 5.17.x)
+ - Remove trailing blanks
+ - Add links to pod
+
 1.9760 [2019-02-18]
  - make utime() available only if we have both fd and name setting
    [RT #133030]
index 433ca31..1183dc9 100644 (file)
@@ -50,7 +50,7 @@ our @EXPORT_OK = qw (usleep sleep ualarm alarm gettimeofday time tv_interval
                  stat lstat utime
                 );
 
-our $VERSION = '1.9764';
+our $VERSION = '1.9765';
 our $XS_VERSION = $VERSION;
 $VERSION = eval $VERSION;
 
index 8002472..ca81e5a 100644 (file)
@@ -18,6 +18,7 @@ extern "C" {
 #include "EXTERN.h"
 #include "perl.h"
 #include "XSUB.h"
+#include "reentr.h"
 #ifdef USE_PPPORT_H
 #  include "ppport.h"
 #endif
@@ -42,12 +43,6 @@ extern "C" {
 }
 #endif
 
-#define PERL_VERSION_DECIMAL(r,v,s) (r*1000000 + v*1000 + s)
-#define PERL_DECIMAL_VERSION \
-        PERL_VERSION_DECIMAL(PERL_REVISION,PERL_VERSION,PERL_SUBVERSION)
-#define PERL_VERSION_GE(r,v,s) \
-        (PERL_DECIMAL_VERSION >= PERL_VERSION_DECIMAL(r,v,s))
-
 #ifndef GCC_DIAG_IGNORE
 #  define GCC_DIAG_IGNORE(x)
 #  define GCC_DIAG_RESTORE
@@ -91,6 +86,13 @@ extern "C" {
 #  undef ITIMER_REALPROF
 #endif
 
+#ifndef ENV_LOCALE_LOCK
+#  define ENV_LOCALE_LOCK
+#endif
+#ifndef ENV_LOCALE_UNLOCK
+#  define ENV_LOCALE_UNLOCK
+#endif
+
 #ifndef TIME_HIRES_CLOCKID_T
 typedef int clockid_t;
 #endif
@@ -323,193 +325,6 @@ _clock_getres(clockid_t clock_id, struct timespec *tp)
 
 #endif /* #if defined(WIN32) || defined(CYGWIN_WITH_W32API) */
 
-#if !defined(HAS_GETTIMEOFDAY) && defined(VMS)
-#  define HAS_GETTIMEOFDAY
-
-#  include <lnmdef.h>
-#  include <time.h> /* gettimeofday */
-#  include <stdlib.h> /* qdiv */
-#  include <starlet.h> /* sys$gettim */
-#  include <descrip.h>
-#  ifdef __VAX
-#    include <lib$routines.h> /* lib$ediv() */
-#  endif
-
-/*
-        VMS binary time is expressed in 100 nano-seconds since
-        system base time which is 17-NOV-1858 00:00:00.00
-*/
-
-#  define DIV_100NS_TO_SECS  10000000L
-#  define DIV_100NS_TO_USECS 10L
-
-/*
-        gettimeofday is supposed to return times since the epoch
-        so need to determine this in terms of VMS base time
-*/
-static $DESCRIPTOR(dscepoch,"01-JAN-1970 00:00:00.00");
-
-#  ifdef __VAX
-static long base_adjust[2]={0L,0L};
-#  else
-static __int64 base_adjust=0;
-#  endif
-
-/*
-
-   If we don't have gettimeofday, then likely we are on a VMS machine that
-   operates on local time rather than UTC...so we have to zone-adjust.
-   This code gleefully swiped from VMS.C
-
-*/
-/* method used to handle UTC conversions:
- *   1 == CRTL gmtime();  2 == SYS$TIMEZONE_DIFFERENTIAL;  3 == no correction
- */
-static int gmtime_emulation_type;
-/* number of secs to add to UTC POSIX-style time to get local time */
-static long int utc_offset_secs;
-static struct dsc$descriptor_s fildevdsc =
-    { 12, DSC$K_DTYPE_T, DSC$K_CLASS_S, "LNM$FILE_DEV" };
-static struct dsc$descriptor_s *fildev[] = { &fildevdsc, NULL };
-
-static time_t toutc_dst(time_t loc) {
-    struct tm *rsltmp;
-
-    if ((rsltmp = localtime(&loc)) == NULL) return -1;
-    loc -= utc_offset_secs;
-    if (rsltmp->tm_isdst) loc -= 3600;
-    return loc;
-}
-
-static time_t toloc_dst(time_t utc) {
-    struct tm *rsltmp;
-
-    utc += utc_offset_secs;
-    if ((rsltmp = localtime(&utc)) == NULL) return -1;
-    if (rsltmp->tm_isdst) utc += 3600;
-    return utc;
-}
-
-#  define _toutc(secs)  ((secs) == (time_t) -1 ? (time_t) -1 : \
-          ((gmtime_emulation_type || timezone_setup()), \
-          (gmtime_emulation_type == 1 ? toutc_dst(secs) : \
-          ((secs) - utc_offset_secs))))
-
-#  define _toloc(secs)  ((secs) == (time_t) -1 ? (time_t) -1 : \
-          ((gmtime_emulation_type || timezone_setup()), \
-          (gmtime_emulation_type == 1 ? toloc_dst(secs) : \
-          ((secs) + utc_offset_secs))))
-
-static int
-timezone_setup(void)
-{
-    struct tm *tm_p;
-
-    if (gmtime_emulation_type == 0) {
-        int dstnow;
-        time_t base = 15 * 86400; /* 15jan71; to avoid month/year ends between    */
-                                  /* results of calls to gmtime() and localtime() */
-                                  /* for same &base */
-
-        gmtime_emulation_type++;
-        if ((tm_p = gmtime(&base)) == NULL) { /* CRTL gmtime() is a fake */
-            char off[LNM$C_NAMLENGTH+1];;
-
-            gmtime_emulation_type++;
-            if (!Perl_vmstrnenv("SYS$TIMEZONE_DIFFERENTIAL",off,0,fildev,0)) {
-                gmtime_emulation_type++;
-                utc_offset_secs = 0;
-                Perl_warn(aTHX_ "no UTC offset information; assuming local time is UTC");
-            }
-            else { utc_offset_secs = atol(off); }
-        }
-        else { /* We've got a working gmtime() */
-            struct tm gmt, local;
-
-            gmt = *tm_p;
-            tm_p = localtime(&base);
-            local = *tm_p;
-            utc_offset_secs  = (local.tm_mday - gmt.tm_mday) * 86400;
-            utc_offset_secs += (local.tm_hour - gmt.tm_hour) * 3600;
-            utc_offset_secs += (local.tm_min  - gmt.tm_min)  * 60;
-            utc_offset_secs += (local.tm_sec  - gmt.tm_sec);
-        }
-    }
-    return 1;
-}
-
-
-int
-gettimeofday (struct timeval *tp, void *tpz)
-{
-    long ret;
-#  ifdef __VAX
-    long quad[2];
-    long quad1[2];
-    long div_100ns_to_secs;
-    long div_100ns_to_usecs;
-    long quo,rem;
-    long quo1,rem1;
-#  else
-    __int64 quad;
-    __qdiv_t ans1,ans2;
-#  endif
-    /*
-        In case of error, tv_usec = 0 and tv_sec = VMS condition code.
-        The return from function is also set to -1.
-        This is not exactly as per the manual page.
-    */
-
-    tp->tv_usec = 0;
-
-#  ifdef __VAX
-    if (base_adjust[0]==0 && base_adjust[1]==0) {
-#  else
-    if (base_adjust==0) { /* Need to determine epoch adjustment */
-#  endif
-        ret=sys$bintim(&dscepoch,&base_adjust);
-        if (1 != (ret &&1)) {
-            tp->tv_sec = ret;
-            return -1;
-        }
-    }
-
-    ret=sys$gettim(&quad); /* Get VMS system time */
-    if ((1 && ret) == 1) {
-#  ifdef __VAX
-        quad[0] -= base_adjust[0]; /* convert to epoch offset */
-        quad[1] -= base_adjust[1]; /* convert 2nd half of quadword */
-        div_100ns_to_secs = DIV_100NS_TO_SECS;
-        div_100ns_to_usecs = DIV_100NS_TO_USECS;
-        lib$ediv(&div_100ns_to_secs,&quad,&quo,&rem);
-        quad1[0] = rem;
-        quad1[1] = 0L;
-        lib$ediv(&div_100ns_to_usecs,&quad1,&quo1,&rem1);
-        tp->tv_sec = quo; /* Whole seconds */
-        tp->tv_usec = quo1; /* Micro-seconds */
-#  else
-        quad -= base_adjust; /* convert to epoch offset */
-        ans1=qdiv(quad,DIV_100NS_TO_SECS);
-        ans2=qdiv(ans1.rem,DIV_100NS_TO_USECS);
-        tp->tv_sec = ans1.quot; /* Whole seconds */
-        tp->tv_usec = ans2.quot; /* Micro-seconds */
-#  endif
-    } else {
-        tp->tv_sec = ret;
-        return -1;
-    }
-#  ifdef VMSISH_TIME
-#    ifdef RTL_USES_UTC
-    if (VMSISH_TIME) tp->tv_sec = _toloc(tp->tv_sec);
-#    else
-    if (!VMSISH_TIME) tp->tv_sec = _toutc(tp->tv_sec);
-#    endif
-#  endif
-    return 0;
-}
-#endif /* #if !defined(HAS_GETTIMEOFDAY) && defined(VMS) */
-
-
  /* Do not use H A S _ N A N O S L E E P
   * so that Perl Configure doesn't scan for it (and pull in -lrt and
   * the like which are not usually good ideas for the default Perl).
@@ -1086,7 +901,7 @@ nsec_without_unslept(struct timespec *sleepfor,
 /* In case Perl and/or Devel::PPPort are too old, minimally emulate
  * IS_SAFE_PATHNAME() (which looks for zero bytes in the pathname). */
 #ifndef IS_SAFE_PATHNAME
-#  if PERL_VERSION >= 12 /* Perl_ck_warner is 5.10.0 -> */
+#  if PERL_VERSION_GE(5,12,0) /* Perl_ck_warner is 5.10.0 -> */
 #    ifdef WARN_SYSCALLS
 #      define WARNEMUCAT WARN_SYSCALLS /* 5.22.0 -> */
 #    else
index b635092..c918cd1 100644 (file)
@@ -912,9 +912,9 @@ sub doMakefile {
         push @makefileopts, (
             META_MERGE => {
                 resources => {
-                    repository => 'git://perl5.git.perl.org/perl.git',
-                    bugtracker => 'https://rt.perl.org/rt3/',
-                    homepage   => "http://dev.perl.org/",
+                    repository => 'https://github.com/Perl/perl5.git',
+                    bugtracker => 'https://github.com/Perl/perl5/issues',
+                    homepage   => "https://github.com/Perl/perl5",
                 },
             },
         )
index d06fb8b..fd6f1cb 100644 (file)
@@ -16,7 +16,7 @@ use Carp;
 
 no warnings 'utf8';
 
-our $VERSION = '1.27';
+our $VERSION = '1.28';
 our $PACKAGE = __PACKAGE__;
 
 our @EXPORT = qw( NFC NFD NFKC NFKD );
index 4acff7f..0c151b7 100644 (file)
@@ -23,7 +23,7 @@
 /* The generated normalization tables since v5.20 are in native character set
  * terms.  Prior to that, they were in Unicode terms.  So we use 'uvchr' for
  * later perls, and redefine that to be 'uvuni' for earlier ones */
-#if PERL_VERSION < 20
+#if PERL_VERSION_LT(5,20,0)
 #   undef uvchr_to_utf8
 #   ifdef uvuni_to_utf8
 #       define uvchr_to_utf8   uvuni_to_utf8
index bd0e437..3674d83 100644 (file)
@@ -8,7 +8,7 @@ use Config;
 
 use Scalar::Util qw(reftype refaddr blessed);
 
-our $VERSION = '1.61'; # Please update the pod, too.
+our $VERSION = '1.62'; # Please update the pod, too.
 my $XS_VERSION = $VERSION;
 $VERSION = eval $VERSION;
 
@@ -196,7 +196,7 @@ threads::shared - Perl extension for sharing data structures between threads
 
 =head1 VERSION
 
-This document describes threads::shared version 1.61
+This document describes threads::shared version 1.62
 
 =head1 SYNOPSIS
 
index 858c6d6..4931a61 100644 (file)
@@ -1183,7 +1183,7 @@ sharedsv_array_mg_free(pTHX_ SV *sv, MAGIC *mg)
  * This is called when perl is about to access an element of
  * the array -
  */
-#if PERL_VERSION >= 11
+#if PERL_VERSION_GE(5,11,0)
 static int
 sharedsv_array_mg_copy(pTHX_ SV *sv, MAGIC* mg,
                        SV *nsv, const char *name, I32 namlen)
index ee201a2..4453a8d 100644 (file)
@@ -5,7 +5,7 @@ use 5.008;
 use strict;
 use warnings;
 
-our $VERSION = '2.25';      # remember to update version in POD!
+our $VERSION = '2.26';      # remember to update version in POD!
 my $XS_VERSION = $VERSION;
 $VERSION = eval $VERSION;
 
@@ -134,7 +134,7 @@ threads - Perl interpreter-based threads
 
 =head1 VERSION
 
-This document describes threads version 2.25
+This document describes threads version 2.26
 
 =head1 WARNING
 
index ab64dc0..e544eba 100644 (file)
@@ -421,7 +421,7 @@ STATIC const MGVTBL ithread_vtbl = {
     ithread_mg_free,    /* free */
     0,                  /* copy */
     ithread_mg_dup,     /* dup */
-#if (PERL_VERSION > 8) || (PERL_VERSION == 8 && PERL_SUBVERSION > 8)
+#if PERL_VERSION_GT(5,8,8)
     0                   /* local */
 #endif
 };
@@ -751,7 +751,7 @@ S_ithread_create(
     AV          *params;
     SV          **array;
 
-#if PERL_VERSION <= 8 && PERL_SUBVERSION <= 7
+#if PERL_VERSION_LE(5,8,7)
     SV         **tmps_tmp = PL_tmps_stack;
     IV           tmps_ix  = PL_tmps_ix;
 #endif
@@ -849,7 +849,7 @@ S_ithread_create(
      * context for the duration of our work for new interpreter.
      */
     {
-#if (PERL_VERSION > 13) || (PERL_VERSION == 13 && PERL_SUBVERSION > 1)
+#if PERL_VERSION_GE(5,13,2)
         CLONE_PARAMS *clone_param = Perl_clone_params_new(aTHX, thread->interp);
 #else
         CLONE_PARAMS clone_param_s;
@@ -859,7 +859,7 @@ S_ithread_create(
 
         MY_CXT_CLONE;
 
-#if (PERL_VERSION < 13) || (PERL_VERSION == 13 && PERL_SUBVERSION <= 1)
+#if PERL_VERSION_LT(5,13,2)
         clone_param->flags = 0;
 #endif
 
@@ -886,7 +886,7 @@ S_ithread_create(
            perl_clone() and sv_dup_inc(). Hence copy the parameters
            somewhere under our control first, before duplicating.  */
         if (num_params) {
-#if (PERL_VERSION > 8)
+#if PERL_VERSION_GE(5,9,0)
             Copy(parent_perl->Istack_base + params_start, array, num_params, SV *);
 #else
             Copy(parent_perl->Tstack_base + params_start, array, num_params, SV *);
@@ -897,11 +897,11 @@ S_ithread_create(
             }
         }
 
-#if (PERL_VERSION > 13) || (PERL_VERSION == 13 && PERL_SUBVERSION > 1)
+#if PERL_VERSION_GE(5,13,2)
         Perl_clone_params_del(clone_param);
 #endif
 
-#if PERL_VERSION <= 8 && PERL_SUBVERSION <= 7
+#if PERL_VERSION_LT(5,8,8)
         /* The code below checks that anything living on the tmps stack and
          * has been cloned (so it lives in the ptr_table) has a refcount
          * higher than 0.
@@ -1339,7 +1339,7 @@ ithread_join(...)
         /* Get the return value from the call_sv */
         /* Objects do not survive this process - FIXME */
         if ((thread->gimme & G_WANT) != G_VOID) {
-#if (PERL_VERSION < 13) || (PERL_VERSION == 13 && PERL_SUBVERSION <= 1)
+#if PERL_VERSION_LT(5,13,2)
             AV *params_copy;
             PerlInterpreter *other_perl;
             CLONE_PARAMS clone_params;
@@ -1766,7 +1766,7 @@ ithread_error(...)
 
         /* If thread died, then clone the error into the calling thread */
         if (thread->state & PERL_ITHR_DIED) {
-#if (PERL_VERSION < 13) || (PERL_VERSION == 13 && PERL_SUBVERSION <= 1)
+#if PERL_VERSION_LT(5,13,2)
             PerlInterpreter *other_perl;
             CLONE_PARAMS clone_params;
             ithread *current_thread;
diff --git a/doio.c b/doio.c
index 13d412a..b077509 100644 (file)
--- a/doio.c
+++ b/doio.c
@@ -191,7 +191,6 @@ Perl_PerlLIO_dup_cloexec(pTHX_ int oldfd)
      * to extend it, so for the time being this just isn't available on
      * PERL_IMPLICIT_SYS builds.
      */
-    dVAR;
     DO_ONEOPEN_EXPERIMENTING_CLOEXEC(
         PL_strategy_dup,
        fcntl(oldfd, F_DUPFD_CLOEXEC, 0),
@@ -210,7 +209,6 @@ Perl_PerlLIO_dup2_cloexec(pTHX_ int oldfd, int newfd)
      * to extend it, so for the time being this just isn't available on
      * PERL_IMPLICIT_SYS builds.
      */
-    dVAR;
     DO_ONEOPEN_EXPERIMENTING_CLOEXEC(
         PL_strategy_dup2,
        dup3(oldfd, newfd, O_CLOEXEC),
@@ -223,7 +221,6 @@ Perl_PerlLIO_dup2_cloexec(pTHX_ int oldfd, int newfd)
 int
 Perl_PerlLIO_open_cloexec(pTHX_ const char *file, int flag)
 {
-    dVAR;
     PERL_ARGS_ASSERT_PERLLIO_OPEN_CLOEXEC;
 #if defined(O_CLOEXEC)
     DO_ONEOPEN_EXPERIMENTING_CLOEXEC(
@@ -238,7 +235,6 @@ Perl_PerlLIO_open_cloexec(pTHX_ const char *file, int flag)
 int
 Perl_PerlLIO_open3_cloexec(pTHX_ const char *file, int flag, int perm)
 {
-    dVAR;
     PERL_ARGS_ASSERT_PERLLIO_OPEN3_CLOEXEC;
 #if defined(O_CLOEXEC)
     DO_ONEOPEN_EXPERIMENTING_CLOEXEC(
@@ -253,7 +249,6 @@ Perl_PerlLIO_open3_cloexec(pTHX_ const char *file, int flag, int perm)
 int
 Perl_my_mkstemp_cloexec(char *templte)
 {
-    dVAR;
     PERL_ARGS_ASSERT_MY_MKSTEMP_CLOEXEC;
 #if defined(O_CLOEXEC)
     DO_ONEOPEN_EXPERIMENTING_CLOEXEC(
@@ -268,7 +263,6 @@ Perl_my_mkstemp_cloexec(char *templte)
 int
 Perl_my_mkostemp_cloexec(char *templte, int flags)
 {
-    dVAR;
     PERL_ARGS_ASSERT_MY_MKOSTEMP_CLOEXEC;
 #if defined(O_CLOEXEC)
     DO_ONEOPEN_EXPERIMENTING_CLOEXEC(
@@ -284,7 +278,6 @@ Perl_my_mkostemp_cloexec(char *templte, int flags)
 int
 Perl_PerlProc_pipe_cloexec(pTHX_ int *pipefd)
 {
-    dVAR;
     PERL_ARGS_ASSERT_PERLPROC_PIPE_CLOEXEC;
     /*
      * struct IPerlProc doesn't cover pipe2(), and there's no clear way
@@ -307,7 +300,6 @@ int
 Perl_PerlSock_socket_cloexec(pTHX_ int domain, int type, int protocol)
 {
 #  if defined(SOCK_CLOEXEC)
-    dVAR;
     DO_ONEOPEN_EXPERIMENTING_CLOEXEC(
         PL_strategy_socket,
        PerlSock_socket(domain, type | SOCK_CLOEXEC, protocol),
@@ -328,7 +320,6 @@ Perl_PerlSock_accept_cloexec(pTHX_ int listenfd, struct sockaddr *addr,
      * way to extend it, so for the time being this just isn't available
      * on PERL_IMPLICIT_SYS builds.
      */
-    dVAR;
     DO_ONEOPEN_EXPERIMENTING_CLOEXEC(
         PL_strategy_accept,
        accept4(listenfd, addr, addrlen, SOCK_CLOEXEC),
@@ -347,7 +338,6 @@ int
 Perl_PerlSock_socketpair_cloexec(pTHX_ int domain, int type, int protocol,
     int *pairfd)
 {
-    dVAR;
     PERL_ARGS_ASSERT_PERLSOCK_SOCKETPAIR_CLOEXEC;
 #  ifdef SOCK_CLOEXEC
     DO_PIPEOPEN_EXPERIMENTING_CLOEXEC(PL_strategy_socketpair, pairfd,
@@ -1322,7 +1312,7 @@ Perl_nextargv(pTHX_ GV *gv, bool nomagicopen)
     PL_filemode = 0;
     if (!GvAV(gv))
        return NULL;
-    while (av_tindex(GvAV(gv)) >= 0) {
+    while (av_count(GvAV(gv)) > 0) {
        STRLEN oldlen;
         SV *const sv = av_shift(GvAV(gv));
        SAVEFREESV(sv);
@@ -2297,9 +2287,8 @@ bool
 Perl_do_aexec5(pTHX_ SV *really, SV **mark, SV **sp,
               int fd, int do_report)
 {
-    dVAR;
     PERL_ARGS_ASSERT_DO_AEXEC5;
-#if defined(__SYMBIAN32__) || defined(__LIBCATAMOUNT__)
+#if defined(__LIBCATAMOUNT__)
     Perl_croak(aTHX_ "exec? I'm not *that* kind of operating system");
 #else
     assert(sp >= mark);
@@ -2348,7 +2337,6 @@ Perl_do_aexec5(pTHX_ SV *really, SV **mark, SV **sp,
 bool
 Perl_do_exec3(pTHX_ const char *incmd, int fd, int do_report)
 {
-    dVAR;
     const char **argv, **a;
     char *s;
     char *buf;
diff --git a/doop.c b/doop.c
index 267b640..822ad3c 100644 (file)
--- a/doop.c
+++ b/doop.c
@@ -442,9 +442,6 @@ S_do_trans_invmap(pTHX_ SV * const sv, AV * const invmap)
      * assume cannot */
     if (! out_is_utf8 && (PL_op->op_private & OPpTRANS_CAN_FORCE_UTF8)) {
         inplace = FALSE;
-        if (max_expansion < 2) {
-            max_expansion = 2;
-        }
     }
 
     s = (U8*)SvPV_nomg(sv, len);
@@ -731,7 +728,6 @@ Perl_do_sprintf(pTHX_ SV *sv, SSize_t len, SV **sarg)
        SvTAINTED_on(sv);
 }
 
-/* currently converts input to bytes if possible, but doesn't sweat failure */
 UV
 Perl_do_vecget(pTHX_ SV *sv, STRLEN offset, int size)
 {
@@ -757,7 +753,8 @@ Perl_do_vecget(pTHX_ SV *sv, STRLEN offset, int size)
             s = (unsigned char *) SvPV_flags(sv, srclen, svpv_flags);
         }
         else {
-               Perl_croak(aTHX_ "Use of strings with code points over 0xFF as arguments to vec is forbidden");
+            Perl_croak(aTHX_ "Use of strings with code points over 0xFF"
+                             " as arguments to vec is forbidden");
         }
     }
 
@@ -857,7 +854,7 @@ Perl_do_vecget(pTHX_ SV *sv, STRLEN offset, int size)
        }
     }
     else if (size < 8)
-       retnum = (s[uoffset] >> bitoffs) & ((1 << size) - 1);
+       retnum = (s[uoffset] >> bitoffs) & nBIT_MASK(size);
     else {
        if (size == 8)
            retnum = s[uoffset];
@@ -960,7 +957,7 @@ Perl_do_vecset(pTHX_ SV *sv)
     }
 
     if (size < 8) {
-       mask = (1 << size) - 1;
+       mask = nBIT_MASK(size);
        lval &= mask;
        s[offset] &= ~(mask << bitoffs);
        s[offset] |= lval << bitoffs;
@@ -1090,7 +1087,6 @@ Perl_do_vop(pTHX_ I32 optype, SV *sv, SV *left, SV *right)
     lsave = lc;
     rsave = rc;
 
-    SvCUR_set(sv, len);
     (void)SvPOK_only(sv);
     if (SvOK(sv) || SvTYPE(sv) > SVt_PVMG) {
        dc = SvPV_force_nomg_nolen(sv);
@@ -1106,6 +1102,7 @@ Perl_do_vop(pTHX_ I32 optype, SV *sv, SV *left, SV *right)
        sv_usepvn_flags(sv, dc, needlen, SV_HAS_TRAILING_NUL);
        dc = SvPVX(sv);         /* sv_usepvn() calls Renew() */
     }
+    SvCUR_set(sv, len);
 
     if (len >= sizeof(long)*4 &&
        !(PTR2nat(dc) % sizeof(long)) &&
diff --git a/dump.c b/dump.c
index f03c3f6..7936008 100644 (file)
--- a/dump.c
+++ b/dump.c
@@ -367,7 +367,6 @@ Perl_pv_display(pTHX_ SV *dsv, const char *pv, STRLEN cur, STRLEN len, STRLEN pv
 char *
 Perl_sv_peek(pTHX_ SV *sv)
 {
-    dVAR;
     SV * const t = sv_newmortal();
     int unref = 0;
     U32 type;
@@ -929,7 +928,6 @@ Perl_pmop_dump(pTHX_ PMOP *pm)
 STATIC UV
 S_sequence_num(pTHX_ const OP *o)
 {
-    dVAR;
     SV     *op,
           **seq;
     const char *key;
@@ -1733,7 +1731,6 @@ const struct flag_to_name regexp_core_intflags_names[] = {
 void
 Perl_do_sv_dump(pTHX_ I32 level, PerlIO *file, SV *sv, I32 nest, I32 maxnest, bool dumpops, STRLEN pvlim)
 {
-    dVAR;
     SV *d;
     const char *s;
     U32 flags;
index cf1beeb..9182d50 100644 (file)
@@ -44,9 +44,9 @@ SOFTWARE.
 
 /* Index is ASCII platform code point; value is EBCDIC 1047 equivalent */
 #  ifndef DOINIT
-    EXTCONST U8 PL_a2e[];
+    EXTCONST U8 PL_a2e[256];
 #  else
-    EXTCONST U8 PL_a2e[] = {
+    EXTCONST U8 PL_a2e[256] = {
 /*      _0   _1   _2   _3   _4   _5   _6   _7   _8   _9   _A   _B   _C   _D   _E  _F*/
 /*0_*/0x00,0x01,0x02,0x03,0x37,0x2D,0x2E,0x2F,0x16,0x05,0x15,0x0B,0x0C,0x0D,0x0E,0x0F,
 /*1_*/0x10,0x11,0x12,0x13,0x3C,0x3D,0x32,0x26,0x18,0x19,0x3F,0x27,0x1C,0x1D,0x1E,0x1F,
@@ -70,9 +70,9 @@ SOFTWARE.
 
 /* Index is EBCDIC 1047 code point; value is ASCII platform equivalent */
 #  ifndef DOINIT
-    EXTCONST U8 PL_e2a[];
+    EXTCONST U8 PL_e2a[256];
 #  else
-    EXTCONST U8 PL_e2a[] = {
+    EXTCONST U8 PL_e2a[256] = {
 /*      _0   _1   _2   _3   _4   _5   _6   _7   _8   _9   _A   _B   _C   _D   _E  _F*/
 /*0_*/0x00,0x01,0x02,0x03,0x9C,0x09,0x86,0x7F,0x97,0x8D,0x8E,0x0B,0x0C,0x0D,0x0E,0x0F,
 /*1_*/0x10,0x11,0x12,0x13,0x9D,0x0A,0x08,0x87,0x18,0x19,0x92,0x8F,0x1C,0x1D,0x1E,0x1F,
@@ -97,9 +97,9 @@ SOFTWARE.
 /* (Confusingly named) Index is EBCDIC 1047 I8 byte; value is
  * EBCDIC 1047 UTF-EBCDIC equivalent */
 #  ifndef DOINIT
-    EXTCONST U8 PL_utf2e[];
+    EXTCONST U8 PL_utf2e[256];
 #  else
-    EXTCONST U8 PL_utf2e[] = {
+    EXTCONST U8 PL_utf2e[256] = {
 /*      _0   _1   _2   _3   _4   _5   _6   _7   _8   _9   _A   _B   _C   _D   _E  _F*/
 /*0_*/0x00,0x01,0x02,0x03,0x37,0x2D,0x2E,0x2F,0x16,0x05,0x15,0x0B,0x0C,0x0D,0x0E,0x0F,
 /*1_*/0x10,0x11,0x12,0x13,0x3C,0x3D,0x32,0x26,0x18,0x19,0x3F,0x27,0x1C,0x1D,0x1E,0x1F,
@@ -124,9 +124,9 @@ SOFTWARE.
 /* (Confusingly named) Index is EBCDIC 1047 UTF-EBCDIC byte; value is
  * EBCDIC 1047 I8 equivalent */
 #  ifndef DOINIT
-    EXTCONST U8 PL_e2utf[];
+    EXTCONST U8 PL_e2utf[256];
 #  else
-    EXTCONST U8 PL_e2utf[] = {
+    EXTCONST U8 PL_e2utf[256] = {
 /*      _0   _1   _2   _3   _4   _5   _6   _7   _8   _9   _A   _B   _C   _D   _E  _F*/
 /*0_*/0x00,0x01,0x02,0x03,0x9C,0x09,0x86,0x7F,0x97,0x8D,0x8E,0x0B,0x0C,0x0D,0x0E,0x0F,
 /*1_*/0x10,0x11,0x12,0x13,0x9D,0x0A,0x08,0x87,0x18,0x19,0x92,0x8F,0x1C,0x1D,0x1E,0x1F,
@@ -153,9 +153,9 @@ SOFTWARE.
  * flags table in tr16.  The entries marked 9 in tr16 are continuation bytes
  * and are marked as length 1 here so that we can recover. */
 #  ifndef DOINIT
-    EXTCONST U8 PL_utf8skip[];
+    EXTCONST U8 PL_utf8skip[256];
 #  else
-    EXTCONST U8 PL_utf8skip[] = {
+    EXTCONST U8 PL_utf8skip[256] = {
 /*     _0  _1  _2  _3  _4  _5  _6  _7  _8  _9  _A  _B  _C  _D  _E _F*/
 /*0_*/  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
 /*1_*/  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
@@ -179,9 +179,9 @@ SOFTWARE.
 
 /* Index is EBCDIC 1047 code point; value is its lowercase equivalent */
 #  ifndef DOINIT
-    EXTCONST U8 PL_latin1_lc[];
+    EXTCONST U8 PL_latin1_lc[256];
 #  else
-    EXTCONST U8 PL_latin1_lc[] = {
+    EXTCONST U8 PL_latin1_lc[256] = {
 /*      _0   _1   _2   _3   _4   _5   _6   _7   _8   _9   _A   _B   _C   _D   _E  _F*/
 /*0_*/0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,
 /*1_*/0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,
@@ -207,9 +207,9 @@ SOFTWARE.
  * The 'mod' in the name means that codepoints whose uppercase is above 255 or
  * longer than 1 character map to LATIN SMALL LETTER Y WITH DIARESIS */
 #  ifndef DOINIT
-    EXTCONST U8 PL_mod_latin1_uc[];
+    EXTCONST U8 PL_mod_latin1_uc[256];
 #  else
-    EXTCONST U8 PL_mod_latin1_uc[] = {
+    EXTCONST U8 PL_mod_latin1_uc[256] = {
 /*      _0   _1   _2   _3   _4   _5   _6   _7   _8   _9   _A   _B   _C   _D   _E  _F*/
 /*0_*/0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,
 /*1_*/0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,
@@ -234,9 +234,34 @@ SOFTWARE.
 /* Index is EBCDIC 1047 code point; For A-Z, value is a-z; for a-z, value
  * is A-Z; all other code points map to themselves */
 #  ifndef DOINIT
-    EXTCONST U8 PL_fold[];
+    EXTCONST U8 PL_fold[256];
 #  else
-    EXTCONST U8 PL_fold[] = {
+    EXTCONST U8 PL_fold[256] = {
+/*      _0   _1   _2   _3   _4   _5   _6   _7   _8   _9   _A   _B   _C   _D   _E  _F*/
+/*0_*/0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,
+/*1_*/0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,
+/*2_*/0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F,
+/*3_*/0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F,
+/*4_*/0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F,
+/*5_*/0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F,
+/*6_*/0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F,
+/*7_*/0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F,
+/*8_*/0x80,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,
+/*9_*/0x90,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F,
+/*A_*/0xA0,0xA1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,
+/*B_*/0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF,
+/*C_*/0xC0,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,
+/*D_*/0xD0,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF,
+/*E_*/0xE0,0xE1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,
+/*F_*/0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF
+/*      _0   _1   _2   _3   _4   _5   _6   _7   _8   _9   _A   _B   _C   _D   _E  _F*/
+};
+#  endif
+
+#  ifndef DOINIT
+    EXT U8 PL_fold_locale[256];
+#  else
+    EXT U8 PL_fold_locale[256] = {
 /*      _0   _1   _2   _3   _4   _5   _6   _7   _8   _9   _A   _B   _C   _D   _E  _F*/
 /*0_*/0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,
 /*1_*/0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,
@@ -262,9 +287,9 @@ SOFTWARE.
  * (A => a; a => A, etc) in the 0-255 range.  If no such equivalent, value is
  * the code point itself */
 #  ifndef DOINIT
-    EXTCONST U8 PL_fold_latin1[];
+    EXTCONST U8 PL_fold_latin1[256];
 #  else
-    EXTCONST U8 PL_fold_latin1[] = {
+    EXTCONST U8 PL_fold_latin1[256] = {
 /*      _0   _1   _2   _3   _4   _5   _6   _7   _8   _9   _A   _B   _C   _D   _E  _F*/
 /*0_*/0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,
 /*1_*/0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,
@@ -293,9 +318,9 @@ SOFTWARE.
  */
 
 #  ifndef DOINIT
-    EXTCONST U8 PL_extended_utf8_dfa_tab[];
+    EXTCONST U8 PL_extended_utf8_dfa_tab[416];
 #  else
-    EXTCONST U8 PL_extended_utf8_dfa_tab[] = {
+    EXTCONST U8 PL_extended_utf8_dfa_tab[416] = {
 /*         _0  _1  _2  _3  _4  _5  _6  _7  _8  _9  _A  _B  _C  _D  _E _F*/
 /*0_    */  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
 /*1_    */  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
@@ -334,9 +359,9 @@ SOFTWARE.
  */
 
 #  ifndef DOINIT
-    EXTCONST U16 PL_strict_utf8_dfa_tab[];
+    EXTCONST U16 PL_strict_utf8_dfa_tab[624];
 #  else
-    EXTCONST U16 PL_strict_utf8_dfa_tab[] = {
+    EXTCONST U16 PL_strict_utf8_dfa_tab[624] = {
 /*          _0  _1  _2  _3  _4  _5  _6  _7  _8  _9  _A  _B  _C  _D  _E _F*/
 /*0_     */  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
 /*1_     */  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
@@ -381,9 +406,9 @@ SOFTWARE.
  */
 
 #  ifndef DOINIT
-    EXTCONST U8 PL_c9_utf8_dfa_tab[];
+    EXTCONST U8 PL_c9_utf8_dfa_tab[368];
 #  else
-    EXTCONST U8 PL_c9_utf8_dfa_tab[] = {
+    EXTCONST U8 PL_c9_utf8_dfa_tab[368] = {
 /*        _0  _1  _2  _3  _4  _5  _6  _7  _8  _9  _A  _B  _C  _D  _E _F*/
 /*0_   */  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
 /*1_   */  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
@@ -422,9 +447,9 @@ SOFTWARE.
 
 /* Index is ASCII platform code point; value is EBCDIC 037 equivalent */
 #  ifndef DOINIT
-    EXTCONST U8 PL_a2e[];
+    EXTCONST U8 PL_a2e[256];
 #  else
-    EXTCONST U8 PL_a2e[] = {
+    EXTCONST U8 PL_a2e[256] = {
 /*      _0   _1   _2   _3   _4   _5   _6   _7   _8   _9   _A   _B   _C   _D   _E  _F*/
 /*0_*/0x00,0x01,0x02,0x03,0x37,0x2D,0x2E,0x2F,0x16,0x05,0x25,0x0B,0x0C,0x0D,0x0E,0x0F,
 /*1_*/0x10,0x11,0x12,0x13,0x3C,0x3D,0x32,0x26,0x18,0x19,0x3F,0x27,0x1C,0x1D,0x1E,0x1F,
@@ -448,9 +473,9 @@ SOFTWARE.
 
 /* Index is EBCDIC 037 code point; value is ASCII platform equivalent */
 #  ifndef DOINIT
-    EXTCONST U8 PL_e2a[];
+    EXTCONST U8 PL_e2a[256];
 #  else
-    EXTCONST U8 PL_e2a[] = {
+    EXTCONST U8 PL_e2a[256] = {
 /*      _0   _1   _2   _3   _4   _5   _6   _7   _8   _9   _A   _B   _C   _D   _E  _F*/
 /*0_*/0x00,0x01,0x02,0x03,0x9C,0x09,0x86,0x7F,0x97,0x8D,0x8E,0x0B,0x0C,0x0D,0x0E,0x0F,
 /*1_*/0x10,0x11,0x12,0x13,0x9D,0x85,0x08,0x87,0x18,0x19,0x92,0x8F,0x1C,0x1D,0x1E,0x1F,
@@ -475,9 +500,9 @@ SOFTWARE.
 /* (Confusingly named) Index is EBCDIC 037 I8 byte; value is
  * EBCDIC 037 UTF-EBCDIC equivalent */
 #  ifndef DOINIT
-    EXTCONST U8 PL_utf2e[];
+    EXTCONST U8 PL_utf2e[256];
 #  else
-    EXTCONST U8 PL_utf2e[] = {
+    EXTCONST U8 PL_utf2e[256] = {
 /*      _0   _1   _2   _3   _4   _5   _6   _7   _8   _9   _A   _B   _C   _D   _E  _F*/
 /*0_*/0x00,0x01,0x02,0x03,0x37,0x2D,0x2E,0x2F,0x16,0x05,0x25,0x0B,0x0C,0x0D,0x0E,0x0F,
 /*1_*/0x10,0x11,0x12,0x13,0x3C,0x3D,0x32,0x26,0x18,0x19,0x3F,0x27,0x1C,0x1D,0x1E,0x1F,
@@ -502,9 +527,9 @@ SOFTWARE.
 /* (Confusingly named) Index is EBCDIC 037 UTF-EBCDIC byte; value is
  * EBCDIC 037 I8 equivalent */
 #  ifndef DOINIT
-    EXTCONST U8 PL_e2utf[];
+    EXTCONST U8 PL_e2utf[256];
 #  else
-    EXTCONST U8 PL_e2utf[] = {
+    EXTCONST U8 PL_e2utf[256] = {
 /*      _0   _1   _2   _3   _4   _5   _6   _7   _8   _9   _A   _B   _C   _D   _E  _F*/
 /*0_*/0x00,0x01,0x02,0x03,0x9C,0x09,0x86,0x7F,0x97,0x8D,0x8E,0x0B,0x0C,0x0D,0x0E,0x0F,
 /*1_*/0x10,0x11,0x12,0x13,0x9D,0x85,0x08,0x87,0x18,0x19,0x92,0x8F,0x1C,0x1D,0x1E,0x1F,
@@ -531,9 +556,9 @@ SOFTWARE.
  * flags table in tr16.  The entries marked 9 in tr16 are continuation bytes
  * and are marked as length 1 here so that we can recover. */
 #  ifndef DOINIT
-    EXTCONST U8 PL_utf8skip[];
+    EXTCONST U8 PL_utf8skip[256];
 #  else
-    EXTCONST U8 PL_utf8skip[] = {
+    EXTCONST U8 PL_utf8skip[256] = {
 /*     _0  _1  _2  _3  _4  _5  _6  _7  _8  _9  _A  _B  _C  _D  _E _F*/
 /*0_*/  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
 /*1_*/  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
@@ -557,9 +582,9 @@ SOFTWARE.
 
 /* Index is EBCDIC 037 code point; value is its lowercase equivalent */
 #  ifndef DOINIT
-    EXTCONST U8 PL_latin1_lc[];
+    EXTCONST U8 PL_latin1_lc[256];
 #  else
-    EXTCONST U8 PL_latin1_lc[] = {
+    EXTCONST U8 PL_latin1_lc[256] = {
 /*      _0   _1   _2   _3   _4   _5   _6   _7   _8   _9   _A   _B   _C   _D   _E  _F*/
 /*0_*/0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,
 /*1_*/0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,
@@ -585,9 +610,9 @@ SOFTWARE.
  * The 'mod' in the name means that codepoints whose uppercase is above 255 or
  * longer than 1 character map to LATIN SMALL LETTER Y WITH DIARESIS */
 #  ifndef DOINIT
-    EXTCONST U8 PL_mod_latin1_uc[];
+    EXTCONST U8 PL_mod_latin1_uc[256];
 #  else
-    EXTCONST U8 PL_mod_latin1_uc[] = {
+    EXTCONST U8 PL_mod_latin1_uc[256] = {
 /*      _0   _1   _2   _3   _4   _5   _6   _7   _8   _9   _A   _B   _C   _D   _E  _F*/
 /*0_*/0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,
 /*1_*/0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,
@@ -612,9 +637,34 @@ SOFTWARE.
 /* Index is EBCDIC 037 code point; For A-Z, value is a-z; for a-z, value
  * is A-Z; all other code points map to themselves */
 #  ifndef DOINIT
-    EXTCONST U8 PL_fold[];
+    EXTCONST U8 PL_fold[256];
+#  else
+    EXTCONST U8 PL_fold[256] = {
+/*      _0   _1   _2   _3   _4   _5   _6   _7   _8   _9   _A   _B   _C   _D   _E  _F*/
+/*0_*/0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,
+/*1_*/0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,
+/*2_*/0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F,
+/*3_*/0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F,
+/*4_*/0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F,
+/*5_*/0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F,
+/*6_*/0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F,
+/*7_*/0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F,
+/*8_*/0x80,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,
+/*9_*/0x90,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F,
+/*A_*/0xA0,0xA1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,
+/*B_*/0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF,
+/*C_*/0xC0,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,
+/*D_*/0xD0,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF,
+/*E_*/0xE0,0xE1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,
+/*F_*/0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF
+/*      _0   _1   _2   _3   _4   _5   _6   _7   _8   _9   _A   _B   _C   _D   _E  _F*/
+};
+#  endif
+
+#  ifndef DOINIT
+    EXT U8 PL_fold_locale[256];
 #  else
-    EXTCONST U8 PL_fold[] = {
+    EXT U8 PL_fold_locale[256] = {
 /*      _0   _1   _2   _3   _4   _5   _6   _7   _8   _9   _A   _B   _C   _D   _E  _F*/
 /*0_*/0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,
 /*1_*/0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,
@@ -640,9 +690,9 @@ SOFTWARE.
  * (A => a; a => A, etc) in the 0-255 range.  If no such equivalent, value is
  * the code point itself */
 #  ifndef DOINIT
-    EXTCONST U8 PL_fold_latin1[];
+    EXTCONST U8 PL_fold_latin1[256];
 #  else
-    EXTCONST U8 PL_fold_latin1[] = {
+    EXTCONST U8 PL_fold_latin1[256] = {
 /*      _0   _1   _2   _3   _4   _5   _6   _7   _8   _9   _A   _B   _C   _D   _E  _F*/
 /*0_*/0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,
 /*1_*/0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,
@@ -671,9 +721,9 @@ SOFTWARE.
  */
 
 #  ifndef DOINIT
-    EXTCONST U8 PL_extended_utf8_dfa_tab[];
+    EXTCONST U8 PL_extended_utf8_dfa_tab[416];
 #  else
-    EXTCONST U8 PL_extended_utf8_dfa_tab[] = {
+    EXTCONST U8 PL_extended_utf8_dfa_tab[416] = {
 /*         _0  _1  _2  _3  _4  _5  _6  _7  _8  _9  _A  _B  _C  _D  _E _F*/
 /*0_    */  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
 /*1_    */  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
@@ -712,9 +762,9 @@ SOFTWARE.
  */
 
 #  ifndef DOINIT
-    EXTCONST U16 PL_strict_utf8_dfa_tab[];
+    EXTCONST U16 PL_strict_utf8_dfa_tab[624];
 #  else
-    EXTCONST U16 PL_strict_utf8_dfa_tab[] = {
+    EXTCONST U16 PL_strict_utf8_dfa_tab[624] = {
 /*          _0  _1  _2  _3  _4  _5  _6  _7  _8  _9  _A  _B  _C  _D  _E _F*/
 /*0_     */  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
 /*1_     */  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
@@ -759,9 +809,9 @@ SOFTWARE.
  */
 
 #  ifndef DOINIT
-    EXTCONST U8 PL_c9_utf8_dfa_tab[];
+    EXTCONST U8 PL_c9_utf8_dfa_tab[368];
 #  else
-    EXTCONST U8 PL_c9_utf8_dfa_tab[] = {
+    EXTCONST U8 PL_c9_utf8_dfa_tab[368] = {
 /*        _0  _1  _2  _3  _4  _5  _6  _7  _8  _9  _A  _B  _C  _D  _E _F*/
 /*0_   */  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
 /*1_   */  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
index 589ab1a..efcaabf 100644 (file)
--- a/embed.fnc
+++ b/embed.fnc
 :      pod, such as perlguts or warnings.h.  This flag is useful for downstream
 :      programs, such as Devel::PPPort.
 :
-:   I  This flag works exactly the same as 'i' but it also adds
-:      __attribute__((always_inline)) or __forceinline if either of them is
-:      supported by the compiler.
-:
-:         proto.h: function is declared as PERL_STATIC_FORCE_INLINE and
-:                  __attribute__always_inline__ is added
-:
 :   i  inline static.  This is used for functions that the compiler is being
 :      requested to inline.  If the function is in a header file its
 :      definition will be visible (unless guarded by #if..#endif) to all
 :      XS code.  (A typical guard will be that it is being included in a
 :      particular C file(s) or in the perl core.)  Therefore, all
-:      non-guarded function should also have the 'p' flag specified to avoid
+:      non-guarded functions should also have the 'p' flag specified to avoid
 :      polluting the XS code name space.  Otherwise an error is generated if
 :      the 'S' flag is not also specified.
 :
 :         proto.h: function is declared as PERL_STATIC_INLINE
 :
+:   I  This flag works exactly the same as 'i' but it also adds
+:      __attribute__((always_inline)) or __forceinline if either of them is
+:      supported by the compiler.
+:
+:         proto.h: function is declared as PERL_STATIC_FORCE_INLINE and
+:                  __attribute__always_inline__ is added
+:
 :   m  Implemented as a macro; there is no function associated with this name,
 :      and hence no long Perl_ or S_ name.  However, if the macro name itself
 :      begins with 'Perl_', autodoc.pl will show a thread context parameter
 :
 :      gcc has a bug (which they claim is a feature) in which casting the
 :       result of one of these to (void) doesn't silence the warning that the
-:      result is ignored.
+:      result is ignored.  (Perl has a workaround for this bug, see
+:       PERL_UNUSED_RESULT docs)
 :
 :        proto.h: add __attribute__warn_unused_result__
 :
@@ -541,7 +542,8 @@ Apd |void   |av_push        |NN AV *av|NN SV *val
 EXp    |void   |av_reify       |NN AV *av
 ApdR   |SV*    |av_shift       |NN AV *av
 Apd    |SV**   |av_store       |NN AV *av|SSize_t key|NULLOK SV *val
-AidRp  |SSize_t|av_top_index   |NN AV *av
+AMdRp  |SSize_t|av_top_index   |NN AV *av
+AidRp  |Size_t |av_count       |NN AV *av
 AmdR   |SSize_t|av_tindex      |NN AV *av
 Apd    |void   |av_undef       |NN AV *av
 Apdoex |SV**   |av_create_and_unshift_one|NN AV **const avp|NN SV *const val
@@ -656,9 +658,9 @@ Ap  |I32    |debstackptrs
 pR     |SV *   |defelem_target |NN SV *sv|NULLOK MAGIC *mg
 ATp    |char*  |delimcpy       |NN char* to|NN const char* toend|NN const char* from \
                                |NN const char* fromend|int delim|NN I32* retlen
-Tp     |char*  |delimcpy_no_escape|NN char* to|NN const char* toend \
-                                  |NN const char* from \
-                                  |NN const char* fromend|int delim \
+Tpd    |char*  |delimcpy_no_escape|NN char* to|NN const char* toend    \
+                                  |NN const char* from                 \
+                                  |NN const char* fromend|int delim    \
                                   |NN I32* retlen
 : Used in op.c, perl.c
 px     |void   |delete_eval_scope
@@ -683,7 +685,7 @@ pM  |bool|do_exec   |NN const char* cmd
 p      |bool|do_exec   |NN const char* cmd
 #endif
 
-#if defined(WIN32) || defined(__SYMBIAN32__) || defined(VMS)
+#if defined(WIN32) || defined(VMS)
 Ap     |int    |do_aspawn      |NULLOK SV* really|NN SV** mark|NN SV** sp
 Ap     |int    |do_spawn       |NN char* cmd
 Ap     |int    |do_spawn_nowait|NN char* cmd
@@ -822,7 +824,7 @@ Sd  |OP*    |traverse_op_tree|NN OP* top|NN OP* o
 #endif
 Afpd   |char*  |form           |NN const char* pat|...
 Ap     |char*  |vform          |NN const char* pat|NULLOK va_list* args
-Ap     |void   |free_tmps
+Cp     |void   |free_tmps
 #if defined(PERL_IN_OP_C)
 S      |void   |gen_constant_list|NULLOK OP* o
 #endif
@@ -919,10 +921,10 @@ AbMdRp    |bool   |hv_exists_ent  |NULLOK HV *hv|NN SV *keysv|U32 hash
 AbMdp  |SV**   |hv_fetch       |NULLOK HV *hv|NN const char *key|I32 klen \
                                |I32 lval
 AbMdp  |HE*    |hv_fetch_ent   |NULLOK HV *hv|NN SV *keysv|I32 lval|U32 hash
-Ap     |void*  |hv_common      |NULLOK HV *hv|NULLOK SV *keysv \
+Cp     |void*  |hv_common      |NULLOK HV *hv|NULLOK SV *keysv \
                                |NULLOK const char* key|STRLEN klen|int flags \
                                |int action|NULLOK SV *val|U32 hash
-Ap     |void*  |hv_common_key_len|NULLOK HV *hv|NN const char *key \
+Cp     |void*  |hv_common_key_len|NULLOK HV *hv|NN const char *key \
                                |I32 klen_i32|const int action|NULLOK SV *val \
                                |const U32 hash
 Apod   |STRLEN |hv_fill        |NN HV *const hv
@@ -981,7 +983,7 @@ Amd |I32    |foldEQ_utf8    |NN const char *s1|NULLOK char **pe1|UV l1 \
 Cp     |I32    |foldEQ_utf8_flags |NN const char *s1|NULLOK char **pe1|UV l1 \
                                |bool u1|NN const char *s2|NULLOK char **pe2 \
                                |UV l2|bool u2|U32 flags
-AiTp   |I32    |foldEQ_latin1  |NN const char* a|NN const char* b|I32 len
+CiTp   |I32    |foldEQ_latin1  |NN const char* a|NN const char* b|I32 len
 #if defined(PERL_IN_DOIO_C)
 SR     |bool   |ingroup        |Gid_t testgid|bool effective
 #endif
@@ -1309,7 +1311,7 @@ Ap        |PerlIO*|my_popen_list  |NN const char* mode|int n|NN SV ** args
 Apd    |void   |my_setenv      |NULLOK const char* nam|NULLOK const char* val
 ApMb   |I32    |my_stat
 pX     |I32    |my_stat_flags  |NULLOK const U32 flags
-Afp    |char * |my_strftime    |NN const char *fmt|int sec|int min|int hour|int mday|int mon|int year|int wday|int yday|int isdst
+Adfp   |char * |my_strftime    |NN const char *fmt|int sec|int min|int hour|int mday|int mon|int year|int wday|int yday|int isdst
 : Used in pp_ctl.c
 p      |void   |my_unexec
 CbDTPR |UV     |NATIVE_TO_NEED |const UV enc|const UV ch
@@ -1462,10 +1464,10 @@ p       |void   |rpeep          |NULLOK OP* o
 : Defined in doio.c, used only in pp_hot.c
 dopx   |PerlIO*|start_glob     |NN SV *tmpglob|NN IO *io
 
-Ap     |void   |reentrant_size
-Ap     |void   |reentrant_init
-Ap     |void   |reentrant_free
-AFTp   |void*  |reentrant_retry|NN const char *f|...
+Cp     |void   |reentrant_size
+Cp     |void   |reentrant_init
+Cp     |void   |reentrant_free
+CFTp   |void*  |reentrant_retry|NN const char *f|...
 
 : "Very" special - can't use the O flag for this one:
 : (The rename from perl_atexit to Perl_call_atexit was in 864dbfa3ca8032ef)
@@ -1559,17 +1561,17 @@ Ap      |void   |save_aelem_flags|NN AV* av|SSize_t idx|NN SV **sptr \
 Ap     |I32    |save_alloc     |I32 size|I32 pad
 Apdh   |void   |save_aptr      |NN AV** aptr
 Apdh   |AV*    |save_ary       |NN GV* gv
-Ap     |void   |save_bool      |NN bool* boolp
-Ap     |void   |save_clearsv   |NN SV** svp
-Ap     |void   |save_delete    |NN HV *hv|NN char *key|I32 klen
+Cp     |void   |save_bool      |NN bool* boolp
+Cp     |void   |save_clearsv   |NN SV** svp
+Cp     |void   |save_delete    |NN HV *hv|NN char *key|I32 klen
 Ap     |void   |save_hdelete   |NN HV *hv|NN SV *keysv
 Ap     |void   |save_adelete   |NN AV *av|SSize_t key
-Ap     |void   |save_destructor|DESTRUCTORFUNC_NOCONTEXT_t f|NN void* p
-Ap     |void   |save_destructor_x|DESTRUCTORFUNC_t f|NULLOK void* p
-ApMb   |void   |save_freesv    |NULLOK SV* sv
+Cp     |void   |save_destructor|DESTRUCTORFUNC_NOCONTEXT_t f|NN void* p
+Cp     |void   |save_destructor_x|DESTRUCTORFUNC_t f|NULLOK void* p
+CpMb   |void   |save_freesv    |NULLOK SV* sv
 : Used in SAVEFREOP(), used in op.c, pp_ctl.c
-ApMb   |void   |save_freeop    |NULLOK OP* o
-ApMb   |void   |save_freepv    |NULLOK char* pv
+CpMb   |void   |save_freeop    |NULLOK OP* o
+CpMb   |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
@@ -1579,24 +1581,24 @@ Ap      |void   |save_hints
 Am     |void   |save_helem     |NN HV *hv|NN SV *key|NN SV **sptr
 Ap     |void   |save_helem_flags|NN HV *hv|NN SV *key|NN SV **sptr|const U32 flags
 Apdh   |void   |save_hptr      |NN HV** hptr
-Ap     |void   |save_I16       |NN I16* intp
-Ap     |void   |save_I32       |NN I32* intp
-Ap     |void   |save_I8        |NN I8* bytep
-Ap     |void   |save_int       |NN int* intp
+Cp     |void   |save_I16       |NN I16* intp
+Cp     |void   |save_I32       |NN I32* intp
+Cp     |void   |save_I8        |NN I8* bytep
+Cp     |void   |save_int       |NN int* intp
 Apdh   |void   |save_item      |NN SV* item
-Ap     |void   |save_iv        |NN IV *ivp
+Cp     |void   |save_iv        |NN IV *ivp
 AbpDdh |void   |save_list      |NN SV** sarg|I32 maxsarg
-AbpD   |void   |save_long      |NN long* longp
-ApMb   |void   |save_mortalizesv|NN SV* sv
+CbpD   |void   |save_long      |NN long* longp
+CpMb   |void   |save_mortalizesv|NN SV* sv
 AbpD   |void   |save_nogv      |NN GV* gv
 : Used in SAVEFREOP(), used in gv.c, op.c, perl.c, pp_ctl.c, pp_sort.c
 ApMb   |void   |save_op
 Apdh   |SV*    |save_scalar    |NN GV* gv
-Ap     |void   |save_pptr      |NN char** pptr
+Cp     |void   |save_pptr      |NN char** pptr
 Ap     |void   |save_vptr      |NN void *ptr
-Ap     |void   |save_re_context
+Cp     |void   |save_re_context
 Ap     |void   |save_padsv_and_mortalize|PADOFFSET off
-Ap     |void   |save_sptr      |NN SV** sptr
+Cp     |void   |save_sptr      |NN SV** sptr
 Xp     |void   |save_strlen    |NN STRLEN* ptr
 Apdh   |SV*    |save_svref     |NN SV** sptr
 Axpo   |void   |savetmps
@@ -1649,8 +1651,8 @@ Ap        |I32    |start_subparse |I32 is_format|U32 flags
 Xp     |void   |init_named_cv  |NN CV *cv|NN OP *nameop
 : Used in pp_ctl.c
 p      |void   |sub_crush_depth|NN CV* cv
-ApbMd  |bool   |sv_2bool       |NN SV *const sv
-Apd    |bool   |sv_2bool_flags |NN SV *sv|I32 flags
+CpbMd  |bool   |sv_2bool       |NN SV *const sv
+Cpd    |bool   |sv_2bool_flags |NN SV *sv|I32 flags
 Apd    |CV*    |sv_2cv         |NULLOK SV* sv|NN HV **const st|NN GV **const gvp \
                                |const I32 lref
 Apd    |IO*    |sv_2io         |NN SV *const sv
@@ -1672,13 +1674,13 @@ Ap      |char*  |sv_2pvbyte_flags       |NN SV *sv|NULLOK STRLEN *const lp|const U32 flags
 AbpD   |char*  |sv_pvn_nomg    |NN SV* sv|NULLOK STRLEN* lp
 ApMb   |UV     |sv_2uv         |NN SV *sv
 Apd    |UV     |sv_2uv_flags   |NN SV *const sv|const I32 flags
-AbpdD  |IV     |sv_iv          |NN SV* sv
-AbpdD  |UV     |sv_uv          |NN SV* sv
-AbpdD  |NV     |sv_nv          |NN SV* sv
-AbpdD  |char*  |sv_pvn         |NN SV *sv|NN STRLEN *lp
-AbpdD  |char*  |sv_pvutf8n     |NN SV *sv|NN STRLEN *lp
-AbpdD  |char*  |sv_pvbyten     |NN SV *sv|NN STRLEN *lp
-Apd    |I32    |sv_true        |NULLOK SV *const sv
+CbpdD  |IV     |sv_iv          |NN SV* sv
+CbpdD  |UV     |sv_uv          |NN SV* sv
+CbpdD  |NV     |sv_nv          |NN SV* sv
+CbpdD  |char*  |sv_pvn         |NN SV *sv|NN STRLEN *lp
+CbpdD  |char*  |sv_pvutf8n     |NN SV *sv|NN STRLEN *lp
+CbpdD  |char*  |sv_pvbyten     |NN SV *sv|NN STRLEN *lp
+Cpd    |I32    |sv_true        |NULLOK SV *const sv
 #if defined(PERL_IN_SV_C)
 Sd     |void   |sv_add_arena   |NN char *const ptr|const U32 size \
                                |const U32 flags
@@ -1738,7 +1740,7 @@ poxX      |void   |sv_free2       |NN SV *const sv|const U32 refcnt
 : Used only in perl.c
 pd     |void   |sv_free_arenas
 Apd    |char*  |sv_gets        |NN SV *const sv|NN PerlIO *const fp|I32 append
-Apd    |char*  |sv_grow        |NN SV *const sv|STRLEN newlen
+Cpd    |char*  |sv_grow        |NN SV *const sv|STRLEN newlen
 Apd    |void   |sv_inc         |NULLOK SV *const sv
 Apd    |void   |sv_inc_nomg    |NULLOK SV *const sv
 ApMdb  |void   |sv_insert      |NN SV *const bigstr|const STRLEN offset \
@@ -1762,7 +1764,7 @@ EXp       |MAGIC *|sv_magicext_mglob|NN SV *sv
 ApdbMR |SV*    |sv_mortalcopy  |NULLOK SV *const oldsv
 ApdR   |SV*    |sv_mortalcopy_flags|NULLOK SV *const oldsv|U32 flags
 ApdR   |SV*    |sv_newmortal
-Apd    |SV*    |sv_newref      |NULLOK SV *const sv
+Cpd    |SV*    |sv_newref      |NULLOK SV *const sv
 Ap     |char*  |sv_peek        |NULLOK SV* sv
 Apd    |void   |sv_pos_u2b     |NULLOK SV *const sv|NN I32 *const offsetp|NULLOK I32 *const lenp
 Apd    |STRLEN |sv_pos_u2b_flags|NN SV *const sv|STRLEN uoffset \
@@ -1770,9 +1772,9 @@ Apd       |STRLEN |sv_pos_u2b_flags|NN SV *const sv|STRLEN uoffset \
 Apd    |void   |sv_pos_b2u     |NULLOK SV *const sv|NN I32 *const offsetp
 Apd    |STRLEN |sv_pos_b2u_flags|NN SV *const sv|STRLEN const offset \
                                 |U32 flags
-ApMdb  |char*  |sv_pvn_force   |NN SV* sv|NULLOK STRLEN* lp
-Apd    |char*  |sv_pvutf8n_force|NN SV *const sv|NULLOK STRLEN *const lp
-Apd    |char*  |sv_pvbyten_force|NN SV *const sv|NULLOK STRLEN *const lp
+CpMdb  |char*  |sv_pvn_force   |NN SV* sv|NULLOK STRLEN* lp
+Cpd    |char*  |sv_pvutf8n_force|NN SV *const sv|NULLOK STRLEN *const lp
+Cpd    |char*  |sv_pvbyten_force|NN SV *const sv|NULLOK STRLEN *const 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
@@ -1801,13 +1803,13 @@ Apd     |void   |sv_setpvn      |NN SV *const sv|NULLOK const char *const ptr|const STRLEN
 Apd    |char  *|sv_setpv_bufsize|NN SV *const sv|const STRLEN cur|const STRLEN len
 Xp     |void   |sv_sethek      |NN SV *const sv|NULLOK const HEK *const hek
 ApMdb  |void   |sv_setsv       |NN SV *dstr|NULLOK SV *sstr
-ApMdb  |void   |sv_taint       |NN SV* sv
-ApdR   |bool   |sv_tainted     |NN SV *const sv
+CpMdb  |void   |sv_taint       |NN SV* sv
+CpdR   |bool   |sv_tainted     |NN SV *const sv
 Apd    |int    |sv_unmagic     |NN SV *const sv|const int type
 Apd    |int    |sv_unmagicext  |NN SV *const sv|const int type|NULLOK MGVTBL *vtbl
 ApdMb  |void   |sv_unref       |NN SV* sv
 Apd    |void   |sv_unref_flags |NN SV *const ref|const U32 flags
-Apd    |void   |sv_untaint     |NN SV *const sv
+Cpd    |void   |sv_untaint     |NN SV *const sv
 Apd    |void   |sv_upgrade     |NN SV *const sv|svtype new_type
 ApdMb  |void   |sv_usepvn      |NN SV* sv|NULLOK char* ptr|STRLEN len
 Apd    |void   |sv_usepvn_flags|NN SV *const sv|NULLOK char* ptr|const STRLEN len\
@@ -1861,12 +1863,12 @@ EXp     |SV*|reg_named_buff          |NN REGEXP * const rx|NULLOK SV * const key \
                                  |NULLOK SV * const value|const U32 flags
 EXp    |SV*|reg_named_buff_iter     |NN REGEXP * const rx|NULLOK const SV * const lastkey \
                                  |const U32 flags
-Ap     |SV*|reg_named_buff_fetch    |NN REGEXP * const rx|NN SV * const namesv|const U32 flags
-Ap     |bool|reg_named_buff_exists  |NN REGEXP * const rx|NN SV * const key|const U32 flags
-Ap     |SV*|reg_named_buff_firstkey |NN REGEXP * const rx|const U32 flags
-Ap     |SV*|reg_named_buff_nextkey  |NN REGEXP * const rx|const U32 flags
-Ap     |SV*|reg_named_buff_scalar   |NN REGEXP * const rx|const U32 flags
-Ap     |SV*|reg_named_buff_all      |NN REGEXP * const rx|const U32 flags
+Cp     |SV*|reg_named_buff_fetch    |NN REGEXP * const rx|NN SV * const namesv|const U32 flags
+Cp     |bool|reg_named_buff_exists  |NN REGEXP * const rx|NN SV * const key|const U32 flags
+Cp     |SV*|reg_named_buff_firstkey |NN REGEXP * const rx|const U32 flags
+Cp     |SV*|reg_named_buff_nextkey  |NN REGEXP * const rx|const U32 flags
+Cp     |SV*|reg_named_buff_scalar   |NN REGEXP * const rx|const U32 flags
+Cp     |SV*|reg_named_buff_all      |NN REGEXP * const rx|const U32 flags
 
 : FIXME - is anything in re using this now?
 EXp    |void|reg_numbered_buff_fetch|NN REGEXP * const rx|const I32 paren|NULLOK SV * const sv
@@ -2392,7 +2394,7 @@ pT        |bool   |translate_substr_offsets|STRLEN curlen|IV pos1_iv \
                                         |NN STRLEN *lenp
 #endif
 #if defined(UNLINK_ALL_VERSIONS)
-Ap     |I32    |unlnk          |NN const char* f
+Cp     |I32    |unlnk          |NN const char* f
 #endif
 AbpdD  |SSize_t|unpack_str     |NN const char *pat|NN const char *patend|NN const char *s \
                                |NULLOK const char *strbeg|NN const char *strend|NULLOK char **new_s \
@@ -2441,7 +2443,7 @@ AdMTp     |UV     |utf8n_to_uvchr_error|NN const U8 *s                        \
                                |NULLOK STRLEN *retlen                      \
                                |const U32 flags                            \
                                |NULLOK U32 * errors
-AxTdip |UV     |utf8n_to_uvchr_msgs|NN const U8 *s                         \
+ATdip  |UV     |utf8n_to_uvchr_msgs|NN const U8 *s                         \
                                |STRLEN curlen                              \
                                |NULLOK STRLEN *retlen                      \
                                |const U32 flags                            \
@@ -2460,7 +2462,7 @@ CdbDp     |UV     |utf8n_to_uvuni|NN const U8 *s|STRLEN curlen|NULLOK STRLEN *retlen|U32
 Adm    |U8*    |uvchr_to_utf8  |NN U8 *d|UV uv
 Cp     |U8*    |uvuni_to_utf8  |NN U8 *d|UV uv
 Adm    |U8*    |uvchr_to_utf8_flags    |NN U8 *d|UV uv|UV flags
-Admx   |U8*    |uvchr_to_utf8_flags_msgs|NN U8 *d|UV uv|UV flags|NULLOK HV ** msgs
+Adm    |U8*    |uvchr_to_utf8_flags_msgs|NN U8 *d|UV uv|UV flags|NULLOK HV ** msgs
 CMpd   |U8*    |uvoffuni_to_utf8_flags |NN U8 *d|UV uv|const UV flags
 Cp     |U8*    |uvoffuni_to_utf8_flags_msgs|NN U8 *d|UV uv|const UV flags|NULLOK HV** msgs
 CdpbD  |U8*    |uvuni_to_utf8_flags    |NN U8 *d|UV uv|UV flags
@@ -2548,11 +2550,6 @@ ATpa     |Malloc_t|safesyscalloc |MEM_SIZE elements|MEM_SIZE size
 ATpR   |Malloc_t|safesysrealloc|Malloc_t where|MEM_SIZE nbytes
 ATp    |Free_t |safesysfree    |Malloc_t where
 CrTp   |void   |croak_memory_wrap
-#if defined(PERL_GLOBAL_STRUCT)
-Ap     |struct perl_vars *|GetVars
-Ap     |struct perl_vars*|init_global_struct
-Ap     |void   |free_global_struct|NN struct perl_vars *plvarsp
-#endif
 Ap     |int    |runops_standard
 Ap     |int    |runops_debug
 Afpd   |void   |sv_catpvf_mg   |NN SV *const sv|NN const char *const pat|...
@@ -2601,12 +2598,12 @@ Ap      |void   |do_sv_dump     |I32 level|NN PerlIO *file|NULLOK SV *sv|I32 nest \
                                |I32 maxnest|bool dumpops|STRLEN pvlim
 Ap     |void   |magic_dump     |NULLOK const MAGIC *mg
 Ap     |void   |reginitcolors
-ApdRMb |char*  |sv_2pv_nolen   |NN SV* sv
-ApdRMb |char*  |sv_2pvutf8_nolen|NN SV* sv
-ApdRMb |char*  |sv_2pvbyte_nolen|NN SV* sv
-ApMdbR |char*  |sv_pv          |NN SV *sv
-ApMdbR |char*  |sv_pvutf8      |NN SV *sv
-ApMdbR |char*  |sv_pvbyte      |NN SV *sv
+CpdRMb |char*  |sv_2pv_nolen   |NN SV* sv
+CpdRMb |char*  |sv_2pvutf8_nolen|NN SV* sv
+CpdRMb |char*  |sv_2pvbyte_nolen|NN SV* sv
+CpMdbR |char*  |sv_pv          |NN SV *sv
+CpMdbR |char*  |sv_pvutf8      |NN SV *sv
+CpMdbR |char*  |sv_pvbyte      |NN SV *sv
 ApMdb  |STRLEN |sv_utf8_upgrade|NN SV *sv
 Amd    |STRLEN |sv_utf8_upgrade_nomg|NN SV *sv
 ApdMb  |bool   |sv_utf8_downgrade|NN SV *const sv|const bool fail_ok
@@ -3293,7 +3290,7 @@ Sd        |PADOFFSET|pad_findlex  |NN const char *namepv|STRLEN namelen|U32 flags \
                                |NN PADNAME** out_name|NN int *out_flags
 #endif
 #ifdef DEBUGGING
-Apd    |SV*    |pad_sv         |PADOFFSET po
+Cpd    |SV*    |pad_sv         |PADOFFSET po
 Apd    |void   |pad_setsv      |PADOFFSET po|NN SV* sv
 #endif
 pd     |void   |pad_block_start|int full
@@ -3398,8 +3395,8 @@ ApbM      |GV*    |gv_SVadd       |NULLOK GV *gv
 #if defined(PERL_IN_UTIL_C)
 S      |bool   |ckwarn_common  |U32 w
 #endif
-ApoP   |bool   |ckwarn         |U32 w
-ApoP   |bool   |ckwarn_d       |U32 w
+CpoP   |bool   |ckwarn         |U32 w
+CpoP   |bool   |ckwarn_d       |U32 w
 : FIXME - exported for ByteLoader - public or private?
 XEopxR |STRLEN *|new_warnings_bitfield|NULLOK STRLEN *buffer \
                                |NN const char *const bits|STRLEN size
@@ -3415,13 +3412,8 @@ pTd      |bool|quadmath_format_needed|NN const char* format
 pe     |void   |my_clearenv
 
 #ifdef PERL_IMPLICIT_CONTEXT
-#ifdef PERL_GLOBAL_STRUCT_PRIVATE
-Apo    |void*  |my_cxt_init    |NN const char *my_cxt_key|size_t size
-Apo    |int    |my_cxt_index   |NN const char *my_cxt_key
-#else
 Apo    |void*  |my_cxt_init    |NN int *indexp|size_t size
 #endif
-#endif
 #if defined(PERL_IN_UTIL_C)
 So     |void   |xs_version_bootcheck|U32 items|U32 ax|NN const char *xs_p \
                                |STRLEN xs_len
@@ -3495,9 +3487,9 @@ Apd       |void   |mro_method_changed_in  |NN HV* stash
 pde    |void   |mro_package_moved      |NULLOK HV * const stash|NULLOK HV * const oldstash|NN const GV * const gv|U32 flags
 : Only used in perl.c
 p      |void   |boot_core_mro
-ApoT   |void   |sys_init       |NN int* argc|NN char*** argv
-ApoT   |void   |sys_init3      |NN int* argc|NN char*** argv|NN char*** env
-ApoT   |void   |sys_term
+CpoT   |void   |sys_init       |NN int* argc|NN char*** argv
+CpoT   |void   |sys_init3      |NN int* argc|NN char*** argv|NN char*** env
+CpoT   |void   |sys_term
 Apxd   |const char *|cop_fetch_label|NN COP *const cop \
                |NULLOK STRLEN *len|NULLOK U32 *flags
 : Only used  in op.c and the perl compiler
@@ -3531,29 +3523,29 @@ Apx     |void   |leave_adjust_stacks|NN SV **from_sp|NN SV **to_sp \
                 |U8 gimme|int filter
 
 #ifndef PERL_NO_INLINE_FUNCTIONS
-Aixp   |U8     |gimme_V         |
-Aixp   |PERL_CONTEXT * |cx_pushblock|U8 type|U8 gimme|NN SV** sp|I32 saveix
-Aixp   |void   |cx_popblock|NN PERL_CONTEXT *cx
-Aixp   |void   |cx_topblock|NN PERL_CONTEXT *cx
-Aixp   |void   |cx_pushsub      |NN PERL_CONTEXT *cx|NN CV *cv \
+Cixp   |U8     |gimme_V         |
+Cixp   |PERL_CONTEXT * |cx_pushblock|U8 type|U8 gimme|NN SV** sp|I32 saveix
+Cixp   |void   |cx_popblock|NN PERL_CONTEXT *cx
+Cixp   |void   |cx_topblock|NN PERL_CONTEXT *cx
+Cixp   |void   |cx_pushsub      |NN PERL_CONTEXT *cx|NN CV *cv \
                                 |NULLOK OP *retop|bool hasargs
-Aixp   |void   |cx_popsub_common|NN PERL_CONTEXT *cx
-Aixp   |void   |cx_popsub_args  |NN PERL_CONTEXT *cx
-Aixp   |void   |cx_popsub       |NN PERL_CONTEXT *cx
-Aixp   |void   |cx_pushformat   |NN PERL_CONTEXT *cx|NN CV *cv \
+Cixp   |void   |cx_popsub_common|NN PERL_CONTEXT *cx
+Cixp   |void   |cx_popsub_args  |NN PERL_CONTEXT *cx
+Cixp   |void   |cx_popsub       |NN PERL_CONTEXT *cx
+Cixp   |void   |cx_pushformat   |NN PERL_CONTEXT *cx|NN CV *cv \
                                 |NULLOK OP *retop|NULLOK GV *gv
-Aixp   |void   |cx_popformat    |NN PERL_CONTEXT *cx
-Aixp   |void   |cx_pusheval     |NN PERL_CONTEXT *cx \
+Cixp   |void   |cx_popformat    |NN PERL_CONTEXT *cx
+Cixp   |void   |cx_pusheval     |NN PERL_CONTEXT *cx \
                                 |NULLOK OP *retop|NULLOK SV *namesv
-Aixp   |void   |cx_popeval      |NN PERL_CONTEXT *cx
-Aixp   |void   |cx_pushloop_plain|NN PERL_CONTEXT *cx
-Aixp   |void   |cx_pushloop_for |NN PERL_CONTEXT *cx \
+Cixp   |void   |cx_popeval      |NN PERL_CONTEXT *cx
+Cixp   |void   |cx_pushloop_plain|NN PERL_CONTEXT *cx
+Cixp   |void   |cx_pushloop_for |NN PERL_CONTEXT *cx \
                                 |NN void *itervarp|NULLOK SV *itersave
-Aixp   |void   |cx_poploop      |NN PERL_CONTEXT *cx
-Aixp   |void   |cx_pushwhen     |NN PERL_CONTEXT *cx
-Aixp   |void   |cx_popwhen      |NN PERL_CONTEXT *cx
-Aixp   |void   |cx_pushgiven    |NN PERL_CONTEXT *cx|NULLOK SV *orig_defsv
-Aixp   |void   |cx_popgiven     |NN PERL_CONTEXT *cx
+Cixp   |void   |cx_poploop      |NN PERL_CONTEXT *cx
+Cixp   |void   |cx_pushwhen     |NN PERL_CONTEXT *cx
+Cixp   |void   |cx_popwhen      |NN PERL_CONTEXT *cx
+Cixp   |void   |cx_pushgiven    |NN PERL_CONTEXT *cx|NULLOK SV *orig_defsv
+Cixp   |void   |cx_popgiven     |NN PERL_CONTEXT *cx
 #endif
 
 #ifdef USE_DTRACE
diff --git a/embed.h b/embed.h
index 182b12a..50706a7 100644 (file)
--- a/embed.h
+++ b/embed.h
@@ -48,6 +48,7 @@
 #define atfork_lock            Perl_atfork_lock
 #define atfork_unlock          Perl_atfork_unlock
 #define av_clear(a)            Perl_av_clear(aTHX_ a)
+#define av_count(a)            Perl_av_count(aTHX_ a)
 #define av_delete(a,b,c)       Perl_av_delete(aTHX_ a,b,c)
 #define av_exists(a,b)         Perl_av_exists(aTHX_ a,b)
 #define av_extend(a,b)         Perl_av_extend(aTHX_ a,b)
@@ -59,7 +60,6 @@
 #define av_push(a,b)           Perl_av_push(aTHX_ a,b)
 #define av_shift(a)            Perl_av_shift(aTHX_ a)
 #define av_store(a,b,c)                Perl_av_store(aTHX_ a,b,c)
-#define av_top_index(a)                Perl_av_top_index(aTHX_ a)
 #define av_undef(a)            Perl_av_undef(aTHX_ a)
 #define av_unshift(a,b)                Perl_av_unshift(aTHX_ a,b)
 #define block_end(a,b)         Perl_block_end(aTHX_ a,b)
 #define dump_mstats(a)         Perl_dump_mstats(aTHX_ a)
 #define get_mstats(a,b,c)      Perl_get_mstats(aTHX_ a,b,c)
 #endif
-#if defined(PERL_GLOBAL_STRUCT)
-#define GetVars()              Perl_GetVars(aTHX)
-#define free_global_struct(a)  Perl_free_global_struct(aTHX_ a)
-#define init_global_struct()   Perl_init_global_struct(aTHX)
-#endif
 #if defined(PERL_IMPLICIT_CONTEXT)
 #define croak_nocontext                Perl_croak_nocontext
 #define deb_nocontext          Perl_deb_nocontext
 #define PerlIO_unread(a,b,c)   Perl_PerlIO_unread(aTHX_ a,b,c)
 #define PerlIO_write(a,b,c)    Perl_PerlIO_write(aTHX_ a,b,c)
 #endif
-#if defined(WIN32) || defined(__SYMBIAN32__) || defined(VMS)
+#if defined(WIN32) || defined(VMS)
 #define do_aspawn(a,b,c)       Perl_do_aspawn(aTHX_ a,b,c)
 #define do_spawn(a)            Perl_do_spawn(aTHX_ a)
 #define do_spawn_nowait(a)     Perl_do_spawn_nowait(aTHX_ a)
index de1aa99..4427e07 100644 (file)
 #define PL_comppad_name_floor  (vTHX->Icomppad_name_floor)
 #define PL_constpadix          (vTHX->Iconstpadix)
 #define PL_cop_seqmax          (vTHX->Icop_seqmax)
-#define PL_cryptseen           (vTHX->Icryptseen)
 #define PL_curcop              (vTHX->Icurcop)
 #define PL_curcopdb            (vTHX->Icurcopdb)
 #define PL_curlocales          (vTHX->Icurlocales)
 
 #endif /* MULTIPLICITY */
 
-#if defined(PERL_GLOBAL_STRUCT)
-
-#define PL_C_locale_obj                (my_vars->GC_locale_obj)
-#define PL_GC_locale_obj       (my_vars->GC_locale_obj)
-#define PL_appctx              (my_vars->Gappctx)
-#define PL_Gappctx             (my_vars->Gappctx)
-#define PL_check               (my_vars->Gcheck)
-#define PL_Gcheck              (my_vars->Gcheck)
-#define PL_check_mutex         (my_vars->Gcheck_mutex)
-#define PL_Gcheck_mutex                (my_vars->Gcheck_mutex)
-#define PL_csighandler1p       (my_vars->Gcsighandler1p)
-#define PL_Gcsighandler1p      (my_vars->Gcsighandler1p)
-#define PL_csighandler3p       (my_vars->Gcsighandler3p)
-#define PL_Gcsighandler3p      (my_vars->Gcsighandler3p)
-#define PL_csighandlerp                (my_vars->Gcsighandlerp)
-#define PL_Gcsighandlerp       (my_vars->Gcsighandlerp)
-#define PL_curinterp           (my_vars->Gcurinterp)
-#define PL_Gcurinterp          (my_vars->Gcurinterp)
-#define PL_do_undump           (my_vars->Gdo_undump)
-#define PL_Gdo_undump          (my_vars->Gdo_undump)
-#define PL_dollarzero_mutex    (my_vars->Gdollarzero_mutex)
-#define PL_Gdollarzero_mutex   (my_vars->Gdollarzero_mutex)
-#define PL_env_mutex           (my_vars->Genv_mutex)
-#define PL_Genv_mutex          (my_vars->Genv_mutex)
-#define PL_fold_locale         (my_vars->Gfold_locale)
-#define PL_Gfold_locale                (my_vars->Gfold_locale)
-#define PL_hash_chars          (my_vars->Ghash_chars)
-#define PL_Ghash_chars         (my_vars->Ghash_chars)
-#define PL_hash_seed           (my_vars->Ghash_seed)
-#define PL_Ghash_seed          (my_vars->Ghash_seed)
-#define PL_hash_seed_set       (my_vars->Ghash_seed_set)
-#define PL_Ghash_seed_set      (my_vars->Ghash_seed_set)
-#define PL_hash_state          (my_vars->Ghash_state)
-#define PL_Ghash_state         (my_vars->Ghash_state)
-#define PL_hints_mutex         (my_vars->Ghints_mutex)
-#define PL_Ghints_mutex                (my_vars->Ghints_mutex)
-#define PL_keyword_plugin      (my_vars->Gkeyword_plugin)
-#define PL_Gkeyword_plugin     (my_vars->Gkeyword_plugin)
-#define PL_keyword_plugin_mutex        (my_vars->Gkeyword_plugin_mutex)
-#define PL_Gkeyword_plugin_mutex       (my_vars->Gkeyword_plugin_mutex)
-#define PL_lc_numeric_mutex    (my_vars->Glc_numeric_mutex)
-#define PL_Glc_numeric_mutex   (my_vars->Glc_numeric_mutex)
-#define PL_locale_mutex                (my_vars->Glocale_mutex)
-#define PL_Glocale_mutex       (my_vars->Glocale_mutex)
-#define PL_malloc_mutex                (my_vars->Gmalloc_mutex)
-#define PL_Gmalloc_mutex       (my_vars->Gmalloc_mutex)
-#define PL_mmap_page_size      (my_vars->Gmmap_page_size)
-#define PL_Gmmap_page_size     (my_vars->Gmmap_page_size)
-#define PL_my_ctx_mutex                (my_vars->Gmy_ctx_mutex)
-#define PL_Gmy_ctx_mutex       (my_vars->Gmy_ctx_mutex)
-#define PL_my_cxt_index                (my_vars->Gmy_cxt_index)
-#define PL_Gmy_cxt_index       (my_vars->Gmy_cxt_index)
-#define PL_my_cxt_keys         (my_vars->Gmy_cxt_keys)
-#define PL_Gmy_cxt_keys                (my_vars->Gmy_cxt_keys)
-#define PL_my_cxt_keys_size    (my_vars->Gmy_cxt_keys_size)
-#define PL_Gmy_cxt_keys_size   (my_vars->Gmy_cxt_keys_size)
-#define PL_op_mutex            (my_vars->Gop_mutex)
-#define PL_Gop_mutex           (my_vars->Gop_mutex)
-#define PL_op_seq              (my_vars->Gop_seq)
-#define PL_Gop_seq             (my_vars->Gop_seq)
-#define PL_op_sequence         (my_vars->Gop_sequence)
-#define PL_Gop_sequence                (my_vars->Gop_sequence)
-#define PL_perlio_debug_fd     (my_vars->Gperlio_debug_fd)
-#define PL_Gperlio_debug_fd    (my_vars->Gperlio_debug_fd)
-#define PL_perlio_fd_refcnt    (my_vars->Gperlio_fd_refcnt)
-#define PL_Gperlio_fd_refcnt   (my_vars->Gperlio_fd_refcnt)
-#define PL_perlio_fd_refcnt_size       (my_vars->Gperlio_fd_refcnt_size)
-#define PL_Gperlio_fd_refcnt_size      (my_vars->Gperlio_fd_refcnt_size)
-#define PL_perlio_mutex                (my_vars->Gperlio_mutex)
-#define PL_Gperlio_mutex       (my_vars->Gperlio_mutex)
-#ifdef __VMS
-#define PL_perllib_sep         (my_vars->Gperllib_sep)
-#define PL_Gperllib_sep                (my_vars->Gperllib_sep)
-#endif
-#define PL_ppaddr              (my_vars->Gppaddr)
-#define PL_Gppaddr             (my_vars->Gppaddr)
-#ifdef OS2
-#define PL_sh_path             (my_vars->Gsh_path)
-#define PL_Gsh_path            (my_vars->Gsh_path)
-#endif
-#define PL_sig_defaulting      (my_vars->Gsig_defaulting)
-#define PL_Gsig_defaulting     (my_vars->Gsig_defaulting)
-#define PL_sig_handlers_initted        (my_vars->Gsig_handlers_initted)
-#define PL_Gsig_handlers_initted       (my_vars->Gsig_handlers_initted)
-#define PL_sig_ignoring                (my_vars->Gsig_ignoring)
-#define PL_Gsig_ignoring       (my_vars->Gsig_ignoring)
-#define PL_sig_trapped         (my_vars->Gsig_trapped)
-#define PL_Gsig_trapped                (my_vars->Gsig_trapped)
-#define PL_sigfpe_saved                (my_vars->Gsigfpe_saved)
-#define PL_Gsigfpe_saved       (my_vars->Gsigfpe_saved)
-#define PL_strategy_accept     (my_vars->Gstrategy_accept)
-#define PL_Gstrategy_accept    (my_vars->Gstrategy_accept)
-#define PL_strategy_dup                (my_vars->Gstrategy_dup)
-#define PL_Gstrategy_dup       (my_vars->Gstrategy_dup)
-#define PL_strategy_dup2       (my_vars->Gstrategy_dup2)
-#define PL_Gstrategy_dup2      (my_vars->Gstrategy_dup2)
-#define PL_strategy_mkstemp    (my_vars->Gstrategy_mkstemp)
-#define PL_Gstrategy_mkstemp   (my_vars->Gstrategy_mkstemp)
-#define PL_strategy_open       (my_vars->Gstrategy_open)
-#define PL_Gstrategy_open      (my_vars->Gstrategy_open)
-#define PL_strategy_open3      (my_vars->Gstrategy_open3)
-#define PL_Gstrategy_open3     (my_vars->Gstrategy_open3)
-#define PL_strategy_pipe       (my_vars->Gstrategy_pipe)
-#define PL_Gstrategy_pipe      (my_vars->Gstrategy_pipe)
-#define PL_strategy_socket     (my_vars->Gstrategy_socket)
-#define PL_Gstrategy_socket    (my_vars->Gstrategy_socket)
-#define PL_strategy_socketpair (my_vars->Gstrategy_socketpair)
-#define PL_Gstrategy_socketpair        (my_vars->Gstrategy_socketpair)
-#define PL_sv_placeholder      (my_vars->Gsv_placeholder)
-#define PL_Gsv_placeholder     (my_vars->Gsv_placeholder)
-#define PL_thr_key             (my_vars->Gthr_key)
-#define PL_Gthr_key            (my_vars->Gthr_key)
-#define PL_timesbase           (my_vars->Gtimesbase)
-#define PL_Gtimesbase          (my_vars->Gtimesbase)
-#define PL_use_safe_putenv     (my_vars->Guse_safe_putenv)
-#define PL_Guse_safe_putenv    (my_vars->Guse_safe_putenv)
-#define PL_user_def_props      (my_vars->Guser_def_props)
-#define PL_Guser_def_props     (my_vars->Guser_def_props)
-#define PL_user_def_props_aTHX (my_vars->Guser_def_props_aTHX)
-#define PL_Guser_def_props_aTHX        (my_vars->Guser_def_props_aTHX)
-#define PL_user_prop_mutex     (my_vars->Guser_prop_mutex)
-#define PL_Guser_prop_mutex    (my_vars->Guser_prop_mutex)
-#define PL_veto_cleanup                (my_vars->Gveto_cleanup)
-#define PL_Gveto_cleanup       (my_vars->Gveto_cleanup)
-#define PL_watch_pvx           (my_vars->Gwatch_pvx)
-#define PL_Gwatch_pvx          (my_vars->Gwatch_pvx)
-
-#endif /* PERL_GLOBAL_STRUCT */
-
 /* ex: set ro: */
index 80c7f85..551f230 100644 (file)
@@ -20,7 +20,7 @@ sub import {
 # walkoptree comes from B.xs
 
 BEGIN {
-    $B::VERSION = '1.80';
+    $B::VERSION = '1.81';
     @B::EXPORT_OK = ();
 
     # Our BOOT code needs $VERSION set, and will append to @EXPORT_OK.
index 8a41265..ae2393e 100644 (file)
@@ -486,7 +486,6 @@ typedef PADNAME     *B__PADNAME;
 static XSPROTO(intrpvar_sv_common); /* prototype to pass -Wmissing-prototypes */
 static XSPROTO(intrpvar_sv_common)
 {
-    dVAR;
     dXSARGS;
     SV *ret;
     if (items != 0)
index 53236c9..54c4211 100644 (file)
@@ -5,7 +5,7 @@ use warnings;
 our ($TODO, $Level, $using_open);
 require "test.pl";
 
-our $VERSION = '0.16';
+our $VERSION = '0.17';
 
 # now export checkOptree, and those test.pl functions used by tests
 our @EXPORT = qw( checkOptree plan skip skip_all pass is like unlike
@@ -314,21 +314,7 @@ our %gOpts =       # values are replaced at runtime !!
     );
 
 
-# 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.
-
-our $threaded = 1
-  if $Config::Config{useithreads} || $Config::Config{use5005threads};
+our $threaded = 1 if $Config::Config{usethreads};
 our $platform = ($threaded) ? "threaded" : "plain";
 our $thrstat = ($threaded)  ? "threaded" : "nonthreaded";
 
index 3541ce3..870429f 100644 (file)
@@ -521,7 +521,7 @@ like $out, qr/$end/, 'OP_AND->op_other points correctly';
     is(scalar(@hints), 3, "3 hints");
     is($hints[0], 'v:{',                           "hints[0]");
     is($hints[1], 'v:*,&,{,x*,x&,x$,$',            "hints[1]");
-    is($hints[2], 'v:us,*,&,{,x*,x&,x$,$,fea=7', "hints[2]");
+    is($hints[2], 'v:us,*,&,{,x*,x&,x$,$,fea=15',  "hints[2]");
 }
 
 __END__
index f92ac9e..dbbf3d2 100644 (file)
@@ -20,18 +20,11 @@ plan tests => 15;
 
 my $verbose = @ARGV; # set if ANY ARGS
 
-my $a;
-
 my $path = join " ", map { qq["-I$_"] } @INC;
-my $is_thread = $Config{use5005threads} && $Config{use5005threads} eq 'define';
-
-if ($is_thread) {
-    ok "# use5005threads: test skipped\n";
-} else {
-    $a = `$^X $path "-MO=Showlex" -e "my \@one" 2>&1`;
-    like ($a, qr/undef.*: \([^)]*\) \@one.*Nullsv.*AV/s,
-         "canonical usage works");
-}
+
+my $o = `$^X $path "-MO=Showlex" -e "my \@one" 2>&1`;
+like ($o, qr/undef.*: \([^)]*\) \@one.*Nullsv.*AV/s,
+      "canonical usage works");
 
 # v1.01 tests
 
index bd56b86..b5743d2 100644 (file)
@@ -3,7 +3,7 @@
 
 package Devel::Peek;
 
-$VERSION = '1.28';
+$VERSION = '1.29';
 $XS_VERSION = $VERSION;
 $VERSION = eval $VERSION;
 
index 8a8c0b9..a5f8fba 100644 (file)
@@ -328,7 +328,6 @@ mstats2hash(SV *sv, SV *rv, int level)
 static void
 S_do_dump(pTHX_ SV *const sv, I32 lim)
 {
-    dVAR;
     SV *pv_lim_sv = perl_get_sv("Devel::Peek::pv_limit", 0);
     const STRLEN pv_lim = pv_lim_sv ? SvIV(pv_lim_sv) : 0;
     SV *dumpop = perl_get_sv("Devel::Peek::dump_ops", 0);
index 5c14ccc..86a1128 100644 (file)
@@ -88,7 +88,7 @@ package DynaLoader;
 # Tim.Bunce@ig.co.uk, August 1994
 
 BEGIN {
-    $VERSION = '1.47';
+    $VERSION = '1.48';
 }
 
 EOT
@@ -486,14 +486,6 @@ sub dl_findfile {
             push(@names, $_);
         }
        my $dirsep = '/';
-       <<$^O-eq-symbian>>
-       $dirsep = '\\';
-       if ($0 =~ /^([a-z]):/i) {
-           my $drive = $1;
-           @dirs = map { "$drive:$_" } @dirs;
-           @dl_library_path = map { "$drive:$_" } @dl_library_path;
-       }
-       <</$^O-eq-symbian>>
         foreach $dir (@dirs, @dl_library_path) {
             next unless -d $dir;
            <<$^O-eq-VMS>>
diff --git a/ext/DynaLoader/dl_symbian.xs b/ext/DynaLoader/dl_symbian.xs
deleted file mode 100644 (file)
index c2d1094..0000000
+++ /dev/null
@@ -1,245 +0,0 @@
-/* dl_symbian.xs
- * 
- * Platform:   Symbian 7.0s
- * Author:     Jarkko Hietaniemi <jarkko.hietaniemi@nokia.com>
- * Copyright:  2004, Nokia
- * License:    Artistic/GPL
- *
- */
-
-/*
- * In Symbian DLLs there is no name information, one can only access
- * the functions by their ordinals.  Perl, however, very much would like
- * to load functions by their names.  We fake this by having a special
- * setup function at the ordinal 1 (this is arranged by building the DLLs
- * in a special way).  The setup function builds a Perl hash mapping the
- * names to the ordinals, and the hash is then used by dlsym().
- *
- */
-
-#include <e32base.h>
-#include <eikdll.h>
-#include <utf.h>
-
-/* This is a useful pattern: first include the Symbian headers,
- * only after that the Perl ones.  Otherwise you will get a lot
- * trouble because of Symbian's New(), Copy(), etc definitions. */
-
-#define PERL_EXT
-#define PERL_IN_DL_SYMBIAN_XS
-
-#include "EXTERN.h"
-#include "perl.h"
-#include "XSUB.h"
-
-START_EXTERN_C
-
-void *dlopen(const char *filename, int flag);
-void *dlsym(void *handle, const char *symbol);
-int   dlclose(void *handle);
-const char *dlerror(void);
-
-extern void*  memset(void *s, int c, size_t n);
-extern size_t strlen(const char *s);
-
-END_EXTERN_C
-
-#include "dlutils.c"
-
-#define RTLD_LAZY   0x0001
-#define RTLD_NOW    0x0002
-#define RTLD_GLOBAL 0x0004
-
-#ifndef NULL
-#  define NULL 0
-#endif
-
-/* No need to pull in symbian_dll.cpp for this. */
-#define symbian_get_vars() ((void*)Dll::Tls())
-
-const TInt KPerlDllSetupFunction = 1;
-
-typedef struct {
-    RLibrary   handle;
-    TInt       error;
-    HV*                symbols;
-} PerlSymbianLibHandle;
-
-typedef void (*PerlSymbianLibInit)(void *);
-
-void* dlopen(const char *filename, int flags) {
-    TBuf16<KMaxFileName> utf16fn;
-    const TUint8* utf8fn = (const TUint8*)filename;
-    PerlSymbianLibHandle* h = NULL;
-    TInt error;
-
-    error =
-        CnvUtfConverter::ConvertToUnicodeFromUtf8(utf16fn, TPtrC8(utf8fn));
-    if (error == KErrNone) {
-        h = new PerlSymbianLibHandle;
-        if (h) {
-            h->error   = KErrNone;
-            h->symbols = (HV *)NULL;
-        } else
-            error = KErrNoMemory;
-    }
-
-    if (h && error == KErrNone) {
-        error = (h->handle).Load(utf16fn);
-        if (error == KErrNone) {
-            TLibraryFunction init = (h->handle).Lookup(KPerlDllSetupFunction);
-            ((PerlSymbianLibInit)init)(h);
-        } else {
-           free(h);
-            h = NULL;
-        }
-    }
-
-    if (h)
-        h->error = error;
-
-    return h;
-}
-
-void* dlsym(void *handle, const char *symbol) {
-    if (handle) {
-        dTHX;
-        PerlSymbianLibHandle* h = (PerlSymbianLibHandle*)handle;
-        HV* symbols = h->symbols;
-        if (symbols) {
-            SV** svp = hv_fetch(symbols, symbol, strlen(symbol), FALSE);
-            if (svp && *svp && SvIOK(*svp)) {
-                IV ord = SvIV(*svp);
-                if (ord > 0)
-                    return (void*)((h->handle).Lookup(ord));
-            }
-        }
-    }
-    return NULL;
-}
-
-int dlclose(void *handle) {
-    PerlSymbianLibHandle* h = (PerlSymbianLibHandle*)handle;
-    if (h) {
-        (h->handle).Close();
-        if (h->symbols) {
-            dTHX;
-            hv_undef(h->symbols);
-            h->symbols = NULL;
-        }
-        return 0;
-    } else
-        return 1;
-}
-
-const char* dlerror(void) {
-    return 0;  /* Bad interface: assumes static data. */
-}
-
-static void
-dl_private_init(pTHX)
-{
-    (void)dl_generic_private_init(aTHX);
-}
-MODULE = DynaLoader    PACKAGE = DynaLoader
-
-PROTOTYPES:  ENABLE
-
-BOOT:
-    (void)dl_private_init(aTHX);
-
-
-void
-dl_load_file(filename, flags=0)
-    char *     filename
-    int                flags
-  PREINIT:
-    PerlSymbianLibHandle* h;
-  CODE:
-{
-    ST(0) = sv_newmortal();
-    h = (PerlSymbianLibHandle*)dlopen(filename, flags);
-    if (h && h->error == KErrNone)
-       sv_setiv(ST(0), PTR2IV(h));
-    else
-        SaveError(aTHX_ "(dl_load_file %s %d)"
-                        filename, h ? h->error : -1);
-}
-
-
-int
-dl_unload_file(libhandle)
-    void *     libhandle
-  CODE:
-    RETVAL = (dlclose(libhandle) == 0 ? 1 : 0);
-  OUTPUT:
-    RETVAL
-
-
-void
-dl_find_symbol(libhandle, symbolname, ign_err=0)
-    void *     libhandle
-    char *     symbolname
-    int                ign_err
-    PREINIT:
-    void *sym;
-    CODE:
-    PerlSymbianLibHandle* h = (PerlSymbianLibHandle*)libhandle;
-    sym = dlsym(libhandle, symbolname);
-    ST(0) = sv_newmortal();
-    if (sym) {
-       sv_setiv(ST(0), PTR2IV(sym));
-    } else {
-       if (!ign_err)
-           SaveError(aTHX_ "(dl_find_symbol %s %d)",
-                     symbolname, h ? h->error : -1);
-    }
-
-
-void
-dl_undef_symbols()
-    CODE:
-
-
-
-# These functions should not need changing on any platform:
-
-void
-dl_install_xsub(perl_name, symref, filename="$Package")
-    char *             perl_name
-    void *             symref 
-    const char *       filename
-    CODE:
-    ST(0) = sv_2mortal(newRV((SV*)newXS_flags(perl_name,
-                                             (void(*)(pTHX_ CV *))symref,
-                                             filename, NULL,
-                                             XS_DYNAMIC_FILENAME)));
-
-
-SV *
-dl_error()
-    CODE:
-    dMY_CXT;
-    RETVAL = newSVsv(MY_CXT.x_dl_last_error);
-    OUTPUT:
-    RETVAL
-
-#if defined(USE_ITHREADS)
-
-void
-CLONE(...)
-    CODE:
-    MY_CXT_CLONE;
-
-    PERL_UNUSED_VAR(items);
-
-    /* MY_CXT_CLONE just does a memcpy on the whole structure, so to avoid
-     * using Perl variables that belong to another thread, we create our 
-     * own for this thread.
-     */
-    MY_CXT.x_dl_last_error = newSVpvs("");
-
-#endif
-
-# end.
index bb83686..f077088 100644 (file)
@@ -148,18 +148,14 @@ is( scalar @DynaLoader::dl_modules, scalar keys %modules, "checking number of it
 
 my @loaded_modules = @DynaLoader::dl_modules;
 for my $libref (reverse @DynaLoader::dl_librefs) {
- TODO: {
-        todo_skip( "Can't safely unload with -DPERL_GLOBAL_STRUCT_PRIVATE (RT #119409)", 2 )
-            if $Config{ccflags} =~ /(?:^|\s)-DPERL_GLOBAL_STRUCT_PRIVATE\b/;
-    SKIP: {
-            skip( "unloading unsupported on $^O", 2 )
-                if ($old_darwin || $^O eq 'VMS');
-            my $module = pop @loaded_modules;
-            skip( "File::Glob sets PL_opfreehook", 2 ) if $module eq 'File::Glob';
-            my $r = eval { DynaLoader::dl_unload_file($libref) };
-            is( $@, '', "calling dl_unload_file() for $module" );
-            is( $r,  1, " - unload was successful" );
-        }
+SKIP: {
+        skip( "unloading unsupported on $^O", 2 )
+            if ($old_darwin || $^O eq 'VMS');
+        my $module = pop @loaded_modules;
+        skip( "File::Glob sets PL_opfreehook", 2 ) if $module eq 'File::Glob';
+        my $r = eval { DynaLoader::dl_unload_file($libref) };
+        is( $@, '', "calling dl_unload_file() for $module" );
+        is( $r,  1, " - unload was successful" );
     }
 }
 
index 84fd151..4f8acfe 100644 (file)
@@ -2,14 +2,11 @@ use ExtUtils::MakeMaker;
 use Config;
 use strict;
 
-our $VERSION = "1.30";
+our $VERSION = "1.31";
 
 my %err = ();
 
-# Symbian cross-compiling environment.
-my $IsSymbian = exists $ENV{SDK} && -d "$ENV{SDK}\\epoc32";
-
-my $IsMSWin32 = $^O eq 'MSWin32' && !$IsSymbian;
+my $IsMSWin32 = $^O eq 'MSWin32';
 
 unlink "Errno.pm" if -f "Errno.pm";
 unlink "Errno.tmp" if -f "Errno.tmp";
@@ -148,10 +145,6 @@ sub get_files {
     } elsif ($^O eq 'vos') {
        # avoid problem where cpp returns non-POSIX pathnames
        $file{'/system/include_library/errno.h'} = 1;
-    } elsif ($IsSymbian) {
-        my $SDK = $ENV{SDK};
-        $SDK =~ s!\\!/!g;
-       $file{"$SDK/epoc32/include/libc/sys/errno.h"} = 1;
     } else {
        open(CPPI, '>', 'errno.c') or
            die "Cannot open errno.c";
@@ -244,12 +237,7 @@ sub write_errno_pm {
                $inhibit_linemarkers;
            open(CPPO,"$cpp errno.c |") or
                die "Cannot run '$cpp errno.c'";
-       } elsif ($IsSymbian) {
-            my $cpp = "gcc -E -I$ENV{SDK}\\epoc32\\include\\libc" .
-               $inhibit_linemarkers ." -";
-           open(CPPO,"$cpp < errno.c |")
-               or die "Cannot exec $cpp";
-        } else {
+       } else {
            my $cpp = default_cpp() . $inhibit_linemarkers;
            open(CPPO,"$cpp < errno.c |")
                or die "Cannot exec $cpp";
index 46af2a6..cdc1244 100644 (file)
@@ -6,7 +6,7 @@ use ExtUtils::Embed 1.31, qw(xsi_header xsi_protos xsi_body);
 
 our @ISA = qw(Exporter);
 our @EXPORT = qw(writemain);
-our $VERSION = '1.09';
+our $VERSION = '1.10';
 
 # blead will run this with miniperl, hence we can't use autodie or File::Temp
 my $temp;
@@ -87,15 +87,6 @@ sub writemain{
 static void xs_init (pTHX);
 static PerlInterpreter *my_perl;
 
-#if defined(PERL_GLOBAL_STRUCT_PRIVATE)
-/* The static struct perl_vars* may seem counterproductive since the
- * whole idea PERL_GLOBAL_STRUCT_PRIVATE was to avoid statics, but note
- * that this static is not in the shared perl library, the globals PL_Vars
- * and PL_VarsPtr will stay away. */
-static struct perl_vars* my_plvarsp;
-struct perl_vars* Perl_GetVarsPrivate(void) { return my_plvarsp; }
-#endif
-
 #ifdef NO_ENV_ARRAY_IN_MAIN
 extern char **environ;
 int
@@ -106,14 +97,6 @@ main(int argc, char **argv, char **env)
 #endif
 {
     int exitstatus, i;
-#ifdef PERL_GLOBAL_STRUCT
-    struct perl_vars *my_vars = init_global_struct();
-#  ifdef PERL_GLOBAL_STRUCT_PRIVATE
-    int veto;
-
-    my_plvarsp = my_vars;
-#  endif
-#endif /* PERL_GLOBAL_STRUCT */
 #ifndef NO_ENV_ARRAY_IN_MAIN
     PERL_UNUSED_ARG(env);
 #endif
@@ -187,20 +170,6 @@ main(int argc, char **argv, char **env)
 
     PERL_SYS_TERM();
 
-#ifdef PERL_GLOBAL_STRUCT
-#  ifdef PERL_GLOBAL_STRUCT_PRIVATE
-    veto = my_plvarsp->Gveto_cleanup;
-#  endif
-    free_global_struct(my_vars);
-#  ifdef PERL_GLOBAL_STRUCT_PRIVATE
-    if (!veto)
-        my_plvarsp = NULL;
-    /* Remember, functions registered with atexit() can run after this point,
-       and may access "global" variables, and hence end up calling
-       Perl_GetVarsPrivate()  */
-#endif
-#endif /* PERL_GLOBAL_STRUCT */
-
     exit(exitstatus);
 }
 
index fa5f393..d964b9d 100644 (file)
@@ -61,7 +61,7 @@ our($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS);
 require Exporter;
 require XSLoader;
 @ISA = qw(Exporter);
-$VERSION = '1.13';
+$VERSION = '1.14';
 
 XSLoader::load();
 
index 36703a8..62bd2b1 100644 (file)
@@ -36,7 +36,6 @@
 static void
 XS_Fcntl_S_ISREG(pTHX_ CV* cv)
 {
-    dVAR;
     dXSARGS;
     dXSI32;
     /* Preserve the semantics of the perl code, which was:
index d23ec74..036d7d5 100644 (file)
@@ -182,8 +182,8 @@ is_deeply(\@a, ['TEST', 'a', 'b'], "Got list of 3 elements, including 'TEST'");
 }
 
 # GLOB_ALPHASORT (default) should sort alphabetically regardless of case
-mkdir "pteerslo", 0777;
-chdir "pteerslo";
+mkdir "pteerslo", 0777 or die "mkdir 'pteerslo', 0777:  $!";
+chdir "pteerslo" or die "chdir 'pteerslo' $!";
 
 my @f_names = qw(Ax.pl Bx.pl Cx.pl aY.pl bY.pl cY.pl);
 my @f_alpha = qw(Ax.pl aY.pl Bx.pl bY.pl Cx.pl cY.pl);
@@ -196,8 +196,8 @@ if ($^O eq 'VMS') { # VMS is happily caseignorant
 }
 
 for (@f_names) {
-    open T, '>', $_;
-    close T;
+    open T, '>', $_ or die "Couldn't write to '$_': $!";
+    close T or die "Couldn't close '$_': $!";
 }
 
 my $pat = "*.pl";
index 9cfd87a..240d59f 100644 (file)
@@ -318,8 +318,8 @@ HUF_fix_objects(pTHX) {
     hv_iterinit(MY_CXT.ob_reg);
     while((ent = hv_iternext(MY_CXT.ob_reg)))
         av_push(oblist, SvREFCNT_inc(hv_iterkeysv(ent)));
-    len = av_tindex(oblist);
-    for (i = 0; i <= len; ++i) {
+    len = av_count(oblist);
+    for (i = 0; i < len; ++i) {
         SV* old_id = *av_fetch(oblist, i, 0);
         SV* trigger = hv_delete_ent(MY_CXT.ob_reg, old_id, 0, 0);
         SV* obj = SvRV(trigger);
index 7b39cca..06343ae 100644 (file)
@@ -5,7 +5,7 @@ use strict;
 use warnings;
 use Scalar::Util qw( reftype);
 
-our $VERSION = '1.20';
+our $VERSION = '1.21';
 
 require Exporter;
 our @ISA = qw(Exporter);
index 095a78c..fdadc2b 100644 (file)
@@ -284,7 +284,7 @@ bucket_ratio(rhv)
     if (SvROK(rhv)) {
         rhv= SvRV(rhv);
         if ( SvTYPE(rhv)==SVt_PVHV ) {
-#if PERL_VERSION < 25
+#if PERL_VERSION_LT(5,25,0)
             SV *ret= Perl_hv_scalar(aTHX_ (HV*)rhv);
 #else
             SV *ret= Perl_hv_bucket_ratio(aTHX_ (HV*)rhv);
index 4224239..a778db0 100644 (file)
@@ -42,7 +42,7 @@ our @EXPORT_OK  = qw(
 BEGIN {
     # make sure all our XS routines are available early so their prototypes
     # are correctly applied in the following code.
-    our $VERSION = '0.23';
+    our $VERSION = '0.24';
     require XSLoader;
     XSLoader::load();
 }
index 77bb829..ad5ca6c 100644 (file)
@@ -422,6 +422,22 @@ static int not_here(const char *s);
 #  undef c99_trunc
 #endif
 
+/* The cc with NetBSD 8.0 and 9.0 claims to be a C11 hosted compiler,
+ * but doesn't define several functions required by C99, let alone C11.
+ * http://gnats.netbsd.org/53234
+ */
+#if defined(USE_LONG_DOUBLE) && defined(__NetBSD__) \
+  && !defined(NETBSD_HAVE_FIXED_LONG_DOUBLE_MATH)
+#  undef c99_expm1
+#  undef c99_lgamma
+#  undef c99_log1p
+#  undef c99_log2
+#  undef c99_nexttoward
+#  undef c99_remainder
+#  undef c99_remquo
+#  undef c99_tgamma
+#endif
+
 #ifndef isunordered
 #  ifdef Perl_isnan
 #    define isunordered(x, y) (Perl_isnan(x) || Perl_isnan(y))
@@ -2975,7 +2991,6 @@ sigaction(sig, optaction, oldaction = 0)
 # interface look beautiful, which is hard.
 
        {
-           dVAR;
            POSIX__SigAction action;
            GV *siggv = gv_fetchpvs("SIG", GV_ADD, SVt_PVHV);
            struct sigaction act;
index 6c4cc54..51a51a2 100644 (file)
@@ -4,7 +4,7 @@ use warnings;
 
 our ($AUTOLOAD, %SIGRT);
 
-our $VERSION = '1.94';
+our $VERSION = '1.95';
 
 require XSLoader;
 
@@ -307,7 +307,8 @@ my %default_export_tags = ( # cf. exports policy below
 
     locale_h =>        [qw(LC_ALL LC_COLLATE LC_CTYPE LC_MESSAGES
                    LC_MONETARY LC_NUMERIC LC_TIME LC_IDENTIFICATION
-                    LC_MEASUREMENT LC_PAPER LC_TELEPHONE LC_ADDRESS NULL
+                    LC_MEASUREMENT LC_PAPER LC_TELEPHONE LC_ADDRESS
+                    LC_SYNTAX LC_TOD NULL
                    localeconv setlocale)],
 
     math_h =>   [qw(FP_ILOGB0 FP_ILOGBNAN FP_INFINITE FP_NAN FP_NORMAL
index 50648c8..12eac2d 100644 (file)
@@ -48,7 +48,7 @@ my %expect = (
             INT_MAX INT_MIN ISIG ISTRIP IXOFF IXON
             LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION
             LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NUMERIC LC_PAPER
-            LC_TELEPHONE LC_TIME LDBL_DIG
+            LC_TELEPHONE LC_TIME LC_SYNTAX LC_TOD LDBL_DIG
             LDBL_EPSILON LDBL_MANT_DIG LDBL_MAX LDBL_MAX_10_EXP
             LDBL_MAX_EXP LDBL_MIN LDBL_MIN_10_EXP LDBL_MIN_EXP LINK_MAX
             LONG_MAX LONG_MIN L_ctermid L_cuserid MAX_CANON
index 0ed59d2..fee7191 100644 (file)
@@ -1,7 +1,7 @@
 package PerlIO::mmap;
 use strict;
 use warnings;
-our $VERSION = '0.016';
+our $VERSION = '0.017';
 
 use XSLoader;
 XSLoader::load(__PACKAGE__, __PACKAGE__->VERSION);
index b3f1c4f..dd7f552 100644 (file)
@@ -26,7 +26,6 @@ typedef struct {
 static IV
 PerlIOMmap_map(pTHX_ PerlIO *f)
 {
-    dVAR;
     PerlIOMmap * const m = PerlIOSelf(f, PerlIOMmap);
     const IV flags = PerlIOBase(f)->flags;
     IV code = 0;
index f619b78..838d753 100644 (file)
@@ -16,7 +16,7 @@ $Config{shortsize} == 2
 my ($dirfh, $dirname) = tempfile(UNLINK => 1);
 my ($pagfh, $pagname) = tempfile(UNLINK => 1);
 close $dirfh;
-close pagefh;
+close $pagfh;
 
 # these might only fail under ASAN
 while (my $testdata = do { local $/ = "END\n"; <DATA>; }) {
index 8d0a7fd..b54024b 100644 (file)
@@ -5,7 +5,7 @@ use strict;
 use warnings;
 use Carp;
 
-our $VERSION = '1.09';
+our $VERSION = '1.11';
 
 require XSLoader;
 
index 1aab7a7..d3cfadc 100644 (file)
@@ -377,7 +377,7 @@ blockhook_csc_start(pTHX_ int full)
         I32 i;
         AV *const new_av = newAV();
 
-        for (i = 0; i <= av_tindex(cur); i++) {
+        for (i = 0; i < av_count(cur); i++) {
             av_store(new_av, i, newSVsv(*av_fetch(cur, i, 0)));
         }
 
@@ -470,19 +470,25 @@ my_peep (pTHX_ OP *o)
 }
 
 STATIC void
-my_rpeep (pTHX_ OP *o)
+my_rpeep (pTHX_ OP *first)
 {
     dMY_CXT;
+    OP *o, *t;
 
-    if (!o)
+    if (!first)
        return;
 
-    MY_CXT.orig_rpeep(aTHX_ o);
+    MY_CXT.orig_rpeep(aTHX_ first);
 
     if (!MY_CXT.peep_recording)
        return;
 
-    for (; o; o = o->op_next) {
+    for (o = first, t = first; o; o = o->op_next, t = t->op_next) {
+       if (o->op_type == OP_CONST && cSVOPx_sv(o) && SvPOK(cSVOPx_sv(o))) {
+           av_push(MY_CXT.rpeep_recorder, newSVsv(cSVOPx_sv(o)));
+       }
+       o = o->op_next;
+       if (!o || o == t) break;
        if (o->op_type == OP_CONST && cSVOPx_sv(o) && SvPOK(cSVOPx_sv(o))) {
            av_push(MY_CXT.rpeep_recorder, newSVsv(cSVOPx_sv(o)));
        }
@@ -2008,7 +2014,7 @@ test_share_unshare_pvn(input)
        OUTPUT:
        RETVAL
 
-#if PERL_VERSION >= 9
+#if PERL_VERSION_GE(5,9,0)
 
 bool
 refcounted_he_exists(key, level=0)
@@ -6911,6 +6917,7 @@ u8_to_u16_le(SV *sv, STRLEN ofs)
                 u64= U8TO64_LE(pv+ofs);
                 RETVAL= (UV)u64;
 #else
+                PERL_UNUSED_VAR(u64);
                 croak("not a 64 bit perl IVSIZE=%d",IVSIZE);
 #endif
                 break;
index aee8671..99e1069 100644 (file)
@@ -202,17 +202,23 @@ if ($is_wide) {
         "rotl64(n,1) and rotr64(n,1) return different results" );
 }
 if ($is_wide) {
-    my $seed  = "perl is for good";
+    push @INC, '../../t';
+    require 'charset_tools.pl';
+
+    # The values here are from the ASCII/Unicode code points; so if on EBCDIC
+    # we need # to convert from native to uni to get the same values
+
+    my $seed  = native_to_uni("perl is for good");
     my $state = XS::APItest::HvMacro::siphash_seed_state($seed);
     is(
         sprintf( "%016x",
-            XS::APItest::HvMacro::siphash24( $state, "Larry wall is BDFL" ) ),
+            XS::APItest::HvMacro::siphash24( $state, native_to_uni("Larry wall is BDFL")) ),
         "71a11e065cefc12c",
         "Siphash24 seems to work"
     );
     is(
         sprintf( "%016x",
-            XS::APItest::HvMacro::siphash13( $state, "Larry wall is BDFL" ) ),
+            XS::APItest::HvMacro::siphash13( $state, native_to_uni("Larry wall is BDFL" ))),
         "adee71f47e49757a",
         "Siphash13 seems to work"
     );
index 0a18df0..a0f7322 100644 (file)
@@ -36,8 +36,9 @@ my $known_start_byte = I8_to_native("\xC5");
 sub requires_extended_utf8($) {
 
     # Returns a boolean as to whether or not the code point parameter fits
-    # into 31 bits, subject to the convention that a negative code point
-    # stands for one that overflows the word size, so won't fit in 31 bits.
+    # into 31 bits (30 on EBCDIC), subject to the convention that a negative
+    # code point stands for one that overflows the word size, so won't fit in
+    # 31 bits.
 
     return shift > $highest_non_extended_utf8_cp;
 }
@@ -485,7 +486,6 @@ my @tests;
               : I8_to_native(
                 "\xff\xa7\xbf\xbf\xbf\xbf\xbf\xbf\xbf\xbf\xbf\xbf\xbf\xbf"),
               0x7FFFFFFFFFFFFFFF,
-              (isASCII) ? 1 : 2,
             ],
             [ "first 64 bit code point",
               (isASCII)
@@ -524,7 +524,6 @@ my @tests;
                     I8_to_native(
                     "\xff\xa0\xa0\xa0\xa0\xa0\xa1\xa0\xa0\xa0\xa0\xa0\xa0\xa0"),
                     0x800000000,
-                      40000000
                 ],
                 [ "requires at least 32 bits",
                     I8_to_native(
index a7e2541..51b3d70 100644 (file)
@@ -117,7 +117,7 @@ foreach $XS_VERSION (undef, @versions) {
 is_deeply([XS_APIVERSION_valid("Pie")], [], "XS_APIVERSION_BOOTCHECK passes");
 is(eval {XS_APIVERSION_invalid("Pie"); 1}, undef,
    "XS_APIVERSION_BOOTCHECK croaks for an invalid version");
-like($@, qr/Perl API version v1.0.16 of Pie does not match v5\.\d+\.\d+/,
+like($@, qr/Perl API version v1.0.16 of Pie does not match \Q$^V\E/a,
      "expected error");
 
 my @xsreturn;
index 320e9b8..9f838b4 100644 (file)
@@ -34,7 +34,7 @@ to the test script.
 use parent qw/ Exporter /;
 require XSLoader;
 
-our $VERSION = '0.17';
+our $VERSION = '0.18';
 
 our @EXPORT = (qw/
           T_SV
index 1c54d1a..397052d 100644 (file)
@@ -157,7 +157,7 @@ XS_unpack_anotherstructPtrPtr(SV *in)
     else
         Perl_croak(aTHX_ "Argument is not an ARRAY reference");
 
-    nitems = av_tindex(inary) + 1;
+    nitems = av_count(inary);
 
     /* FIXME dunno if supposed to use perl mallocs here */
     /* N+1 elements so we know the last one is NULL */
index d094c02..e4eed12 100644 (file)
@@ -12,7 +12,7 @@ use warnings;
 
 # mro.pm versions < 1.00 reserved for MRO::Compat
 #  for partial back-compat to 5.[68].x
-our $VERSION = '1.23';
+our $VERSION = '1.24';
 
 require XSLoader;
 XSLoader::load('mro');
index 80bce9a..f21216a 100644 (file)
@@ -259,7 +259,7 @@ S_mro_get_linear_isa_c3(pTHX_ HV* stash, U32 level)
                            "Inconsistent hierarchy during C3 merge of class '%" HEKf "':\n\t"
                             "current merge results [\n",
                             HEKfARG(stashhek));
-                for (i = 0; i <= av_tindex(retval); i++) {
+                for (i = 0; i < av_count(retval); i++) {
                     SV **elem = av_fetch(retval, i, 0);
                     sv_catpvf(errmsg, "\t\t%" SVf ",\n", SVfARG(*elem));
                 }
index 2f2f23c..20f7996 100644 (file)
--- a/feature.h
+++ b/feature.h
 
 #define HINT_FEATURE_SHIFT     26
 
-#define FEATURE_BITWISE_BIT         0x0001
-#define FEATURE___SUB___BIT         0x0002
-#define FEATURE_MYREF_BIT           0x0004
-#define FEATURE_EVALBYTES_BIT       0x0008
-#define FEATURE_FC_BIT              0x0010
-#define FEATURE_INDIRECT_BIT        0x0020
-#define FEATURE_ISA_BIT             0x0040
-#define FEATURE_POSTDEREF_QQ_BIT    0x0080
-#define FEATURE_REFALIASING_BIT     0x0100
-#define FEATURE_SAY_BIT             0x0200
-#define FEATURE_SIGNATURES_BIT      0x0400
-#define FEATURE_STATE_BIT           0x0800
-#define FEATURE_SWITCH_BIT          0x1000
-#define FEATURE_UNIEVAL_BIT         0x2000
-#define FEATURE_UNICODE_BIT         0x4000
+#define FEATURE_BITWISE_BIT          0x0001
+#define FEATURE___SUB___BIT          0x0002
+#define FEATURE_MYREF_BIT            0x0004
+#define FEATURE_EVALBYTES_BIT        0x0008
+#define FEATURE_FC_BIT               0x0010
+#define FEATURE_INDIRECT_BIT         0x0020
+#define FEATURE_ISA_BIT              0x0040
+#define FEATURE_MULTIDIMENSIONAL_BIT 0x0080
+#define FEATURE_POSTDEREF_QQ_BIT     0x0100
+#define FEATURE_REFALIASING_BIT      0x0200
+#define FEATURE_SAY_BIT              0x0400
+#define FEATURE_SIGNATURES_BIT       0x0800
+#define FEATURE_STATE_BIT            0x1000
+#define FEATURE_SWITCH_BIT           0x2000
+#define FEATURE_UNIEVAL_BIT          0x4000
+#define FEATURE_UNICODE_BIT          0x8000
 
 #define FEATURE_BUNDLE_DEFAULT 0
 #define FEATURE_BUNDLE_510     1
@@ -46,7 +47,7 @@
     ? (PL_curcop->cop_features & (mask)) : FALSE)
 
 /* The longest string we pass in.  */
-#define MAX_FEATURE_LEN (sizeof("postderef_qq")-1)
+#define MAX_FEATURE_LEN (sizeof("multidimensional")-1)
 
 #define FEATURE_FC_IS_ENABLED \
     ( \
         FEATURE_IS_ENABLED_MASK(FEATURE_UNICODE_BIT)) \
     )
 
+#define FEATURE_MULTIDIMENSIONAL_IS_ENABLED \
+    ( \
+       CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_527 \
+     || (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \
+        FEATURE_IS_ENABLED_MASK(FEATURE_MULTIDIMENSIONAL_BIT)) \
+    )
+
 
 #define SAVEFEATUREBITS() SAVEI32(PL_compiling.cop_features)
 
@@ -265,7 +273,12 @@ S_magic_sethint_feature(pTHX_ SV *keysv, const char *keypv, STRLEN keylen,
             return;
 
         case 'm':
-            if (keylen == sizeof("feature_myref")-1
+            if (keylen == sizeof("feature_multidimensional")-1
+                 && memcmp(subf+1, "ultidimensional", keylen - sizeof("feature_")) == 0) {
+                mask = FEATURE_MULTIDIMENSIONAL_BIT;
+                break;
+            }
+            else if (keylen == sizeof("feature_myref")-1
                  && memcmp(subf+1, "yref", keylen - sizeof("feature_")) == 0) {
                 mask = FEATURE_MYREF_BIT;
                 break;
index 8d6f2b1..5439ba2 100644 (file)
--- a/globals.c
+++ b/globals.c
  * PERL_IN_GLOBALS_C defined. That causes various global varaiables
  * in perl.h and other files it includes to be _defined_ (and initialized)
  * rather than just declared.
- *
- * There is a #include "perlapi.h" which makes use of the fact
- * that the object file created from this file will be included by linker
- * (to resolve global variables). perlapi.h mention various other "API"
- * functions not used by perl itself, but the functions get
- * pulled into the perl executable via the refrerence here.
- *
 */
 
 #include "INTERN.h"
 #define PERL_IN_GLOBALS_C
 #include "perl.h"
 
-#include "perlapi.h"           /* bring in PL_force_link_funcs */
-
 /* regcomp.h * isn't #included in perl.h, as its only included within a
  * few specific files such as regcomp.c, regexec.c.  So include it
  * explicitly to process any data declarations within it.
index 0462026..f020879 100644 (file)
@@ -16,8 +16,6 @@ PL_extended_utf8_dfa_tab
 PL_fold
 PL_fold_latin1
 PL_fold_locale
-PL_freq
-PL_global_struct_size
 PL_hexdigit
 PL_inf
 PL_interp_size
diff --git a/gv.c b/gv.c
index a90ce9b..cef4786 100644 (file)
--- a/gv.c
+++ b/gv.c
@@ -168,7 +168,6 @@ Perl_newGP(pTHX_ GV *const gv)
 #ifndef USE_ITHREADS
     GV *filegv;
 #endif
-    dVAR;
 
     PERL_ARGS_ASSERT_NEWGP;
     Newxz(gp, 1, GP);
@@ -3144,7 +3143,6 @@ Perl_amagic_is_enabled(pTHX_ int method)
 SV*
 Perl_amagic_call(pTHX_ SV *left, SV *right, int method, int flags)
 {
-  dVAR;
   MAGIC *mg;
   CV *cv=NULL;
   CV **cvp=NULL, **ocvp=NULL;
@@ -3642,7 +3640,6 @@ Perl_amagic_call(pTHX_ SV *left, SV *right, int method, int flags)
 void
 Perl_gv_name_set(pTHX_ GV *gv, const char *name, U32 len, U32 flags)
 {
-    dVAR;
     U32 hash;
 
     PERL_ARGS_ASSERT_GV_NAME_SET;
index 205df73..60f44ef 100644 (file)
@@ -8,7 +8,7 @@ BEGIN {
     require DynaLoader;
 
     @ISA = qw|Exporter DynaLoader|;
-    $VERSION = '0.35';
+    $VERSION = '0.36';
     $XS_VERSION = $VERSION;
     $VERSION = eval $VERSION;
 
index c544e22..254399a 100644 (file)
@@ -23,7 +23,6 @@ static void
 haiku_do_debug_printf(pTHX_ SV *sv,
     void (*printfFunc)(const char*,...))
 {
-    dVAR;
 
     if (!sv)
        return;
@@ -55,7 +54,6 @@ haiku_do_debug_printf(pTHX_ SV *sv,
 
 XS(haiku_debug_printf)
 {
-    dVAR;
     dXSARGS;
     dORIGMARK;
     SV *sv;
@@ -78,7 +76,6 @@ XS(haiku_debug_printf)
 
 XS(haiku_ktrace_printf)
 {
-    dVAR;
     dXSARGS;
     dORIGMARK;
     SV *sv;
@@ -101,7 +98,6 @@ XS(haiku_ktrace_printf)
 
 XS(haiku_debugger)
 {
-    dVAR;
     dXSARGS;
     dORIGMARK;
     SV *sv;
diff --git a/handy.h b/handy.h
index fd08668..ff818cc 100644 (file)
--- a/handy.h
+++ b/handy.h
@@ -54,7 +54,7 @@ Null SV pointer.  (No longer available when C<PERL_CORE> is defined.)
  */
 
 #if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN)
-#  define MUTABLE_PTR(p) ({ void *_p = (p); _p; })
+#  define MUTABLE_PTR(p) ({ void *p_ = (p); p_; })
 #else
 #  define MUTABLE_PTR(p) ((void *) (p))
 #endif
@@ -244,7 +244,10 @@ typedef U64TYPE U64;
 #endif
 
 /* log(2) (i.e., log base 10 of 2) is pretty close to 0.30103, just in case
- * anyone is grepping for it */
+ * anyone is grepping for it.  So BIT_DIGITS gives the number of decimal digits
+ * required to represent any possible unsigned number containing N bits.
+ * TYPE_DIGITS gives the number of decimal digits required to represent any
+ * possible unsigned number of type T. */
 #define BIT_DIGITS(N)   (((N)*146)/485 + 1)  /* log10(2) =~ 146/485 */
 #define TYPE_DIGITS(T)  BIT_DIGITS(sizeof(T) * 8)
 #define TYPE_CHARS(T)   (TYPE_DIGITS(T) + 2) /* sign, NUL */
@@ -269,6 +272,12 @@ typedef U64TYPE U64;
 #  define isPOWER_OF_2(n) ((n) && ((n) & ((n)-1)) == 0)
 #endif
 
+/* Returns a mask with the lowest n bits set */
+#define nBIT_MASK(n) ((UINTMAX_C(1) << (n)) - 1)
+
+/* The largest unsigned number that will fit into n bits */
+#define nBIT_UMAX(n)  nBIT_MASK(n)
+
 /*
 =for apidoc Am|void|__ASSERT_|bool expr
 
@@ -384,7 +393,6 @@ Perl_xxx(aTHX_ ...) form for any API calls where it's used.
 =cut
 */
 
-
 #define STR_WITH_LEN(s)  ("" s ""), (sizeof(s)-1)
 
 /* STR_WITH_LEN() shortcuts */
@@ -421,6 +429,105 @@ Perl_xxx(aTHX_ ...) form for any API calls where it's used.
 #define get_cvs(str, flags)                                    \
        Perl_get_cvn_flags(aTHX_ STR_WITH_LEN(str), (flags))
 
+/* internal helpers */
+/* Transitional */
+#ifndef PERL_VERSION_MAJOR
+#  define PERL_VERSION_MAJOR  PERL_REVISION
+#else
+#  undef  PERL_REVISION     /* We don't want code to be using these */
+#endif
+#ifndef PERL_VERSION_MINOR
+#  define PERL_VERSION_MINOR  PERL_VERSION
+#else
+#  undef  PERL_VERSION
+#endif
+#ifndef PERL_VERSION_PATCH
+#  define PERL_VERSION_PATCH  PERL_SUBVERSION
+#else
+#  undef  PERL_SUBVERSION
+#endif
+
+#define PERL_JNP_TO_DECIMAL_(maJor,miNor,Patch)                             \
+            /* '10*' leaves room for things like alpha, beta, releases */   \
+                    (10 * ((maJor) * 1000000) + ((miNor) * 1000) + (Patch))
+#define PERL_DECIMAL_VERSION_                                               \
+        PERL_JNP_TO_DECIMAL_(PERL_VERSION_MAJOR, PERL_VERSION_MINOR,        \
+                                                        PERL_VERSION_PATCH)
+
+/*
+=for apidoc AmR|bool|PERL_VERSION_EQ|const U8 major|const U8 minor|const U8 patch
+
+Returns whether or not the perl currently being compiled has the specified
+relationship to the perl given by the parameters.  For example,
+
+ #if PERL_VERSION_GT(5,24,2)
+   code that will only be compiled on perls after v5.24.2
+ #else
+   fallback code
+ #endif
+
+Note that this is usable in making compile-time decisions
+
+The possible comparisons are C<PERL_VERSION_EQ>, C<PERL_VERSION_NE>,
+C<PERL_VERSION_GE>, C<PERL_VERSION_GT>, C<PERL_VERSION_LE>, and
+C<PERL_VERSION_LT>.
+
+You may use the special value '*' for the final number to mean ALL possible
+values for it.  Thus,
+
+ #if PERL_VERSION_EQ(5,31,'*')
+
+means all perls in the 5.31 series.  And
+
+ #if PERL_VERSION_NE(5,24,'*')
+
+means all perls EXCEPT 5.24 ones.  And
+
+ #if PERL_VERSION_LE(5,9,'*')
+
+is effectively
+
+ #if PERL_VERSION_LT(5,10,0)
+
+This means you don't have to think so much when converting from the existing
+deprecated C<PERL_VERSION> to using this macro:
+
+ #if PERL_VERSION <= 9
+
+becomes
+
+ #if PERL_VERSION_LE(5,9,'*')
+
+=for apidoc AmRh|bool|PERL_VERSION_NE|const U8 major|const U8 minor|const U8 patch
+=for apidoc AmRh|bool|PERL_VERSION_GE|const U8 major|const U8 minor|const U8 patch
+=for apidoc AmRh|bool|PERL_VERSION_GT|const U8 major|const U8 minor|const U8 patch
+=for apidoc AmRh|bool|PERL_VERSION_LE|const U8 major|const U8 minor|const U8 patch
+=for apidoc AmRh|bool|PERL_VERSION_LT|const U8 major|const U8 minor|const U8 patch
+
+=cut
+*/
+
+/* N.B. These don't work if the patch version is 42 or 92, as those are what
+ * '*' is in ASCII and EBCDIC respectively */
+# define PERL_VERSION_EQ(j,n,p)                                             \
+              (((p) == '*')                                                 \
+               ? (   (j) == PERL_VERSION_MAJOR                              \
+                  && (n) == PERL_VERSION_MINOR)                             \
+               : (PERL_DECIMAL_VERSION_ == PERL_JNP_TO_DECIMAL_(j,n,p)))
+# define PERL_VERSION_NE(j,n,p) (! PERL_VERSION_EQ(j,n,p))
+
+# define PERL_VERSION_LT(j,n,p) /* < '*' effectively means < 0 */           \
+    (PERL_DECIMAL_VERSION_ < PERL_JNP_TO_DECIMAL_( (j),                     \
+                                                   (n),                     \
+                                                 (((p) == '*') ? 0 : p)))
+# define PERL_VERSION_GE(j,n,p)  (! PERL_VERSION_LT(j,n,p))
+
+# define PERL_VERSION_LE(j,n,p)  /* <= '*' effectively means < n+1 */       \
+    (PERL_DECIMAL_VERSION_ < PERL_JNP_TO_DECIMAL_(                  (j),    \
+                                          (((p) == '*') ? ((n)+1) : (n)),   \
+                                          (((p) == '*') ? 0 : p)))
+# define PERL_VERSION_GT(j,n,p) (! PERL_VERSION_LE(j,n,p))
+
 /*
 =head1 Miscellaneous Functions
 
@@ -1372,7 +1479,7 @@ or casts
 /* This next group is only used on EBCDIC platforms, so theoretically could be
  * shared with something entirely different that's only on ASCII platforms */
 #  define _CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE 31
-/* Unused: 24-30
+/* Unused: 26-30
  * If more bits are needed, one could add a second word for non-64bit
  * QUAD_IS_INT systems, using some #ifdefs to distinguish between having a 2nd
  * word or not.  The IS_IN_SOME_FOLD bit is the most easily expendable, as it
index 10ac2b1..e7660e4 100644 (file)
 # mkdir -p /opt/perl-catamount
 # mkdir -p /opt/perl-catamount/include
 # mkdir -p /opt/perl-catamount/lib
-# mkdir -p /opt/perl-catamount/lib/perl5/5.33.0
+# mkdir -p /opt/perl-catamount/lib/perl5/5.33.1
 # mkdir -p /opt/perl-catamount/bin
 # cp *.h /opt/perl-catamount/include
 # cp libperl.a /opt/perl-catamount/lib
-# cp -pr lib/* /opt/perl-catamount/lib/perl5/5.33.0
+# cp -pr lib/* /opt/perl-catamount/lib/perl5/5.33.1
 # cp miniperl perl run.sh cc.sh /opt/perl-catamount/lib
 #
 # With the headers and the libperl.a you can embed Perl to your Catamount
index 0a91bc0..fdfbdd4 100644 (file)
@@ -301,7 +301,7 @@ case "$osvers" in  # Note: osvers is the kernel version, not the 10.x
    # We now use MACOSX_DEPLOYMENT_TARGET, if set, as an override by
    # capturing its value and adding it to the flags.
     case "$MACOSX_DEPLOYMENT_TARGET" in
-    10.*)
+    [1-9][0-9].*)
       add_macosx_version_min ccflags $MACOSX_DEPLOYMENT_TARGET
       add_macosx_version_min ldflags $MACOSX_DEPLOYMENT_TARGET
       ;;
@@ -313,7 +313,7 @@ case "$osvers" in  # Note: osvers is the kernel version, not the 10.x
 
 *** Unexpected MACOSX_DEPLOYMENT_TARGET=$MACOSX_DEPLOYMENT_TARGET
 ***
-*** Please either set it to 10.something, or to empty.
+*** Please either set it to a valid macOS version number (e.g., 10.15) or to empty.
 
 EOM
       exit 1
@@ -327,7 +327,7 @@ EOM
     # "ProductVersion:    10.11"     "10.11"
         prodvers=`sw_vers|awk '/^ProductVersion:/{print $2}'|awk -F. '{print $1"."$2}'`
     case "$prodvers" in
-    10.*)
+    [1-9][0-9].*)
       add_macosx_version_min ccflags $prodvers
       add_macosx_version_min ldflags $prodvers
       ;;
@@ -342,11 +342,10 @@ EOM
       exit 1
     esac
 
-    # The X in 10.X
-    prodvers_minor=$(echo $prodvers|awk -F. '{print $2}')
+    darwin_major=$(echo $osvers|awk -F. '{print $1}')
 
-    # macOS (10.12) deprecated syscall().
-    if [ "$prodvers_minor" -ge 12 ]; then
+    # macOS 10.12 (darwin 16.0.0) deprecated syscall().
+    if [ "$darwin_major" -ge 16 ]; then
         d_syscall='undef'
         # If deploying to pre-10.12, suppress Time::HiRes's detection of the system clock_gettime()
         case "$MACOSX_DEPLOYMENT_TARGET" in
index fa8ebe5..9e2f447 100644 (file)
@@ -2,15 +2,16 @@
 # $Id$
 
 case "$prefix" in
-'') prefix="/boot/common" ;;
+'') prefix="$(finddir B_COMMON_DIRECTORY)" ;;
 *) ;; # pass the user supplied value through
 esac
 
-libpth='/boot/home/config/lib /boot/common/lib /system/lib'
-usrinc='/boot/develop/headers/posix'
-locinc='/boot/home/config/include /boot/common/include /boot/develop/headers'
 
-libc='/system/lib/libroot.so'
+libpth="$(finddir B_USER_DEVELOP_DIRECTORY)/lib $(finddir B_SYSTEM_DEVELOP_DIRECTORY)/lib $(finddir B_COMMON_DIRECTORY)/lib /system/lib"
+usrinc="$(finddir B_SYSTEM_DEVELOP_DIRECTORY)/headers/posix"
+locinc="$(finddir B_USER_CONFIG_DIRECTORY)/develop/headers $(finddir B_COMMON_DIRECTORY)/headers $(finddir B_SYSTEM_DEVELOP_DIRECTORY)/headers"
+
+libc="$(finddir B_SYSTEM_LIB_DIRECTORY)/libroot.so"
 libs='-lnetwork'
 
 # Use Haiku's malloc() by default.
index 8cbe7dc..c749f0f 100644 (file)
@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}"
 
 # Check if we're about to use Intel's ICC compiler
 case "`${cc:-cc} -V 2>&1`" in
-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*)
+*"Intel(R) C"*" Compiler"*)
     # record the version, formats:
     # icc (ICC) 10.1 20080801
     # icpc (ICC) 10.1 20080801
diff --git a/hv.c b/hv.c
index 7bf15dd..3aa1d42 100644 (file)
--- a/hv.c
+++ b/hv.c
@@ -342,7 +342,6 @@ void *
 Perl_hv_common(pTHX_ HV *hv, SV *keysv, const char *key, STRLEN klen,
               int flags, int action, SV *val, U32 hash)
 {
-    dVAR;
     XPVHV* xhv;
     HE *entry;
     HE **oentry;
@@ -393,7 +392,7 @@ Perl_hv_common(pTHX_ HV *hv, SV *keysv, const char *key, STRLEN klen,
        if (SvIsCOW_shared_hash(keysv)) {
            flags = HVhek_KEYCANONICAL | (is_utf8 ? HVhek_UTF8 : 0);
        } else {
-           flags = is_utf8 ? HVhek_UTF8 : 0;
+           flags = 0;
        }
     } else {
        is_utf8 = cBOOL(flags & HVhek_UTF8);
@@ -401,7 +400,8 @@ Perl_hv_common(pTHX_ HV *hv, SV *keysv, const char *key, STRLEN klen,
 
     if (action & HV_DELETE) {
        return (void *) hv_delete_common(hv, keysv, key, klen,
-                                        flags, action, hash);
+                                        flags | (is_utf8 ? HVhek_UTF8 : 0),
+                                        action, hash);
     }
 
     xhv = (XPVHV*)SvANY(hv);
@@ -1105,7 +1105,6 @@ STATIC SV *
 S_hv_delete_common(pTHX_ HV *hv, SV *keysv, const char *key, STRLEN klen,
                   int k_flags, I32 d_flags, U32 hash)
 {
-    dVAR;
     XPVHV* xhv;
     HE *entry;
     HE **oentry;
@@ -1589,7 +1588,6 @@ Perl_hv_ksplit(pTHX_ HV *hv, IV newmax)
 HV *
 Perl_newHVhv(pTHX_ HV *ohv)
 {
-    dVAR;
     HV * const hv = newHV();
     STRLEN hv_max;
 
@@ -1790,7 +1788,6 @@ return.
 void
 Perl_hv_clear(pTHX_ HV *hv)
 {
-    dVAR;
     SSize_t orig_ix;
 
     XPVHV* xhv;
@@ -1879,7 +1876,6 @@ Perl_hv_clear_placeholders(pTHX_ HV *hv)
 static void
 S_clear_placeholders(pTHX_ HV *hv, U32 items)
 {
-    dVAR;
     I32 i;
 
     PERL_ARGS_ASSERT_CLEAR_PLACEHOLDERS;
@@ -2380,7 +2376,6 @@ Perl_hv_eiter_set(pTHX_ HV *hv, HE *eiter) {
 void
 Perl_hv_name_set(pTHX_ HV *hv, const char *name, U32 len, U32 flags)
 {
-    dVAR;
     struct xpvhv_aux *iter;
     U32 hash;
     HEK **spot;
@@ -2488,7 +2483,6 @@ table.
 void
 Perl_hv_ename_add(pTHX_ HV *hv, const char *name, U32 len, U32 flags)
 {
-    dVAR;
     struct xpvhv_aux *aux = SvOOK(hv) ? HvAUX(hv) : hv_auxinit(hv);
     U32 hash;
 
@@ -2679,7 +2673,6 @@ insufficiently abstracted for any change to be tidy.
 HE *
 Perl_hv_iternext_flags(pTHX_ HV *hv, I32 flags)
 {
-    dVAR;
     XPVHV* xhv;
     HE *entry;
     HE *oldentry;
@@ -3065,7 +3058,6 @@ Perl_share_hek(pTHX_ const char *str, SSize_t len, U32 hash)
          we should flag that it needs upgrading on keys or each.  Also flag
          that we need share_hek_flags to free the string.  */
       if (str != save) {
-          dVAR;
           PERL_HASH(hash, str, len);
           flags |= HVhek_WASUTF8 | HVhek_FREEKEY;
       }
@@ -3210,7 +3202,6 @@ Perl_hv_placeholders_set(pTHX_ HV *hv, I32 ph)
 STATIC SV *
 S_refcounted_he_value(pTHX_ const struct refcounted_he *he)
 {
-    dVAR;
     SV *value;
 
     PERL_ARGS_ASSERT_REFCOUNTED_HE_VALUE;
@@ -3261,7 +3252,6 @@ C<flags> is currently unused and must be zero.
 HV *
 Perl_refcounted_he_chain_2hv(pTHX_ const struct refcounted_he *chain, U32 flags)
 {
-    dVAR;
     HV *hv;
     U32 placeholders, max;
 
@@ -3375,7 +3365,6 @@ SV *
 Perl_refcounted_he_fetch_pvn(pTHX_ const struct refcounted_he *chain,
                         const char *keypv, STRLEN keylen, U32 hash, U32 flags)
 {
-    dVAR;
     U8 utf8_flag;
     PERL_ARGS_ASSERT_REFCOUNTED_HE_FETCH_PVN;
 
@@ -3528,7 +3517,6 @@ struct refcounted_he *
 Perl_refcounted_he_new_pvn(pTHX_ struct refcounted_he *parent,
        const char *keypv, STRLEN keylen, U32 hash, SV *value, U32 flags)
 {
-    dVAR;
     STRLEN value_len = 0;
     const char *value_p = NULL;
     bool is_pv;
@@ -3694,7 +3682,6 @@ no action occurs in this case.
 void
 Perl_refcounted_he_free(pTHX_ struct refcounted_he *he) {
 #ifdef USE_ITHREADS
-    dVAR;
 #endif
     PERL_UNUSED_CONTEXT;
 
@@ -3733,7 +3720,6 @@ struct refcounted_he *
 Perl_refcounted_he_inc(pTHX_ struct refcounted_he *he)
 {
 #ifdef USE_ITHREADS
-    dVAR;
 #endif
     PERL_UNUSED_CONTEXT;
     if (he) {
@@ -3836,7 +3822,6 @@ Check that a hash is in an internally consistent state.
 void
 Perl_hv_assert(pTHX_ HV *hv)
 {
-    dVAR;
     HE* entry;
     int withflags = 0;
     int placeholders = 0;
index 3e2d2be..e8178b7 100644 (file)
--- a/hv_func.h
+++ b/hv_func.h
 #error "__PERL_HASH_FUNC not defined"
 #endif
 
+/* Some siphash static functions are needed by XS::APItest even when
+   siphash isn't the current hash.  For SipHash builds this needs to
+   be before the S_perl_hash_with_seed() definition.
+*/
+#include "perl_siphash.h"
 
 #if PERL_HASH_USE_SBOX32_ALSO != 1
 # define _PERL_HASH_FUNC                        __PERL_HASH_FUNC
@@ -155,135 +160,6 @@ U32 S_perl_hash_with_seed(const U8 * const seed, const U8 * const str, const STR
 #define PERL_HASH_INTERNAL(hash,str,len) PERL_HASH(hash,str,len)
 #endif
 
-/* This is SipHash by Jean-Philippe Aumasson and Daniel J. Bernstein.
- * The authors claim it is relatively secure compared to the alternatives
- * and that performance wise it is a suitable hash for languages like Perl.
- * See:
- *
- * https://www.131002.net/siphash/
- *
- * This implementation seems to perform slightly slower than one-at-a-time for
- * short keys, but degrades slower for longer keys. Murmur Hash outperforms it
- * regardless of keys size.
- *
- * It is 64 bit only.
- */
-
-#ifdef CAN64BITHASH
-
-#define SIPROUND            \
-  STMT_START {              \
-    v0 += v1; v1=ROTL64(v1,13); v1 ^= v0; v0=ROTL64(v0,32); \
-    v2 += v3; v3=ROTL64(v3,16); v3 ^= v2;     \
-    v0 += v3; v3=ROTL64(v3,21); v3 ^= v0;     \
-    v2 += v1; v1=ROTL64(v1,17); v1 ^= v2; v2=ROTL64(v2,32); \
-  } STMT_END
-
-#define SIPHASH_SEED_STATE(key,v0,v1,v2,v3) \
-do {                                    \
-    v0 = v2 = U8TO64_LE(key + 0);       \
-    v1 = v3 = U8TO64_LE(key + 8);       \
-  /* "somepseudorandomlygeneratedbytes" */  \
-    v0 ^= UINT64_C(0x736f6d6570736575);  \
-    v1 ^= UINT64_C(0x646f72616e646f6d);      \
-    v2 ^= UINT64_C(0x6c7967656e657261);      \
-    v3 ^= UINT64_C(0x7465646279746573);      \
-} while (0)
-
-PERL_STATIC_INLINE
-void S_perl_siphash_seed_state(const unsigned char * const seed_buf, unsigned char * state_buf) {
-    U64 *v= (U64*) state_buf;
-    SIPHASH_SEED_STATE(seed_buf, v[0],v[1],v[2],v[3]);
-}
-
-#define PERL_SIPHASH_FNC(FNC,SIP_ROUNDS,SIP_FINAL_ROUNDS) \
-PERL_STATIC_INLINE U64 \
-FNC ## _with_state_64 \
-  (const unsigned char * const state, const unsigned char *in, const STRLEN inlen) \
-{                                           \
-  const int left = inlen & 7;               \
-  const U8 *end = in + inlen - left;        \
-                                            \
-  U64 b = ( ( U64 )(inlen) ) << 56;         \
-  U64 m;                                    \
-  U64 v0 = U8TO64_LE(state);                \
-  U64 v1 = U8TO64_LE(state+8);              \
-  U64 v2 = U8TO64_LE(state+16);             \
-  U64 v3 = U8TO64_LE(state+24);             \
-                                            \
-  for ( ; in != end; in += 8 )              \
-  {                                         \
-    m = U8TO64_LE( in );                    \
-    v3 ^= m;                                \
-                                            \
-    SIP_ROUNDS;                             \
-                                            \
-    v0 ^= m;                                \
-  }                                         \
-                                            \
-  switch( left )                            \
-  {                                         \
-  case 7: b |= ( ( U64 )in[ 6] )  << 48; /*FALLTHROUGH*/    \
-  case 6: b |= ( ( U64 )in[ 5] )  << 40; /*FALLTHROUGH*/    \
-  case 5: b |= ( ( U64 )in[ 4] )  << 32; /*FALLTHROUGH*/    \
-  case 4: b |= ( ( U64 )in[ 3] )  << 24; /*FALLTHROUGH*/    \
-  case 3: b |= ( ( U64 )in[ 2] )  << 16; /*FALLTHROUGH*/    \
-  case 2: b |= ( ( U64 )in[ 1] )  <<  8; /*FALLTHROUGH*/    \
-  case 1: b |= ( ( U64 )in[ 0] ); break;    \
-  case 0: break;                            \
-  }                                         \
-                                            \
-  v3 ^= b;                                  \
-                                            \
-  SIP_ROUNDS;                               \
-                                            \
-  v0 ^= b;                                  \
-                                            \
-  v2 ^= 0xff;                               \
-                                            \
-  SIP_FINAL_ROUNDS                          \
-                                            \
-  b = v0 ^ v1 ^ v2  ^ v3;                   \
-  return b;                                 \
-}                                           \
-                                            \
-PERL_STATIC_INLINE U32                      \
-FNC ## _with_state                          \
-  (const unsigned char * const state, const unsigned char *in, const STRLEN inlen) \
-{                                           \
-    union {                                 \
-        U64 h64;                            \
-        U32 h32[2];                         \
-    } h;                                    \
-    h.h64= FNC ## _with_state_64(state,in,inlen); \
-    return h.h32[0] ^ h.h32[1];             \
-}                                           \
-                                            \
-                                            \
-PERL_STATIC_INLINE U32                      \
-FNC (const unsigned char * const seed, const unsigned char *in, const STRLEN inlen) \
-{                                                                   \
-    U64 state[4];                                                   \
-    SIPHASH_SEED_STATE(seed,state[0],state[1],state[2],state[3]);   \
-    return FNC ## _with_state((U8*)state,in,inlen);                 \
-}
-
-
-PERL_SIPHASH_FNC(
-    S_perl_hash_siphash_1_3
-    ,SIPROUND;
-    ,SIPROUND;SIPROUND;SIPROUND;
-)
-
-PERL_SIPHASH_FNC(
-    S_perl_hash_siphash_2_4
-    ,SIPROUND;SIPROUND;
-    ,SIPROUND;SIPROUND;SIPROUND;SIPROUND;
-)
-
-#endif /* defined(CAN64BITHASH) */
-
-
 #endif /*compile once*/
 
 /*
index bb0cdb0..a8240ef 100644 (file)
--- a/inline.h
+++ b/inline.h
@@ -39,13 +39,21 @@ SOFTWARE.
 
 /* ------------------------------- av.h ------------------------------- */
 
-PERL_STATIC_INLINE SSize_t
-Perl_av_top_index(pTHX_ AV *av)
+/*
+=for apidoc av_count
+Returns the number of elements in the array C<av>.  This is the true length of
+the array, including any undefined elements.  It is always the same as
+S<C<av_top_index(av) + 1>>.
+
+=cut
+*/
+PERL_STATIC_INLINE Size_t
+Perl_av_count(pTHX_ AV *av)
 {
-    PERL_ARGS_ASSERT_AV_TOP_INDEX;
+    PERL_ARGS_ASSERT_AV_COUNT;
     assert(SvTYPE(av) == SVt_PVAV);
 
-    return AvFILL(av);
+    return AvFILL(av) + 1;
 }
 
 /* ------------------------------- cv.h ------------------------------- */
@@ -2506,7 +2514,6 @@ same case-insensitively in the current locale; false otherwise.
 PERL_STATIC_INLINE I32
 Perl_foldEQ_locale(const char *s1, const char *s2, I32 len)
 {
-    dVAR;
     const U8 *a = (const U8 *)s1;
     const U8 *b = (const U8 *)s2;
 
index 23de9d9..07133dd 100644 (file)
@@ -53,13 +53,13 @@ PERLVARI(I, tmps_ix,        SSize_t,        -1)
 PERLVARI(I, tmps_floor,        SSize_t,        -1)
 PERLVAR(I, tmps_max,   SSize_t)        /* first unalloced slot in tmps stack */
 
-PERLVARI(I, sub_generation, U32, 1)    /* incr to invalidate method cache */
-
 PERLVAR(I, markstack,  I32 *)          /* stack_sp locations we're
                                           remembering */
 PERLVAR(I, markstack_ptr, I32 *)
 PERLVAR(I, markstack_max, I32 *)
 
+PERLVARI(I, sub_generation, U32, 1)    /* incr to invalidate method cache */
+
 #ifdef PERL_HASH_RANDOMIZE_KEYS
 #ifdef USE_PERL_PERTURB_KEYS
 PERLVARI(I, hash_rand_bits_enabled, U8, 1) /* used to randomize hash stuff 0 == no-random, 1 == random, 2 == determinsitic */
@@ -94,18 +94,6 @@ PERLVARI(I, tainted, bool, FALSE)    /* using variables controlled by $< */
 PERLVAR(I, delaymagic, U16)            /* ($<,$>) = ... */
 
 /*
-=for apidoc Amn|GV *|PL_defgv
-
-The GV representing C<*_>.  Useful for access to C<$_>.
-
-=cut
-*/
-
-PERLVAR(I, localizing, U8)             /* are we processing a local() list? */
-PERLVAR(I, in_eval,    U8)             /* trap "fatal" errors? */
-PERLVAR(I, defgv,      GV *)           /* the *_ glob */
-/*
-
 =for apidoc mn|U8|PL_dowarn
 
 The C variable that roughly corresponds to Perl's C<$^W> warning variable.
@@ -126,6 +114,18 @@ PERLVARI(I, utf8cache, I8, PERL___I)       /* Is the utf8 caching code enabled? */
 #undef PERL___I
 
 /*
+=for apidoc Amn|GV *|PL_defgv
+
+The GV representing C<*_>.  Useful for access to C<$_>.
+
+=cut
+*/
+
+PERLVAR(I, localizing, U8)             /* are we processing a local() list? */
+PERLVAR(I, in_eval,    U8)             /* trap "fatal" errors? */
+PERLVAR(I, defgv,      GV *)           /* the *_ glob */
+
+/*
 =for apidoc Amn|HV*|PL_curstash
 
 The stash for the package code will be compiled into.
@@ -680,9 +680,6 @@ PERLVARI(I, setlocale_bufsize, Size_t, 0)
 PERLVAR(I, sawampersand, U8)           /* must save all match strings */
 #endif
 
-PERLVAR(I, unsafe,     bool)
-PERLVAR(I, colorset,   bool)           /* PERL_RE_COLORS env var is in use */
-
 /* current phase the interpreter is in
    for ordering this structure to remove holes, we're assuming that this is 4
    bytes.  */
@@ -690,6 +687,9 @@ PERLVARI(I, phase,  enum perl_phase, PERL_PHASE_CONSTRUCT)
 
 PERLVARI(I, in_load_module, bool, FALSE)       /* to prevent recursions in PerlIO_find_layer */
 
+PERLVAR(I, unsafe,     bool)
+PERLVAR(I, colorset,   bool)           /* PERL_RE_COLORS env var is in use */
+
 /*
 =for apidoc Amn|signed char|PL_perl_destruct_level
 
@@ -715,13 +715,18 @@ value of C<PL_perl_destruct_level> its value is used instead.
 /* mod_perl is special, and also assigns a meaning -1 */
 PERLVARI(I, perl_destruct_level, signed char,  0)
 
+PERLVAR(I, pad_reset_pending, bool)    /* reset pad on next attempted alloc */
+
+PERLVAR(I, srand_called, bool)
+
 #ifdef USE_LOCALE_NUMERIC
 
-PERLVARI(I, numeric_standard, int, TRUE)
-                                       /* Assume C locale numerics */
 PERLVARI(I, numeric_underlying, bool, TRUE)
                                        /* Assume underlying locale numerics */
 PERLVARI(I, numeric_underlying_is_standard, bool, TRUE)
+
+PERLVARI(I, numeric_standard, int, TRUE)
+                                       /* Assume C locale numerics */
 PERLVAR(I, numeric_name, char *)       /* Name of current numeric locale */
 PERLVAR(I, numeric_radix_sv, SV *)     /* The radix separator if not '.' */
 
@@ -732,15 +737,6 @@ PERLVARI(I, underlying_numeric_obj, locale_t, NULL)
 #  endif
 #endif /* !USE_LOCALE_NUMERIC */
 
-#ifdef FCRYPT
-PERLVARI(I, cryptseen, bool,   FALSE)  /* has fast crypt() been initialized? */
-#else
-/* One byte hole in the interpreter structure.  */
-#endif
-
-PERLVAR(I, pad_reset_pending, bool)    /* reset pad on next attempted alloc */
-PERLVAR(I, srand_called, bool)
-
 /* Array of signal handlers, indexed by signal number, through which the C
    signal handler dispatches.  */
 PERLVAR(I, psig_ptr,   SV **)
@@ -957,6 +953,4 @@ PERLVAR(I, wcrtomb_ps, mbstate_t)
  * this comment, for binary compatibility (the offsets of the old members must
  *  not change).
  * (Don't forget to add your variable also to perl_clone()!)
- * XSUB.h provides wrapper functions via perlapi.h that make this
- * irrelevant, but not all code may be expected to #include XSUB.h.
  */
index 7bf1cd5..2317aa1 100644 (file)
@@ -52,7 +52,7 @@ use B qw(class main_root main_start main_cv svref_2object opnumber perlstring
         MDEREF_SHIFT
     );
 
-$VERSION = '1.54';
+$VERSION = '1.55';
 use strict;
 our $AUTOLOAD;
 use warnings ();
@@ -280,6 +280,7 @@ BEGIN { for (qw[ const stringify rv2sv list glob pushmark null aelem
 # possibly undoing optimisations along the way.
 
 sub DEBUG { 0 }
+use if DEBUG, 'Data::Dumper';
 
 sub _pessimise_walk {
     my ($self, $startop) = @_;
@@ -2471,7 +2472,7 @@ sub unop {
            return $self->maybe_parens(
                        $self->keyword($name) . " $kid", $cx, 16
                   );
-       }   
+       }
        return $self->maybe_parens_unop($name, $kid, $cx);
     } else {
        return $self->maybe_parens(
@@ -2511,7 +2512,7 @@ sub pp_each { unop(@_, "each") }
 sub pp_values { unop(@_, "values") }
 sub pp_keys { unop(@_, "keys") }
 { no strict 'refs'; *{"pp_r$_"} = *{"pp_$_"} for qw< keys each values >; }
-sub pp_boolkeys { 
+sub pp_boolkeys {
     # no name because its an optimisation op that has no keyword
     unop(@_,"");
 }
@@ -5658,38 +5659,24 @@ sub double_delim {
 # Escape a characrter.
 # Only used by tr///, so backslashes hyphens
 
-sub pchr { # ASCII
+sub pchr {
     my($n) = @_;
-    if ($n == ord '\\') {
-       return '\\\\';
-    } elsif ($n == ord "-") {
-       return "\\-";
-    } elsif (utf8::native_to_unicode($n) >= utf8::native_to_unicode(ord(' '))
-             and utf8::native_to_unicode($n) <= utf8::native_to_unicode(ord('~')))
-    {
-        # I'm presuming a regex is not ok here, otherwise we could have used
-        # /[[:print:]]/a to get here
-       return chr($n);
-    } elsif ($n == ord "\a") {
-       return '\\a';
-    } elsif ($n == ord "\b") {
-       return '\\b';
-    } elsif ($n == ord "\t") {
-       return '\\t';
-    } elsif ($n == ord "\n") {
-       return '\\n';
-    } elsif ($n == ord "\e") {
-       return '\\e';
-    } elsif ($n == ord "\f") {
-       return '\\f';
-    } elsif ($n == ord "\r") {
-       return '\\r';
-    } elsif ($n >= ord("\cA") and $n <= ord("\cZ")) {
-       return '\\c' . $unctrl{chr $n};
-    } else {
-#      return '\x' . sprintf("%02x", $n);
-       return '\\' . sprintf("%03o", $n);
-    }
+    return sprintf("\\x{%X}", $n) if $n > 255;
+    return '\\\\' if $n == ord '\\';
+    return "\\-" if $n == ord "-";
+    # I'm presuming a regex is not ok here, otherwise we could have used
+    # /[[:print:]]/a to get here
+    return chr($n) if (        utf8::native_to_unicode($n)
+                            >= utf8::native_to_unicode(ord(' '))
+                        and    utf8::native_to_unicode($n)
+                            <= utf8::native_to_unicode(ord('~')));
+
+    my $mnemonic_pos = index("\a\b\e\f\n\r\t", chr($n));
+    return "\\" . substr("abefnrt", $mnemonic_pos, 1) if $mnemonic_pos >= 0;
+
+    return '\\c' . $unctrl{chr $n} if $n >= ord("\cA") and $n <= ord("\cZ");
+#   return '\x' . sprintf("%02x", $n);
+    return '\\' . sprintf("%03o", $n);
 }
 
 # Convert a list of characters into a string suitable for tr/// search or
@@ -5765,92 +5752,170 @@ sub tr_decode_byte {
     return ($from, $to);
 }
 
-sub tr_chr {
-    my $x = shift;
-    if ($x == ord "-") {
-       return "\\-";
-    } elsif ($x == ord "\\") {
-       return "\\\\";
-    } else {
-       return chr $x;
+my $infinity = ~0 >> 1;     # IV_MAX
+
+sub tr_append_to_invlist {
+    my ($list_ref, $current, $next) = @_;
+
+    # Appends the range $current..$next-1 to the inversion list $list_ref
+
+    printf STDERR "%d: %d..%d %s", __LINE__, $current, $next, Dumper $list_ref if DEBUG;
+
+    if (@$list_ref && $list_ref->[-1] == $current) {
+
+        # The new range extends the current final one.  If it is a finite
+        # rane, replace the current final by the new ending.
+        if (defined $next) {
+            $list_ref->[-1] = $next;
+        }
+        else {
+            # The new range extends to infinity, which means the current end
+            # of the inversion list is dangling.  Removing it causes things to
+            # work.
+            pop @$list_ref;
+        }
     }
+    else {  # The new range starts after the current final one; add it as a
+            # new range
+        push @$list_ref, $current;
+        push @$list_ref, $next if defined $next;
+    }
+
+    print STDERR __LINE__, ": ", Dumper $list_ref if DEBUG;
 }
 
-sub tr_invmap {
-    my ($invlist_ref, $map_ref) = @_;
+sub tr_invlist_to_string {
+    my ($list_ref, $to_complement) = @_;
 
-    my $infinity = ~0 >> 1;     # IV_MAX
-    my $from = "";
-    my $to = "";
+    # Stringify the inversion list $list_ref, possibly complementing it first.
+    # CAUTION: this can modify $list_ref.
 
-    for my $i (0.. @$invlist_ref - 1) {
-        my $this_from = $invlist_ref->[$i];
-        my $map = $map_ref->[$i];
-        my $upper = ($i < @$invlist_ref - 1)
-                     ? $invlist_ref->[$i+1]
-                     : $infinity;
-        my $range = $upper - $this_from - 1;
-        if (DEBUG) {
-            print STDERR "i=$i, from=$this_from, upper=$upper, range=$range\n";
+    print STDERR __LINE__, ": ", Dumper $list_ref if DEBUG;
+
+    if ($to_complement) {
+
+        # Complementing an inversion list is done by prepending a 0 if it
+        # doesn't have one there already; otherwise removing the leading 0.
+        if ($list_ref->[0] == 0) {
+            shift @$list_ref;
         }
-        next if $map == ~0;
-        next if $map == ~0 - 1;
-        $from .= tr_chr($this_from);
-        $to .= tr_chr($map);
-        next if $range == 0;    # Single code point
-        if ($range == 1) {      # Adjacent code points
-            $from .= tr_chr($this_from + 1);
-            $to   .= tr_chr($map + 1);
+        else {
+            unshift @$list_ref, 0;
+        }
+
+        print STDERR __LINE__, ": ", Dumper $list_ref if DEBUG;
+    }
+
+    my $output = "";
+
+    # Every other element is in the list.
+    for (my $i = 0; $i < @$list_ref; $i += 2) {
+        my $base = $list_ref->[$i];
+        $output .= pchr($base);
+        last unless defined $list_ref->[$i+1];
+
+        # The beginning of the next element starts the range of items not in
+        # the list.
+        my $upper = $list_ref->[$i+1] - 1;
+        my $range = $upper - $base;
+        $output .= '-' if $range > 1; # Adjacent characters don't have a
+                                      # minus, though it would be legal to do
+                                      # so
+        $output .= pchr($upper) if $range > 0;
+    }
+
+    print STDERR __LINE__, ": tr_invlist_to_string() returning '$output'\n"
+                                                                       if DEBUG;
+    return $output;
+}
+
+my $unmapped = ~0;
+my $special_handling = ~0 - 1;
+
+sub dump_invmap {
+    my ($invlist_ref, $map_ref) = @_;
+
+    for my $i (0 .. @$invlist_ref - 1) {
+        printf STDERR "[%d]\t%x\t", $i, $invlist_ref->[$i];
+        my $map = $map_ref->[$i];
+        if ($map == $unmapped) {
+            print STDERR "TR_UNMAPPED\n";
         }
-        elsif ($upper != $infinity) {
-            $from .= "-" . tr_chr($this_from + $range);
-            $to   .= "-" . tr_chr($map + $range);
+        elsif ($map == $special_handling) {
+            print STDERR "TR_SPECIAL\n";
         }
         else {
-            $from .= "-INFTY";
-            $to   .= "-INFTY";
+            printf STDERR "%x\n", $map;
         }
     }
-
-    return ($from, $to);
 }
 
 sub tr_decode_utf8 {
     my($tr_av, $flags) = @_;
-    printf STDERR "flags=0x%x\n", $flags if DEBUG;
+
+    printf STDERR "\n%s: %d: flags=0x%x\n", __FILE__, __LINE__, $flags if DEBUG;
+
     my $invlist = $tr_av->ARRAYelt(0);
     my @invlist = unpack("J*", $invlist->PV);
     my @map = unpack("J*", $tr_av->ARRAYelt(1)->PV);
 
-    if (DEBUG) {
-        for my $i (0 .. @invlist - 1) {
-            printf STDERR "[%d]\t%x\t", $i, $invlist[$i];
-            my $map = $map[$i];
-            if ($map == ~0) {
-                print STDERR "TR_UNMAPPED\n";
-            }
-            elsif ($map == ~0 - 1) {
-                print STDERR "TR_SPECIAL\n";
-            }
-            else {
-                printf STDERR "%x\n", $map;
-            }
+    dump_invmap(\@invlist, \@map) if DEBUG;
+
+    my @from;
+    my @to;
+
+    # Go through the whole map
+    for (my $i = 0; $i < @invlist; $i++) {
+        my $map = $map[$i];
+        printf STDERR "%d: i=%d, source=%x, map=%x\n",
+                      __LINE__, $i, $invlist[$i], $map if DEBUG;
+
+        # Ignore any lines that are unmapped
+        next if $map == $unmapped;
+
+        # Calculate this component of the mapping;  First the lhs
+        my $this_from = $invlist[$i];
+        my $next_from = $invlist[$i+1] if $i < @invlist - 1;
+
+        # The length of the rhs is the same as the lhs, except when special
+        my $next_map = $map - $this_from + $next_from
+                            if $map != $special_handling && defined $next_from;
+
+        if (DEBUG) {
+            printf STDERR "%d: i=%d, from=%x, to=%x",
+                          __LINE__, $i, $this_from, $map;
+            printf STDERR ", next_from=%x,", $next_from if defined $next_from;
+            printf STDERR ", next_map=%x", $next_map if defined $next_map;
+            print  STDERR "\n";
         }
-    }
 
-    my ($from, $to) = tr_invmap(\@invlist, \@map);
+        # Add the lhs.
+        tr_append_to_invlist(\@from, $this_from, $next_from);
 
-    if ($flags & OPpTRANS_COMPLEMENT) {
-        shift @map;
-        pop @invlist;
-        my $throw_away;
-        ($from, $throw_away) = tr_invmap(\@invlist, \@map);
+        # And, the rhs; special handling doesn't get output as it really is an
+        # unmatched rhs
+        tr_append_to_invlist(\@to, $map, $next_map) if $map != $special_handling;
     }
 
-    if (DEBUG) {
-        print STDERR "Returning ", escape_str($from), "/",
-                                   escape_str($to), "\n";
+    # Done with the input.
+
+    my $to;
+    if (join("", @from) eq join("", @to)) {
+
+        # the rhs is suppressed if identical to the left.  That's because
+        # tr/ABC/ABC/ can be written as tr/ABC//.  (Do this comparison before
+        # any complementing)
+        $to = "";
     }
+    else {
+        $to = tr_invlist_to_string(\@to, 0);  # rhs not complemented
+    }
+
+    my $from = tr_invlist_to_string(\@from,
+                                   ($flags & OPpTRANS_COMPLEMENT) != 0);
+
+    print STDERR "Returning ", escape_str($from), "/",
+                               escape_str($to), "\n" if DEBUG;
     return (escape_str($from), escape_str($to));
 }
 
index 4b7601d..fb3a7fc 100644 (file)
@@ -1496,6 +1496,49 @@ tr/\000-\375/A-C/cds;
 tr/\000-\375/A-D/cds;
 tr/\000-\375/A-I/cds;
 ####
+# tr/// with all the flags: empty replacement
+tr/\x{101}-\x{106}//;
+tr/\x{101}-\x{106}//c;
+tr/\x{101}-\x{106}//d;
+tr/\x{101}-\x{106}//s;
+tr/\x{101}-\x{106}//cd;
+tr/\x{101}-\x{106}//ds;
+tr/\x{101}-\x{106}//cs;
+tr/\x{101}-\x{106}//cds;
+tr/\x{101}-\x{106}//r;
+####
+# tr/// with all the flags: short replacement
+tr/\x{101}-\x{106}/\x{111}/;
+tr/\x{101}-\x{106}/\x{111}/c;
+tr/\x{101}-\x{106}/\x{111}/d;
+tr/\x{101}-\x{106}/\x{111}/s;
+tr/\x{101}-\x{106}/\x{111}/cd;
+tr/\x{101}-\x{106}/\x{111}/ds;
+tr/\x{101}-\x{106}/\x{111}/cs;
+tr/\x{101}-\x{106}/\x{111}/cds;
+tr/\x{101}-\x{106}/\x{111}/r;
+####
+# tr/// with all the flags: equal length replacement
+tr/\x{101}-\x{106}/\x{111}-\x{116}/;
+tr/\x{101}-\x{106}/\x{111}-\x{116}/c;
+tr/\x{101}-\x{106}/\x{111}-\x{116}/s;
+tr/\x{101}-\x{106}/\x{111}-\x{116}/cs;
+tr/\x{101}-\x{106}/\x{111}-\x{116}/r;
+####
+# tr across 255/256 boundary, complemented
+tr/\cA-\x{100}/AB/c;
+tr/\cA-\x{100}/A-C/c;
+tr/\cA-\x{100}/A-D/c;
+tr/\cA-\x{100}/A-I/c;
+tr/\cA-\x{100}/AB/cd;
+tr/\cA-\x{100}/A-C/cd;
+tr/\cA-\x{100}/A-D/cd;
+tr/\cA-\x{100}/A-I/cd;
+tr/\cA-\x{100}/AB/cds;
+tr/\cA-\x{100}/A-C/cds;
+tr/\cA-\x{100}/A-D/cds;
+tr/\cA-\x{100}/A-I/cds;
+####
 # [perl #119807] s//\(3)/ge should not warn when deparsed (\3 warns)
 s/foo/\(3);/eg;
 ####
index 5e77151..5b49783 100644 (file)
@@ -118,7 +118,7 @@ package B::Op_private;
 our %bits;
 
 
-our $VERSION = "5.033000";
+our $VERSION = "5.033001";
 
 $bits{$_}{3} = 'OPpENTERSUB_AMPER' for qw(entersub rv2cv);
 $bits{$_}{6} = 'OPpENTERSUB_DB' for qw(entersub rv2cv);
index a5cf206..51c3ef2 100644 (file)
@@ -175,11 +175,6 @@ __END__
 
 static const char * cmds [] = { "perl", "-e", "$|=1; print qq[ok 5\\n]; $SIG{__WARN__} = sub { print qq[ok 6\\n] if $_[0] =~ /Unexpected exit/; }; exit 5;", NULL };
 
-#ifdef PERL_GLOBAL_STRUCT_PRIVATE
-static struct perl_vars *my_plvarsp;
-struct perl_vars* Perl_GetVarsPrivate(void) { return my_plvarsp; }
-#endif
-
 #ifdef NO_ENV_ARRAY_IN_MAIN
 int main(int argc, char **argv) {
     char **env;
@@ -187,14 +182,6 @@ int main(int argc, char **argv) {
 int main(int argc, char **argv, char **env) {
 #endif
     PerlInterpreter *my_perl;
-#ifdef PERL_GLOBAL_STRUCT
-    struct perl_vars *my_vars = init_global_struct();
-#  ifdef PERL_GLOBAL_STRUCT_PRIVATE
-    int veto;
-
-    my_plvarsp = my_vars;
-#  endif
-#endif /* PERL_GLOBAL_STRUCT */
 
     (void)argc; /* PERL_SYS_INIT3 may #define away their use */
     (void)argv;
@@ -229,19 +216,5 @@ int main(int argc, char **argv, char **env) {
 
     PERL_SYS_TERM();
 
-#ifdef PERL_GLOBAL_STRUCT
-#  ifdef PERL_GLOBAL_STRUCT_PRIVATE
-    veto = my_plvarsp->Gveto_cleanup;
-#  endif
-    free_global_struct(my_vars);
-#  ifdef PERL_GLOBAL_STRUCT_PRIVATE
-    if (!veto)
-        my_plvarsp = NULL;
-    /* Remember, functions registered with atexit() can run after this point,
-       and may access "global" variables, and hence end up calling
-       Perl_GetVarsPrivate()  */
-#endif
-#endif /* PERL_GLOBAL_STRUCT */
-
     return 0;
 }
index c2733d9..e14b4c1 100644 (file)
@@ -5,34 +5,35 @@
 
 package feature;
 
-our $VERSION = '1.59';
+our $VERSION = '1.60';
 
 our %feature = (
-    fc              => 'feature_fc',
-    isa             => 'feature_isa',
-    say             => 'feature_say',
-    state           => 'feature_state',
-    switch          => 'feature_switch',
-    bitwise         => 'feature_bitwise',
-    indirect        => 'feature_indirect',
-    evalbytes       => 'feature_evalbytes',
-    signatures      => 'feature_signatures',
-    current_sub     => 'feature___SUB__',
-    refaliasing     => 'feature_refaliasing',
-    postderef_qq    => 'feature_postderef_qq',
-    unicode_eval    => 'feature_unieval',
-    declared_refs   => 'feature_myref',
-    unicode_strings => 'feature_unicode',
+    fc               => 'feature_fc',
+    isa              => 'feature_isa',
+    say              => 'feature_say',
+    state            => 'feature_state',
+    switch           => 'feature_switch',
+    bitwise          => 'feature_bitwise',
+    indirect         => 'feature_indirect',
+    evalbytes        => 'feature_evalbytes',
+    signatures       => 'feature_signatures',
+    current_sub      => 'feature___SUB__',
+    refaliasing      => 'feature_refaliasing',
+    postderef_qq     => 'feature_postderef_qq',
+    unicode_eval     => 'feature_unieval',
+    declared_refs    => 'feature_myref',
+    unicode_strings  => 'feature_unicode',
+    multidimensional => 'feature_multidimensional',
 );
 
 our %feature_bundle = (
-    "5.10"    => [qw(indirect say state switch)],
-    "5.11"    => [qw(indirect say state switch unicode_strings)],
-    "5.15"    => [qw(current_sub evalbytes fc indirect say state switch unicode_eval unicode_strings)],
-    "5.23"    => [qw(current_sub evalbytes fc indirect postderef_qq say state switch unicode_eval unicode_strings)],
-    "5.27"    => [qw(bitwise current_sub evalbytes fc indirect postderef_qq say state switch unicode_eval unicode_strings)],
-    "all"     => [qw(bitwise current_sub declared_refs evalbytes fc indirect isa postderef_qq refaliasing say signatures state switch unicode_eval unicode_strings)],
-    "default" => [qw(indirect)],
+    "5.10"    => [qw(indirect multidimensional say state switch)],
+    "5.11"    => [qw(indirect multidimensional say state switch unicode_strings)],
+    "5.15"    => [qw(current_sub evalbytes fc indirect multidimensional say state switch unicode_eval unicode_strings)],
+    "5.23"    => [qw(current_sub evalbytes fc indirect multidimensional postderef_qq say state switch unicode_eval unicode_strings)],
+    "5.27"    => [qw(bitwise current_sub evalbytes fc indirect multidimensional postderef_qq say state switch unicode_eval unicode_strings)],
+    "all"     => [qw(bitwise current_sub declared_refs evalbytes fc indirect isa multidimensional postderef_qq refaliasing say signatures state switch unicode_eval unicode_strings)],
+    "default" => [qw(indirect multidimensional)],
 );
 
 $feature_bundle{"5.12"} = $feature_bundle{"5.11"};
@@ -65,7 +66,7 @@ my %removed = (
 );
 
 our $hint_shift   = 26;
-our $hint_mask    = 0x1c000000;
+our $hint_mask    = 0x3c000000;
 our @hint_bundles = qw( default 5.10 5.11 5.15 5.23 5.27 );
 
 # This gets set (for now) in $^H as well as in %^H,
@@ -374,6 +375,23 @@ previous versions, it was simply on all the time.  To disallow (or
 warn on) indirect object syntax on older Perls, see the L<indirect>
 CPAN module.
 
+=head2 The 'multidimensional' feature
+
+This feature enables multidimensional array emulation, a perl 4 (or
+earlier) feature that was used to emulate multidimensional arrays with
+hashes.  This works by converting code like C<< $foo{$x, y} >> into
+C<< $foo{join($;, $x, $y} >>.  It is enabled by default, but can be
+turned off to disable multidimensional array emulation.
+
+When this feature is disabled the syntax that is normally replaced
+will report a compilation error.
+
+This feature is available under this name from Perl 5.34 onwards. In
+previous versions, it was simply on all the time.
+
+You can use the L<multidimensional> module on CPAN to disable
+multidimensional array emulation for older versions of Perl.
+
 =head1 FEATURE BUNDLES
 
 It's possible to load multiple features together, using
@@ -386,53 +404,55 @@ The following feature bundles are available:
 
   bundle    features included
   --------- -----------------
-  :default  indirect
+  :default  indirect multidimensional
 
-  :5.10     say state switch indirect
+  :5.10     indirect multidimensional say state switch
 
-  :5.12     say state switch unicode_strings indirect
+  :5.12     indirect multidimensional say state switch
+            unicode_strings
 
-  :5.14     say state switch unicode_strings indirect
+  :5.14     indirect multidimensional say state switch
+            unicode_strings
 
-  :5.16     say state switch unicode_strings
-            unicode_eval evalbytes current_sub fc
-            indirect
+  :5.16     current_sub evalbytes fc indirect
+            multidimensional say state switch
+            unicode_eval unicode_strings
 
-  :5.18     say state switch unicode_strings
-            unicode_eval evalbytes current_sub fc
-            indirect
+  :5.18     current_sub evalbytes fc indirect
+            multidimensional say state switch
+            unicode_eval unicode_strings
 
-  :5.20     say state switch unicode_strings
-            unicode_eval evalbytes current_sub fc
-            indirect
+  :5.20     current_sub evalbytes fc indirect
+            multidimensional say state switch
+            unicode_eval unicode_strings
 
-  :5.22     say state switch unicode_strings
-            unicode_eval evalbytes current_sub fc
-            indirect
+  :5.22     current_sub evalbytes fc indirect
+            multidimensional say state switch
+            unicode_eval unicode_strings
 
-  :5.24     say state switch unicode_strings
-            unicode_eval evalbytes current_sub fc
-            postderef_qq indirect
+  :5.24     current_sub evalbytes fc indirect
+            multidimensional postderef_qq say state
+            switch unicode_eval unicode_strings
 
-  :5.26     say state switch unicode_strings
-            unicode_eval evalbytes current_sub fc
-            postderef_qq indirect
+  :5.26     current_sub evalbytes fc indirect
+            multidimensional postderef_qq say state
+            switch unicode_eval unicode_strings
 
-  :5.28     say state switch unicode_strings
-            unicode_eval evalbytes current_sub fc
-            postderef_qq bitwise indirect
+  :5.28     bitwise current_sub evalbytes fc indirect
+            multidimensional postderef_qq say state
+            switch unicode_eval unicode_strings
 
-  :5.30     say state switch unicode_strings
-            unicode_eval evalbytes current_sub fc
-            postderef_qq bitwise indirect
+  :5.30     bitwise current_sub evalbytes fc indirect
+            multidimensional postderef_qq say state
+            switch unicode_eval unicode_strings
 
-  :5.32     say state switch unicode_strings
-            unicode_eval evalbytes current_sub fc
-            postderef_qq bitwise indirect
+  :5.32     bitwise current_sub evalbytes fc indirect
+            multidimensional postderef_qq say state
+            switch unicode_eval unicode_strings
 
-  :5.34     say state switch unicode_strings
-            unicode_eval evalbytes current_sub fc
-            postderef_qq bitwise indirect
+  :5.34     bitwise current_sub evalbytes fc indirect
+            multidimensional postderef_qq say state
+            switch unicode_eval unicode_strings
 
 The C<:default> bundle represents the feature set that is enabled before
 any C<use feature> or C<no feature> declaration.
index 69a9bb6..065fa85 100644 (file)
@@ -529,7 +529,7 @@ BEGIN {
 use vars qw($VERSION $header);
 
 # bump to X.XX in blead, only use X.XX_XX in maint
-$VERSION = '1.57';
+$VERSION = '1.58';
 
 $header = "perl5db.pl version $VERSION";
 
@@ -643,6 +643,7 @@ use vars qw(
     $filename
     $histfile
     $histsize
+    $histitemminlength
     $IN
     $inhibit_exit
     @ini_INC
@@ -938,6 +939,7 @@ are to be accepted.
 
 @options = qw(
   CommandSet   HistFile      HistSize
+  HistItemMinLength
   hashDepth    arrayDepth    dumpDepth
   DumpDBFiles  DumpPackages  DumpReused
   compactDump  veryCompact   quote
@@ -986,6 +988,7 @@ use vars qw(%optionVars);
     windowSize    => \$window,
     HistFile      => \$histfile,
     HistSize      => \$histsize,
+    HistItemMinLength => \$histitemminlength
 );
 
 =pod
@@ -2509,6 +2512,311 @@ EOP
     return;
 }
 
+=head3 C<_DB__handle_i_command> - inheritance display
+
+Display the (nested) parentage of the module or object given.
+
+=cut
+
+sub _DB__handle_i_command {
+    my $self = shift;
+
+    my $line = $self->cmd_args;
+    require mro;
+    foreach my $isa ( split( /\s+/, $line ) ) {
+        $evalarg = "$isa";
+        # The &-call is here to ascertain the mutability of @_.
+        ($isa) = &DB::eval;
+        no strict 'refs';
+        print join(
+            ', ',
+            map {
+                "$_"
+                  . (
+                    defined( ${"$_\::VERSION"} )
+                    ? ' ' . ${"$_\::VERSION"}
+                    : undef )
+              } @{mro::get_linear_isa(ref($isa) || $isa)}
+        );
+        print "\n";
+    }
+    next CMD;
+}
+
+=head3 C<cmd_l> - list lines (command)
+
+Most of the command is taken up with transforming all the different line
+specification syntaxes into 'start-stop'. After that is done, the command
+runs a loop over C<@dbline> for the specified range of lines. It handles
+the printing of each line and any markers (C<==E<gt>> for current line,
+C<b> for break on this line, C<a> for action on this line, C<:> for this
+line breakable).
+
+We save the last line listed in the C<$start> global for further listing
+later.
+
+=cut
+
+sub _min {
+    my $min = shift;
+    foreach my $v (@_) {
+        if ($min > $v) {
+            $min = $v;
+        }
+    }
+    return $min;
+}
+
+sub _max {
+    my $max = shift;
+    foreach my $v (@_) {
+        if ($max < $v) {
+            $max = $v;
+        }
+    }
+    return $max;
+}
+
+sub _minify_to_max {
+    my $ref = shift;
+
+    $$ref = _min($$ref, $max);
+
+    return;
+}
+
+sub _cmd_l_handle_var_name {
+    my $var_name = shift;
+
+    $evalarg = $var_name;
+
+    my ($s) = DB::eval();
+
+    # Ooops. Bad scalar.
+    if ($@) {
+        print {$OUT} "Error: $@\n";
+        next CMD;
+    }
+
+    # Good scalar. If it's a reference, find what it points to.
+    $s = CvGV_name($s);
+    print {$OUT} "Interpreted as: $1 $s\n";
+    $line = "$1 $s";
+
+    # Call self recursively to really do the command.
+    return _cmd_l_main( $s );
+}
+
+sub _cmd_l_handle_subname {
+
+    my $s = $subname;
+
+    # De-Perl4.
+    $subname =~ s/\'/::/;
+
+    # Put it in this package unless it starts with ::.
+    $subname = $package . "::" . $subname unless $subname =~ /::/;
+
+    # Put it in CORE::GLOBAL if t doesn't start with :: and
+    # it doesn't live in this package and it lives in CORE::GLOBAL.
+    $subname = "CORE::GLOBAL::$s"
+    if not defined &$subname
+        and $s !~ /::/
+        and defined &{"CORE::GLOBAL::$s"};
+
+    # Put leading '::' names into 'main::'.
+    $subname = "main" . $subname if substr( $subname, 0, 2 ) eq "::";
+
+    # Get name:start-stop from find_sub, and break this up at
+    # colons.
+    my @pieces = split( /:/, find_sub($subname) || $sub{$subname} );
+
+    # Pull off start-stop.
+    my $subrange = pop @pieces;
+
+    # If the name contained colons, the split broke it up.
+    # Put it back together.
+    $file = join( ':', @pieces );
+
+    # If we're not in that file, switch over to it.
+    if ( $file ne $filename ) {
+        if (! $slave_editor) {
+            print {$OUT} "Switching to file '$file'.\n";
+        }
+
+        # Switch debugger's magic structures.
+        *dbline   = $main::{ '_<' . $file };
+        $max      = $#dbline;
+        $filename = $file;
+    } ## end if ($file ne $filename)
+
+    # Subrange is 'start-stop'. If this is less than a window full,
+    # swap it to 'start+', which will list a window from the start point.
+    if ($subrange) {
+        if ( eval($subrange) < -$window ) {
+            $subrange =~ s/-.*/+/;
+        }
+
+        # Call self recursively to list the range.
+        return _cmd_l_main( $subrange );
+    } ## end if ($subrange)
+
+    # Couldn't find it.
+    else {
+        print {$OUT} "Subroutine $subname not found.\n";
+        return;
+    }
+}
+
+sub _cmd_l_empty {
+    # Compute new range to list.
+    $incr = $window - 1;
+
+    # Recurse to do it.
+    return _cmd_l_main( $start . '-' . ( $start + $incr ) );
+}
+
+sub _cmd_l_plus {
+    my ($new_start, $new_incr) = @_;
+
+    # Don't reset start for 'l +nnn'.
+    $start = $new_start if $new_start;
+
+    # Increment for list. Use window size if not specified.
+    # (Allows 'l +' to work.)
+    $incr = $new_incr || ($window - 1);
+
+    # Create a line range we'll understand, and recurse to do it.
+    return _cmd_l_main( $start . '-' . ( $start + $incr ) );
+}
+
+sub _cmd_l_calc_initial_end_and_i {
+    my ($spec, $start_match, $end_match) = @_;
+
+    # Determine end point; use end of file if not specified.
+    my $end = ( !defined $start_match ) ? $max :
+    ( $end_match ? $end_match : $start_match );
+
+    # Go on to the end, and then stop.
+    _minify_to_max(\$end);
+
+    # Determine start line.
+    my $i = $start_match;
+
+    if ($i eq '.') {
+        $i = $spec;
+    }
+
+    $i = _max($i, 1);
+
+    $incr = $end - $i;
+
+    return ($end, $i);
+}
+
+sub _cmd_l_range {
+    my ($spec, $current_line, $start_match, $end_match) = @_;
+
+    my ($end, $i) =
+        _cmd_l_calc_initial_end_and_i($spec, $start_match, $end_match);
+
+    # If we're running under a slave editor, force it to show the lines.
+    if ($slave_editor) {
+        print {$OUT} "\032\032$filename:$i:0\n";
+        $i = $end;
+    }
+    # We're doing it ourselves. We want to show the line and special
+    # markers for:
+    # - the current line in execution
+    # - whether a line is breakable or not
+    # - whether a line has a break or not
+    # - whether a line has an action or not
+    else {
+        I_TO_END:
+        for ( ; $i <= $end ; $i++ ) {
+
+            # Check for breakpoints and actions.
+            my ( $stop, $action );
+            if ($dbline{$i}) {
+                ( $stop, $action ) = split( /\0/, $dbline{$i} );
+            }
+
+            # ==> if this is the current line in execution,
+            # : if it's breakable.
+            my $arrow =
+            ( $i == $current_line and $filename eq $filename_ini )
+            ? '==>'
+            : ( $dbline[$i] + 0 ? ':' : ' ' );
+
+            # Add break and action indicators.
+            $arrow .= 'b' if $stop;
+            $arrow .= 'a' if $action;
+
+            # Print the line.
+            print {$OUT} "$i$arrow\t", $dbline[$i];
+
+            # Move on to the next line. Drop out on an interrupt.
+            if ($signal) {
+                $i++;
+                last I_TO_END;
+            }
+        } ## end for (; $i <= $end ; $i++)
+
+        # Line the prompt up; print a newline if the last line listed
+        # didn't have a newline.
+        if ($dbline[ $i - 1 ] !~ /\n\z/) {
+            print {$OUT} "\n";
+        }
+    } ## end else [ if ($slave_editor)
+
+    # Save the point we last listed to in case another relative 'l'
+    # command is desired. Don't let it run off the end.
+    $start = $i;
+    _minify_to_max(\$start);
+
+    return;
+}
+
+sub _cmd_l_main {
+    my $spec = shift;
+
+    # If this is '-something', delete any spaces after the dash.
+    $spec =~ s/\A-\s*\z/-/;
+
+    # If the line is '$something', assume this is a scalar containing a
+    # line number.
+    # Set up for DB::eval() - evaluate in *user* context.
+    if ( my ($var_name) = $spec =~ /\A(\$.*)/s ) {
+        return _cmd_l_handle_var_name($var_name);
+    }
+    # l name. Try to find a sub by that name.
+    elsif ( ($subname) = $spec =~ /\A([\':A-Za-z_][\':\w]*(?:\[.*\])?)/s ) {
+        return _cmd_l_handle_subname();
+    }
+    # Bare 'l' command.
+    elsif ( $spec !~ /\S/ ) {
+        return _cmd_l_empty();
+    }
+    # l [start]+number_of_lines
+    elsif ( my ($new_start, $new_incr) = $spec =~ /\A(\d*)\+(\d*)\z/ ) {
+        return _cmd_l_plus($new_start, $new_incr);
+    }
+    # l start-stop or l start,stop
+    elsif (my ($s, $e) = $spec =~ /^(?:(-?[\d\$\.]+)(?:[-,]([\d\$\.]+))?)?/ ) {
+        return _cmd_l_range($spec, $line, $s, $e);
+    }
+
+    return;
+} ## end sub cmd_l
+
+sub _DB__handle_l_command {
+    my $self = shift;
+
+    _cmd_l_main($self->cmd_args);
+    next CMD;
+}
+
+
 # 't' is type.
 # 'm' is method.
 # 'v' is the value (i.e: method name or subroutine ref).
@@ -2528,6 +2836,8 @@ BEGIN
     'W' => { t => 'm', v => '_handle_W_command', },
     'c' => { t => 's', v => \&_DB__handle_c_command, },
     'f' => { t => 's', v => \&_DB__handle_f_command, },
+    'i' => { t => 's', v => \&_DB__handle_i_command, },
+    'l' => { t => 's', v => \&_DB__handle_l_command, },
     'm' => { t => 's', v => \&_DB__handle_m_command, },
     'n' => { t => 'm', v => '_handle_n_command', },
     'p' => { t => 'm', v => '_handle_p_command', },
@@ -2548,7 +2858,7 @@ BEGIN
         { t => 's', v => \&_DB__handle_restart_and_rerun_commands, },
         } qw(R rerun)),
     (map { $_ => {t => 'm', v => '_handle_cmd_wrapper_commands' }, }
-        qw(a A b B e E h i l L M o O v w W)),
+        qw(a A b B e E h L M o O v w W)),
 );
 };
 
@@ -2708,6 +3018,7 @@ If there are any preprompt actions, execute those as well.
         # The &-call is here to ascertain the mutability of @_.
         &DB::eval;
     }
+    undef $action;
 
     # Are we nested another level (e.g., did we evaluate a function
     # that had a breakpoint in it at the debugger prompt)?
@@ -2820,7 +3131,7 @@ it up.
                 $cmd = $laststep;
             }
             chomp($cmd);    # get rid of the annoying extra newline
-            if (length($cmd) >= 2) {
+            if (length($cmd) >= option_val('HistItemMinLength', 2)) {
                 push( @hist, $cmd );
             }
             push( @truehist, $cmd );
@@ -3346,10 +3657,6 @@ use B<o> I<inhibit_exit> to avoid stopping after program termination,
 B<h q>, B<h R> or B<h o> to get additional info.
 EOP
 
-        # Set the DB::eval context appropriately.
-        # At program termination disable any user actions.
-        $DB::action = undef;
-
         $DB::package     = 'main';
         $DB::usercontext = DB::_calc_usercontext($DB::package);
     } ## end elsif ($package eq 'DB::fake')
@@ -3734,10 +4041,7 @@ sub _handle_H_command {
         my $i;
 
         for ( $i = $#hist ; $i > $end ; $i-- ) {
-
-            # Print the command  unless it has no arguments.
-            print $OUT "$i: ", $hist[$i], "\n"
-            unless $hist[$i] =~ /^.?$/;
+            print $OUT "$i: ", $hist[$i], "\n";
         }
 
         next CMD;
@@ -4972,807 +5276,504 @@ sub break_on_line {
     $had_breakpoints{$filename} |= 1;
 
     # If there is an action or condition here already ...
-    if ( $dbline{$i} ) {
-
-        # ... swap this condition for the existing one.
-        $dbline{$i} =~ s/^[^\0]*/$cond/;
-    }
-    else {
-
-        # Nothing here - just add the condition.
-        $dbline{$i} = $cond;
-
-        _set_breakpoint_enabled_status($filename, $i, 1);
-    }
-
-    return;
-} ## end sub break_on_line
-
-=head3 cmd_b_line(line, [condition]) (command)
-
-Wrapper for C<break_on_line>. Prints the failure message if it
-doesn't work.
-
-=cut
-
-sub cmd_b_line {
-    if (not eval { break_on_line(@_); 1 }) {
-        local $\ = '';
-        print $OUT $@ and return;
-    }
-
-    return;
-} ## end sub cmd_b_line
-
-=head3 cmd_b_filename_line(line, [condition]) (command)
-
-Wrapper for C<break_on_filename_line>. Prints the failure message if it
-doesn't work.
-
-=cut
-
-sub cmd_b_filename_line {
-    if (not eval { break_on_filename_line(@_); 1 }) {
-        local $\ = '';
-        print $OUT $@ and return;
-    }
-
-    return;
-}
-
-=head3 break_on_filename_line(file, line, [condition]) (API)
-
-Switches to the file specified and then calls C<break_on_line> to set
-the breakpoint.
-
-=cut
-
-sub break_on_filename_line {
-    my $f = shift;
-    my $i = shift;
-    my $cond = @_ ? shift(@_) : 1;
-
-    # Switch the magical hash temporarily.
-    local *dbline = $main::{ '_<' . $f };
-
-    # Localize the variables that break_on_line uses to make its message.
-    local $filename_error = " of '$f'";
-    local $filename       = $f;
-
-    # Add the breakpoint.
-    break_on_line( $i, $cond );
-
-    return;
-} ## end sub break_on_filename_line
-
-=head3 break_on_filename_line_range(file, from, to, [condition]) (API)
-
-Switch to another file, search the range of lines specified for an
-executable one, and put a breakpoint on the first one you find.
-
-=cut
-
-sub break_on_filename_line_range {
-    my $f = shift;
-    my $from = shift;
-    my $to = shift;
-    my $cond = @_ ? shift(@_) : 1;
-
-    # Find a breakable line if there is one.
-    my $i = breakable_line_in_filename( $f, $from, $to );
-
-    # Add the breakpoint.
-    break_on_filename_line( $f, $i, $cond );
-
-    return;
-} ## end sub break_on_filename_line_range
-
-=head3 subroutine_filename_lines(subname, [condition]) (API)
-
-Search for a subroutine within a given file. The condition is ignored.
-Uses C<find_sub> to locate the desired subroutine.
-
-=cut
-
-sub subroutine_filename_lines {
-    my ( $subname ) = @_;
-
-    # Returned value from find_sub() is fullpathname:startline-endline.
-    # The match creates the list (fullpathname, start, end).
-    return (find_sub($subname) =~ /^(.*):(\d+)-(\d+)$/);
-} ## end sub subroutine_filename_lines
-
-=head3 break_subroutine(subname) (API)
-
-Places a break on the first line possible in the specified subroutine. Uses
-C<subroutine_filename_lines> to find the subroutine, and
-C<break_on_filename_line_range> to place the break.
-
-=cut
-
-sub break_subroutine {
-    my $subname = shift;
-
-    # Get filename, start, and end.
-    my ( $file, $s, $e ) = subroutine_filename_lines($subname)
-      or die "Subroutine $subname not found.\n";
-
-
-    # Null condition changes to '1' (always true).
-    my $cond = @_ ? shift(@_) : 1;
-
-    # Put a break the first place possible in the range of lines
-    # that make up this subroutine.
-    break_on_filename_line_range( $file, $s, $e, $cond );
-
-    return;
-} ## end sub break_subroutine
-
-=head3 cmd_b_sub(subname, [condition]) (command)
-
-We take the incoming subroutine name and fully-qualify it as best we can.
-
-=over 4
-
-=item 1. If it's already fully-qualified, leave it alone.
-
-=item 2. Try putting it in the current package.
-
-=item 3. If it's not there, try putting it in CORE::GLOBAL if it exists there.
-
-=item 4. If it starts with '::', put it in 'main::'.
-
-=back
-
-After all this cleanup, we call C<break_subroutine> to try to set the
-breakpoint.
-
-=cut
-
-sub cmd_b_sub {
-    my $subname = shift;
-    my $cond = @_ ? shift : 1;
-
-    # If the subname isn't a code reference, qualify it so that
-    # break_subroutine() will work right.
-    if ( ref($subname) ne 'CODE' ) {
-
-        # Not Perl 4.
-        $subname =~ s/'/::/g;
-        my $s = $subname;
-
-        # Put it in this package unless it's already qualified.
-        if ($subname !~ /::/)
-        {
-            $subname = $package . '::' . $subname;
-        };
-
-        # Requalify it into CORE::GLOBAL if qualifying it into this
-        # package resulted in its not being defined, but only do so
-        # if it really is in CORE::GLOBAL.
-        my $core_name = "CORE::GLOBAL::$s";
-        if ((!defined(&$subname))
-                and ($s !~ /::/)
-                and (defined &{$core_name}))
-        {
-            $subname = $core_name;
-        }
-
-        # Put it in package 'main' if it has a leading ::.
-        if ($subname =~ /\A::/)
-        {
-            $subname = "main" . $subname;
-        }
-    } ## end if ( ref($subname) ne 'CODE' ) {
-
-    # Try to set the breakpoint.
-    if (not eval { break_subroutine( $subname, $cond ); 1 }) {
-        local $\ = '';
-        print {$OUT} $@;
-        return;
-    }
-
-    return;
-} ## end sub cmd_b_sub
-
-=head3 C<cmd_B> - delete breakpoint(s) (command)
-
-The command mostly parses the command line and tries to turn the argument
-into a line spec. If it can't, it uses the current line. It then calls
-C<delete_breakpoint> to actually do the work.
-
-If C<*> is  specified, C<cmd_B> calls C<delete_breakpoint> with no arguments,
-thereby deleting all the breakpoints.
-
-=cut
-
-sub cmd_B {
-    my $cmd = shift;
-
-    # No line spec? Use dbline.
-    # If there is one, use it if it's non-zero, or wipe it out if it is.
-    my $line   = ( $_[0] =~ /\A\./ ) ? $dbline : (shift || '');
-    my $dbline = shift;
-
-    # If the line was dot, make the line the current one.
-    $line =~ s/^\./$dbline/;
+    if ( $dbline{$i} ) {
 
-    # If it's * we're deleting all the breakpoints.
-    if ( $line eq '*' ) {
-        if (not eval { delete_breakpoint(); 1 }) {
-            print {$OUT} $@;
-        }
+        # ... swap this condition for the existing one.
+        $dbline{$i} =~ s/^[^\0]*/$cond/;
     }
+    else {
 
-    # If there is a line spec, delete the breakpoint on that line.
-    elsif ( $line =~ /\A(\S.*)/ ) {
-        if (not eval { delete_breakpoint( $line || $dbline ); 1 }) {
-            local $\ = '';
-            print {$OUT} $@;
-        }
-    } ## end elsif ($line =~ /^(\S.*)/)
+        # Nothing here - just add the condition.
+        $dbline{$i} = $cond;
 
-    # No line spec.
-    else {
-        print {$OUT}
-          "Deleting a breakpoint requires a line number, or '*' for all\n"
-          ;    # hint
+        _set_breakpoint_enabled_status($filename, $i, 1);
     }
 
     return;
-} ## end sub cmd_B
+} ## end sub break_on_line
 
-=head3 delete_breakpoint([line]) (API)
+=head3 cmd_b_line(line, [condition]) (command)
 
-This actually does the work of deleting either a single breakpoint, or all
-of them.
+Wrapper for C<break_on_line>. Prints the failure message if it
+doesn't work.
 
-For a single line, we look for it in C<@dbline>. If it's nonbreakable, we
-just drop out with a message saying so. If it is, we remove the condition
-part of the 'condition\0action' that says there's a breakpoint here. If,
-after we've done that, there's nothing left, we delete the corresponding
-line in C<%dbline> to signal that no action needs to be taken for this line.
+=cut
 
-For all breakpoints, we iterate through the keys of C<%had_breakpoints>,
-which lists all currently-loaded files which have breakpoints. We then look
-at each line in each of these files, temporarily switching the C<%dbline>
-and C<@dbline> structures to point to the files in question, and do what
-we did in the single line case: delete the condition in C<@dbline>, and
-delete the key in C<%dbline> if nothing's left.
+sub cmd_b_line {
+    if (not eval { break_on_line(@_); 1 }) {
+        local $\ = '';
+        print $OUT $@ and return;
+    }
 
-We then wholesale delete C<%postponed>, C<%postponed_file>, and
-C<%break_on_load>, because these structures contain breakpoints for files
-and code that haven't been loaded yet. We can just kill these off because there
-are no magical debugger structures associated with them.
+    return;
+} ## end sub cmd_b_line
 
-=cut
+=head3 cmd_b_filename_line(line, [condition]) (command)
 
-sub _remove_breakpoint_entry {
-    my ($fn, $i) = @_;
+Wrapper for C<break_on_filename_line>. Prints the failure message if it
+doesn't work.
 
-    delete $dbline{$i};
-    _delete_breakpoint_data_ref($fn, $i);
+=cut
+
+sub cmd_b_filename_line {
+    if (not eval { break_on_filename_line(@_); 1 }) {
+        local $\ = '';
+        print $OUT $@ and return;
+    }
 
     return;
 }
 
-sub _delete_all_breakpoints {
-    print {$OUT} "Deleting all breakpoints...\n";
-
-    # %had_breakpoints lists every file that had at least one
-    # breakpoint in it.
-    for my $fn ( keys %had_breakpoints ) {
-
-        # Switch to the desired file temporarily.
-        local *dbline = $main::{ '_<' . $fn };
+=head3 break_on_filename_line(file, line, [condition]) (API)
 
-        $max = $#dbline;
+Switches to the file specified and then calls C<break_on_line> to set
+the breakpoint.
 
-        # For all lines in this file ...
-        for my $i (1 .. $max) {
+=cut
 
-            # If there's a breakpoint or action on this line ...
-            if ( defined $dbline{$i} ) {
+sub break_on_filename_line {
+    my $f = shift;
+    my $i = shift;
+    my $cond = @_ ? shift(@_) : 1;
 
-                # ... remove the breakpoint.
-                $dbline{$i} =~ s/\A[^\0]+//;
-                if ( $dbline{$i} =~ s/\A\0?\z// ) {
-                    # Remove the entry altogether if no action is there.
-                    _remove_breakpoint_entry($fn, $i);
-                }
-            } ## end if (defined $dbline{$i...
-        } ## end for $i (1 .. $max)
+    # Switch the magical hash temporarily.
+    local *dbline = $main::{ '_<' . $f };
 
-        # If, after we turn off the "there were breakpoints in this file"
-        # bit, the entry in %had_breakpoints for this file is zero,
-        # we should remove this file from the hash.
-        if ( not $had_breakpoints{$fn} &= (~1) ) {
-            delete $had_breakpoints{$fn};
-        }
-    } ## end for my $fn (keys %had_breakpoints)
+    # Localize the variables that break_on_line uses to make its message.
+    local $filename_error = " of '$f'";
+    local $filename       = $f;
 
-    # Kill off all the other breakpoints that are waiting for files that
-    # haven't been loaded yet.
-    undef %postponed;
-    undef %postponed_file;
-    undef %break_on_load;
+    # Add the breakpoint.
+    break_on_line( $i, $cond );
 
     return;
-}
-
-sub _delete_breakpoint_from_line {
-    my ($i) = @_;
+} ## end sub break_on_filename_line
 
-    # Woops. This line wasn't breakable at all.
-    die "Line $i not breakable.\n" if $dbline[$i] == 0;
+=head3 break_on_filename_line_range(file, from, to, [condition]) (API)
 
-    # Kill the condition, but leave any action.
-    $dbline{$i} =~ s/\A[^\0]*//;
+Switch to another file, search the range of lines specified for an
+executable one, and put a breakpoint on the first one you find.
 
-    # Remove the entry entirely if there's no action left.
-    if ($dbline{$i} eq '') {
-        _remove_breakpoint_entry($filename, $i);
-    }
+=cut
 
-    return;
-}
+sub break_on_filename_line_range {
+    my $f = shift;
+    my $from = shift;
+    my $to = shift;
+    my $cond = @_ ? shift(@_) : 1;
 
-sub delete_breakpoint {
-    my $i = shift;
+    # Find a breakable line if there is one.
+    my $i = breakable_line_in_filename( $f, $from, $to );
 
-    # If we got a line, delete just that one.
-    if ( defined($i) ) {
-        _delete_breakpoint_from_line($i);
-    }
-    # No line; delete them all.
-    else {
-        _delete_all_breakpoints();
-    }
+    # Add the breakpoint.
+    break_on_filename_line( $f, $i, $cond );
 
     return;
-}
+} ## end sub break_on_filename_line_range
 
-=head3 cmd_stop (command)
+=head3 subroutine_filename_lines(subname, [condition]) (API)
 
-This is meant to be part of the new command API, but it isn't called or used
-anywhere else in the debugger. XXX It is probably meant for use in development
-of new commands.
+Search for a subroutine within a given file. The condition is ignored.
+Uses C<find_sub> to locate the desired subroutine.
 
 =cut
 
-sub cmd_stop {    # As on ^C, but not signal-safy.
-    $signal = 1;
-}
-
-=head3 C<cmd_e> - threads
+sub subroutine_filename_lines {
+    my ( $subname ) = @_;
 
-Display the current thread id:
+    # Returned value from find_sub() is fullpathname:startline-endline.
+    # The match creates the list (fullpathname, start, end).
+    return (find_sub($subname) =~ /^(.*):(\d+)-(\d+)$/);
+} ## end sub subroutine_filename_lines
 
-    e
+=head3 break_subroutine(subname) (API)
 
-This could be how (when implemented) to send commands to this thread id (e cmd)
-or that thread id (e tid cmd).
+Places a break on the first line possible in the specified subroutine. Uses
+C<subroutine_filename_lines> to find the subroutine, and
+C<break_on_filename_line_range> to place the break.
 
 =cut
 
-sub cmd_e {
-    my $cmd  = shift;
-    my $line = shift;
-    unless (exists($INC{'threads.pm'})) {
-        print "threads not loaded($ENV{PERL5DB_THREADED})
-        please run the debugger with PERL5DB_THREADED=1 set in the environment\n";
-    } else {
-        my $tid = threads->tid;
-        print "thread id: $tid\n";
-    }
-} ## end sub cmd_e
-
-=head3 C<cmd_E> - list of thread ids
+sub break_subroutine {
+    my $subname = shift;
 
-Display the list of available thread ids:
+    # Get filename, start, and end.
+    my ( $file, $s, $e ) = subroutine_filename_lines($subname)
+      or die "Subroutine $subname not found.\n";
 
-    E
 
-This could be used (when implemented) to send commands to all threads (E cmd).
+    # Null condition changes to '1' (always true).
+    my $cond = @_ ? shift(@_) : 1;
 
-=cut
+    # Put a break the first place possible in the range of lines
+    # that make up this subroutine.
+    break_on_filename_line_range( $file, $s, $e, $cond );
 
-sub cmd_E {
-    my $cmd  = shift;
-    my $line = shift;
-    unless (exists($INC{'threads.pm'})) {
-        print "threads not loaded($ENV{PERL5DB_THREADED})
-        please run the debugger with PERL5DB_THREADED=1 set in the environment\n";
-    } else {
-        my $tid = threads->tid;
-        print "thread ids: ".join(', ',
-            map { ($tid == $_->tid ? '<'.$_->tid.'>' : $_->tid) } threads->list
-        )."\n";
-    }
-} ## end sub cmd_E
+    return;
+} ## end sub break_subroutine
 
-=head3 C<cmd_h> - help command (command)
+=head3 cmd_b_sub(subname, [condition]) (command)
 
-Does the work of either
+We take the incoming subroutine name and fully-qualify it as best we can.
 
 =over 4
 
-=item *
+=item 1. If it's already fully-qualified, leave it alone.
 
-Showing all the debugger help
+=item 2. Try putting it in the current package.
 
-=item *
+=item 3. If it's not there, try putting it in CORE::GLOBAL if it exists there.
 
-Showing help for a specific command
+=item 4. If it starts with '::', put it in 'main::'.
 
 =back
 
-=cut
-
-use vars qw($help);
-use vars qw($summary);
-
-sub cmd_h {
-    my $cmd = shift;
+After all this cleanup, we call C<break_subroutine> to try to set the
+breakpoint.
 
-    # If we have no operand, assume null.
-    my $line = shift || '';
+=cut
 
-    # 'h h'. Print the long-format help.
-    if ( $line =~ /\Ah\s*\z/ ) {
-        print_help($help);
-    }
+sub cmd_b_sub {
+    my $subname = shift;
+    my $cond = @_ ? shift : 1;
 
-    # 'h <something>'. Search for the command and print only its help.
-    elsif ( my ($asked) = $line =~ /\A(\S.*)\z/ ) {
+    # If the subname isn't a code reference, qualify it so that
+    # break_subroutine() will work right.
+    if ( ref($subname) ne 'CODE' ) {
 
-        # support long commands; otherwise bogus errors
-        # happen when you ask for h on <CR> for example
-        my $qasked = quotemeta($asked);    # for searching; we don't
-                                           # want to use it as a pattern.
-                                           # XXX: finds CR but not <CR>
+        # Not Perl 4.
+        $subname =~ s/'/::/g;
+        my $s = $subname;
 
-        # Search the help string for the command.
-        if (
-            $help =~ /^                    # Start of a line
-                      <?                   # Optional '<'
-                      (?:[IB]<)            # Optional markup
-                      $qasked              # The requested command
-                     /mx
-          )
+        # Put it in this package unless it's already qualified.
+        if ($subname !~ /::/)
         {
+            $subname = $package . '::' . $subname;
+        };
 
-            # It's there; pull it out and print it.
-            while (
-                $help =~ /^
-                              (<?            # Optional '<'
-                                 (?:[IB]<)   # Optional markup
-                                 $qasked     # The command
-                                 ([\s\S]*?)  # Description line(s)
-                              \n)            # End of last description line
-                              (?!\s)         # Next line not starting with
-                                             # whitespace
-                             /mgx
-              )
-            {
-                print_help($1);
-            }
+        # Requalify it into CORE::GLOBAL if qualifying it into this
+        # package resulted in its not being defined, but only do so
+        # if it really is in CORE::GLOBAL.
+        my $core_name = "CORE::GLOBAL::$s";
+        if ((!defined(&$subname))
+                and ($s !~ /::/)
+                and (defined &{$core_name}))
+        {
+            $subname = $core_name;
         }
 
-        # Not found; not a debugger command.
-        else {
-            print_help("B<$asked> is not a debugger command.\n");
+        # Put it in package 'main' if it has a leading ::.
+        if ($subname =~ /\A::/)
+        {
+            $subname = "main" . $subname;
         }
-    } ## end elsif ($line =~ /^(\S.*)$/)
+    } ## end if ( ref($subname) ne 'CODE' ) {
 
-    # 'h' - print the summary help.
-    else {
-        print_help($summary);
+    # Try to set the breakpoint.
+    if (not eval { break_subroutine( $subname, $cond ); 1 }) {
+        local $\ = '';
+        print {$OUT} $@;
+        return;
     }
-} ## end sub cmd_h
-
-=head3 C<cmd_i> - inheritance display
-
-Display the (nested) parentage of the module or object given.
 
-=cut
+    return;
+} ## end sub cmd_b_sub
 
-sub cmd_i {
-    my $cmd  = shift;
-    my $line = shift;
+=head3 C<cmd_B> - delete breakpoint(s) (command)
 
-    require mro;
+The command mostly parses the command line and tries to turn the argument
+into a line spec. If it can't, it uses the current line. It then calls
+C<delete_breakpoint> to actually do the work.
 
-    foreach my $isa ( split( /\s+/, $line ) ) {
-        $evalarg = $isa;
-        # The &-call is here to ascertain the mutability of @_.
-        ($isa) = &DB::eval;
-        no strict 'refs';
-        print join(
-            ', ',
-            map {
-                "$_"
-                  . (
-                    defined( ${"$_\::VERSION"} )
-                    ? ' ' . ${"$_\::VERSION"}
-                    : undef )
-              } @{mro::get_linear_isa(ref($isa) || $isa)}
-        );
-        print "\n";
-    }
-} ## end sub cmd_i
+If C<*> is  specified, C<cmd_B> calls C<delete_breakpoint> with no arguments,
+thereby deleting all the breakpoints.
 
-=head3 C<cmd_l> - list lines (command)
+=cut
 
-Most of the command is taken up with transforming all the different line
-specification syntaxes into 'start-stop'. After that is done, the command
-runs a loop over C<@dbline> for the specified range of lines. It handles
-the printing of each line and any markers (C<==E<gt>> for current line,
-C<b> for break on this line, C<a> for action on this line, C<:> for this
-line breakable).
+sub cmd_B {
+    my $cmd = shift;
 
-We save the last line listed in the C<$start> global for further listing
-later.
+    # No line spec? Use dbline.
+    # If there is one, use it if it's non-zero, or wipe it out if it is.
+    my $line   = ( $_[0] =~ /\A\./ ) ? $dbline : (shift || '');
+    my $dbline = shift;
 
-=cut
+    # If the line was dot, make the line the current one.
+    $line =~ s/^\./$dbline/;
 
-sub _min {
-    my $min = shift;
-    foreach my $v (@_) {
-        if ($min > $v) {
-            $min = $v;
+    # If it's * we're deleting all the breakpoints.
+    if ( $line eq '*' ) {
+        if (not eval { delete_breakpoint(); 1 }) {
+            print {$OUT} $@;
         }
     }
-    return $min;
-}
 
-sub _max {
-    my $max = shift;
-    foreach my $v (@_) {
-        if ($max < $v) {
-            $max = $v;
+    # If there is a line spec, delete the breakpoint on that line.
+    elsif ( $line =~ /\A(\S.*)/ ) {
+        if (not eval { delete_breakpoint( $line || $dbline ); 1 }) {
+            local $\ = '';
+            print {$OUT} $@;
         }
+    } ## end elsif ($line =~ /^(\S.*)/)
+
+    # No line spec.
+    else {
+        print {$OUT}
+          "Deleting a breakpoint requires a line number, or '*' for all\n"
+          ;    # hint
     }
-    return $max;
-}
 
-sub _minify_to_max {
-    my $ref = shift;
+    return;
+} ## end sub cmd_B
 
-    $$ref = _min($$ref, $max);
+=head3 delete_breakpoint([line]) (API)
 
-    return;
-}
+This actually does the work of deleting either a single breakpoint, or all
+of them.
 
-sub _cmd_l_handle_var_name {
-    my $var_name = shift;
+For a single line, we look for it in C<@dbline>. If it's nonbreakable, we
+just drop out with a message saying so. If it is, we remove the condition
+part of the 'condition\0action' that says there's a breakpoint here. If,
+after we've done that, there's nothing left, we delete the corresponding
+line in C<%dbline> to signal that no action needs to be taken for this line.
 
-    $evalarg = $var_name;
+For all breakpoints, we iterate through the keys of C<%had_breakpoints>,
+which lists all currently-loaded files which have breakpoints. We then look
+at each line in each of these files, temporarily switching the C<%dbline>
+and C<@dbline> structures to point to the files in question, and do what
+we did in the single line case: delete the condition in C<@dbline>, and
+delete the key in C<%dbline> if nothing's left.
 
-    my ($s) = DB::eval();
+We then wholesale delete C<%postponed>, C<%postponed_file>, and
+C<%break_on_load>, because these structures contain breakpoints for files
+and code that haven't been loaded yet. We can just kill these off because there
+are no magical debugger structures associated with them.
 
-    # Ooops. Bad scalar.
-    if ($@) {
-        print {$OUT} "Error: $@\n";
-        next CMD;
-    }
+=cut
 
-    # Good scalar. If it's a reference, find what it points to.
-    $s = CvGV_name($s);
-    print {$OUT} "Interpreted as: $1 $s\n";
-    $line = "$1 $s";
+sub _remove_breakpoint_entry {
+    my ($fn, $i) = @_;
 
-    # Call self recursively to really do the command.
-    return _cmd_l_main( $s );
+    delete $dbline{$i};
+    _delete_breakpoint_data_ref($fn, $i);
+
+    return;
 }
 
-sub _cmd_l_handle_subname {
+sub _delete_all_breakpoints {
+    print {$OUT} "Deleting all breakpoints...\n";
 
-    my $s = $subname;
+    # %had_breakpoints lists every file that had at least one
+    # breakpoint in it.
+    for my $fn ( keys %had_breakpoints ) {
 
-    # De-Perl4.
-    $subname =~ s/\'/::/;
+        # Switch to the desired file temporarily.
+        local *dbline = $main::{ '_<' . $fn };
 
-    # Put it in this package unless it starts with ::.
-    $subname = $package . "::" . $subname unless $subname =~ /::/;
+        $max = $#dbline;
 
-    # Put it in CORE::GLOBAL if t doesn't start with :: and
-    # it doesn't live in this package and it lives in CORE::GLOBAL.
-    $subname = "CORE::GLOBAL::$s"
-    if not defined &$subname
-        and $s !~ /::/
-        and defined &{"CORE::GLOBAL::$s"};
+        # For all lines in this file ...
+        for my $i (1 .. $max) {
 
-    # Put leading '::' names into 'main::'.
-    $subname = "main" . $subname if substr( $subname, 0, 2 ) eq "::";
+            # If there's a breakpoint or action on this line ...
+            if ( defined $dbline{$i} ) {
 
-    # Get name:start-stop from find_sub, and break this up at
-    # colons.
-    my @pieces = split( /:/, find_sub($subname) || $sub{$subname} );
+                # ... remove the breakpoint.
+                $dbline{$i} =~ s/\A[^\0]+//;
+                if ( $dbline{$i} =~ s/\A\0?\z// ) {
+                    # Remove the entry altogether if no action is there.
+                    _remove_breakpoint_entry($fn, $i);
+                }
+            } ## end if (defined $dbline{$i...
+        } ## end for $i (1 .. $max)
 
-    # Pull off start-stop.
-    my $subrange = pop @pieces;
+        # If, after we turn off the "there were breakpoints in this file"
+        # bit, the entry in %had_breakpoints for this file is zero,
+        # we should remove this file from the hash.
+        if ( not $had_breakpoints{$fn} &= (~1) ) {
+            delete $had_breakpoints{$fn};
+        }
+    } ## end for my $fn (keys %had_breakpoints)
 
-    # If the name contained colons, the split broke it up.
-    # Put it back together.
-    $file = join( ':', @pieces );
+    # Kill off all the other breakpoints that are waiting for files that
+    # haven't been loaded yet.
+    undef %postponed;
+    undef %postponed_file;
+    undef %break_on_load;
 
-    # If we're not in that file, switch over to it.
-    if ( $file ne $filename ) {
-        if (! $slave_editor) {
-            print {$OUT} "Switching to file '$file'.\n";
-        }
+    return;
+}
 
-        # Switch debugger's magic structures.
-        *dbline   = $main::{ '_<' . $file };
-        $max      = $#dbline;
-        $filename = $file;
-    } ## end if ($file ne $filename)
+sub _delete_breakpoint_from_line {
+    my ($i) = @_;
 
-    # Subrange is 'start-stop'. If this is less than a window full,
-    # swap it to 'start+', which will list a window from the start point.
-    if ($subrange) {
-        if ( eval($subrange) < -$window ) {
-            $subrange =~ s/-.*/+/;
-        }
+    # Woops. This line wasn't breakable at all.
+    die "Line $i not breakable.\n" if $dbline[$i] == 0;
 
-        # Call self recursively to list the range.
-        return _cmd_l_main( $subrange );
-    } ## end if ($subrange)
+    # Kill the condition, but leave any action.
+    $dbline{$i} =~ s/\A[^\0]*//;
 
-    # Couldn't find it.
-    else {
-        print {$OUT} "Subroutine $subname not found.\n";
-        return;
+    # Remove the entry entirely if there's no action left.
+    if ($dbline{$i} eq '') {
+        _remove_breakpoint_entry($filename, $i);
     }
+
+    return;
 }
 
-sub _cmd_l_empty {
-    # Compute new range to list.
-    $incr = $window - 1;
+sub delete_breakpoint {
+    my $i = shift;
 
-    # Recurse to do it.
-    return _cmd_l_main( $start . '-' . ( $start + $incr ) );
+    # If we got a line, delete just that one.
+    if ( defined($i) ) {
+        _delete_breakpoint_from_line($i);
+    }
+    # No line; delete them all.
+    else {
+        _delete_all_breakpoints();
+    }
+
+    return;
 }
 
-sub _cmd_l_plus {
-    my ($new_start, $new_incr) = @_;
+=head3 cmd_stop (command)
 
-    # Don't reset start for 'l +nnn'.
-    $start = $new_start if $new_start;
+This is meant to be part of the new command API, but it isn't called or used
+anywhere else in the debugger. XXX It is probably meant for use in development
+of new commands.
 
-    # Increment for list. Use window size if not specified.
-    # (Allows 'l +' to work.)
-    $incr = $new_incr || ($window - 1);
+=cut
 
-    # Create a line range we'll understand, and recurse to do it.
-    return _cmd_l_main( $start . '-' . ( $start + $incr ) );
+sub cmd_stop {    # As on ^C, but not signal-safy.
+    $signal = 1;
 }
 
-sub _cmd_l_calc_initial_end_and_i {
-    my ($spec, $start_match, $end_match) = @_;
+=head3 C<cmd_e> - threads
 
-    # Determine end point; use end of file if not specified.
-    my $end = ( !defined $start_match ) ? $max :
-    ( $end_match ? $end_match : $start_match );
+Display the current thread id:
 
-    # Go on to the end, and then stop.
-    _minify_to_max(\$end);
+    e
 
-    # Determine start line.
-    my $i = $start_match;
+This could be how (when implemented) to send commands to this thread id (e cmd)
+or that thread id (e tid cmd).
 
-    if ($i eq '.') {
-        $i = $spec;
+=cut
+
+sub cmd_e {
+    my $cmd  = shift;
+    my $line = shift;
+    unless (exists($INC{'threads.pm'})) {
+        print "threads not loaded($ENV{PERL5DB_THREADED})
+        please run the debugger with PERL5DB_THREADED=1 set in the environment\n";
+    } else {
+        my $tid = threads->tid;
+        print "thread id: $tid\n";
     }
+} ## end sub cmd_e
 
-    $i = _max($i, 1);
+=head3 C<cmd_E> - list of thread ids
 
-    $incr = $end - $i;
+Display the list of available thread ids:
 
-    return ($end, $i);
-}
+    E
 
-sub _cmd_l_range {
-    my ($spec, $current_line, $start_match, $end_match) = @_;
+This could be used (when implemented) to send commands to all threads (E cmd).
 
-    my ($end, $i) =
-        _cmd_l_calc_initial_end_and_i($spec, $start_match, $end_match);
+=cut
 
-    # If we're running under a slave editor, force it to show the lines.
-    if ($slave_editor) {
-        print {$OUT} "\032\032$filename:$i:0\n";
-        $i = $end;
+sub cmd_E {
+    my $cmd  = shift;
+    my $line = shift;
+    unless (exists($INC{'threads.pm'})) {
+        print "threads not loaded($ENV{PERL5DB_THREADED})
+        please run the debugger with PERL5DB_THREADED=1 set in the environment\n";
+    } else {
+        my $tid = threads->tid;
+        print "thread ids: ".join(', ',
+            map { ($tid == $_->tid ? '<'.$_->tid.'>' : $_->tid) } threads->list
+        )."\n";
     }
-    # We're doing it ourselves. We want to show the line and special
-    # markers for:
-    # - the current line in execution
-    # - whether a line is breakable or not
-    # - whether a line has a break or not
-    # - whether a line has an action or not
-    else {
-        I_TO_END:
-        for ( ; $i <= $end ; $i++ ) {
+} ## end sub cmd_E
 
-            # Check for breakpoints and actions.
-            my ( $stop, $action );
-            if ($dbline{$i}) {
-                ( $stop, $action ) = split( /\0/, $dbline{$i} );
-            }
+=head3 C<cmd_h> - help command (command)
 
-            # ==> if this is the current line in execution,
-            # : if it's breakable.
-            my $arrow =
-            ( $i == $current_line and $filename eq $filename_ini )
-            ? '==>'
-            : ( $dbline[$i] + 0 ? ':' : ' ' );
+Does the work of either
 
-            # Add break and action indicators.
-            $arrow .= 'b' if $stop;
-            $arrow .= 'a' if $action;
+=over 4
 
-            # Print the line.
-            print {$OUT} "$i$arrow\t", $dbline[$i];
+=item *
 
-            # Move on to the next line. Drop out on an interrupt.
-            if ($signal) {
-                $i++;
-                last I_TO_END;
-            }
-        } ## end for (; $i <= $end ; $i++)
+Showing all the debugger help
 
-        # Line the prompt up; print a newline if the last line listed
-        # didn't have a newline.
-        if ($dbline[ $i - 1 ] !~ /\n\z/) {
-            print {$OUT} "\n";
-        }
-    } ## end else [ if ($slave_editor)
+=item *
 
-    # Save the point we last listed to in case another relative 'l'
-    # command is desired. Don't let it run off the end.
-    $start = $i;
-    _minify_to_max(\$start);
+Showing help for a specific command
 
-    return;
-}
+=back
 
-sub _cmd_l_main {
-    my $spec = shift;
+=cut
 
-    # If this is '-something', delete any spaces after the dash.
-    $spec =~ s/\A-\s*\z/-/;
+use vars qw($help);
+use vars qw($summary);
 
-    # If the line is '$something', assume this is a scalar containing a
-    # line number.
-    # Set up for DB::eval() - evaluate in *user* context.
-    if ( my ($var_name) = $spec =~ /\A(\$.*)/s ) {
-        return _cmd_l_handle_var_name($var_name);
-    }
-    # l name. Try to find a sub by that name.
-    elsif ( ($subname) = $spec =~ /\A([\':A-Za-z_][\':\w]*(?:\[.*\])?)/s ) {
-        return _cmd_l_handle_subname();
-    }
-    # Bare 'l' command.
-    elsif ( $spec !~ /\S/ ) {
-        return _cmd_l_empty();
-    }
-    # l [start]+number_of_lines
-    elsif ( my ($new_start, $new_incr) = $spec =~ /\A(\d*)\+(\d*)\z/ ) {
-        return _cmd_l_plus($new_start, $new_incr);
-    }
-    # l start-stop or l start,stop
-    elsif (my ($s, $e) = $spec =~ /^(?:(-?[\d\$\.]+)(?:[-,]([\d\$\.]+))?)?/ ) {
-        return _cmd_l_range($spec, $line, $s, $e);
+sub cmd_h {
+    my $cmd = shift;
+
+    # If we have no operand, assume null.
+    my $line = shift || '';
+
+    # 'h h'. Print the long-format help.
+    if ( $line =~ /\Ah\s*\z/ ) {
+        print_help($help);
     }
 
-    return;
-} ## end sub cmd_l
+    # 'h <something>'. Search for the command and print only its help.
+    elsif ( my ($asked) = $line =~ /\A(\S.*)\z/ ) {
 
-sub cmd_l {
-    my (undef, $line) = @_;
+        # support long commands; otherwise bogus errors
+        # happen when you ask for h on <CR> for example
+        my $qasked = quotemeta($asked);    # for searching; we don't
+                                           # want to use it as a pattern.
+                                           # XXX: finds CR but not <CR>
 
-    return _cmd_l_main($line);
-}
+        # Search the help string for the command.
+        if (
+            $help =~ /^                    # Start of a line
+                      <?                   # Optional '<'
+                      (?:[IB]<)            # Optional markup
+                      $qasked              # The requested command
+                     /mx
+          )
+        {
+
+            # It's there; pull it out and print it.
+            while (
+                $help =~ /^
+                              (<?            # Optional '<'
+                                 (?:[IB]<)   # Optional markup
+                                 $qasked     # The command
+                                 ([\s\S]*?)  # Description line(s)
+                              \n)            # End of last description line
+                              (?!\s)         # Next line not starting with
+                                             # whitespace
+                             /mgx
+              )
+            {
+                print_help($1);
+            }
+        }
+
+        # Not found; not a debugger command.
+        else {
+            print_help("B<$asked> is not a debugger command.\n");
+        }
+    } ## end elsif ($line =~ /^(\S.*)$/)
+
+    # 'h' - print the summary help.
+    else {
+        print_help($summary);
+    }
+} ## end sub cmd_h
 
 =head3 C<cmd_L> - list breakpoints, actions, and watch expressions (command)
 
@@ -7330,7 +7331,7 @@ sub readline {
 
         # Add it to the terminal history (if possible).
         $term->AddHistory($got)
-          if length($got) > 1
+          if length($got) >= option_val("HistItemMinLength", 2)
           and defined $term->Features->{addHistory};
         return $got;
     } ## end if (@typeahead)
index 421229a..d68eeb7 100644 (file)
@@ -2800,6 +2800,28 @@ SKIP:
 }
 
 {
+    # GitHub #17901
+    my $wrapper = DebugWrap->new(
+        {
+            cmds =>
+            [
+                'a 4 $s++',
+                ('s') x 5,
+                'x $s',
+                'q'
+            ],
+            prog => '../lib/perl5db/t/test-a-statement-3',
+            switches => [ '-d' ],
+            stderr => 0,
+        }
+    );
+    $wrapper->contents_like(
+        qr/^0 +2$/m,
+        'Test that the a command runs only on the given lines.',
+    );
+}
+
+{
     # perl 5 RT #126735 regression bug.
     local $ENV{PERLDB_OPTS} = "NonStop=0 RemotePort=non-existent-host.tld:9001";
     my $output = runperl( stdin => "q\n", stderr => 1, switches => [ '-d' ], prog => '../lib/perl5db/t/fact' );
@@ -2924,6 +2946,51 @@ SKIP:
        );
 }
 
+{
+    # gh #17661
+    my $wrapper = DebugWrap->new(
+        {
+            cmds =>
+            [
+                'c',
+                'i $obj',
+                'q',
+            ],
+            prog => '../lib/perl5db/t/gh-17661',
+        }
+    );
+
+    $wrapper->output_like(
+        qr/C5, C1, C2, C3, C4/,
+        q/check for reasonable result/,
+       );
+}
+
+{
+    # gh #17661 related - C<l $var> where $var is lexical
+    my $wrapper = DebugWrap->new(
+        {
+            cmds =>
+            [
+                'c',
+                'l $x',
+                'l $y',
+                'q',
+            ],
+            prog => '../lib/perl5db/t/gh-17661b',
+        }
+    );
+
+    $wrapper->contents_like(
+        qr/sub bar/,
+        q/check bar was listed/,
+       );
+    $wrapper->contents_like(
+        qr/sub foo/,
+        q/check foo was listed/,
+       );
+}
+
 SKIP:
 {
     $Config{usethreads}
diff --git a/lib/perl5db/t/gh-17661 b/lib/perl5db/t/gh-17661
new file mode 100644 (file)
index 0000000..0d85977
--- /dev/null
@@ -0,0 +1,14 @@
+use v5.10.0;
+
+{ package C1; sub c1 { } our @ISA = qw(C2) }
+{ package C2; sub c2 { } our @ISA = qw(C3) }
+{ package C3; sub c3 { } our @ISA = qw(  ) }
+{ package C4; sub c4 { } our @ISA = qw(  ) }
+{ package C5; sub c5 { } our @ISA = qw(C1 C4) }
+
+my $obj = bless {}, 'C5';
+$main::global = bless {}, 'C5';
+
+$DB::single = 1;
+
+say "Done.";
diff --git a/lib/perl5db/t/gh-17661b b/lib/perl5db/t/gh-17661b
new file mode 100644 (file)
index 0000000..25bafdb
--- /dev/null
@@ -0,0 +1,14 @@
+#!perl
+# test code for "l $var" where $var is lexical
+sub foo {
+    print "Hello\n";
+}
+
+sub bar {
+    print "Goodbye\n";
+}
+
+my $x = \&foo;
+our $y = \&bar;
+$DB::single = 1;
+my $z = 1;
diff --git a/lib/perl5db/t/test-a-statement-3 b/lib/perl5db/t/test-a-statement-3
new file mode 100644 (file)
index 0000000..b188c1c
--- /dev/null
@@ -0,0 +1,6 @@
+use strict; use warnings;
+
+for my $x (1 .. 2) {
+    my $y = $x + 1;
+    my $x = $x - 1;
+}
index 923c921..71713a2 100644 (file)
@@ -1,6 +1,6 @@
 package strict;
 
-$strict::VERSION = "1.11";
+$strict::VERSION = "1.12";
 
 my ( %bitmask, %explicit_bitmask );
 
@@ -154,8 +154,9 @@ exempted from this check.
 
 This disables the poetry optimization, generating a compile-time error if
 you try to use a bareword identifier that's not a subroutine, unless it
-is a simple identifier (no colons) and that it appears in curly braces or
-on the left hand side of the C<< => >> symbol.
+is a simple identifier (no colons) and that it appears in curly braces,
+on the left hand side of the C<< => >> symbol, or has the unary minus
+operator applied to it.
 
     use strict 'subs';
     $SIG{PIPE} = Plumber;   # blows up
index a70c25f..595792c 100644 (file)
@@ -5,7 +5,7 @@
 
 package warnings;
 
-our $VERSION = "1.47";
+our $VERSION = "1.48";
 
 # Verify that we're called correctly so that warnings will work.
 # Can't use Carp, since Carp uses us!
@@ -267,7 +267,7 @@ our %DeadBits = (
 
 # These are used by various things, including our own tests
 our $NONE                              =  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0";
-our $DEFAULT                           =  "\x10\x01\x00\x00\x00\x50\x04\x00\x00\x00\x00\x00\x00\x55\x51\x55\x50\x51\x05", # [2,4,22,23,25,52..56,58..63,66..68,70..73]
+our $DEFAULT                           =  "\x10\x01\x00\x00\x00\x50\x04\x00\x00\x00\x00\x00\x00\x55\x51\x55\x50\x51\x05"; # [2,4,22,23,25,52..56,58..63,66..68,70..73]
 our $LAST_BIT                          =  148 ;
 our $BYTES                             =  19 ;
 
@@ -289,10 +289,10 @@ sub _expand_bits {
        } elsif ($len > $want_len) {
            substr $bits, $want_len, $len-$want_len, "";
        } else {
-           my $a = vec($bits, $Offsets{all} >> 1, 2);
-           $a |= $a << 2;
-           $a |= $a << 4;
-           $bits .= chr($a) x ($want_len - $len);
+           my $x = vec($bits, $Offsets{all} >> 1, 2);
+           $x |= $x << 2;
+           $x |= $x << 4;
+           $bits .= chr($x) x ($want_len - $len);
        }
     }
     return $bits;
@@ -620,17 +620,17 @@ Similarly all warnings are disabled in a block by either of these:
 For example, consider the code below:
 
     use warnings;
-    my @a;
+    my @x;
     {
         no warnings;
-       my $b = @a[0];
+       my $y = @x[0];
     }
-    my $c = @a[0];
+    my $z = @x[0];
 
 The code in the enclosing block has warnings enabled, but the inner
 block has them disabled.  In this case that means the assignment to the
-scalar C<$c> will trip the C<"Scalar value @a[0] better written as $a[0]">
-warning, but the assignment to the scalar C<$b> will not.
+scalar C<$z> will trip the C<"Scalar value @x[0] better written as $x[0]">
+warning, but the assignment to the scalar C<$y> will not.
 
 =head2 Default Warnings and Optional Warnings
 
@@ -642,18 +642,18 @@ would get a warning whether you wanted it or not.
 For example, the code below would always produce an C<"isn't numeric">
 warning about the "2:".
 
-    my $a = "2:" + 3;
+    my $x = "2:" + 3;
 
 With the introduction of lexical warnings, mandatory warnings now become
 I<default> warnings.  The difference is that although the previously
 mandatory warnings are still enabled by default, they can then be
 subsequently enabled or disabled with the lexical warning pragma.  For
 example, in the code below, an C<"isn't numeric"> warning will only
-be reported for the C<$a> variable.
+be reported for the C<$x> variable.
 
-    my $a = "2:" + 3;
+    my $x = "2:" + 3;
     no warnings;
-    my $b = "2:" + 3;
+    my $y = "2:" + 3;
 
 Note that neither the B<-w> flag or the C<$^W> can be used to
 disable/enable default warnings.  They are still mandatory in this case.
@@ -673,20 +673,20 @@ 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;
+        my $x =+ 2;
+        my $y; chop $y;
      }
 
 When this code is run with the B<-w> flag, a warning will be produced
-for the C<$a> line:  C<"Reversed += operator">.
+for the C<$x> line:  C<"Reversed += operator">.
 
 The problem is that Perl has both compile-time and run-time warnings.  To
 disable compile-time warnings you need to rewrite the code like this:
 
      {
          BEGIN { $^W = 0 }
-        my $a =+ 2;
-        my $b; chop $b;
+        my $x =+ 2;
+        my $y; chop $y;
      }
 
 And note that unlike the first example, this will permanently set C<$^W>
@@ -701,7 +701,7 @@ the first will not.
 
     sub doit
     {
-        my $b; chop $b;
+        my $y; chop $y;
     }
 
     doit();
@@ -727,7 +727,7 @@ warnings are (or aren't) produced:
 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
+used in any of your code, or any of the modules that you use, this flag
 will enable warnings everywhere.  See L</Backward Compatibility> for
 details of how this flag interacts with lexical warnings.
 
@@ -1215,12 +1215,12 @@ C<Derived>.
     use Original;
     use Derived;
     use warnings 'Derived';
-    my $a = Original->new();
-    $a->doit(1);
-    my $b = Derived->new();
-    $a->doit(1);
+    my $x = Original->new();
+    $x->doit(1);
+    my $y = Derived->new();
+    $x->doit(1);
 
-When this code is run only the C<Derived> object, C<$b>, will generate
+When this code is run only the C<Derived> object, C<$y>, will generate
 a warning.
 
     Odd numbers are unsafe at main.pl line 7
index 578c54f..d1806be 100644 (file)
--- a/locale.c
+++ b/locale.c
@@ -60,7 +60,7 @@
 /* If the environment says to, we can output debugging information during
  * initialization.  This is done before option parsing, and before any thread
  * creation, so can be a file-level static */
-#if ! defined(DEBUGGING) || defined(PERL_GLOBAL_STRUCT)
+#if ! defined(DEBUGGING)
 #  define debug_initialization 0
 #  define DEBUG_INITIALIZATION_set(v)
 #else
@@ -200,6 +200,12 @@ const int categories[] = {
 #    ifdef USE_LOCALE_TELEPHONE
                              LC_TELEPHONE,
 #    endif
+#    ifdef USE_LOCALE_SYNTAX
+                             LC_SYNTAX,
+#    endif
+#    ifdef USE_LOCALE_TOD
+                             LC_TOD,
+#    endif
 #    ifdef LC_ALL
                              LC_ALL,
 #    endif
@@ -245,6 +251,12 @@ const char * const category_names[] = {
 #    ifdef USE_LOCALE_TELEPHONE
                                  "LC_TELEPHONE",
 #    endif
+#    ifdef USE_LOCALE_SYNTAX
+                                 "LC_SYNTAX",
+#    endif
+#    ifdef USE_LOCALE_TOD
+                                 "LC_TOD",
+#    endif
 #    ifdef LC_ALL
                                  "LC_ALL",
 #    endif
@@ -384,8 +396,20 @@ S_category_name(const int category)
 #  else
 #    define _DUMMY_TELEPHONE            _DUMMY_PAPER
 #  endif
+#  ifdef USE_LOCALE_SYNTAX
+#    define LC_SYNTAX_INDEX             _DUMMY_TELEPHONE + 1
+#    define _DUMMY_SYNTAX               LC_SYNTAX_INDEX
+#  else
+#    define _DUMMY_SYNTAX               _DUMMY_TELEPHONE
+#  endif
+#  ifdef USE_LOCALE_TOD
+#    define LC_TOD_INDEX                _DUMMY_SYNTAX + 1
+#    define _DUMMY_TOD                  LC_TOD_INDEX
+#  else
+#    define _DUMMY_TOD                  _DUMMY_SYNTAX
+#  endif
 #  ifdef LC_ALL
-#    define LC_ALL_INDEX                _DUMMY_TELEPHONE + 1
+#    define LC_ALL_INDEX                _DUMMY_TOD + 1
 #  endif
 #endif /* ifdef USE_LOCALE */
 
@@ -468,6 +492,12 @@ const int category_masks[] = {
 #  ifdef USE_LOCALE_TELEPHONE
                                 LC_TELEPHONE_MASK,
 #  endif
+#  ifdef USE_LOCALE_SYNTAX
+                                LC_SYNTAX_MASK,
+#  endif
+#  ifdef USE_LOCALE_TOD
+                                LC_TOD_MASK,
+#  endif
                                 /* LC_ALL can't be turned off by a Configure
                                  * option, and in Posix 2008, should always be
                                  * here, so compile it in unconditionally.
@@ -1558,7 +1588,6 @@ S_new_ctype(pTHX_ const char *newctype)
      * this function should be called directly only from this file and from
      * POSIX::setlocale() */
 
-    dVAR;
     unsigned int i;
 
     /* Don't check for problems if we are suppressing the warnings */
@@ -3286,7 +3315,6 @@ Perl_init_i18nl10n(pTHX_ int printwarn)
      * values for our db, instead of trying to change them.
      * */
 
-    dVAR;
 
     int ok = 1;
 
@@ -3438,6 +3466,20 @@ Perl_init_i18nl10n(pTHX_ int printwarn)
     assert(category_masks[LC_TELEPHONE_INDEX] == LC_TELEPHONE_MASK);
 #      endif
 #    endif
+#    ifdef USE_LOCALE_SYNTAX
+    assert(categories[LC_SYNTAX_INDEX] == LC_SYNTAX);
+    assert(strEQ(category_names[LC_SYNTAX_INDEX], "LC_SYNTAX"));
+#      ifdef USE_POSIX_2008_LOCALE
+    assert(category_masks[LC_SYNTAX_INDEX] == LC_SYNTAX_MASK);
+#      endif
+#    endif
+#    ifdef USE_LOCALE_TOD
+    assert(categories[LC_TOD_INDEX] == LC_TOD);
+    assert(strEQ(category_names[LC_TOD_INDEX], "LC_TOD"));
+#      ifdef USE_POSIX_2008_LOCALE
+    assert(category_masks[LC_TOD_INDEX] == LC_TOD_MASK);
+#      endif
+#    endif
 #    ifdef LC_ALL
     assert(categories[LC_ALL_INDEX] == LC_ALL);
     assert(strEQ(category_names[LC_ALL_INDEX], "LC_ALL"));
@@ -5205,7 +5247,6 @@ Perl__is_cur_LC_category_utf8(pTHX_ int category)
 bool
 Perl__is_in_locale_category(pTHX_ const bool compiling, const int category)
 {
-    dVAR;
     /* Internal function which returns if we are in the scope of a pragma that
      * enables the locale category 'category'.  'compiling' should indicate if
      * this is during the compilation phase (TRUE) or not (FALSE). */
@@ -5236,7 +5277,6 @@ Perl_my_strerror(pTHX_ const int errnum)
      * to the C locale */
 
     char *errstr;
-    dVAR;
 
 #ifndef USE_LOCALE_MESSAGES
 
@@ -5598,11 +5638,7 @@ S_setlocale_debug_string(const int category,        /* category number,
      * be overwritten by the next call, so this should be used just to
      * formulate a string to immediately print or savepv() on. */
 
-    /* initialise to a non-null value to keep it out of BSS and so keep
-     * -DPERL_GLOBAL_STRUCT_PRIVATE happy */
-    static char ret[256] = "If you can read this, thank your buggy C"
-                           " library strlcpy(), and change your hints file"
-                           " to undef it";
+    static char ret[256];
 
     my_strlcpy(ret, "setlocale(", sizeof(ret));
     my_strlcat(ret, category_name(category), sizeof(ret));
@@ -5677,7 +5713,6 @@ Perl_thread_locale_term()
 #  ifndef WIN32
 
     {   /* Free up */
-        dVAR;
         locale_t cur_obj = uselocale(LC_GLOBAL_LOCALE);
         if (cur_obj != LC_GLOBAL_LOCALE && cur_obj != PL_C_locale_obj) {
             freelocale(cur_obj);
index 87f8bf3..ce3debd 100644 (file)
@@ -168,7 +168,7 @@ if (IS_WIN32) {
     $ENV{PATH} = "$topdir;$topdir\\win32\\bin;$ENV{PATH}";
     my $pl2bat = "$topdir\\win32\\bin\\pl2bat";
     unless (-f "$pl2bat.bat") {
-       my @args = ($perl, "-I$topdir\\lib", ("$pl2bat.pl") x 2);
+       my @args = ($perl, "-I$topdir\\lib", "-I$topdir\\cpan\\ExtUtils-PL2Bat\\lib", ("$pl2bat.pl") x 2);
        print "@args\n" if $verbose;
        system(@args) unless IS_CROSS;
     }
index f1a7581..9af199d 100644 (file)
@@ -219,9 +219,7 @@ sub readvar {
 
 if ($ARGS{PLATFORM} ne 'os2') {
     ++$skip{$_} foreach qw(
-                    PL_cryptseen
                     PL_opsave
-                    Perl_GetVars
                     Perl_dump_fds
                     Perl_my_bcopy
                     Perl_my_bzero
@@ -363,34 +361,6 @@ unless ($define{'USE_ITHREADS'}) {
     ++$skip{PL_user_def_props_aTHX};
 }
 
-# USE_5005THREADS symbols. Kept as reference for easier removal
-++$skip{$_} foreach qw(
-                   PL_sv_mutex
-                   PL_strtab_mutex
-                   PL_svref_mutex
-                   PL_cred_mutex
-                   PL_eval_mutex
-                   PL_fdpid_mutex
-                   PL_sv_lock_mutex
-                   PL_eval_cond
-                   PL_eval_owner
-                   PL_threads_mutex
-                   PL_nthreads
-                   PL_nthreads_cond
-                   PL_threadnum
-                   PL_threadsv_names
-                   PL_thrsv
-                   PL_vtbl_mutex
-                   Perl_condpair_magic
-                   Perl_new_struct_thread
-                   Perl_per_thread_magicals
-                   Perl_thread_create
-                   Perl_find_threadsv
-                   Perl_unlock_condpair
-                   Perl_magic_mutexfree
-                   Perl_sv_lock
-                    );
-
 unless ($define{'USE_ITHREADS'}) {
     ++$skip{$_} foreach qw(
                     PL_keyword_plugin_mutex
@@ -499,14 +469,6 @@ unless ($define{'USE_DTRACE'}) {
                 );
 }
 
-unless ($define{'PERL_NEED_APPCTX'}) {
-    ++$skip{PL_appctx};
-}
-
-unless ($define{'PERL_NEED_TIMESBASE'}) {
-    ++$skip{PL_timesbase};
-}
-
 unless ($define{'DEBUG_LEAKING_SCALARS'}) {
     ++$skip{PL_sv_serial};
 }
@@ -538,18 +500,6 @@ unless ($define{'MULTIPLICITY'}) {
                         );
 }
 
-unless ($define{'PERL_GLOBAL_STRUCT'}) {
-    ++$skip{PL_global_struct_size};
-}
-
-unless ($define{'PERL_GLOBAL_STRUCT_PRIVATE'}) {
-    ++$skip{$_} foreach qw(
-                   PL_my_cxt_keys
-                   PL_my_cxt_keys_size
-                   Perl_my_cxt_index
-                        );
-}
-
 unless ($define{HAS_MMAP}) {
     ++$skip{PL_mmap_page_size};
 }
@@ -623,18 +573,6 @@ if ($define{HAS_SIGNBIT}) {
     ++$skip{Perl_signbit};
 }
 
-if ($define{'PERL_GLOBAL_STRUCT'}) {
-    readvar('perlvars.h', \%skip);
-    # This seems like the least ugly way to cope with the fact that PL_sh_path
-    # is mentioned in perlvar.h and globvar.sym, and always exported.
-    delete $skip{PL_sh_path};
-    ++$export{Perl_GetVars};
-    try_symbols(qw(PL_Vars PL_VarsPtr))
-      unless $ARGS{CCTYPE} eq 'GCC' || $define{PERL_GLOBAL_STRUCT_PRIVATE};
-} else {
-    ++$skip{$_} foreach qw(Perl_init_global_struct Perl_free_global_struct);
-}
-
 ++$skip{PL_op_exec_cnt}
     unless $define{PERL_TRACE_OPS};
 
@@ -796,20 +734,9 @@ foreach (@syms) {
 
 # variables
 
-if ($define{'MULTIPLICITY'} && $define{PERL_GLOBAL_STRUCT}) {
-    readvar('perlvars.h', \%export, sub { "Perl_" . $_[1] . $_[2] . "_ptr" });
-    # XXX AIX seems to want the perlvars.h symbols, for some reason
-    if ($ARGS{PLATFORM} eq 'aix' or $ARGS{PLATFORM} eq 'os2') {        # OS/2 needs PL_thr_key
-       readvar('perlvars.h', \%export);
-    }
-}
-else {
-    unless ($define{'PERL_GLOBAL_STRUCT'}) {
-       readvar('perlvars.h', \%export);
-    }
-    unless ($define{MULTIPLICITY}) {
-       readvar('intrpvar.h', \%export);
-    }
+readvar('perlvars.h', \%export);
+unless ($define{MULTIPLICITY}) {
+    readvar('intrpvar.h', \%export);
 }
 
 # Oddities from PerlIO
@@ -831,7 +758,6 @@ if ($ARGS{PLATFORM} eq 'win32') {
                    win32_get_childenv
                    win32_spawnvp
                    Perl_init_os_extras
-                   Perl_thread_create
                    Perl_win32_init
                    Perl_win32_term
                    RunPerl
@@ -1143,7 +1069,6 @@ elsif ($ARGS{PLATFORM} eq 'os2') {
 elsif ($ARGS{PLATFORM} eq 'netware') {
     try_symbols(qw(
                        Perl_init_os_extras
-                       Perl_thread_create
                        Perl_nw5_init
                        RunPerl
                        AllocStdPerl
index 337efa8..01e84bf 100644 (file)
--- a/malloc.c
+++ b/malloc.c
@@ -596,7 +596,7 @@ static const u_short buck_size[MAX_BUCKET_BY_TABLE + 1] =
 #  define MAX_PACKED_POW2 6
 #  define MAX_PACKED (MAX_PACKED_POW2 * BUCKETS_PER_POW2 + BUCKET_POW2_SHIFT)
 #  define MAX_POW2_ALGO ((1<<(MAX_PACKED_POW2 + 1)) - M_OVERHEAD)
-#  define TWOK_MASK ((1<<LOG_OF_MIN_ARENA) - 1)
+#  define TWOK_MASK nBIT_MASK(LOG_OF_MIN_ARENA)
 #  define TWOK_MASKED(x) (PTR2UV(x) & ~TWOK_MASK)
 #  define TWOK_SHIFT(x) (PTR2UV(x) & TWOK_MASK)
 #  define OV_INDEXp(block) (INT2PTR(u_char*,TWOK_MASKED(block)))
@@ -618,7 +618,7 @@ static const u_short buck_size[MAX_BUCKET_BY_TABLE + 1] =
 #ifdef IGNORE_SMALL_BAD_FREE
 #define FIRST_BUCKET_WITH_CHECK (6 * BUCKETS_PER_POW2) /* 64 */
 #  define N_BLKS(bucket) ( (bucket) < FIRST_BUCKET_WITH_CHECK          \
-                        ? ((1<<LOG_OF_MIN_ARENA) - 1)/BUCKET_SIZE_NO_SURPLUS(bucket) \
+                        ? nBIT_MASK(LOG_OF_MIN_ARENA)/BUCKET_SIZE_NO_SURPLUS(bucket) \
                         : n_blks[bucket] )
 #else
 #  define N_BLKS(bucket) n_blks[bucket]
@@ -1064,7 +1064,6 @@ emergency_sbrk(MEM_SIZE size)
 static void
 botch(const char *diag, const char *s, const char *file, int line)
 {
-    dVAR;
     dTHX;
     if (!(PERL_MAYBE_ALIVE && PERL_GET_THX))
        goto do_write;
@@ -1235,7 +1234,6 @@ These have the same interfaces as the C lib ones, so are considered documented
 Malloc_t
 Perl_malloc(size_t nbytes)
 {
-        dVAR;
        union overhead *p;
        int bucket;
 #if defined(DEBUGGING) || defined(RCHECK)
@@ -1471,7 +1469,6 @@ get_from_bigger_buckets(int bucket, MEM_SIZE size)
 static union overhead *
 getpages(MEM_SIZE needed, int *nblksp, int bucket)
 {
-    dVAR;
     /* Need to do (possibly expensive) system call. Try to
        optimize it for rare calling. */
     MEM_SIZE require = needed - sbrked_remains;
@@ -1666,7 +1663,6 @@ getpages_adjacent(MEM_SIZE require)
 static void
 morecore(int bucket)
 {
-        dVAR;
        union overhead *ovp;
        int rnu;       /* 2^rnu bytes will be requested */
        int nblks;              /* become nblks blocks of the desired size */
@@ -1803,7 +1799,6 @@ morecore(int bucket)
 Free_t
 Perl_mfree(Malloc_t where)
 {
-        dVAR;
        MEM_SIZE size;
        union overhead *ovp;
        char *cp = (char*)where;
@@ -1899,7 +1894,6 @@ Perl_mfree(Malloc_t where)
 Malloc_t
 Perl_realloc(void *mp, size_t nbytes)
 {
-        dVAR;
        MEM_SIZE onb;
        union overhead *ovp;
        char *res;
diff --git a/mg.c b/mg.c
index e603b60..16b72bf 100644 (file)
--- a/mg.c
+++ b/mg.c
@@ -1667,7 +1667,6 @@ Perl_despatch_signals(pTHX)
 int
 Perl_magic_setsig(pTHX_ SV *sv, MAGIC *mg)
 {
-    dVAR;
     I32 i;
     SV** svp = NULL;
     /* Need to be careful with SvREFCNT_dec(), because that can have side
@@ -2722,7 +2721,6 @@ S_set_dollarzero(pTHX_ SV *sv)
     PERL_TSA_REQUIRES(PL_dollarzero_mutex)
 {
 #ifdef USE_ITHREADS
-    dVAR;
 #endif
     const char *s;
     STRLEN len;
@@ -2801,7 +2799,6 @@ int
 Perl_magic_set(pTHX_ SV *sv, MAGIC *mg)
 {
 #ifdef USE_ITHREADS
-    dVAR;
 #endif
     I32 paren;
     const REGEXP * rx;
index 0d32aea..4edd4d1 100644 (file)
 static void xs_init (pTHX);
 static PerlInterpreter *my_perl;
 
-#if defined(PERL_GLOBAL_STRUCT_PRIVATE)
-/* The static struct perl_vars* may seem counterproductive since the
- * whole idea PERL_GLOBAL_STRUCT_PRIVATE was to avoid statics, but note
- * that this static is not in the shared perl library, the globals PL_Vars
- * and PL_VarsPtr will stay away. */
-static struct perl_vars* my_plvarsp;
-struct perl_vars* Perl_GetVarsPrivate(void) { return my_plvarsp; }
-#endif
-
 #ifdef NO_ENV_ARRAY_IN_MAIN
 extern char **environ;
 int
@@ -79,14 +70,6 @@ main(int argc, char **argv, char **env)
 #endif
 {
     int exitstatus, i;
-#ifdef PERL_GLOBAL_STRUCT
-    struct perl_vars *my_vars = init_global_struct();
-#  ifdef PERL_GLOBAL_STRUCT_PRIVATE
-    int veto;
-
-    my_plvarsp = my_vars;
-#  endif
-#endif /* PERL_GLOBAL_STRUCT */
 #ifndef NO_ENV_ARRAY_IN_MAIN
     PERL_UNUSED_ARG(env);
 #endif
@@ -160,20 +143,6 @@ main(int argc, char **argv, char **env)
 
     PERL_SYS_TERM();
 
-#ifdef PERL_GLOBAL_STRUCT
-#  ifdef PERL_GLOBAL_STRUCT_PRIVATE
-    veto = my_plvarsp->Gveto_cleanup;
-#  endif
-    free_global_struct(my_vars);
-#  ifdef PERL_GLOBAL_STRUCT_PRIVATE
-    if (!veto)
-        my_plvarsp = NULL;
-    /* Remember, functions registered with atexit() can run after this point,
-       and may access "global" variables, and hence end up calling
-       Perl_GetVarsPrivate()  */
-#endif
-#endif /* PERL_GLOBAL_STRUCT */
-
     exit(exitstatus);
 }
 
index 717c3d3..1e8ae0b 100755 (executable)
@@ -47,7 +47,6 @@ Summary of my $package (revision $revision $version_patchlevel_string) configura
     uselongdouble=$uselongdouble
     usemymalloc=$usemymalloc
     default_inc_excludes_dot=$default_inc_excludes_dot
-    bincompat5005=undef
   Compiler:
     cc='$cc'
     ccflags ='$ccflags'
diff --git a/op.c b/op.c
index 0ddc710..38a55f9 100644 (file)
--- a/op.c
+++ b/op.c
@@ -207,7 +207,10 @@ S_prune_chain_head(OP** op_p)
 
 /* rounds up to nearest pointer */
 #define SIZE_TO_PSIZE(x)       (((x) + sizeof(I32 *) - 1)/sizeof(I32 *))
-#define DIFF(o,p)              ((size_t)((I32 **)(p) - (I32**)(o)))
+
+#define DIFF(o,p)      \
+    (assert(((char *)(p) - (char *)(o)) % sizeof(I32**) == 0), \
+      ((size_t)((I32 **)(p) - (I32**)(o))))
 
 /* requires double parens and aTHX_ */
 #define DEBUG_S_warn(args)                                            \
@@ -215,20 +218,29 @@ S_prune_chain_head(OP** op_p)
        PerlIO_printf(Perl_debug_log, "%s", SvPVx_nolen(Perl_mess args)) \
     )
 
+/* opslot_size includes the size of the slot header, and an op can't be smaller than BASEOP */
+#define OPSLOT_SIZE_BASE (SIZE_TO_PSIZE(sizeof(OPSLOT)))
+
+/* the number of bytes to allocate for a slab with sz * sizeof(I32 **) space for op */
+#define OpSLABSizeBytes(sz) \
+    ((sz) * sizeof(I32 *) + STRUCT_OFFSET(OPSLAB, opslab_slots))
 
 /* malloc a new op slab (suitable for attaching to PL_compcv).
- * sz is in units of pointers */
+ * sz is in units of pointers from the beginning of opslab_opslots */
 
 static OPSLAB *
 S_new_slab(pTHX_ OPSLAB *head, size_t sz)
 {
     OPSLAB *slab;
+    size_t sz_bytes = OpSLABSizeBytes(sz);
 
     /* opslot_offset is only U16 */
-    assert(sz  < U16_MAX);
+    assert(sz < U16_MAX);
+    /* room for at least one op */
+    assert(sz >= OPSLOT_SIZE_BASE);
 
 #ifdef PERL_DEBUG_READONLY_OPS
-    slab = (OPSLAB *) mmap(0, sz * sizeof(I32 *),
+    slab = (OPSLAB *) mmap(0, sz_bytes,
                                   PROT_READ|PROT_WRITE,
                                   MAP_ANON|MAP_PRIVATE, -1, 0);
     DEBUG_m(PerlIO_printf(Perl_debug_log, "mapped %lu at %p\n",
@@ -238,7 +250,8 @@ S_new_slab(pTHX_ OPSLAB *head, size_t sz)
        abort();
     }
 #else
-    slab = (OPSLAB *)PerlMemShared_calloc(sz, sizeof(I32 *));
+    slab = (OPSLAB *)PerlMemShared_malloc(sz_bytes);
+    Zero(slab, sz_bytes, char);
 #endif
     slab->opslab_size = (U16)sz;
 
@@ -246,7 +259,7 @@ S_new_slab(pTHX_ OPSLAB *head, size_t sz)
     /* The context is unused in non-Windows */
     PERL_UNUSED_CONTEXT;
 #endif
-    slab->opslab_free_space = sz - DIFF(slab, &slab->opslab_slots);
+    slab->opslab_free_space = sz;
     slab->opslab_head = head ? head : slab;
     DEBUG_S_warn((aTHX_ "allocated new op slab sz 0x%x, %p, head slab %p",
         (unsigned int)slab->opslab_size, (void*)slab,
@@ -254,8 +267,6 @@ S_new_slab(pTHX_ OPSLAB *head, size_t sz)
     return slab;
 }
 
-/* opslot_size includes the size of the slot header, and an op can't be smaller than BASEOP */
-#define OPSLOT_SIZE_BASE (SIZE_TO_PSIZE(sizeof(OP)) + OPSLOT_HEADER_P)
 #define OPSLOT_SIZE_TO_INDEX(sz) ((sz) - OPSLOT_SIZE_BASE)
 
 #define link_freed_op(slab, o) S_link_freed_op(aTHX_ slab, o)
@@ -308,7 +319,7 @@ Perl_Slab_Alloc(pTHX_ size_t sz)
     OPSLAB *slab2;
     OPSLOT *slot;
     OP *o;
-    size_t opsz;
+    size_t sz_in_p; /* size in pointer units, including the OPSLOT header */
 
     /* We only allocate ops from the slab during subroutine compilation.
        We find the slab via PL_compcv, hence that must be non-NULL. It could
@@ -337,18 +348,17 @@ Perl_Slab_Alloc(pTHX_ size_t sz)
     }
     else ++(head_slab = (OPSLAB *)CvSTART(PL_compcv))->opslab_refcnt;
 
-    opsz = SIZE_TO_PSIZE(sz);
-    sz = opsz + OPSLOT_HEADER_P;
+    sz_in_p = SIZE_TO_PSIZE(sz + OPSLOT_HEADER);
 
     /* The head slab for each CV maintains a free list of OPs. In particular, constant folding
        will free up OPs, so it makes sense to re-use them where possible. A
        freed up slot is used in preference to a new allocation.  */
     if (head_slab->opslab_freed &&
-        OPSLOT_SIZE_TO_INDEX(sz) < head_slab->opslab_freed_size) {
+        OPSLOT_SIZE_TO_INDEX(sz_in_p) < head_slab->opslab_freed_size) {
         U16 base_index;
 
         /* look for a large enough size with any freed ops */
-        for (base_index = OPSLOT_SIZE_TO_INDEX(sz);
+        for (base_index = OPSLOT_SIZE_TO_INDEX(sz_in_p);
              base_index < head_slab->opslab_freed_size && !head_slab->opslab_freed[base_index];
              ++base_index) {
         }
@@ -358,18 +368,16 @@ Perl_Slab_Alloc(pTHX_ size_t sz)
             o = head_slab->opslab_freed[base_index];
 
             DEBUG_S_warn((aTHX_ "realloced  op at %p, slab %p, head slab %p",
-                (void*)o,
-                (I32**)OpSLOT(o) - OpSLOT(o)->opslot_offset,
-                (void*)head_slab));
+                          (void *)o, (void *)OpMySLAB(o), (void *)head_slab));
            head_slab->opslab_freed[base_index] = o->op_next;
-           Zero(o, opsz, I32 *);
+           Zero(o, sz, char);
            o->op_slabbed = 1;
            goto gotit;
        }
     }
 
 #define INIT_OPSLOT(s) \
-           slot->opslot_offset = DIFF(slab2, slot) ;   \
+           slot->opslot_offset = DIFF(&slab2->opslab_slots, slot) ;    \
            slot->opslot_size = s;                      \
            slab2->opslab_free_space -= s;              \
            o = &slot->opslot_op;                       \
@@ -377,14 +385,16 @@ Perl_Slab_Alloc(pTHX_ size_t sz)
 
     /* The partially-filled slab is next in the chain. */
     slab2 = head_slab->opslab_next ? head_slab->opslab_next : head_slab;
-    if (slab2->opslab_free_space  < sz) {
+    if (slab2->opslab_free_space < sz_in_p) {
        /* Remaining space is too small. */
        /* If we can fit a BASEOP, add it to the free chain, so as not
           to waste it. */
-       if (slab2->opslab_free_space >= SIZE_TO_PSIZE(sizeof(OP)) + OPSLOT_HEADER_P) {
+       if (slab2->opslab_free_space >= OPSLOT_SIZE_BASE) {
            slot = &slab2->opslab_slots;
            INIT_OPSLOT(slab2->opslab_free_space);
            o->op_type = OP_FREED;
+            DEBUG_S_warn((aTHX_ "linked unused op space at %p, slab %p, head slab %p",
+                          (void *)o, (void *)slab2, (void *)head_slab));
             link_freed_op(head_slab, o);
        }
 
@@ -396,14 +406,12 @@ Perl_Slab_Alloc(pTHX_ size_t sz)
        slab2->opslab_next = head_slab->opslab_next;
        head_slab->opslab_next = slab2;
     }
-    assert(slab2->opslab_size >= sz);
+    assert(slab2->opslab_size >= sz_in_p);
 
     /* Create a new op slot */
-    slot = (OPSLOT *)
-                ((I32 **)&slab2->opslab_slots
-                                + slab2->opslab_free_space - sz);
+    slot = OpSLOToff(slab2, slab2->opslab_free_space - sz_in_p);
     assert(slot >= &slab2->opslab_slots);
-    INIT_OPSLOT(sz);
+    INIT_OPSLOT(sz_in_p);
     DEBUG_S_warn((aTHX_ "allocating op at %p, slab %p, head slab %p",
         (void*)o, (void*)slab2, (void*)head_slab));
 
@@ -427,9 +435,9 @@ Perl_Slab_to_ro(pTHX_ OPSLAB *slab)
     slab->opslab_readonly = 1;
     for (; slab; slab = slab->opslab_next) {
        /*DEBUG_U(PerlIO_printf(Perl_debug_log,"mprotect ->ro %lu at %p\n",
-                             (unsigned long) slab->opslab_size, slab));*/
-       if (mprotect(slab, slab->opslab_size * sizeof(I32 *), PROT_READ))
-           Perl_warn(aTHX_ "mprotect for %p %lu failed with %d", slab,
+                             (unsigned long) slab->opslab_size, (void *)slab));*/
+       if (mprotect(slab, OpSLABSizeBytes(slab->opslab_size), PROT_READ))
+           Perl_warn(aTHX_ "mprotect for %p %lu failed with %d", (void *)slab,
                             (unsigned long)slab->opslab_size, errno);
     }
 }
@@ -445,10 +453,10 @@ Perl_Slab_to_rw(pTHX_ OPSLAB *const slab)
     slab2 = slab;
     for (; slab2; slab2 = slab2->opslab_next) {
        /*DEBUG_U(PerlIO_printf(Perl_debug_log,"mprotect ->rw %lu at %p\n",
-                             (unsigned long) size, slab2));*/
-       if (mprotect((void *)slab2, slab2->opslab_size * sizeof(I32 *),
+                             (unsigned long) size, (void *)slab2));*/
+       if (mprotect((void *)slab2, OpSLABSizeBytes(slab2->opslab_size),
                     PROT_READ|PROT_WRITE)) {
-           Perl_warn(aTHX_ "mprotect RW for %p %lu failed with %d", slab,
+           Perl_warn(aTHX_ "mprotect RW for %p %lu failed with %d", (void *)slab,
                             (unsigned long)slab2->opslab_size, errno);
        }
     }
@@ -504,9 +512,7 @@ Perl_Slab_Free(pTHX_ void *op)
     o->op_type = OP_FREED;
     link_freed_op(slab, o);
     DEBUG_S_warn((aTHX_ "freeing    op at %p, slab %p, head slab %p",
-        (void*)o,
-        (I32**)OpSLOT(o) - OpSLOT(o)->opslot_offset,
-        (void*)slab));
+        (void*)o, (void *)OpMySLAB(o), (void*)slab));
     OpslabREFCNT_dec_padok(slab);
 }
 
@@ -550,7 +556,7 @@ Perl_opslab_free(pTHX_ OPSLAB *slab)
 #ifdef PERL_DEBUG_READONLY_OPS
        DEBUG_m(PerlIO_printf(Perl_debug_log, "Deallocate slab at %p\n",
                                               (void*)slab));
-       if (munmap(slab, slab->opslab_size * sizeof(I32 *))) {
+       if (munmap(slab, OpSLABSizeBytes(slab->opslab_size))) {
            perror("munmap failed");
            abort();
        }
@@ -575,10 +581,8 @@ Perl_opslab_force_free(pTHX_ OPSLAB *slab)
     PERL_ARGS_ASSERT_OPSLAB_FORCE_FREE;
     slab2 = slab;
     do {
-        OPSLOT *slot = (OPSLOT*)
-                    ((I32**)&slab2->opslab_slots + slab2->opslab_free_space);
-        OPSLOT *end  = (OPSLOT*)
-                        ((I32**)slab2 + slab2->opslab_size);
+        OPSLOT *slot = OpSLOToff(slab2, slab2->opslab_free_space);
+        OPSLOT *end  = OpSLOToff(slab2, slab2->opslab_size);
        for (; slot < end;
                 slot = (OPSLOT*) ((I32**)slot + slot->opslot_size) )
         {
@@ -846,7 +850,6 @@ to from any optree.
 void
 Perl_op_free(pTHX_ OP *o)
 {
-    dVAR;
     OPCODE type;
     OP *top_op = o;
     OP *next_op = o;
@@ -1020,7 +1023,6 @@ void
 Perl_op_clear(pTHX_ OP *o)
 {
 
-    dVAR;
 
     PERL_ARGS_ASSERT_OP_CLEAR;
 
@@ -1390,7 +1392,6 @@ other ops.
 void
 Perl_op_null(pTHX_ OP *o)
 {
-    dVAR;
 
     PERL_ARGS_ASSERT_OP_NULL;
 
@@ -1406,7 +1407,6 @@ Perl_op_refcnt_lock(pTHX)
   PERL_TSA_ACQUIRE(PL_op_mutex)
 {
 #ifdef USE_ITHREADS
-    dVAR;
 #endif
     PERL_UNUSED_CONTEXT;
     OP_REFCNT_LOCK;
@@ -1417,7 +1417,6 @@ Perl_op_refcnt_unlock(pTHX)
   PERL_TSA_RELEASE(PL_op_mutex)
 {
 #ifdef USE_ITHREADS
-    dVAR;
 #endif
     PERL_UNUSED_CONTEXT;
     OP_REFCNT_UNLOCK;
@@ -1629,7 +1628,6 @@ S_op_sibling_newUNOP(pTHX_ OP *parent, OP *start, I32 type, I32 flags)
 LOGOP *
 Perl_alloc_LOGOP(pTHX_ I32 type, OP *first, OP* other)
 {
-    dVAR;
     LOGOP *logop;
     OP *kid = first;
     NewOp(1101, logop, 1, LOGOP);
@@ -2068,7 +2066,6 @@ Perl_scalar(pTHX_ OP *o)
 OP *
 Perl_scalarvoid(pTHX_ OP *arg)
 {
-    dVAR;
     OP *kid;
     SV* sv;
     OP *o = arg;
@@ -2874,7 +2871,6 @@ S_sprintf_is_multiconcatable(pTHX_ OP *o,struct sprintf_ismc_info *info)
 STATIC void
 S_maybe_multiconcat(pTHX_ OP *o)
 {
-    dVAR;
     OP *lastkidop;   /* the right-most of any kids unshifted onto o */
     OP *topop;       /* the top-most op in the concat tree (often equals o,
                         unless there are assign/stringify ops above it */
@@ -4079,7 +4075,6 @@ S_vivifies(const OPCODE type)
 static void
 S_lvref(pTHX_ OP *o, I32 type)
 {
-    dVAR;
     OP *kid;
     OP * top_op = o;
 
@@ -4257,7 +4252,6 @@ op_lvalue().  The flags param has these bits:
 OP *
 Perl_op_lvalue_flags(pTHX_ OP *o, I32 type, U32 flags)
 {
-    dVAR;
     OP *top_op = o;
 
     if (!o || (PL_parser && PL_parser->error_count))
@@ -4875,7 +4869,6 @@ S_refkids(pTHX_ OP *o, I32 type)
 OP *
 Perl_doref(pTHX_ OP *o, I32 type, bool set_op_ref)
 {
-    dVAR;
     OP * top_op = o;
 
     PERL_ARGS_ASSERT_DOREF;
@@ -5500,7 +5493,6 @@ Perl_invert(pTHX_ OP *o)
 OP *
 Perl_cmpchain_start(pTHX_ I32 type, OP *left, OP *right)
 {
-    dVAR;
     BINOP *bop;
     OP *op;
 
@@ -5526,7 +5518,6 @@ Perl_cmpchain_start(pTHX_ I32 type, OP *left, OP *right)
 OP *
 Perl_cmpchain_extend(pTHX_ I32 type, OP *ch, OP *right)
 {
-    dVAR;
     BINOP *bop;
     OP *op;
 
@@ -5566,7 +5557,6 @@ Perl_cmpchain_extend(pTHX_ I32 type, OP *ch, OP *right)
 OP *
 Perl_cmpchain_finish(pTHX_ OP *ch)
 {
-    dVAR;
 
     PERL_ARGS_ASSERT_CMPCHAIN_FINISH;
     if (ch->op_type != OP_NULL) {
@@ -5632,7 +5622,6 @@ structure.
 OP *
 Perl_op_scope(pTHX_ OP *o)
 {
-    dVAR;
     if (o) {
        if (o->op_flags & OPf_PARENS || PERLDB_NOOPT || TAINTING_get) {
            o = op_prepend_elem(OP_LINESEQ,
@@ -5978,9 +5967,17 @@ Perl_jmaybe(pTHX_ OP *o)
     PERL_ARGS_ASSERT_JMAYBE;
 
     if (o->op_type == OP_LIST) {
-       OP * const o2
-           = newSVREF(newGVOP(OP_GV, 0, gv_fetchpvs(";", GV_ADD|GV_NOTQUAL, SVt_PV)));
-       o = op_convert_list(OP_JOIN, 0, op_prepend_elem(OP_LIST, o2, o));
+        if (FEATURE_MULTIDIMENSIONAL_IS_ENABLED) {
+            OP * const o2
+                = newSVREF(newGVOP(OP_GV, 0, gv_fetchpvs(";", GV_ADD|GV_NOTQUAL, SVt_PV)));
+            o = op_convert_list(OP_JOIN, 0, op_prepend_elem(OP_LIST, o2, o));
+        }
+        else {
+            /* If the user disables this, then a warning might not be enough to alert
+               them to a possible change of behaviour here, so throw an exception.
+            */
+            yyerror("Multidimensional hash lookup is disabled");
+        }
     }
     return o;
 }
@@ -6010,7 +6007,6 @@ S_op_integerize(pTHX_ OP *o)
     /* integerize op. */
     if ((PL_opargs[type] & OA_OTHERINT) && (PL_hints & HINT_INTEGER))
     {
-       dVAR;
        o->op_ppaddr = PL_ppaddr[++(o->op_type)];
     }
 
@@ -6044,7 +6040,6 @@ S_fold_constants_eval(pTHX) {
 static OP *
 S_fold_constants(pTHX_ OP *const o)
 {
-    dVAR;
     OP *curop;
     OP *newop;
     I32 type = o->op_type;
@@ -6234,7 +6229,6 @@ S_fold_constants(pTHX_ OP *const o)
 static void
 S_gen_constant_list(pTHX_ OP *o)
 {
-    dVAR;
     OP *curop, *old_next;
     SV * const oldwarnhook = PL_warnhook;
     SV * const olddiehook  = PL_diehook;
@@ -6473,7 +6467,6 @@ C<op_convert_list> to make it the right type.
 OP *
 Perl_op_convert_list(pTHX_ I32 type, I32 flags, OP *o)
 {
-    dVAR;
     if (type < 0) type = -type, flags |= OPf_SPECIAL;
     if (!o || o->op_type != OP_LIST)
         o = force_list(o, 0);
@@ -6585,7 +6578,6 @@ See L</op_convert_list> for more information.
 OP *
 Perl_newLISTOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
 {
-    dVAR;
     LISTOP *listop;
     /* Note that allocating an OP_PUSHMARK can die under Safe.pm if
      * pushmark is banned. So do it now while existing ops are in a
@@ -6637,7 +6629,6 @@ of C<op_private>.
 OP *
 Perl_newOP(pTHX_ I32 type, I32 flags)
 {
-    dVAR;
     OP *o;
 
     if (type == -OP_ENTEREVAL) {
@@ -6682,7 +6673,6 @@ of the constructed op tree.
 OP *
 Perl_newUNOP(pTHX_ I32 type, I32 flags, OP *first)
 {
-    dVAR;
     UNOP *unop;
 
     if (type == -OP_ENTEREVAL) {
@@ -6732,7 +6722,6 @@ initialised to C<aux>
 OP *
 Perl_newUNOP_AUX(pTHX_ I32 type, I32 flags, OP *first, UNOP_AUX_item *aux)
 {
-    dVAR;
     UNOP_AUX *unop;
 
     assert((PL_opargs[type] & OA_CLASS_MASK) == OA_UNOP_AUX
@@ -6771,7 +6760,6 @@ Supported optypes: C<OP_METHOD>.
 
 static OP*
 S_newMETHOP_internal(pTHX_ I32 type, I32 flags, OP* dynamic_meth, SV* const_meth) {
-    dVAR;
     METHOP *methop;
 
     assert((PL_opargs[type] & OA_CLASS_MASK) == OA_METHOP
@@ -6847,7 +6835,6 @@ by this function and become part of the constructed op tree.
 OP *
 Perl_newBINOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
 {
-    dVAR;
     BINOP *binop;
 
     ASSUME((PL_opargs[type] & OA_CLASS_MASK) == OA_BINOP
@@ -8101,7 +8088,6 @@ and, shifted up eight bits, the eight bits of C<op_private>.
 OP *
 Perl_newPMOP(pTHX_ I32 type, I32 flags)
 {
-    dVAR;
     PMOP *pmop;
 
     assert((PL_opargs[type] & OA_CLASS_MASK) == OA_PMOP
@@ -8157,7 +8143,7 @@ Perl_newPMOP(pTHX_ I32 type, I32 flags)
     } else {
        SV * const repointer = &PL_sv_undef;
        av_push(PL_regex_padav, repointer);
-       pmop->op_pmoffset = av_tindex(PL_regex_padav);
+       pmop->op_pmoffset = av_top_index(PL_regex_padav);
        PL_regex_pad = AvARRAY(PL_regex_padav);
     }
 #endif
@@ -8588,7 +8574,6 @@ takes ownership of one reference to it.
 OP *
 Perl_newSVOP(pTHX_ I32 type, I32 flags, SV *sv)
 {
-    dVAR;
     SVOP *svop;
 
     PERL_ARGS_ASSERT_NEWSVOP;
@@ -8644,7 +8629,6 @@ This function only exists if Perl has been compiled to use ithreads.
 OP *
 Perl_newPADOP(pTHX_ I32 type, I32 flags, SV *sv)
 {
-    dVAR;
     PADOP *padop;
 
     PERL_ARGS_ASSERT_NEWPADOP;
@@ -8712,7 +8696,6 @@ have been allocated using C<PerlMemShared_malloc>.
 OP *
 Perl_newPVOP(pTHX_ I32 type, I32 flags, char *pv)
 {
-    dVAR;
     const bool utf8 = cBOOL(flags & SVf_UTF8);
     PVOP *pvop;
 
@@ -9130,7 +9113,6 @@ S_assignment_type(pTHX_ const OP *o)
 static OP *
 S_newONCEOP(pTHX_ OP *initop, OP *padop)
 {
-    dVAR;
     const PADOFFSET target = padop->op_targ;
     OP *const other = newOP(OP_PADSV,
                            padop->op_flags
@@ -9394,7 +9376,6 @@ is consumed by this function and becomes part of the returned op tree.
 OP *
 Perl_newSTATEOP(pTHX_ I32 flags, char *label, OP *o)
 {
-    dVAR;
     const U32 seq = intro_my();
     const U32 utf8 = flags & SVf_UTF8;
     COP *cop;
@@ -9545,7 +9526,6 @@ S_search_const(pTHX_ OP *o)
 STATIC OP *
 S_new_logop(pTHX_ I32 type, I32 flags, OP** firstp, OP** otherp)
 {
-    dVAR;
     LOGOP *logop;
     OP *o;
     OP *first;
@@ -9757,7 +9737,6 @@ this function and become part of the constructed op tree.
 OP *
 Perl_newCONDOP(pTHX_ I32 flags, OP *first, OP *trueop, OP *falseop)
 {
-    dVAR;
     LOGOP *logop;
     OP *start;
     OP *o;
@@ -10011,7 +9990,6 @@ OP *
 Perl_newWHILEOP(pTHX_ I32 flags, I32 debuggable, LOOP *loop,
        OP *expr, OP *block, OP *cont, I32 has_my)
 {
-    dVAR;
     OP *redo;
     OP *next = NULL;
     OP *listop;
@@ -10135,7 +10113,6 @@ automatically.
 OP *
 Perl_newFOROP(pTHX_ I32 flags, OP *sv, OP *expr, OP *block, OP *cont)
 {
-    dVAR;
     LOOP *loop;
     OP *wop;
     PADOFFSET padoff = 0;
@@ -10233,7 +10210,7 @@ Perl_newFOROP(pTHX_ I32 flags, OP *sv, OP *expr, OP *block, OP *cont)
      * keep it in-place if there's space */
     if (loop->op_slabbed
         &&    OpSLOT(loop)->opslot_size
-            < SIZE_TO_PSIZE(sizeof(LOOP)) + OPSLOT_HEADER_P)
+            < SIZE_TO_PSIZE(sizeof(LOOP) + OPSLOT_HEADER))
     {
         /* no space; allocate new op */
        LOOP *tmp;
@@ -10358,7 +10335,6 @@ S_newGIVWHENOP(pTHX_ OP *cond, OP *block,
                   I32 enter_opcode, I32 leave_opcode,
                   PADOFFSET entertarg)
 {
-    dVAR;
     LOGOP *enterop;
     OP *o;
 
@@ -10854,7 +10830,6 @@ Perl_newMYSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
        if (CvNAMED(*spot))
            hek = CvNAME_HEK(*spot);
        else {
-            dVAR;
            U32 hash;
            PERL_HASH(hash, PadnamePV(name)+1, PadnameLEN(name)-1);
            CvNAME_HEK_set(*spot, hek =
@@ -11014,7 +10989,6 @@ Perl_newMYSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
     if (!CvNAME_HEK(cv)) {
        if (hek) (void)share_hek_hek(hek);
        else {
-            dVAR;
            U32 hash;
            PERL_HASH(hash, PadnamePV(name)+1, PadnameLEN(name)-1);
            hek = share_hek(PadnamePV(name)+1,
@@ -11521,7 +11495,6 @@ Perl_newATTRSUB_x(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs,
                assert(CvGV(cv) == gv);
            }
            else {
-               dVAR;
                U32 hash;
                PERL_HASH(hash, name, namlen);
                CvNAME_HEK_set(cv,
@@ -11592,7 +11565,6 @@ Perl_newATTRSUB_x(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs,
        if (isGV(gv))
             CvGV_set(cv, gv);
        else {
-            dVAR;
            U32 hash;
            PERL_HASH(hash, name, namlen);
            CvNAME_HEK_set(cv, share_hek(name,
@@ -12260,7 +12232,6 @@ Perl_newANONATTRSUB(pTHX_ I32 floor, OP *proto, OP *attrs, OP *block)
 OP *
 Perl_oopsAV(pTHX_ OP *o)
 {
-    dVAR;
 
     PERL_ARGS_ASSERT_OOPSAV;
 
@@ -12286,7 +12257,6 @@ Perl_oopsAV(pTHX_ OP *o)
 OP *
 Perl_oopsHV(pTHX_ OP *o)
 {
-    dVAR;
 
     PERL_ARGS_ASSERT_OOPSHV;
 
@@ -12314,7 +12284,6 @@ Perl_oopsHV(pTHX_ OP *o)
 OP *
 Perl_newAVREF(pTHX_ OP *o)
 {
-    dVAR;
 
     PERL_ARGS_ASSERT_NEWAVREF;
 
@@ -12339,7 +12308,6 @@ Perl_newGVREF(pTHX_ I32 type, OP *o)
 OP *
 Perl_newHVREF(pTHX_ OP *o)
 {
-    dVAR;
 
     PERL_ARGS_ASSERT_NEWHVREF;
 
@@ -12357,7 +12325,6 @@ OP *
 Perl_newCVREF(pTHX_ I32 flags, OP *o)
 {
     if (o->op_type == OP_PADANY) {
-       dVAR;
         OpTYPE_set(o, OP_PADCV);
     }
     return newUNOP(OP_RV2CV, flags, scalar(o));
@@ -12366,7 +12333,6 @@ Perl_newCVREF(pTHX_ I32 flags, OP *o)
 OP *
 Perl_newSVREF(pTHX_ OP *o)
 {
-    dVAR;
 
     PERL_ARGS_ASSERT_NEWSVREF;
 
@@ -12641,7 +12607,6 @@ Perl_ck_concat(pTHX_ OP *o)
 OP *
 Perl_ck_spair(pTHX_ OP *o)
 {
-    dVAR;
 
     PERL_ARGS_ASSERT_CK_SPAIR;
 
@@ -12740,7 +12705,6 @@ Perl_ck_eof(pTHX_ OP *o)
 OP *
 Perl_ck_eval(pTHX_ OP *o)
 {
-    dVAR;
 
     PERL_ARGS_ASSERT_CK_EVAL;
 
@@ -12846,7 +12810,6 @@ Perl_ck_exists(pTHX_ OP *o)
 OP *
 Perl_ck_rvconst(pTHX_ OP *o)
 {
-    dVAR;
     SVOP * const kid = (SVOP*)cUNOPo->op_first;
 
     PERL_ARGS_ASSERT_CK_RVCONST;
@@ -12941,7 +12904,6 @@ Perl_ck_rvconst(pTHX_ OP *o)
 OP *
 Perl_ck_ftst(pTHX_ OP *o)
 {
-    dVAR;
     const I32 type = o->op_type;
 
     PERL_ARGS_ASSERT_CK_FTST;
@@ -13483,7 +13445,6 @@ Perl_ck_listiob(pTHX_ OP *o)
 OP *
 Perl_ck_smartmatch(pTHX_ OP *o)
 {
-    dVAR;
     PERL_ARGS_ASSERT_CK_SMARTMATCH;
     if (0 == (o->op_flags & OPf_SPECIAL)) {
        OP *first  = cBINOPo->op_first;
@@ -13548,7 +13509,6 @@ S_maybe_targlex(pTHX_ OP *o)
 OP *
 Perl_ck_sassign(pTHX_ OP *o)
 {
-    dVAR;
     OP * const kid = cBINOPo->op_first;
 
     PERL_ARGS_ASSERT_CK_SASSIGN;
@@ -13830,7 +13790,6 @@ Perl_ck_require(pTHX_ OP *o)
          SV * const sv = kid->op_sv;
          U32 const was_readonly = SvREADONLY(sv);
          if (kid->op_private & OPpCONST_BARE) {
-            dVAR;
            const char *end;
             HEK *hek;
 
@@ -13875,7 +13834,6 @@ Perl_ck_require(pTHX_ OP *o)
                SvREFCNT_dec_NN(sv);
            }
            else {
-                dVAR;
                 HEK *hek;
                if (was_readonly) SvREADONLY_off(sv);
                PERL_HASH(hash, s, len);
@@ -13928,7 +13886,6 @@ Perl_ck_return(pTHX_ OP *o)
 OP *
 Perl_ck_select(pTHX_ OP *o)
 {
-    dVAR;
     OP* kid;
 
     PERL_ARGS_ASSERT_CK_SELECT;
@@ -14170,7 +14127,6 @@ S_simplify_sort(pTHX_ OP *o)
 OP *
 Perl_ck_split(pTHX_ OP *o)
 {
-    dVAR;
     OP *kid;
     OP *sibs;
 
@@ -15228,7 +15184,6 @@ Perl_ck_tell(pTHX_ OP *o)
 OP *
 Perl_ck_each(pTHX_ OP *o)
 {
-    dVAR;
     OP *kid = o->op_flags & OPf_KIDS ? cUNOPo->op_first : NULL;
     const unsigned orig_type  = o->op_type;
 
@@ -15724,11 +15679,15 @@ S_aassign_scan(pTHX_ OP* o, bool rhs, int *scalars_p)
         goto do_next;
 
     case OP_UNDEF:
-        /* undef counts as a scalar on the RHS:
-         *   (undef, $x) = ...;         # only 1 scalar on LHS: always safe
+        /* undef on LHS following a var is significant, e.g.
+         *    my $x = 1;
+         *    @a = (($x, undef) = (2 => $x));
+         *    # @a shoul be (2,1) not (2,2)
+         *
+         * undef on RHS counts as a scalar:
          *   ($x, $y)    = (undef, $x); # 2 scalars on RHS: unsafe
          */
-        if (rhs)
+        if ((!rhs && *scalars_p) || rhs)
             (*scalars_p)++;
         flags = AAS_SAFE_SCALAR;
         break;
@@ -15919,7 +15878,6 @@ S_inplace_aassign(pTHX_ OP *o) {
 STATIC void
 S_maybe_multideref(pTHX_ OP *start, OP *orig_o, UV orig_action, U8 hints)
 {
-    dVAR;
     int pass;
     UNOP_AUX_item *arg_buf = NULL;
     bool reset_start_targ  = FALSE; /* start->op_targ needs zeroing */
@@ -16714,7 +16672,6 @@ S_check_for_bool_cxt(OP*o, bool safe_and, U8 bool_flag, U8 maybe_flag)
 void
 Perl_rpeep(pTHX_ OP *o)
 {
-    dVAR;
     OP* oldop = NULL;
     OP* oldoldop = NULL;
     OP** defer_queue[MAX_DEFERRED]; /* small queue of deferred branches */
@@ -18489,7 +18446,6 @@ void
 Perl_wrap_op_checker(pTHX_ Optype opcode,
     Perl_check_t new_checker, Perl_check_t *old_checker_p)
 {
-    dVAR;
 
     PERL_UNUSED_CONTEXT;
     PERL_ARGS_ASSERT_WRAP_OP_CHECKER;
diff --git a/op.h b/op.h
index b9f6da8..d660c84 100644 (file)
--- a/op.h
+++ b/op.h
@@ -77,7 +77,7 @@ The XSUB-writer's equivalent to Perl's C<wantarray>.  Returns C<G_VOID>,
 C<G_SCALAR> or C<G_ARRAY> for void, scalar or list context,
 respectively.  See L<perlcall> for a usage example.
 
-=for apidoc Amn|U32|GIMME
+=for apidoc AmnD|U32|GIMME
 A backward-compatible version of C<GIMME_V> which can only return
 C<G_SCALAR> or C<G_ARRAY>; in a void context, it returns C<G_SCALAR>.
 Deprecated.  Use C<GIMME_V> instead.
@@ -713,21 +713,23 @@ struct opslab {
                                            units) */
 # ifdef PERL_DEBUG_READONLY_OPS
     bool       opslab_readonly;
-    U8          opslab_padding;         /* padding to ensure that opslab_slots is always */
-# else
-    U16         opslab_padding;         /* located at an offset with 32-bit alignment */
 # endif
     OPSLOT     opslab_slots;           /* slots begin here */
 };
 
 # define OPSLOT_HEADER         STRUCT_OFFSET(OPSLOT, opslot_op)
-# define OPSLOT_HEADER_P       (OPSLOT_HEADER/sizeof(I32 *))
 # define OpSLOT(o)             (assert_(o->op_slabbed) \
                                 (OPSLOT *)(((char *)o)-OPSLOT_HEADER))
 
+/* the slab that owns this op */
+# define OpMySLAB(o) \
+    ((OPSLAB*)((char *)((I32**)OpSLOT(o) - OpSLOT(o)->opslot_offset)-STRUCT_OFFSET(struct opslab, opslab_slots)))
 /* the first (head) opslab of the chain in which this op is allocated */
 # define OpSLAB(o) \
-    (((OPSLAB*)( (I32**)OpSLOT(o) - OpSLOT(o)->opslot_offset))->opslab_head)
+    (OpMySLAB(o)->opslab_head)
+/* calculate the slot given the owner slab and an offset */
+#define OpSLOToff(slab, offset) \
+    ((OPSLOT*)(((I32 **)&(slab)->opslab_slots)+(offset)))
 
 # define OpslabREFCNT_dec(slab)      \
        (((slab)->opslab_refcnt == 1) \
@@ -814,7 +816,7 @@ preprocessing token; the type of C<arg> depends on C<which>.
     STMT_START { \
        if (PL_blockhooks) { \
            SSize_t i; \
-           for (i = av_tindex(PL_blockhooks); i >= 0; i--) { \
+           for (i = av_top_index(PL_blockhooks); i >= 0; i--) { \
                SV *sv = AvARRAY(PL_blockhooks)[i]; \
                BHK *hk; \
                \
index c500aa4..e8770e6 100644 (file)
@@ -137,8 +137,8 @@ get_regex_charset(const U32 flags)
  *  directly in the #define because doing so confuses regcomp.pl.
  *  (2**n - 1) is n 1 bits, so the below gets the contiguous bits between the
  *  beginning and ending shifts */
-#if RXf_PMf_COMPILETIME != (((1 << (_RXf_PMf_SHIFT_COMPILETIME))-1) \
-                            & (~((1 << RXf_PMf_STD_PMMOD_SHIFT)-1)))
+#if RXf_PMf_COMPILETIME != ((nBIT_MASK(_RXf_PMf_SHIFT_COMPILETIME)) \
+                        & (~(nBIT_MASK( RXf_PMf_STD_PMMOD_SHIFT))))
 #   error RXf_PMf_COMPILETIME is invalid
 #endif
 
index 195898e..c754a64 100644 (file)
--- a/opcode.h
+++ b/opcode.h
@@ -13,8 +13,6 @@
  * Any changes made here will be lost!
  */
 
-#ifndef PERL_GLOBAL_STRUCT_INIT
-
 #define Perl_pp_scalar Perl_pp_null
 #define Perl_pp_padany Perl_unimplemented_op
 #define Perl_pp_regcmaybe Perl_pp_null
@@ -960,19 +958,10 @@ EXTCONST char* const PL_op_desc[] = {
 
 END_EXTERN_C
 
-#endif /* !PERL_GLOBAL_STRUCT_INIT */
-
 START_EXTERN_C
 
-#ifdef PERL_GLOBAL_STRUCT_INIT
-#  define PERL_PPADDR_INITED
-static const Perl_ppaddr_t Gppaddr[]
-#elif !defined(PERL_GLOBAL_STRUCT)
-#  define PERL_PPADDR_INITED
 EXT Perl_ppaddr_t PL_ppaddr[] /* or perlvars.h */
-#endif /* PERL_GLOBAL_STRUCT */
-#if (defined(DOINIT) && !defined(PERL_GLOBAL_STRUCT)) || defined(PERL_GLOBAL_STRUCT_INIT)
-#  define PERL_PPADDR_INITED
+#if defined(DOINIT)
 = {
        Perl_pp_null,
        Perl_pp_stub,
@@ -1376,19 +1365,10 @@ EXT Perl_ppaddr_t PL_ppaddr[] /* or perlvars.h */
        Perl_pp_cmpchain_dup,
 }
 #endif
-#ifdef PERL_PPADDR_INITED
 ;
-#endif
 
-#ifdef PERL_GLOBAL_STRUCT_INIT
-#  define PERL_CHECK_INITED
-static const Perl_check_t Gcheck[]
-#elif !defined(PERL_GLOBAL_STRUCT)
-#  define PERL_CHECK_INITED
 EXT Perl_check_t PL_check[] /* or perlvars.h */
-#endif
-#if (defined(DOINIT) && !defined(PERL_GLOBAL_STRUCT)) || defined(PERL_GLOBAL_STRUCT_INIT)
-#  define PERL_CHECK_INITED
+#if defined(DOINIT)
 = {
        Perl_ck_null,           /* null */
        Perl_ck_null,           /* stub */
@@ -1792,11 +1772,7 @@ EXT Perl_check_t PL_check[] /* or perlvars.h */
        Perl_ck_null,           /* cmpchain_dup */
 }
 #endif
-#ifdef PERL_CHECK_INITED
 ;
-#endif /* #ifdef PERL_CHECK_INITED */
-
-#ifndef PERL_GLOBAL_STRUCT_INIT
 
 #ifndef DOINIT
 EXTCONST U32 PL_opargs[];
@@ -2205,8 +2181,6 @@ EXTCONST U32 PL_opargs[] = {
 };
 #endif
 
-#endif /* !PERL_GLOBAL_STRUCT_INIT */
-
 END_EXTERN_C
 
 
@@ -2322,9 +2296,7 @@ END_EXTERN_C
 #define OPpTRANS_DELETE         0x80
 START_EXTERN_C
 
-#ifndef PERL_GLOBAL_STRUCT_INIT
-
-#  ifndef DOINIT
+#ifndef DOINIT
 
 /* data about the flags in op_private */
 
@@ -2334,7 +2306,7 @@ EXTCONST char PL_op_private_labels[];
 EXTCONST I16  PL_op_private_bitfields[];
 EXTCONST U8   PL_op_private_valid[];
 
-#  else
+#else
 
 
 /* PL_op_private_labels[]: the short descriptions of private flags.
@@ -3372,8 +3344,7 @@ EXTCONST U8 PL_op_private_valid[] = {
 
 };
 
-#  endif /* !DOINIT */
-#endif /* !PERL_GLOBAL_STRUCT_INIT */
+#endif /* !DOINIT */
 
 END_EXTERN_C
 
index 00e785f..db23b1c 100644 (file)
@@ -6,7 +6,7 @@
 # Additional rules supported: perl_, aout_test, aout_install, use them
 # for a.out style perl (which may fork).
 
-perl_fullversion="5.00${PERL_VERSION}_$PERL_SUBVERSION"
+perl_fullversion="${PERL_REVISION}.00${PERL_VERSION}_${PERL_SUBVERSION}"
 case "$archname" in
  *-thread*)    perl_fullversion="${perl_fullversion}-threaded";;
 esac
index 0c9fa17..3e2bd1b 100644 (file)
--- a/os2/os2.c
+++ b/os2/os2.c
@@ -215,7 +215,7 @@ static struct perlos2_state_t {
 
 const Perl_PFN * const pExtFCN = (Perl_po2()->po2_ExtFCN);
 
-#if defined(USE_5005THREADS) || defined(USE_ITHREADS)
+#if defined(USE_ITHREADS)
 
 typedef void (*emx_startroutine)(void *);
 typedef void* (*pthreads_startroutine)(void *);
@@ -694,8 +694,8 @@ loadByOrdinal(enum entries_ordinals ord, int fail)
 
        if (!loadOrdinals[ord].dll->handle) {
            if (loadOrdinals[ord].dll->requires_pm && my_type() < 2) { /* FS */
-               char *s = getenv("PERL_ASIF_PM");
-               
+               char *s = PerlEnv_getenv("PERL_ASIF_PM");
+
                if (!s || !atoi(s)) {
                    /* The module will not function well without PM.
                       The usual way to detect PM is the existence of the mutex
@@ -1226,14 +1226,13 @@ do_spawn_ve(pTHX_ SV *really, const char **argv, U32 flag, U32 execf, char *inic
                            /* In fact we tried all what pdksh would
                               try.  There is no point in calling
                               pdksh, we may just emulate its logic. */
-                           char *shell = getenv("EXECSHELL");
+                           char *shell = PerlEnv_getenv("EXECSHELL");
                            char *shell_opt = NULL;
-
                            if (!shell) {
                                char *s;
 
                                shell_opt = "/c";
-                               shell = getenv("OS2_SHELL");
+                               shell = PerlEnv_getenv("OS2_SHELL");
                                if (inicmd) { /* No spaces at start! */
                                    s = inicmd;
                                    while (*s && !isSPACE(*s)) {
@@ -1357,11 +1356,11 @@ do_spawn3(pTHX_ char *cmd, int execf, int flag)
 
     ENTER;
 #ifdef TRYSHELL
-    if ((shell = getenv("EMXSHELL")) != NULL)
+    if ((shell = PerlEnv_getenv("EMXSHELL")) != NULL)
        copt = "-c";
-    else if ((shell = getenv("SHELL")) != NULL)
+    else if ((shell = PerlEnv_getenv("SHELL")) != NULL)
        copt = "-c";
-    else if ((shell = getenv("COMSPEC")) != NULL)
+    else if ((shell = PerlEnv_getenv("COMSPEC")) != NULL)
        copt = "/C";
     else
        shell = "cmd.exe";
@@ -1658,7 +1657,8 @@ my_syspopen4(pTHX_ char *cmd, char *mode, I32 cnt, SV** args)
 #  ifdef TRYSHELL
     res = popen(cmd, mode);
 #  else
-    char *shell = getenv("EMXSHELL");
+
+    char *shell = PerlEnv_getenv("EMXSHELL");
 
     my_setenv("EMXSHELL", PL_sh_path);
     res = popen(cmd, mode);
@@ -1837,11 +1837,11 @@ const char *tmppath = TMPPATH1;
 void
 settmppath()
 {
-    char *p = getenv("TMP"), *tpath;
+    char *p = PerlEnv_getenv("TMP"), *tpath;
     int len;
 
-    if (!p) p = getenv("TEMP");
-    if (!p) p = getenv("TMPDIR");
+    if (!p) p = PerlEnv_getenv("TEMP");
+    if (!p) p = PerlEnv_getenv("TMPDIR");
     if (!p) return;
     len = strlen(p);
     tpath = (char *)malloc(len + strlen(TMPPATH1) + 2);
@@ -2025,8 +2025,8 @@ mod2fname(pTHX_ SV *sv)
     if (SvTYPE(sv) != SVt_PVAV) 
       Perl_croak_nocontext("Not array reference given to mod2fname");
 
-    avlen = av_tindex((AV*)sv);
-    if (avlen < 0) 
+    avlen = av_count((AV*)sv);
+    if (avlen == 0)
       Perl_croak_nocontext("Empty array reference given to mod2fname");
 
     s = SvPV(*av_fetch((AV*)sv, avlen, FALSE), n_a);
@@ -2037,8 +2037,7 @@ mod2fname(pTHX_ SV *sv)
        sum = 33 * sum + *(s++);        /* Checksumming first chars to
                                         * get the capitalization into c.s. */
     }
-    avlen --;
-    while (avlen >= 0) {
+    while (avlen > 0) {
        s = SvPV(*av_fetch((AV*)sv, avlen, FALSE), n_a);
        while (*s) {
            sum = 33 * sum + *(s++);    /* 7 is primitive mod 13. */
@@ -2411,16 +2410,16 @@ perllib_mangle(char *s, unsigned int l)
     if (perllib_mangle_installed && (name = perllib_mangle_installed(s,l)))
        return name;
     if (!newp && !notfound) {
-       newp = getenv(name = "PERLLIB_" STRINGIFY(PERL_REVISION)
+       newp = PerlEnv_getenv(name = "PERLLIB_" STRINGIFY(PERL_REVISION)
                      STRINGIFY(PERL_VERSION) STRINGIFY(PERL_SUBVERSION)
                      "_PREFIX");
        if (!newp)
-           newp = getenv(name = "PERLLIB_" STRINGIFY(PERL_REVISION)
+           newp = PerlEnv_getenv(name = "PERLLIB_" STRINGIFY(PERL_REVISION)
                          STRINGIFY(PERL_VERSION) "_PREFIX");
        if (!newp)
-           newp = getenv(name = "PERLLIB_" STRINGIFY(PERL_REVISION) "_PREFIX");
+           newp = PerlEnv_getenv(name = "PERLLIB_" STRINGIFY(PERL_REVISION) "_PREFIX");
        if (!newp)
-           newp = getenv(name = "PERLLIB_PREFIX");
+           newp = PerlEnv_getenv(name = "PERLLIB_PREFIX");
        if (newp) {
            char *s, b[300];
            
@@ -4957,11 +4956,11 @@ Perl_OS2_init3(char **env, void **preg, int flags)
 
        Newx(PL_sh_path, l + 1, char);
        memcpy(PL_sh_path, perl_sh_installed, l + 1);
-    } else if ( (shell = getenv("PERL_SH_DRIVE")) ) {
+    } else if ( (shell = PerlEnv_getenv("PERL_SH_DRIVE")) ) {
        Newx(PL_sh_path, strlen(SH_PATH) + 1, char);
        strcpy(PL_sh_path, SH_PATH);
        PL_sh_path[0] = shell[0];
-    } else if ( (shell = getenv("PERL_SH_DIR")) ) {
+    } else if ( (shell = PerlEnv_getenv("PERL_SH_DIR")) ) {
        int l = strlen(shell), i;
 
        while (l && (shell[l-1] == '/' || shell[l-1] == '\\'))
@@ -4979,17 +4978,17 @@ Perl_OS2_init3(char **env, void **preg, int flags)
     os2_mytype_ini = os2_mytype;
     Perl_os2_initial_mode = -1;                /* Uninit */
 
-    s = getenv("PERL_BEGINLIBPATH");
+    s = PerlEnv_getenv("PERL_BEGINLIBPATH");
     if (s)
       rc = fill_extLibpath(0, s, NULL, 1, "PERL_BEGINLIBPATH");
     else
-      rc = fill_extLibpath(0, getenv("PERL_PRE_BEGINLIBPATH"), getenv("PERL_POST_BEGINLIBPATH"), 0, "PERL_(PRE/POST)_BEGINLIBPATH");
+      rc = fill_extLibpath(0, PerlEnv_getenv("PERL_PRE_BEGINLIBPATH"), PerlEnv_getenv("PERL_POST_BEGINLIBPATH"), 0, "PERL_(PRE/POST)_BEGINLIBPATH");
     if (!rc) {
-       s = getenv("PERL_ENDLIBPATH");
+       s = PerlEnv_getenv("PERL_ENDLIBPATH");
        if (s)
            rc = fill_extLibpath(1, s, NULL, 1, "PERL_ENDLIBPATH");
        else
-           rc = fill_extLibpath(1, getenv("PERL_PRE_ENDLIBPATH"), getenv("PERL_POST_ENDLIBPATH"), 0, "PERL_(PRE/POST)_ENDLIBPATH");
+           rc = fill_extLibpath(1, PerlEnv_getenv("PERL_PRE_ENDLIBPATH"), PerlEnv_getenv("PERL_POST_ENDLIBPATH"), 0, "PERL_(PRE/POST)_ENDLIBPATH");
     }
     if (rc) {
        char buf[1024];
@@ -5045,14 +5044,17 @@ dup(int from)
 char *
 my_tmpnam (char *str)
 {
-    char *p = getenv("TMP"), *tpath;
+    char *p = PerlEnv_getenv("TMP"), *tpath;
 
-    if (!p) p = getenv("TEMP");
+    if (!p) p = PerlEnv_getenv("TEMP");
+    ENV_LOCK;
     tpath = tempnam(p, "pltmp");
     if (str && tpath) {
        strcpy(str, tpath);
+        ENV_UNLOCK;
        return str;
     }
+    ENV_UNLOCK;
     return tpath;
 }
 
@@ -5137,7 +5139,7 @@ my_flock(int handle, int o)
   if (use_my_flock == -1) {
    MUTEX_LOCK(&perlos2_state_mutex);
    if (use_my_flock == -1) {
-    char *s = getenv("USE_PERL_FLOCK");
+    char *s = PerlEnv_getenv("USE_PERL_FLOCK");
     if (s)
        use_my_flock = atoi(s);
     else 
@@ -5243,7 +5245,7 @@ static int
 use_my_pwent(void)
 {
   if (_my_pwent == -1) {
-    char *s = getenv("USE_PERL_PWENT");
+    char *s = PerlEnv_getenv("USE_PERL_PWENT");
     if (s)
        _my_pwent = atoi(s);
     else 
@@ -5318,10 +5320,11 @@ passw_wrap(struct passwd *p)
     if (!p || (p->pw_passwd && *p->pw_passwd)) /* Not a dangerous password */
        return p;
     pw = *p;
-    s = getenv("PW_PASSWD");
+    s = PerlEnv_getenv("PW_PASSWD");
     if (!s)
        s = (char*)pw_p;                /* Make match impossible */
 
+
     pw.pw_passwd = s;
     return &pw;    
 }
@@ -5329,12 +5332,18 @@ passw_wrap(struct passwd *p)
 struct passwd *
 my_getpwuid (uid_t id)
 {
+    /* On Linux, only getpwuid_r is thread safe, and even then not if the
+     * locale changes */
+
     return passw_wrap(getpwuid(id));
 }
 
 struct passwd *
 my_getpwnam (__const__ char *n)
 {
+    /* On Linux, only getpwnam_r is thread safe, and even then not if the
+     * locale changes */
+
     return passw_wrap(getpwnam(n));
 }
 
@@ -5362,7 +5371,7 @@ gcvt_os2 (double value, int digits, char *buffer)
 #undef fork
 int fork_with_resources()
 {
-#if (defined(USE_5005THREADS) || defined(USE_ITHREADS)) && !defined(USE_SLOW_THREAD_SPECIFIC)
+#if defined(USE_ITHREADS) && !defined(USE_SLOW_THREAD_SPECIFIC)
   dTHX;
   void *ctx = PERL_GET_CONTEXT;
 #endif
@@ -5370,7 +5379,7 @@ int fork_with_resources()
   int rc = fork();
 
   if (rc == 0) {                       /* child */
-#if (defined(USE_5005THREADS) || defined(USE_ITHREADS)) && !defined(USE_SLOW_THREAD_SPECIFIC)
+#if defined(USE_ITHREADS) && !defined(USE_SLOW_THREAD_SPECIFIC)
     ALLOC_THREAD_KEY;                  /* Acquire the thread-local memory */
     PERL_SET_CONTEXT(ctx);             /* Reinit the thread-local memory */
 #endif
index c82419e..e209fb5 100644 (file)
@@ -874,7 +874,7 @@ int os2_do_aspawn(pTHX_ SV *really, SV **vmark, SV **vsp);
  * arguments to setlogmask.
  */
 #  define      LOG_MASK(pri)   (1 << (pri))            /* mask for one priority */
-#  define      LOG_UPTO(pri)   ((1 << ((pri)+1)) - 1)  /* all priorities through pri */
+#  define       LOG_UPTO(pri)   nBIT_MASK((pri)+1)      /* all priorities through pri */
 
 /*
  * Option flags for openlog.
diff --git a/pad.c b/pad.c
index 2bbb056..cd23fa8 100644 (file)
--- a/pad.c
+++ b/pad.c
@@ -1630,7 +1630,6 @@ the kind of subroutine:
 void
 Perl_pad_tidy(pTHX_ padtidy_type type)
 {
-    dVAR;
 
     ASSERT_CURPAD_ACTIVE("pad_tidy");
 
@@ -2006,7 +2005,6 @@ S_cv_clone_pad(pTHX_ CV *proto, CV *cv, CV *outside, HV *cloned,
                        /* my sub */
                        /* Just provide a stub, but name it.  It will be
                           upgraded to the real thing on scope entry. */
-                        dVAR;
                        U32 hash;
                        PERL_HASH(hash, PadnamePV(namesv)+1,
                                  PadnameLEN(namesv) - 1);
@@ -2189,7 +2187,6 @@ static CV *
 S_cv_clone(pTHX_ CV *proto, CV *cv, CV *outside, HV *cloned)
 {
 #ifdef USE_ITHREADS
-    dVAR;
 #endif
     const bool newcv = !cv;
 
index 07804d9..598a928 100644 (file)
@@ -8,6 +8,32 @@
  *
  */
 
+/*
+=head1 Handy Values
+
+=for apidoc AmDnU|U8|PERL_REVISION
+The major number component of the perl interpreter currently being compiled or
+executing.  This has been C<5> from 1993 into 2020.
+
+Instead use one of the version comparison macros.  See C<L</PERL_VERSION_EQ>>.
+
+=for apidoc AmDnU|U8|PERL_VERSION
+The minor number component of the perl interpreter currently being compiled or
+executing.  Between 1993 into 2020, this has ranged from 0 to 33.
+
+Instead use one of the version comparison macros.  See C<L</PERL_VERSION_EQ>>.
+
+=for apidoc AmDnU|U8|PERL_SUBVERSION
+The micro number component of the perl interpreter currently being compiled or
+executing.  In stable releases this gives the dot release number for
+maintenance updates.  In development releases this gives a tag for a snapshot
+of the status at various points in the development cycle.
+
+Instead use one of the version comparison macros.  See C<L</PERL_VERSION_EQ>>.
+
+=cut
+*/
+
 #ifndef __PATCHLEVEL_H_INCLUDED__
 
 /* do not adjust the whitespace! Configure expects the numbers to be
@@ -15,7 +41,7 @@
 
 #define PERL_REVISION  5               /* age */
 #define PERL_VERSION   33              /* epoch */
-#define PERL_SUBVERSION        0               /* generation */
+#define PERL_SUBVERSION        1               /* generation */
 
 /* The following numbers describe the earliest compatible version of
    Perl ("compatibility" here being defined as sufficient binary/API
@@ -36,7 +62,7 @@
 */
 #define PERL_API_REVISION      5
 #define PERL_API_VERSION       33
-#define PERL_API_SUBVERSION    0
+#define PERL_API_SUBVERSION    1
 /*
    XXX Note:  The selection of non-default Configure options, such
    as -Duselonglong may invalidate these settings.  Currently, Configure
diff --git a/perl.c b/perl.c
index 2013a76..728ab57 100644 (file)
--- a/perl.c
+++ b/perl.c
@@ -83,7 +83,6 @@ static I32 read_e_script(pTHX_ int idx, SV *buf_sv, int maxlen);
 static void
 S_init_tls_and_interp(PerlInterpreter *my_perl)
 {
-    dVAR;
     if (!PL_curinterp) {                       
        PERL_SET_INTERP(my_perl);
 #if defined(USE_ITHREADS)
@@ -117,7 +116,6 @@ S_init_tls_and_interp(PerlInterpreter *my_perl)
 void
 Perl_sys_init(int* argc, char*** argv)
 {
-    dVAR;
 
     PERL_ARGS_ASSERT_SYS_INIT;
 
@@ -129,7 +127,6 @@ Perl_sys_init(int* argc, char*** argv)
 void
 Perl_sys_init3(int* argc, char*** argv, char*** env)
 {
-    dVAR;
 
     PERL_ARGS_ASSERT_SYS_INIT3;
 
@@ -142,7 +139,6 @@ Perl_sys_init3(int* argc, char*** argv, char*** env)
 void
 Perl_sys_term(void)
 {
-    dVAR;
     if (!PL_veto_cleanup) {
        PERL_SYS_TERM_BODY();
     }
@@ -220,7 +216,6 @@ Initializes a new Perl interpreter.  See L<perlembed>.
 void
 perl_construct(pTHXx)
 {
-    dVAR;
 
     PERL_ARGS_ASSERT_PERL_CONSTRUCT;
 
@@ -421,13 +416,6 @@ perl_construct(pTHXx)
     }
 #endif /* HAS_MMAP */
 
-#if defined(HAS_TIMES) && defined(PERL_NEED_TIMESBASE)
-    PL_timesbase.tms_utime  = 0;
-    PL_timesbase.tms_stime  = 0;
-    PL_timesbase.tms_cutime = 0;
-    PL_timesbase.tms_cstime = 0;
-#endif
-
     PL_osname = Perl_savepvn(aTHX_ STR_WITH_LEN(OSNAME));
 
     PL_registered_mros = newHV();
@@ -593,7 +581,6 @@ interpret specific numeric values as having specific meanings.
 int
 perl_destruct(pTHXx)
 {
-    dVAR;
     volatile signed char destruct_level;  /* see possible values in intrpvar.h */
     HV *hv;
 #ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
@@ -1541,7 +1528,6 @@ Releases a Perl interpreter.  See L<perlembed>.
 void
 perl_free(pTHXx)
 {
-    dVAR;
 
     PERL_ARGS_ASSERT_PERL_FREE;
 
@@ -1610,11 +1596,7 @@ __attribute__((destructor))
 #endif
 perl_fini(void)
 {
-    dVAR;
     if (
-#ifdef PERL_GLOBAL_STRUCT_PRIVATE
-        my_vars &&
-#endif
         PL_curinterp && !PL_veto_cleanup)
        FREE_THREAD_KEY;
 }
@@ -1700,7 +1682,6 @@ bug is due to be fixed in Perl 5.30.
 int
 perl_parse(pTHXx_ XSINIT_t xsinit, int argc, char **argv, char **env)
 {
-    dVAR;
     I32 oldscope;
     int ret;
     dJMPENV;
@@ -2096,7 +2077,6 @@ S_Internals_V(pTHX_ CV *cv)
 STATIC void *
 S_parse_body(pTHX_ char **env, XSINIT_t xsinit)
 {
-    dVAR;
     PerlIO *rsfp;
     int argc = PL_origargc;
     char **argv = PL_origargv;
@@ -2480,7 +2460,7 @@ S_parse_body(pTHX_ char **env, XSINIT_t xsinit)
     if (xsinit)
        (*xsinit)(aTHX);        /* in case linked C routines want magical variables */
 #ifndef PERL_MICRO
-#if defined(VMS) || defined(WIN32) || defined(DJGPP) || defined(__CYGWIN__) || defined(SYMBIAN)
+#if defined(VMS) || defined(WIN32) || defined(DJGPP) || defined(__CYGWIN__)
     init_os_extras();
 #endif
 #endif
@@ -2505,9 +2485,6 @@ S_parse_body(pTHX_ char **env, XSINIT_t xsinit)
      * PL_utf8locale is conditionally turned on by
      * locale.c:Perl_init_i18nl10n() if the environment
      * look like the user wants to use UTF-8. */
-#if defined(__SYMBIAN32__)
-    PL_unicode = PERL_UNICODE_STD_FLAG; /* See PERL_SYMBIAN_CONSOLE_UTF8. */
-#endif
 #  ifndef PERL_IS_MINIPERL
     if (PL_unicode) {
         /* Requires init_predump_symbols(). */
@@ -3007,7 +2984,6 @@ I32
 Perl_call_sv(pTHX_ SV *sv, volatile I32 flags)
                        /* See G_* flags in cop.h */
 {
-    dVAR;
     LOGOP myop;                /* fake syntax tree node */
     METHOP method_op;
     I32 oldmark;
@@ -3161,7 +3137,6 @@ Perl_eval_sv(pTHX_ SV *sv, I32 flags)
 
                        /* See G_* flags in cop.h */
 {
-    dVAR;
     UNOP myop;         /* fake syntax tree node */
     volatile I32 oldmark;
     volatile I32 retval = 0;
@@ -3447,7 +3422,6 @@ Perl_get_debug_opts(pTHX_ const char **s, bool givehelp)
 const char *
 Perl_moreswitches(pTHX_ const char *s)
 {
-    dVAR;
     UV rschar;
     const char option = *s; /* used to remember option in -m/-M code */
 
@@ -3861,10 +3835,6 @@ S_minus_v(pTHX)
        PerlIO_printf(PIO_stdout,
                      "BS2000 (POSIX) port by Start Amadeus GmbH, 1998-1999\n");
 #endif
-#ifdef __SYMBIAN32__
-       PerlIO_printf(PIO_stdout,
-                     "Symbian port by Nokia, 2004-2005\n");
-#endif
 #ifdef BINARY_BUILD_NOTICE
        BINARY_BUILD_NOTICE;
 #endif
@@ -4146,7 +4116,6 @@ S_validate_suid(pTHX_ PerlIO *rsfp)
     PERL_ARGS_ASSERT_VALIDATE_SUID;
 
     if (my_euid != my_uid || my_egid != my_gid) {      /* (suidperl doesn't exist, in fact) */
-       dVAR;
         int fd = PerlIO_fileno(rsfp);
         Stat_t statbuf;
         if (fd < 0 || PerlLIO_fstat(fd, &statbuf) < 0) { /* may be either wrapped or real suid */
@@ -4564,7 +4533,6 @@ STATIC void
 S_init_postdump_symbols(pTHX_ int argc, char **argv, char **env)
 {
 #ifdef USE_ITHREADS
-    dVAR;
 #endif
     GV* tmpgv;
 
@@ -4767,7 +4735,7 @@ S_init_perllib(pTHX)
     }
 }
 
-#if defined(DOSISH) || defined(__SYMBIAN32__)
+#if defined(DOSISH)
 #    define PERLLIB_SEP ';'
 #elif defined(__VMS)
 #    define PERLLIB_SEP PL_perllib_sep
@@ -5020,7 +4988,7 @@ S_incpush(pTHX_ const char *const dir, STRLEN len, U32 flags)
 #ifdef PERL_IS_MINIPERL
            const Size_t extra = 0;
 #else
-           Size_t extra = av_tindex(av) + 1;
+           Size_t extra = av_count(av);
 #endif
            av_unshift(inc, extra + push_basedir);
            if (push_basedir)
@@ -5106,7 +5074,7 @@ Perl_call_list(pTHX_ I32 oldscope, AV *paramList)
 
     PERL_ARGS_ASSERT_CALL_LIST;
 
-    while (av_tindex(paramList) >= 0) {
+    while (av_count(paramList) > 0) {
        cv = MUTABLE_CV(av_shift(paramList));
        if (PL_savebegin) {
            if (paramList == PL_beginav) {
diff --git a/perl.h b/perl.h
index b0d35e2..c88e44e 100644 (file)
--- a/perl.h
+++ b/perl.h
 #  endif
 #endif
 
-#ifdef PERL_GLOBAL_STRUCT_PRIVATE
-#  ifndef PERL_GLOBAL_STRUCT
-#    define PERL_GLOBAL_STRUCT
-#  endif
-#endif
-
-#ifdef PERL_GLOBAL_STRUCT
-#  ifndef MULTIPLICITY
-#    define MULTIPLICITY
-#  endif
-#endif
-
 #ifdef MULTIPLICITY
 #  ifndef PERL_IMPLICIT_CONTEXT
 #    define PERL_IMPLICIT_CONTEXT
 #   undef _WIN32
 #endif
 
-#if defined(__SYMBIAN32__) || (defined(__VC32__) && defined(WINS))
-#   ifndef SYMBIAN
-#       define SYMBIAN
-#   endif
-#endif
-
-#ifdef __SYMBIAN32__
-#  include "symbian/symbian_proto.h"
-#endif
-
-/* Any stack-challenged places.  The limit varies (and often
- * is configurable), but using more than a kilobyte of stack
- * is usually dubious in these systems. */
-#if defined(__SYMBIAN32__)
-/* Symbian: need to work around the SDK features. *
- * On WINS: MS VC5 generates calls to _chkstk,         *
- * if a "large" stack frame is allocated.              *
- * gcc on MARM does not generate calls like these.     */
-#   define USE_HEAP_INSTEAD_OF_STACK
-#endif
-
 /* Use the reentrant APIs like localtime_r and getpwent_r */
 /* Win32 has naturally threadsafe libraries, no need to use any _r variants.
  * XXX KEEP makedef.pl copy of this code in sync */
 #  endif
 #endif
 
-#if defined(PERL_GLOBAL_STRUCT) && !defined(PERL_GET_VARS)
-#    ifdef PERL_GLOBAL_STRUCT_PRIVATE
-       EXTERN_C struct perl_vars* Perl_GetVarsPrivate();
-#      define PERL_GET_VARS() Perl_GetVarsPrivate() /* see miniperlmain.c */
-#    else
-#      define PERL_GET_VARS() PL_VarsPtr
-#    endif
-#endif
-
 /* this used to be off by default, now its on, see perlio.h */
 #define PERLIO_FUNCS_CONST
 
-#define pVAR    struct perl_vars* my_vars PERL_UNUSED_DECL
-
-#ifdef PERL_GLOBAL_STRUCT
-#  define dVAR         pVAR    = (struct perl_vars*)PERL_GET_VARS()
-#else
-#  define dVAR         dNOOP
-#endif
-
 #ifdef PERL_IMPLICIT_CONTEXT
 #  ifndef MULTIPLICITY
 #    define MULTIPLICITY
 #  define pTHX  tTHX my_perl PERL_UNUSED_DECL
 #  define aTHX my_perl
 #  define aTHXa(a) aTHX = (tTHX)a
-#  ifdef PERL_GLOBAL_STRUCT
-#    define dTHXa(a)   dVAR; pTHX = (tTHX)a
-#  else
-#    define dTHXa(a)   pTHX = (tTHX)a
-#  endif
-#  ifdef PERL_GLOBAL_STRUCT
-#    define dTHX               dVAR; pTHX = PERL_GET_THX
-#  else
-#    define dTHX               pTHX = PERL_GET_THX
-#  endif
+#  define dTHXa(a)     pTHX = (tTHX)a
+#  define dTHX         pTHX = PERL_GET_THX
 #  define pTHX_                pTHX,
 #  define aTHX_                aTHX,
 #  define pTHX_1       2
  * for silencing unused variables that are actually used most of the time,
  * but we cannot quite get rid of, such as "ax" in PPCODE+noargs xsubs,
  * or variables/arguments that are used only in certain configurations.
+
+=head1 Miscellaneous Functions
+
+=for apidoc Am||PERL_UNUSED_ARG|void x
+This is used to suppress compiler warnings that a parameter to a function is
+not used.  This situation can arise, for example, when a parameter is needed
+under some configuration conditions, but not others, so that C preprocessor
+conditional compilation causes it be used just some times.
+
+=for apidoc Amn||PERL_UNUSED_CONTEXT
+This is used to suppress compiler warnings that the thread context parameter to
+a function is not used.  This situation can arise, for example, when a
+C preprocessor conditional compilation causes it be used just some times.
+
+=for apidoc Am||PERL_UNUSED_VAR|void x
+This is used to suppress compiler warnings that the variable I<x> is not used.
+This situation can arise, for example, when a C preprocessor conditional
+compilation causes it be used just some times.
+
+=cut
  */
 #ifndef PERL_UNUSED_ARG
 #  define PERL_UNUSED_ARG(x) ((void)sizeof(x))
 #  define PERL_UNUSED_VAR(x) ((void)sizeof(x))
 #endif
 
-#if defined(USE_ITHREADS) || defined(PERL_GLOBAL_STRUCT)
+#if defined(USE_ITHREADS)
 #  define PERL_UNUSED_CONTEXT PERL_UNUSED_ARG(my_perl)
 #else
 #  define PERL_UNUSED_CONTEXT
 #  endif
 #endif
 
-/* Use PERL_UNUSED_RESULT() to suppress the warnings about unused results
- * of function calls, e.g. PERL_UNUSED_RESULT(foo(a, b)).
- *
- * The main reason for this is that the combination of gcc -Wunused-result
- * (part of -Wall) and the __attribute__((warn_unused_result)) cannot
- * be silenced with casting to void.  This causes trouble when the system
- * header files use the attribute.
- *
- * Use PERL_UNUSED_RESULT sparingly, though, since usually the warning
- * is there for a good reason: you might lose success/failure information,
- * or leak resources, or changes in resources.
- *
- * But sometimes you just want to ignore the return value, e.g. on
- * codepaths soon ending up in abort, or in "best effort" attempts,
- * or in situations where there is no good way to handle failures.
- *
- * Sometimes PERL_UNUSED_RESULT might not be the most natural way:
- * another possibility is that you can capture the return value
- * and use PERL_UNUSED_VAR on that.
- *
- * The __typeof__() is used instead of typeof() since typeof() is not
- * available under strict C89, and because of compilers masquerading
- * as gcc (clang and icc), we want exactly the gcc extension
- * __typeof__ and nothing else.
- */
+/*
+
+=for apidoc Am||PERL_UNUSED_RESULT|void x
+
+This macro indicates to discard the return value of the function call inside
+it, I<e.g.>,
+
+ PERL_UNUSED_RESULT(foo(a, b))
+
+The main reason for this is that the combination of C<gcc -Wunused-result>
+(part of C<-Wall>) and the C<__attribute__((warn_unused_result))> cannot
+be silenced with casting to C<void>.  This causes trouble when the system
+header files use the attribute.
+
+Use C<PERL_UNUSED_RESULT> sparingly, though, since usually the warning
+is there for a good reason: you might lose success/failure information,
+or leak resources, or changes in resources.
+
+But sometimes you just want to ignore the return value, I<e.g.>, on
+codepaths soon ending up in abort, or in "best effort" attempts,
+or in situations where there is no good way to handle failures.
+
+Sometimes C<PERL_UNUSED_RESULT> might not be the most natural way:
+another possibility is that you can capture the return value
+and use C<L</PERL_UNUSED_VAR>> on that.
+
+=cut
+
+The __typeof__() is used instead of typeof() since typeof() is not
+available under strict C89, and because of compilers masquerading
+as gcc (clang and icc), we want exactly the gcc extension
+__typeof__ and nothing else.
+
+*/
 #ifndef PERL_UNUSED_RESULT
 #  if defined(__GNUC__) && defined(HASATTRIBUTE_WARN_UNUSED_RESULT)
 #    define PERL_UNUSED_RESULT(v) STMT_START { __typeof__(v) z = (v); (void)sizeof(z); } STMT_END
 #  define pTHX_12      12
 #endif
 
-#ifndef dVAR
+#ifndef PERL_CORE
+/* Backwards compatibility macro for XS code. It used to be part of
+ * the PERL_GLOBAL_STRUCT(_PRIVATE) feature, which no longer exists */
 #  define dVAR         dNOOP
 #endif
 
  * PerlIO_foo() expands to PL_StdIO->pFOO(PL_StdIO, ...).
  * dTHXs is therefore needed for all functions using PerlIO_foo(). */
 #ifdef PERL_IMPLICIT_SYS
-#  ifdef PERL_GLOBAL_STRUCT_PRIVATE
-#    define dTHXs              dVAR; dTHX
-#  else
 #    define dTHXs              dTHX
-#  endif
 #else
-#  ifdef PERL_GLOBAL_STRUCT_PRIVATE
-#    define dTHXs              dVAR
-#  else
 #    define dTHXs              dNOOP
-#  endif
 #endif
 
 #if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN) && !defined(__cplusplus)
@@ -821,16 +786,6 @@ out of them.
 
 #include <sys/types.h>
 
-/* EVC 4 SDK headers includes a bad definition of MB_CUR_MAX in stdlib.h
-  which is included from stdarg.h. Bad definition not present in SD 2008
-  SDK headers. wince.h is not yet included, so we cant fix this from there
-  since by then MB_CUR_MAX will be defined from stdlib.h.
-  cewchar.h includes a correct definition of MB_CUR_MAX and it is copied here
-  since cewchar.h can't be included this early */
-#if defined(UNDER_CE) && (_MSC_VER < 1300)
-#  define MB_CUR_MAX 1uL
-#endif
-
 #  ifdef I_WCHAR
 #    include <wchar.h>
 #  endif
@@ -922,6 +877,12 @@ out of them.
 #   if !defined(NO_LOCALE_TELEPHONE) && defined(LC_TELEPHONE)
 #      define USE_LOCALE_TELEPHONE
 #   endif
+#   if !defined(NO_LOCALE_SYNTAX) && defined(LC_SYNTAX)
+#      define USE_LOCALE_SYNTAX
+#   endif
+#   if !defined(NO_LOCALE_TOD) && defined(LC_TOD)
+#      define USE_LOCALE_TOD
+#   endif
 
 /* XXX The next few defines are unfortunately duplicated in makedef.pl, and
  * changes here MUST also be made there */
@@ -1003,10 +964,6 @@ extern char **myenviron;
 #   include <sys/wait.h>
 #endif
 
-#ifdef __SYMBIAN32__
-#   undef _SC_ARG_MAX /* Symbian has _SC_ARG_MAX but no sysconf() */
-#endif
-
 #if defined(HAS_SYSCALL) && !defined(HAS_SYSCALL_PROTO)
 EXTERN_C int syscall(int, ...);
 #endif
@@ -1180,7 +1137,7 @@ EXTERN_C int usleep(unsigned int);
 #define PERL_USES_PL_PIDSTATUS
 #endif
 
-#if !defined(OS2) && !defined(WIN32) && !defined(DJGPP) && !defined(__SYMBIAN32__)
+#if !defined(OS2) && !defined(WIN32) && !defined(DJGPP)
 #define PERL_DEFAULT_DO_EXEC3_IMPLEMENTATION
 #endif
 
@@ -1225,9 +1182,7 @@ EXTERN_C int usleep(unsigned int);
 #  define Ptrdiff_t SSize_t
 #endif
 
-#ifndef __SYMBIAN32__
 #  include <string.h>
-#endif
 
 /* This comes after <stdlib.h> so we don't try to change the standard
  * library prototypes; we'll use our own in proto.h instead. */
@@ -1976,6 +1931,8 @@ typedef UVTYPE UV;
  *  For int conversions we do not need two casts if pointers are
  *  the same size as IV and UV.   Otherwise we need an explicit
  *  cast (PTRV) to avoid compiler warnings.
+ *
+ *  These are mentioned in perlguts
  */
 #if (IVSIZE == PTRSIZE) && (UVSIZE == PTRSIZE)
 #  define PTRV                 UV
@@ -2873,8 +2830,6 @@ typedef struct padname PADNAME;
 #   else
 #     include "vos/vosish.h"
 #   endif
-#elif defined(__SYMBIAN32__)
-#   include "symbian/symbianish.h"
 #elif defined(__HAIKU__)
 #   include "haiku/haikuish.h"
 #else
@@ -3094,12 +3049,6 @@ freeing any remaining Perl interpreters.
 #  endif
 #endif
 
-/* USE_5005THREADS needs to be after unixish.h as <pthread.h> includes
- * <sys/signal.h> which defines NSIG - which will stop inclusion of <signal.h>
- * this results in many functions being undeclared which bothers C++
- * May make sense to have threads after "*ish.h" anyway
- */
-
 /* clang Thread Safety Analysis/Annotations/Attributes
  * http://clang.llvm.org/docs/ThreadSafetyAnalysis.html
  *
@@ -3110,8 +3059,6 @@ freeing any remaining Perl interpreters.
  */
 #if defined(USE_ITHREADS) && defined(I_PTHREAD) && \
     defined(__clang__) && \
-    !defined(PERL_GLOBAL_STRUCT) && \
-    !defined(PERL_GLOBAL_STRUCT_PRIVATE) && \
     !defined(SWIG) && \
   ((!defined(__apple_build_version__) &&               \
     ((__clang_major__ == 3 && __clang_minor__ >= 6) || \
@@ -3825,7 +3772,7 @@ typedef I32 (*filter_t) (pTHX_ int, SV *, int);
                && idx >= AvFILLp(PL_parser->rsfp_filters))
 #define PERL_FILTER_EXISTS(i) \
            (PL_parser && PL_parser->rsfp_filters \
-               && (i) <= av_tindex(PL_parser->rsfp_filters))
+               && (i) < av_count(PL_parser->rsfp_filters))
 
 #if defined(_AIX) && !defined(_AIX43)
 #if defined(USE_REENTRANT) || defined(_REENTRANT) || defined(_THREAD_SAFE)
@@ -4131,7 +4078,7 @@ my_swap16(const U16 x) {
 #endif
 
 #ifndef __cplusplus
-#if !(defined(WIN32) || defined(SYMBIAN))
+#if !defined(WIN32)
 Uid_t getuid (void);
 Uid_t geteuid (void);
 Gid_t getgid (void);
@@ -4794,10 +4741,10 @@ EXTCONST int         PL_sig_num[];
  * folds such as outside the range or to multiple characters. */
 
 #ifdef DOINIT
-#ifndef EBCDIC
+#  ifndef EBCDIC
 
 /* The EBCDIC fold table depends on the code page, and hence is found in
- * utfebcdic.h */
+ * ebcdic_tables.h */
 
 EXTCONST  unsigned char PL_fold[] = {
        0,      1,      2,      3,      4,      5,      6,      7,
@@ -4833,6 +4780,42 @@ EXTCONST  unsigned char PL_fold[] = {
        240,    241,    242,    243,    244,    245,    246,    247,
        248,    249,    250,    251,    252,    253,    254,    255
 };
+
+EXT unsigned char PL_fold_locale[] = { /* Unfortunately not EXTCONST. */
+       0,      1,      2,      3,      4,      5,      6,      7,
+       8,      9,      10,     11,     12,     13,     14,     15,
+       16,     17,     18,     19,     20,     21,     22,     23,
+       24,     25,     26,     27,     28,     29,     30,     31,
+       32,     33,     34,     35,     36,     37,     38,     39,
+       40,     41,     42,     43,     44,     45,     46,     47,
+       48,     49,     50,     51,     52,     53,     54,     55,
+       56,     57,     58,     59,     60,     61,     62,     63,
+       64,     'a',    'b',    'c',    'd',    'e',    'f',    'g',
+       'h',    'i',    'j',    'k',    'l',    'm',    'n',    'o',
+       'p',    'q',    'r',    's',    't',    'u',    'v',    'w',
+       'x',    'y',    'z',    91,     92,     93,     94,     95,
+       96,     'A',    'B',    'C',    'D',    'E',    'F',    'G',
+       'H',    'I',    'J',    'K',    'L',    'M',    'N',    'O',
+       'P',    'Q',    'R',    'S',    'T',    'U',    'V',    'W',
+       'X',    'Y',    'Z',    123,    124,    125,    126,    127,
+       128,    129,    130,    131,    132,    133,    134,    135,
+       136,    137,    138,    139,    140,    141,    142,    143,
+       144,    145,    146,    147,    148,    149,    150,    151,
+       152,    153,    154,    155,    156,    157,    158,    159,
+       160,    161,    162,    163,    164,    165,    166,    167,
+       168,    169,    170,    171,    172,    173,    174,    175,
+       176,    177,    178,    179,    180,    181,    182,    183,
+       184,    185,    186,    187,    188,    189,    190,    191,
+       192,    193,    194,    195,    196,    197,    198,    199,
+       200,    201,    202,    203,    204,    205,    206,    207,
+       208,    209,    210,    211,    212,    213,    214,    215,
+       216,    217,    218,    219,    220,    221,    222,    223,
+       224,    225,    226,    227,    228,    229,    230,    231,
+       232,    233,    234,    235,    236,    237,    238,    239,
+       240,    241,    242,    243,    244,    245,    246,    247,
+       248,    249,    250,    251,    252,    253,    254,    255
+};
+
 EXTCONST  unsigned char PL_fold_latin1[] = {
     /* Full latin1 complement folding, except for three problematic code points:
      * Micro sign (181 = 0xB5) and y with diearesis (255 = 0xFF) have their
@@ -4945,145 +4928,29 @@ EXTCONST  unsigned char PL_mod_latin1_uc[] = {
        200,    201,    202,    203,    204,    205,    206,    207,
        208,    209,    210,    211,    212,    213,    214,    215,
        216,    217,    218,    219,    220,    221,    222,
-#if    UNICODE_MAJOR_VERSION > 2                                        \
-   || (UNICODE_MAJOR_VERSION == 2 && UNICODE_DOT_VERSION >= 1          \
-                                  && UNICODE_DOT_DOT_VERSION >= 8)
+#    if    UNICODE_MAJOR_VERSION > 2                                        \
+       || (UNICODE_MAJOR_VERSION == 2 && UNICODE_DOT_VERSION >= 1           \
+                                      && UNICODE_DOT_DOT_VERSION >= 8)
                                                                255 /*sharp s*/,
-#else   /* uc(sharp s) is 'sharp s' itself in early unicode */
+#    else   /* uc(sharp s) is 'sharp s' itself in early unicode */
                                                                223,
-#endif
+#    endif
        224-32, 225-32, 226-32, 227-32, 228-32, 229-32, 230-32, 231-32,
        232-32, 233-32, 234-32, 235-32, 236-32, 237-32, 238-32, 239-32,
        240-32, 241-32, 242-32, 243-32, 244-32, 245-32, 246-32, 247,
        248-32, 249-32, 250-32, 251-32, 252-32, 253-32, 254-32, 255
 };
-#endif  /* !EBCDIC, but still in DOINIT */
+#  endif  /* !EBCDIC, but still in DOINIT */
 #else  /* ! DOINIT */
-#   ifndef EBCDIC
+#  ifndef EBCDIC
 EXTCONST unsigned char PL_fold[];
 EXTCONST unsigned char PL_fold_latin1[];
 EXTCONST unsigned char PL_mod_latin1_uc[];
 EXTCONST unsigned char PL_latin1_lc[];
+EXT      unsigned char PL_fold_locale[]; /* Unfortunately not EXTCONST. */
 #   endif
 #endif
 
-#ifndef PERL_GLOBAL_STRUCT /* or perlvars.h */
-#ifdef DOINIT
-EXT unsigned char PL_fold_locale[256] = { /* Unfortunately not EXTCONST. */
-       0,      1,      2,      3,      4,      5,      6,      7,
-       8,      9,      10,     11,     12,     13,     14,     15,
-       16,     17,     18,     19,     20,     21,     22,     23,
-       24,     25,     26,     27,     28,     29,     30,     31,
-       32,     33,     34,     35,     36,     37,     38,     39,
-       40,     41,     42,     43,     44,     45,     46,     47,
-       48,     49,     50,     51,     52,     53,     54,     55,
-       56,     57,     58,     59,     60,     61,     62,     63,
-       64,     'a',    'b',    'c',    'd',    'e',    'f',    'g',
-       'h',    'i',    'j',    'k',    'l',    'm',    'n',    'o',
-       'p',    'q',    'r',    's',    't',    'u',    'v',    'w',
-       'x',    'y',    'z',    91,     92,     93,     94,     95,
-       96,     'A',    'B',    'C',    'D',    'E',    'F',    'G',
-       'H',    'I',    'J',    'K',    'L',    'M',    'N',    'O',
-       'P',    'Q',    'R',    'S',    'T',    'U',    'V',    'W',
-       'X',    'Y',    'Z',    123,    124,    125,    126,    127,
-       128,    129,    130,    131,    132,    133,    134,    135,
-       136,    137,    138,    139,    140,    141,    142,    143,
-       144,    145,    146,    147,    148,    149,    150,    151,
-       152,    153,    154,    155,    156,    157,    158,    159,
-       160,    161,    162,    163,    164,    165,    166,    167,
-       168,    169,    170,    171,    172,    173,    174,    175,
-       176,    177,    178,    179,    180,    181,    182,    183,
-       184,    185,    186,    187,    188,    189,    190,    191,
-       192,    193,    194,    195,    196,    197,    198,    199,
-       200,    201,    202,    203,    204,    205,    206,    207,
-       208,    209,    210,    211,    212,    213,    214,    215,
-       216,    217,    218,    219,    220,    221,    222,    223,    
-       224,    225,    226,    227,    228,    229,    230,    231,
-       232,    233,    234,    235,    236,    237,    238,    239,
-       240,    241,    242,    243,    244,    245,    246,    247,
-       248,    249,    250,    251,    252,    253,    254,    255
-};
-#else
-EXT unsigned char PL_fold_locale[256]; /* Unfortunately not EXTCONST. */
-#endif
-#endif /* !PERL_GLOBAL_STRUCT */
-
-#ifdef DOINIT
-#ifdef EBCDIC
-EXTCONST unsigned char PL_freq[] = {/* EBCDIC frequencies for mixed English/C */
-    1,      2,      84,     151,    154,    155,    156,    157,
-    165,    246,    250,    3,      158,    7,      18,     29,
-    40,     51,     62,     73,     85,     96,     107,    118,
-    129,    140,    147,    148,    149,    150,    152,    153,
-    255,      6,      8,      9,     10,     11,     12,     13,
-     14,     15,     24,     25,     26,     27,     28,    226,
-     29,     30,     31,     32,     33,     43,     44,     45,
-     46,     47,     48,     49,     50,     76,     77,     78,
-     79,     80,     81,     82,     83,     84,     85,     86,
-     87,     94,     95,    234,    181,    233,    187,    190,
-    180,     96,     97,     98,     99,    100,    101,    102,
-    104,    112,    182,    174,    236,    232,    229,    103,
-    228,    226,    114,    115,    116,    117,    118,    119,
-    120,    121,    122,    235,    176,    230,    194,    162,
-    130,    131,    132,    133,    134,    135,    136,    137,
-    138,    139,    201,    205,    163,    217,    220,    224,
-    5,      248,    227,    244,    242,    255,    241,    231,
-    240,    253,    16,     197,    19,     20,     21,     187,
-    23,     169,    210,    245,    237,    249,    247,    239,
-    168,    252,    34,     196,    36,     37,     38,     39,
-    41,     42,     251,    254,    238,    223,    221,    213,
-    225,    177,    52,     53,     54,     55,     56,     57,
-    58,     59,     60,     61,     63,     64,     65,     66,
-    67,     68,     69,     70,     71,     72,     74,     75,
-    205,    208,    186,    202,    200,    218,    198,    179,
-    178,    214,    88,     89,     90,     91,     92,     93,
-    217,    166,    170,    207,    199,    209,    206,    204,
-    160,    212,    105,    106,    108,    109,    110,    111,
-    203,    113,    216,    215,    192,    175,    193,    243,
-    172,    161,    123,    124,    125,    126,    127,    128,
-    222,    219,    211,    195,    188,    193,    185,    184,
-    191,    183,    141,    142,    143,    144,    145,    146
-};
-#else  /* ascii rather than ebcdic */
-EXTCONST unsigned char PL_freq[] = {   /* letter frequencies for mixed English/C */
-       1,      2,      84,     151,    154,    155,    156,    157,
-       165,    246,    250,    3,      158,    7,      18,     29,
-       40,     51,     62,     73,     85,     96,     107,    118,
-       129,    140,    147,    148,    149,    150,    152,    153,
-       255,    182,    224,    205,    174,    176,    180,    217,
-       233,    232,    236,    187,    235,    228,    234,    226,
-       222,    219,    211,    195,    188,    193,    185,    184,
-       191,    183,    201,    229,    181,    220,    194,    162,
-       163,    208,    186,    202,    200,    218,    198,    179,
-       178,    214,    166,    170,    207,    199,    209,    206,
-       204,    160,    212,    216,    215,    192,    175,    173,
-       243,    172,    161,    190,    203,    189,    164,    230,
-       167,    248,    227,    244,    242,    255,    241,    231,
-       240,    253,    169,    210,    245,    237,    249,    247,
-       239,    168,    252,    251,    254,    238,    223,    221,
-       213,    225,    177,    197,    171,    196,    159,    4,
-       5,      6,      8,      9,      10,     11,     12,     13,
-       14,     15,     16,     17,     19,     20,     21,     22,
-       23,     24,     25,     26,     27,     28,     30,     31,
-       32,     33,     34,     35,     36,     37,     38,     39,
-       41,     42,     43,     44,     45,     46,     47,     48,
-       49,     50,     52,     53,     54,     55,     56,     57,
-       58,     59,     60,     61,     63,     64,     65,     66,
-       67,     68,     69,     70,     71,     72,     74,     75,
-       76,     77,     78,     79,     80,     81,     82,     83,
-       86,     87,     88,     89,     90,     91,     92,     93,
-       94,     95,     97,     98,     99,     100,    101,    102,
-       103,    104,    105,    106,    108,    109,    110,    111,
-       112,    113,    114,    115,    116,    117,    119,    120,
-       121,    122,    123,    124,    125,    126,    127,    128,
-       130,    131,    132,    133,    134,    135,    136,    137,
-       138,    139,    141,    142,    143,    144,    145,    146
-};
-#endif
-#else
-EXTCONST unsigned char PL_freq[];
-#endif
-
 /* Although only used for debugging, these constants must be available in
  * non-debugging builds too, since they're used in ext/re/re_exec.c,
  * which has DEBUGGING enabled always */
@@ -5120,9 +4987,6 @@ EXTCONST char PL_bincompat_options[] =
 #  ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
                             " DEBUG_LEAKING_SCALARS_FORK_DUMP"
 #  endif
-#  ifdef FCRYPT
-                            " FCRYPT"
-#  endif
 #  ifdef HAS_TIMES
                             " HAS_TIMES"
 #  endif
@@ -5144,12 +5008,6 @@ EXTCONST char PL_bincompat_options[] =
 #  ifdef PERL_DEBUG_READONLY_OPS
                             " PERL_DEBUG_READONLY_OPS"
 #  endif
-#  ifdef PERL_GLOBAL_STRUCT
-                            " PERL_GLOBAL_STRUCT"
-#  endif
-#  ifdef PERL_GLOBAL_STRUCT_PRIVATE
-                            " PERL_GLOBAL_STRUCT_PRIVATE"
-#  endif
 #  ifdef PERL_IMPLICIT_CONTEXT
                             " PERL_IMPLICIT_CONTEXT"
 #  endif
@@ -5159,12 +5017,6 @@ EXTCONST char PL_bincompat_options[] =
 #  ifdef PERL_MICRO
                             " PERL_MICRO"
 #  endif
-#  ifdef PERL_NEED_APPCTX
-                            " PERL_NEED_APPCTX"
-#  endif
-#  ifdef PERL_NEED_TIMESBASE
-                            " PERL_NEED_TIMESBASE"
-#  endif
 #  ifdef PERL_POISON
                             " PERL_POISON"
 #  endif
@@ -5358,7 +5210,7 @@ typedef enum {
 
 #define HINT_RE_FLAGS          0x02000000 /* re '/xism' pragma */
 
-#define HINT_FEATURE_MASK      0x1c000000 /* 3 bits for feature bundles */
+#define HINT_FEATURE_MASK      0x3c000000 /* 4 bits for feature bundles */
 
                                /* Note: Used for HINT_M_VMSISH_*,
                                   currently defined by vms/vmsish.h:
@@ -5505,34 +5357,6 @@ EXTCONST U16 PL_interp_size_5_18_0
   INIT(PERL_INTERPRETER_SIZE_UPTO_MEMBER(PERL_LAST_5_18_0_INTERP_MEMBER));
 
 
-#  ifdef PERL_GLOBAL_STRUCT
-/* MULTIPLICITY is automatically defined when PERL_GLOBAL_STRUCT is defined,
-   hence it's safe and sane to nest this within #ifdef MULTIPLICITY  */
-
-struct perl_vars {
-#    include "perlvars.h"
-};
-
-EXTCONST U16 PL_global_struct_size
-  INIT(sizeof(struct perl_vars));
-
-#    ifdef PERL_CORE
-#      ifndef PERL_GLOBAL_STRUCT_PRIVATE
-EXT struct perl_vars PL_Vars;
-EXT struct perl_vars *PL_VarsPtr INIT(&PL_Vars);
-#        undef PERL_GET_VARS
-#        define PERL_GET_VARS() PL_VarsPtr
-#      endif /* !PERL_GLOBAL_STRUCT_PRIVATE */
-#    else /* PERL_CORE */
-#      if !defined(__GNUC__) || !defined(WIN32)
-EXT
-#      endif /* WIN32 */
-struct perl_vars *PL_VarsPtr;
-#      define PL_Vars (*((PL_VarsPtr) \
-                      ? PL_VarsPtr : (PL_VarsPtr = Perl_GetVars(aTHX))))
-#    endif /* PERL_CORE */
-#  endif /* PERL_GLOBAL_STRUCT */
-
 /* Done with PERLVAR macros for now ... */
 #  undef PERLVAR
 #  undef PERLVARA
@@ -5605,13 +5429,11 @@ END_EXTERN_C
    define HAVE_INTERP_INTERN  */
 #include "embed.h"
 
-#ifndef PERL_GLOBAL_STRUCT
 START_EXTERN_C
 
 #  include "perlvars.h"
 
 END_EXTERN_C
-#endif
 
 #undef PERLVAR
 #undef PERLVARA
@@ -7049,15 +6871,9 @@ C<strtoul>.
 /* START_MY_CXT must appear in all extensions that define a my_cxt_t structure,
  * right after the definition (i.e. at file scope).  The non-threads
  * case below uses it to declare the data as static. */
-#  ifdef PERL_GLOBAL_STRUCT_PRIVATE
-#    define START_MY_CXT
-#    define MY_CXT_INDEX Perl_my_cxt_index(aTHX_ MY_CXT_KEY)
-#    define MY_CXT_INIT_ARG MY_CXT_KEY
-#  else
 #    define START_MY_CXT static int my_cxt_index = -1;
 #    define MY_CXT_INDEX my_cxt_index
 #    define MY_CXT_INIT_ARG &my_cxt_index
-#  endif /* #ifdef PERL_GLOBAL_STRUCT_PRIVATE */
 
 /* Creates and zeroes the per-interpreter data.
  * (We allocate my_cxtp in a Perl SV so that it will be released when
@@ -7299,6 +7115,14 @@ extern void moncontrol(int);
 #define PERL_UNICODE_WIDESYSCALLS              'W'
 #define PERL_UNICODE_UTF8CACHEASSERT           'a'
 
+/*
+=for apidoc Amn|U32|PERL_SIGNALS_UNSAFE_FLAG
+If this bit in C<PL_signals> is set, the system is uing the pre-Perl 5.8
+unsafe signals.  See L<perlrun/PERL_SIGNALS> and L<perlipc/Deferred Signals
+(Safe Signals)>.
+
+=cut
+*/
 #define PERL_SIGNALS_UNSAFE_FLAG       0x0001
 
 /*
diff --git a/perl_siphash.h b/perl_siphash.h
new file mode 100644 (file)
index 0000000..d3d71e7
--- /dev/null
@@ -0,0 +1,127 @@
+/* This is SipHash by Jean-Philippe Aumasson and Daniel J. Bernstein.
+ * The authors claim it is relatively secure compared to the alternatives
+ * and that performance wise it is a suitable hash for languages like Perl.
+ * See:
+ *
+ * https://www.131002.net/siphash/
+ *
+ * This implementation seems to perform slightly slower than one-at-a-time for
+ * short keys, but degrades slower for longer keys. Murmur Hash outperforms it
+ * regardless of keys size.
+ *
+ * It is 64 bit only.
+ */
+
+#ifdef CAN64BITHASH
+
+#define SIPROUND            \
+  STMT_START {              \
+    v0 += v1; v1=ROTL64(v1,13); v1 ^= v0; v0=ROTL64(v0,32); \
+    v2 += v3; v3=ROTL64(v3,16); v3 ^= v2;     \
+    v0 += v3; v3=ROTL64(v3,21); v3 ^= v0;     \
+    v2 += v1; v1=ROTL64(v1,17); v1 ^= v2; v2=ROTL64(v2,32); \
+  } STMT_END
+
+#define SIPHASH_SEED_STATE(key,v0,v1,v2,v3) \
+do {                                    \
+    v0 = v2 = U8TO64_LE(key + 0);       \
+    v1 = v3 = U8TO64_LE(key + 8);       \
+  /* "somepseudorandomlygeneratedbytes" */  \
+    v0 ^= UINT64_C(0x736f6d6570736575);  \
+    v1 ^= UINT64_C(0x646f72616e646f6d);      \
+    v2 ^= UINT64_C(0x6c7967656e657261);      \
+    v3 ^= UINT64_C(0x7465646279746573);      \
+} while (0)
+
+PERL_STATIC_INLINE
+void S_perl_siphash_seed_state(const unsigned char * const seed_buf, unsigned char * state_buf) {
+    U64 *v= (U64*) state_buf;
+    SIPHASH_SEED_STATE(seed_buf, v[0],v[1],v[2],v[3]);
+}
+
+#define PERL_SIPHASH_FNC(FNC,SIP_ROUNDS,SIP_FINAL_ROUNDS) \
+PERL_STATIC_INLINE U64 \
+FNC ## _with_state_64 \
+  (const unsigned char * const state, const unsigned char *in, const STRLEN inlen) \
+{                                           \
+  const int left = inlen & 7;               \
+  const U8 *end = in + inlen - left;        \
+                                            \
+  U64 b = ( ( U64 )(inlen) ) << 56;         \
+  U64 m;                                    \
+  U64 v0 = U8TO64_LE(state);                \
+  U64 v1 = U8TO64_LE(state+8);              \
+  U64 v2 = U8TO64_LE(state+16);             \
+  U64 v3 = U8TO64_LE(state+24);             \
+                                            \
+  for ( ; in != end; in += 8 )              \
+  {                                         \
+    m = U8TO64_LE( in );                    \
+    v3 ^= m;                                \
+                                            \
+    SIP_ROUNDS;                             \
+                                            \
+    v0 ^= m;                                \
+  }                                         \
+                                            \
+  switch( left )                            \
+  {                                         \
+  case 7: b |= ( ( U64 )in[ 6] )  << 48; /*FALLTHROUGH*/    \
+  case 6: b |= ( ( U64 )in[ 5] )  << 40; /*FALLTHROUGH*/    \
+  case 5: b |= ( ( U64 )in[ 4] )  << 32; /*FALLTHROUGH*/    \
+  case 4: b |= ( ( U64 )in[ 3] )  << 24; /*FALLTHROUGH*/    \
+  case 3: b |= ( ( U64 )in[ 2] )  << 16; /*FALLTHROUGH*/    \
+  case 2: b |= ( ( U64 )in[ 1] )  <<  8; /*FALLTHROUGH*/    \
+  case 1: b |= ( ( U64 )in[ 0] ); break;    \
+  case 0: break;                            \
+  }                                         \
+                                            \
+  v3 ^= b;                                  \
+                                            \
+  SIP_ROUNDS;                               \
+                                            \
+  v0 ^= b;                                  \
+                                            \
+  v2 ^= 0xff;                               \
+                                            \
+  SIP_FINAL_ROUNDS                          \
+                                            \
+  b = v0 ^ v1 ^ v2  ^ v3;                   \
+  return b;                                 \
+}                                           \
+                                            \
+PERL_STATIC_INLINE U32                      \
+FNC ## _with_state                          \
+  (const unsigned char * const state, const unsigned char *in, const STRLEN inlen) \
+{                                           \
+    union {                                 \
+        U64 h64;                            \
+        U32 h32[2];                         \
+    } h;                                    \
+    h.h64= FNC ## _with_state_64(state,in,inlen); \
+    return h.h32[0] ^ h.h32[1];             \
+}                                           \
+                                            \
+                                            \
+PERL_STATIC_INLINE U32                      \
+FNC (const unsigned char * const seed, const unsigned char *in, const STRLEN inlen) \
+{                                                                   \
+    U64 state[4];                                                   \
+    SIPHASH_SEED_STATE(seed,state[0],state[1],state[2],state[3]);   \
+    return FNC ## _with_state((U8*)state,in,inlen);                 \
+}
+
+
+PERL_SIPHASH_FNC(
+    S_perl_hash_siphash_1_3
+    ,SIPROUND;
+    ,SIPROUND;SIPROUND;SIPROUND;
+)
+
+PERL_SIPHASH_FNC(
+    S_perl_hash_siphash_2_4
+    ,SIPROUND;SIPROUND;
+    ,SIPROUND;SIPROUND;SIPROUND;SIPROUND;
+)
+
+#endif /* defined(CAN64BITHASH) */
diff --git a/perlapi.c b/perlapi.c
deleted file mode 100644 (file)
index 7858337..0000000
--- a/perlapi.c
+++ /dev/null
@@ -1,60 +0,0 @@
-/* -*- buffer-read-only: t -*-
- *
- *    perlapi.c
- *
- *    Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
- *    2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 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.
- *
- * !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!!
- * This file is built by regen/embed.pl from data in embed.fnc,
- * regen/embed.pl, regen/opcodes, intrpvar.h and perlvars.h.
- * Any changes made here will be lost!
- *
- * Edit those files and run 'make regen_headers' to effect changes.
- *
- *
- * Up to the threshold of the door there mounted a flight of twenty-seven
- * broad stairs, hewn by some unknown art of the same black stone.  This
- * was the only entrance to the tower; ...
- *
- *     [p.577 of _The Lord of the Rings_, III/x: "The Voice of Saruman"]
- *
- */
-
-#include "EXTERN.h"
-#include "perl.h"
-#include "perlapi.h"
-
-#if defined (MULTIPLICITY) && defined (PERL_GLOBAL_STRUCT)
-
-/* accessor functions for Perl "global" variables */
-START_EXTERN_C
-
-#undef PERLVARI
-#define PERLVARI(p,v,t,i) PERLVAR(p,v,t)
-
-#undef PERLVAR
-#undef PERLVARA
-#define PERLVAR(p,v,t)         t* Perl_##p##v##_ptr(pTHX)              \
-                       { dVAR; PERL_UNUSED_CONTEXT; return &(PL_##v); }
-#define PERLVARA(p,v,n,t)      PL_##v##_t* Perl_##p##v##_ptr(pTHX)     \
-                       { dVAR; PERL_UNUSED_CONTEXT; return &(PL_##v); }
-#undef PERLVARIC
-#define PERLVARIC(p,v,t,i)     \
-                       const t* Perl_##p##v##_ptr(pTHX)                \
-                       { PERL_UNUSED_CONTEXT; return (const t *)&(PL_##v); }
-#include "perlvars.h"
-
-#undef PERLVAR
-#undef PERLVARA
-#undef PERLVARI
-#undef PERLVARIC
-
-END_EXTERN_C
-
-#endif /* MULTIPLICITY && PERL_GLOBAL_STRUCT */
-
-/* ex: set ro: */
index 305c11d..0d66a68 100644 (file)
--- a/perlapi.h
+++ b/perlapi.h
@@ -1,4 +1,4 @@
-/* -*- buffer-read-only: t -*-
+/*
  *
  *    perlapi.h
  *
  *    You may distribute under the terms of either the GNU General Public
  *    License or the Artistic License, as specified in the README file.
  *
- * !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!!
- * This file is built by regen/embed.pl from data in embed.fnc,
- * regen/embed.pl, regen/opcodes, intrpvar.h and perlvars.h.
- * Any changes made here will be lost!
- *
- * Edit those files and run 'make regen_headers' to effect changes.
  */
 
-/* declare accessor functions for Perl variables */
+/*
+ * This file used to declare accessor functions for Perl variables
+ * when PERL_GLOBAL_STRUCT was enabled, but that no longer exists.
+ * This file is kept for backwards compatiblity with XS code that
+ * might include it.
+ */
 #ifndef __perlapi_h__
 #define __perlapi_h__
 
-#if defined (MULTIPLICITY) && defined (PERL_GLOBAL_STRUCT)
-
-START_EXTERN_C
-
-#undef PERLVAR
-#undef PERLVARA
-#undef PERLVARI
-#undef PERLVARIC
-#define PERLVAR(p,v,t) EXTERN_C t* Perl_##p##v##_ptr(pTHX);
-#define PERLVARA(p,v,n,t)      typedef t PL_##v##_t[n];                \
-                       EXTERN_C PL_##v##_t* Perl_##p##v##_ptr(pTHX);
-#define PERLVARI(p,v,t,i)      PERLVAR(p,v,t)
-#define PERLVARIC(p,v,t,i) PERLVAR(p,v, const t)
-
-#include "perlvars.h"
-
-#undef PERLVAR
-#undef PERLVARA
-#undef PERLVARI
-#undef PERLVARIC
-
-END_EXTERN_C
-
-#if defined(PERL_CORE)
-
-/* accessor functions for Perl "global" variables */
-
-/* these need to be mentioned here, or most linkers won't put them in
-   the perl executable */
-
-#ifndef PERL_NO_FORCE_LINK
-
-START_EXTERN_C
-
-#ifndef DOINIT
-EXTCONST void * const PL_force_link_funcs[];
-#else
-EXTCONST void * const PL_force_link_funcs[] = {
-#undef PERLVAR
-#undef PERLVARA
-#undef PERLVARI
-#undef PERLVARIC
-#define PERLVAR(p,v,t)         (void*)Perl_##p##v##_ptr,
-#define PERLVARA(p,v,n,t)      PERLVAR(p,v,t)
-#define PERLVARI(p,v,t,i)      PERLVAR(p,v,t)
-#define PERLVARIC(p,v,t,i)     PERLVAR(p,v,t)
-
-/* In Tru64 (__DEC && __osf__) the cc option -std1 causes that one
- * cannot cast between void pointers and function pointers without
- * info level warnings.  The PL_force_link_funcs[] would cause a few
- * hundred of those warnings.  In code one can circumnavigate this by using
- * unions that overlay the different pointers, but in declarations one
- * cannot use this trick.  Therefore we just disable the warning here
- * for the duration of the PL_force_link_funcs[] declaration. */
-
-#if defined(__DECC) && defined(__osf__)
-#pragma message save
-#pragma message disable (nonstandcast)
-#endif
-
-#include "perlvars.h"
-
-#if defined(__DECC) && defined(__osf__)
-#pragma message restore
-#endif
-
-#undef PERLVAR
-#undef PERLVARA
-#undef PERLVARI
-#undef PERLVARIC
-};
-#endif /* DOINIT */
-
-END_EXTERN_C
-
-#endif /* PERL_NO_FORCE_LINK */
-
-#else  /* !PERL_CORE */
-
-#undef  PL_C_locale_obj
-#define PL_C_locale_obj                (*Perl_GC_locale_obj_ptr(NULL))
-#undef  PL_appctx
-#define PL_appctx              (*Perl_Gappctx_ptr(NULL))
-#undef  PL_check
-#define PL_check               (*Perl_Gcheck_ptr(NULL))
-#undef  PL_check_mutex
-#define PL_check_mutex         (*Perl_Gcheck_mutex_ptr(NULL))
-#undef  PL_csighandler1p
-#define PL_csighandler1p       (*Perl_Gcsighandler1p_ptr(NULL))
-#undef  PL_csighandler3p
-#define PL_csighandler3p       (*Perl_Gcsighandler3p_ptr(NULL))
-#undef  PL_csighandlerp
-#define PL_csighandlerp                (*Perl_Gcsighandlerp_ptr(NULL))
-#undef  PL_curinterp
-#define PL_curinterp           (*Perl_Gcurinterp_ptr(NULL))
-#undef  PL_do_undump
-#define PL_do_undump           (*Perl_Gdo_undump_ptr(NULL))
-#undef  PL_dollarzero_mutex
-#define PL_dollarzero_mutex    (*Perl_Gdollarzero_mutex_ptr(NULL))
-#undef  PL_env_mutex
-#define PL_env_mutex           (*Perl_Genv_mutex_ptr(NULL))
-#undef  PL_fold_locale
-#define PL_fold_locale         (*Perl_Gfold_locale_ptr(NULL))
-#undef  PL_hash_chars
-#define PL_hash_chars          (*Perl_Ghash_chars_ptr(NULL))
-#undef  PL_hash_seed
-#define PL_hash_seed           (*Perl_Ghash_seed_ptr(NULL))
-#undef  PL_hash_seed_set
-#define PL_hash_seed_set       (*Perl_Ghash_seed_set_ptr(NULL))
-#undef  PL_hash_state
-#define PL_hash_state          (*Perl_Ghash_state_ptr(NULL))
-#undef  PL_hints_mutex
-#define PL_hints_mutex         (*Perl_Ghints_mutex_ptr(NULL))
-#undef  PL_keyword_plugin
-#define PL_keyword_plugin      (*Perl_Gkeyword_plugin_ptr(NULL))
-#undef  PL_keyword_plugin_mutex
-#define PL_keyword_plugin_mutex        (*Perl_Gkeyword_plugin_mutex_ptr(NULL))
-#undef  PL_lc_numeric_mutex
-#define PL_lc_numeric_mutex    (*Perl_Glc_numeric_mutex_ptr(NULL))
-#undef  PL_locale_mutex
-#define PL_locale_mutex                (*Perl_Glocale_mutex_ptr(NULL))
-#undef  PL_malloc_mutex
-#define PL_malloc_mutex                (*Perl_Gmalloc_mutex_ptr(NULL))
-#undef  PL_mmap_page_size
-#define PL_mmap_page_size      (*Perl_Gmmap_page_size_ptr(NULL))
-#undef  PL_my_ctx_mutex
-#define PL_my_ctx_mutex                (*Perl_Gmy_ctx_mutex_ptr(NULL))
-#undef  PL_my_cxt_index
-#define PL_my_cxt_index                (*Perl_Gmy_cxt_index_ptr(NULL))
-#undef  PL_my_cxt_keys
-#define PL_my_cxt_keys         (*Perl_Gmy_cxt_keys_ptr(NULL))
-#undef  PL_my_cxt_keys_size
-#define PL_my_cxt_keys_size    (*Perl_Gmy_cxt_keys_size_ptr(NULL))
-#undef  PL_op_mutex
-#define PL_op_mutex            (*Perl_Gop_mutex_ptr(NULL))
-#undef  PL_op_seq
-#define PL_op_seq              (*Perl_Gop_seq_ptr(NULL))
-#undef  PL_op_sequence
-#define PL_op_sequence         (*Perl_Gop_sequence_ptr(NULL))
-#undef  PL_perlio_debug_fd
-#define PL_perlio_debug_fd     (*Perl_Gperlio_debug_fd_ptr(NULL))
-#undef  PL_perlio_fd_refcnt
-#define PL_perlio_fd_refcnt    (*Perl_Gperlio_fd_refcnt_ptr(NULL))
-#undef  PL_perlio_fd_refcnt_size
-#define PL_perlio_fd_refcnt_size       (*Perl_Gperlio_fd_refcnt_size_ptr(NULL))
-#undef  PL_perlio_mutex
-#define PL_perlio_mutex                (*Perl_Gperlio_mutex_ptr(NULL))
-#undef  PL_perllib_sep
-#define PL_perllib_sep         (*Perl_Gperllib_sep_ptr(NULL))
-#undef  PL_ppaddr
-#define PL_ppaddr              (*Perl_Gppaddr_ptr(NULL))
-#undef  PL_sh_path
-#define PL_sh_path             (*Perl_Gsh_path_ptr(NULL))
-#undef  PL_sig_defaulting
-#define PL_sig_defaulting      (*Perl_Gsig_defaulting_ptr(NULL))
-#undef  PL_sig_handlers_initted
-#define PL_sig_handlers_initted        (*Perl_Gsig_handlers_initted_ptr(NULL))
-#undef  PL_sig_ignoring
-#define PL_sig_ignoring                (*Perl_Gsig_ignoring_ptr(NULL))
-#undef  PL_sig_trapped
-#define PL_sig_trapped         (*Perl_Gsig_trapped_ptr(NULL))
-#undef  PL_sigfpe_saved
-#define PL_sigfpe_saved                (*Perl_Gsigfpe_saved_ptr(NULL))
-#undef  PL_strategy_accept
-#define PL_strategy_accept     (*Perl_Gstrategy_accept_ptr(NULL))
-#undef  PL_strategy_dup
-#define PL_strategy_dup                (*Perl_Gstrategy_dup_ptr(NULL))
-#undef  PL_strategy_dup2
-#define PL_strategy_dup2       (*Perl_Gstrategy_dup2_ptr(NULL))
-#undef  PL_strategy_mkstemp
-#define PL_strategy_mkstemp    (*Perl_Gstrategy_mkstemp_ptr(NULL))
-#undef  PL_strategy_open
-#define PL_strategy_open       (*Perl_Gstrategy_open_ptr(NULL))
-#undef  PL_strategy_open3
-#define PL_strategy_open3      (*Perl_Gstrategy_open3_ptr(NULL))
-#undef  PL_strategy_pipe
-#define PL_strategy_pipe       (*Perl_Gstrategy_pipe_ptr(NULL))
-#undef  PL_strategy_socket
-#define PL_strategy_socket     (*Perl_Gstrategy_socket_ptr(NULL))
-#undef  PL_strategy_socketpair
-#define PL_strategy_socketpair (*Perl_Gstrategy_socketpair_ptr(NULL))
-#undef  PL_sv_placeholder
-#define PL_sv_placeholder      (*Perl_Gsv_placeholder_ptr(NULL))
-#undef  PL_thr_key
-#define PL_thr_key             (*Perl_Gthr_key_ptr(NULL))
-#undef  PL_timesbase
-#define PL_timesbase           (*Perl_Gtimesbase_ptr(NULL))
-#undef  PL_use_safe_putenv
-#define PL_use_safe_putenv     (*Perl_Guse_safe_putenv_ptr(NULL))
-#undef  PL_user_def_props
-#define PL_user_def_props      (*Perl_Guser_def_props_ptr(NULL))
-#undef  PL_user_def_props_aTHX
-#define PL_user_def_props_aTHX (*Perl_Guser_def_props_aTHX_ptr(NULL))
-#undef  PL_user_prop_mutex
-#define PL_user_prop_mutex     (*Perl_Guser_prop_mutex_ptr(NULL))
-#undef  PL_veto_cleanup
-#define PL_veto_cleanup                (*Perl_Gveto_cleanup_ptr(NULL))
-#undef  PL_watch_pvx
-#define PL_watch_pvx           (*Perl_Gwatch_pvx_ptr(NULL))
-
-#endif /* !PERL_CORE */
-#endif /* MULTIPLICITY && PERL_GLOBAL_STRUCT */
-
 #endif /* __perlapi_h__ */
-
-/* ex: set ro: */
index 39481ee..d6cd41e 100644 (file)
--- a/perlio.c
+++ b/perlio.c
@@ -236,7 +236,7 @@ PerlIO_binmode(pTHX_ PerlIO *fp, int iotype, int mode, const char *names)
 PerlIO *
 PerlIO_fdupopen(pTHX_ PerlIO *f, CLONE_PARAMS *param, int flags)
 {
-#if defined(PERL_MICRO) || defined(__SYMBIAN32__)
+#if defined(PERL_MICRO)
     return NULL;
 #elif defined(PERL_IMPLICIT_SYS)
     return PerlSIO_fdupopen(f);
@@ -2256,7 +2256,6 @@ static void
 S_more_refcounted_fds(pTHX_ const int new_fd)
   PERL_TSA_REQUIRES(PL_perlio_mutex)
 {
-    dVAR;
     const int old_max = PL_perlio_fd_refcnt_size;
     const int new_max = 16 + (new_fd & ~15);
     int *new_array;
@@ -2306,7 +2305,6 @@ PerlIOUnix_refcnt_inc(int fd)
 {
     dTHX;
     if (fd >= 0) {
-       dVAR;
 
        MUTEX_LOCK(&PL_perlio_mutex);
        if (fd >= PL_perlio_fd_refcnt_size)
@@ -2336,7 +2334,6 @@ PerlIOUnix_refcnt_dec(int fd)
 #ifdef DEBUGGING
         dTHX;
 #else
-       dVAR;
 #endif
        MUTEX_LOCK(&PL_perlio_mutex);
        if (fd >= PL_perlio_fd_refcnt_size) {
@@ -2365,7 +2362,6 @@ PerlIOUnix_refcnt(int fd)
     dTHX;
     int cnt = 0;
     if (fd >= 0) {
-       dVAR;
        MUTEX_LOCK(&PL_perlio_mutex);
        if (fd >= PL_perlio_fd_refcnt_size) {
            /* diag_listed_as: refcnt: fd %d%s */
@@ -2416,7 +2412,6 @@ PerlIO_cleanup(pTHX)
 
 void PerlIO_teardown(void) /* Call only from PERL_SYS_TERM(). */
 {
-    dVAR;
 #if 0
 /* XXX we can't rely on an interpreter being present at this late stage,
    XXX so we can't use a function like PerlLIO_write that relies on one
@@ -2744,10 +2739,6 @@ PerlIOUnix_read(pTHX_ PerlIO *f, void *vbuf, Size_t count)
     if (PerlIO_lockcnt(f)) /* in use: abort ungracefully */
        return -1;
     fd = PerlIOSelf(f, PerlIOUnix)->fd;
-#ifdef PERLIO_STD_SPECIAL
-    if (fd == 0)
-        return PERLIO_STD_IN(fd, vbuf, count);
-#endif
     if (!(PerlIOBase(f)->flags & PERLIO_F_CANREAD) ||
          PerlIOBase(f)->flags & (PERLIO_F_EOF|PERLIO_F_ERROR)) {
        return 0;
@@ -2781,10 +2772,6 @@ PerlIOUnix_write(pTHX_ PerlIO *f, const void *vbuf, Size_t count)
     if (PerlIO_lockcnt(f)) /* in use: abort ungracefully */
        return -1;
     fd = PerlIOSelf(f, PerlIOUnix)->fd;
-#ifdef PERLIO_STD_SPECIAL
-    if (fd == 1 || fd == 2)
-        return PERLIO_STD_OUT(fd, vbuf, count);
-#endif
     while (1) {
        const SSize_t len = PerlLIO_write(fd, vbuf, count);
        if (len >= 0 || errno != EINTR) {
@@ -3263,7 +3250,6 @@ PerlIOStdio_close(pTHX_ PerlIO *f)
        int dupfd = -1;
        dSAVEDERRNO;
 #ifdef USE_ITHREADS
-       dVAR;
 #endif
 #ifdef SOCKS5_VERSION_NAME
        /* Socks lib overrides close() but stdio isn't linked to
index cd1523d..760cb5c 100644 (file)
@@ -172,19 +172,6 @@ destruction. (Use of C<PL_dirty> is discouraged since 5.14.)
 #if defined(USE_ITHREADS)
 PERLVAR(G, check_mutex,        perl_mutex)     /* Mutex for PL_check */
 #endif
-#ifdef PERL_GLOBAL_STRUCT 
-PERLVAR(G, ppaddr,     Perl_ppaddr_t *) /* or opcode.h */
-PERLVAR(G, check,      Perl_check_t *) /* or opcode.h */
-PERLVARA(G, fold_locale, 256, unsigned char) /* or perl.h */
-#endif
-
-#ifdef PERL_NEED_APPCTX
-PERLVAR(G, appctx,     void*)          /* the application context */
-#endif
-
-#if defined(HAS_TIMES) && defined(PERL_NEED_TIMESBASE)
-PERLVAR(G, timesbase,  struct tms)
-#endif
 
 /* allocate a unique index to every module that calls MY_CXT_INIT */
 
@@ -322,11 +309,4 @@ PERLVARI(G, strategy_pipe,       int, 0)   /* doio.c */
 PERLVARI(G, strategy_socketpair, int, 0)       /* doio.c */
 
 #ifdef PERL_IMPLICIT_CONTEXT
-#  ifdef PERL_GLOBAL_STRUCT_PRIVATE
-/* per-module array of pointers to MY_CXT_KEY constants.
- * It simulates each module having a static my_cxt_index var on builds
- * which don't allow static vars */
-PERLVARI(G, my_cxt_keys, const char **, NULL)
-PERLVARI(G, my_cxt_keys_size, int,     0)      /* size of PL_my_cxt_keys */
-#  endif
 #endif
index b2d2e67..bc684e7 100644 (file)
--- a/perly.act
+++ b/perly.act
@@ -5,7 +5,7 @@
  */
 
 case 2:
-#line 121 "perly.y" /* yacc.c:1652  */
+#line 121 "perly.y"
     {
                          parser->expect = XSTATE;
                           (yyval.ival) = 0;
@@ -14,7 +14,7 @@ case 2:
     break;
 
   case 3:
-#line 126 "perly.y" /* yacc.c:1652  */
+#line 126 "perly.y"
     {
                          newPROG(block_end((ps[-1].val.ival),(ps[0].val.opval)));
                          PL_compiling.cop_seq = 0;
@@ -24,7 +24,7 @@ case 2:
     break;
 
   case 4:
-#line 132 "perly.y" /* yacc.c:1652  */
+#line 132 "perly.y"
     {
                          parser->expect = XTERM;
                           (yyval.ival) = 0;
@@ -33,7 +33,7 @@ case 2:
     break;
 
   case 5:
-#line 137 "perly.y" /* yacc.c:1652  */
+#line 137 "perly.y"
     {
                          PL_eval_root = (ps[0].val.opval);
                          (yyval.ival) = 0;
@@ -42,7 +42,7 @@ case 2:
     break;
 
   case 6:
-#line 142 "perly.y" /* yacc.c:1652  */
+#line 142 "perly.y"
     {
                          parser->expect = XBLOCK;
                           (yyval.ival) = 0;
@@ -51,7 +51,7 @@ case 2:
     break;
 
   case 7:
-#line 147 "perly.y" /* yacc.c:1652  */
+#line 147 "perly.y"
     {
                          PL_pad_reset_pending = TRUE;
                          PL_eval_root = (ps[0].val.opval);
@@ -63,7 +63,7 @@ case 2:
     break;
 
   case 8:
-#line 155 "perly.y" /* yacc.c:1652  */
+#line 155 "perly.y"
     {
                          parser->expect = XSTATE;
                           (yyval.ival) = 0;
@@ -72,7 +72,7 @@ case 2:
     break;
 
   case 9:
-#line 160 "perly.y" /* yacc.c:1652  */
+#line 160 "perly.y"
     {
                          PL_pad_reset_pending = TRUE;
                          PL_eval_root = (ps[0].val.opval);
@@ -84,7 +84,7 @@ case 2:
     break;
 
   case 10:
-#line 168 "perly.y" /* yacc.c:1652  */
+#line 168 "perly.y"
     {
                          parser->expect = XSTATE;
                           (yyval.ival) = 0;
@@ -93,7 +93,7 @@ case 2:
     break;
 
   case 11:
-#line 173 "perly.y" /* yacc.c:1652  */
+#line 173 "perly.y"
     {
                          PL_pad_reset_pending = TRUE;
                          PL_eval_root = (ps[0].val.opval);
@@ -105,7 +105,7 @@ case 2:
     break;
 
   case 12:
-#line 181 "perly.y" /* yacc.c:1652  */
+#line 181 "perly.y"
     {
                          parser->expect = XSTATE;
                           (yyval.ival) = 0;
@@ -114,7 +114,7 @@ case 2:
     break;
 
   case 13:
-#line 186 "perly.y" /* yacc.c:1652  */
+#line 186 "perly.y"
     {
                          PL_eval_root = (ps[0].val.opval);
                          (yyval.ival) = 0;
@@ -123,7 +123,7 @@ case 2:
     break;
 
   case 14:
-#line 191 "perly.y" /* yacc.c:1652  */
+#line 191 "perly.y"
     {
                          parser->expect = XSTATE;
                          (yyval.ival) = 0;
@@ -132,7 +132,7 @@ case 2:
     break;
 
   case 15:
-#line 196 "perly.y" /* yacc.c:1652  */
+#line 196 "perly.y"
     {
                          PL_eval_root = (ps[0].val.opval);
                          (yyval.ival) = 0;
@@ -141,7 +141,7 @@ case 2:
     break;
 
   case 16:
-#line 204 "perly.y" /* yacc.c:1652  */
+#line 204 "perly.y"
     { if (parser->copline > (line_t)(ps[-3].val.ival))
                              parser->copline = (line_t)(ps[-3].val.ival);
                          (yyval.opval) = block_end((ps[-2].val.ival), (ps[-1].val.opval));
@@ -150,7 +150,7 @@ case 2:
     break;
 
   case 17:
-#line 212 "perly.y" /* yacc.c:1652  */
+#line 212 "perly.y"
     { if (parser->copline > (line_t)(ps[-6].val.ival))
                              parser->copline = (line_t)(ps[-6].val.ival);
                          (yyval.opval) = block_end((ps[-5].val.ival), (ps[-2].val.opval));
@@ -159,14 +159,14 @@ case 2:
     break;
 
   case 18:
-#line 219 "perly.y" /* yacc.c:1652  */
+#line 219 "perly.y"
     { (yyval.ival) = block_start(TRUE);
                          parser->parsed_sub = 0; }
 
     break;
 
   case 19:
-#line 224 "perly.y" /* yacc.c:1652  */
+#line 224 "perly.y"
     { if (parser->copline > (line_t)(ps[-3].val.ival))
                              parser->copline = (line_t)(ps[-3].val.ival);
                          (yyval.opval) = block_end((ps[-2].val.ival), (ps[-1].val.opval));
@@ -175,20 +175,20 @@ case 2:
     break;
 
   case 20:
-#line 231 "perly.y" /* yacc.c:1652  */
+#line 231 "perly.y"
     { (yyval.ival) = block_start(FALSE);
                          parser->parsed_sub = 0; }
 
     break;
 
   case 21:
-#line 237 "perly.y" /* yacc.c:1652  */
+#line 237 "perly.y"
     { (yyval.opval) = NULL; }
 
     break;
 
   case 22:
-#line 239 "perly.y" /* yacc.c:1652  */
+#line 239 "perly.y"
     {   (yyval.opval) = op_append_list(OP_LINESEQ, (ps[-1].val.opval), (ps[0].val.opval));
                            PL_pad_reset_pending = TRUE;
                            if ((ps[-1].val.opval) && (ps[0].val.opval))
@@ -198,13 +198,13 @@ case 2:
     break;
 
   case 23:
-#line 248 "perly.y" /* yacc.c:1652  */
+#line 248 "perly.y"
     { (yyval.opval) = NULL; }
 
     break;
 
   case 24:
-#line 250 "perly.y" /* yacc.c:1652  */
+#line 250 "perly.y"
     {   (yyval.opval) = op_append_list(OP_LINESEQ, (ps[-1].val.opval), (ps[0].val.opval));
                            PL_pad_reset_pending = TRUE;
                            if ((ps[-1].val.opval) && (ps[0].val.opval))
@@ -214,7 +214,7 @@ case 2:
     break;
 
   case 25:
-#line 259 "perly.y" /* yacc.c:1652  */
+#line 259 "perly.y"
     {
                          (yyval.opval) = (ps[0].val.opval) ? newSTATEOP(0, NULL, (ps[0].val.opval)) : NULL;
                        }
@@ -222,13 +222,13 @@ case 2:
     break;
 
   case 26:
-#line 263 "perly.y" /* yacc.c:1652  */
+#line 263 "perly.y"
     { (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
   case 27:
-#line 267 "perly.y" /* yacc.c:1652  */
+#line 267 "perly.y"
     {
                           SV *label = cSVOPx_sv((ps[-1].val.opval));
                          (yyval.opval) = newSTATEOP(SvFLAGS(label) & SVf_UTF8,
@@ -239,7 +239,7 @@ case 2:
     break;
 
   case 28:
-#line 274 "perly.y" /* yacc.c:1652  */
+#line 274 "perly.y"
     {
                           SV *label = cSVOPx_sv((ps[-1].val.opval));
                          (yyval.opval) = newSTATEOP(SvFLAGS(label) & SVf_UTF8,
@@ -250,13 +250,13 @@ case 2:
     break;
 
   case 29:
-#line 284 "perly.y" /* yacc.c:1652  */
+#line 284 "perly.y"
     { (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
   case 30:
-#line 286 "perly.y" /* yacc.c:1652  */
+#line 286 "perly.y"
     {
                          CV *fmtcv = PL_compcv;
                          newFORM((ps[-2].val.ival), (ps[-1].val.opval), (ps[0].val.opval));
@@ -270,7 +270,7 @@ case 2:
     break;
 
   case 31:
-#line 298 "perly.y" /* yacc.c:1652  */
+#line 298 "perly.y"
     {
                           init_named_cv(PL_compcv, (ps[-1].val.opval));
                          parser->in_my = 0;
@@ -280,7 +280,7 @@ case 2:
     break;
 
   case 32:
-#line 304 "perly.y" /* yacc.c:1652  */
+#line 304 "perly.y"
     {
                          SvREFCNT_inc_simple_void(PL_compcv);
                          (ps[-5].val.opval)->op_type == OP_CONST
@@ -295,7 +295,7 @@ case 2:
     break;
 
   case 33:
-#line 319 "perly.y" /* yacc.c:1652  */
+#line 319 "perly.y"
     {
                           init_named_cv(PL_compcv, (ps[-1].val.opval));
                          parser->in_my = 0;
@@ -305,7 +305,7 @@ case 2:
     break;
 
   case 34:
-#line 325 "perly.y" /* yacc.c:1652  */
+#line 325 "perly.y"
     {
                          SvREFCNT_inc_simple_void(PL_compcv);
                          (ps[-4].val.opval)->op_type == OP_CONST
@@ -320,7 +320,7 @@ case 2:
     break;
 
   case 35:
-#line 336 "perly.y" /* yacc.c:1652  */
+#line 336 "perly.y"
     {
                          package((ps[-1].val.opval));
                          if ((ps[-2].val.opval))
@@ -331,13 +331,13 @@ case 2:
     break;
 
   case 36:
-#line 343 "perly.y" /* yacc.c:1652  */
+#line 343 "perly.y"
     { CvSPECIAL_on(PL_compcv); /* It's a BEGIN {} */ }
 
     break;
 
   case 37:
-#line 345 "perly.y" /* yacc.c:1652  */
+#line 345 "perly.y"
     {
                          SvREFCNT_inc_simple_void(PL_compcv);
                          utilize((ps[-6].val.ival), (ps[-5].val.ival), (ps[-3].val.opval), (ps[-2].val.opval), (ps[-1].val.opval));
@@ -348,7 +348,7 @@ case 2:
     break;
 
   case 38:
-#line 352 "perly.y" /* yacc.c:1652  */
+#line 352 "perly.y"
     {
                          (yyval.opval) = block_end((ps[-4].val.ival),
                              newCONDOP(0, (ps[-3].val.opval), op_scope((ps[-1].val.opval)), (ps[0].val.opval)));
@@ -358,7 +358,7 @@ case 2:
     break;
 
   case 39:
-#line 358 "perly.y" /* yacc.c:1652  */
+#line 358 "perly.y"
     {
                          (yyval.opval) = block_end((ps[-4].val.ival),
                               newCONDOP(0, (ps[-3].val.opval), (ps[0].val.opval), op_scope((ps[-1].val.opval))));
@@ -368,7 +368,7 @@ case 2:
     break;
 
   case 40:
-#line 364 "perly.y" /* yacc.c:1652  */
+#line 364 "perly.y"
     {
                          (yyval.opval) = block_end((ps[-3].val.ival), newGIVENOP((ps[-2].val.opval), op_scope((ps[0].val.opval)), 0));
                          parser->copline = (line_t)(ps[-5].val.ival);
@@ -377,19 +377,19 @@ case 2:
     break;
 
   case 41:
-#line 369 "perly.y" /* yacc.c:1652  */
+#line 369 "perly.y"
     { (yyval.opval) = block_end((ps[-3].val.ival), newWHENOP((ps[-2].val.opval), op_scope((ps[0].val.opval)))); }
 
     break;
 
   case 42:
-#line 371 "perly.y" /* yacc.c:1652  */
+#line 371 "perly.y"
     { (yyval.opval) = newWHENOP(0, op_scope((ps[0].val.opval))); }
 
     break;
 
   case 43:
-#line 373 "perly.y" /* yacc.c:1652  */
+#line 373 "perly.y"
     {
                          (yyval.opval) = block_end((ps[-5].val.ival),
                                  newWHILEOP(0, 1, NULL,
@@ -400,7 +400,7 @@ case 2:
     break;
 
   case 44:
-#line 380 "perly.y" /* yacc.c:1652  */
+#line 380 "perly.y"
     {
                          (yyval.opval) = block_end((ps[-5].val.ival),
                                  newWHILEOP(0, 1, NULL,
@@ -411,19 +411,19 @@ case 2:
     break;
 
   case 45:
-#line 387 "perly.y" /* yacc.c:1652  */
+#line 387 "perly.y"
     { parser->expect = XTERM; }
 
     break;
 
   case 46:
-#line 389 "perly.y" /* yacc.c:1652  */
+#line 389 "perly.y"
     { parser->expect = XTERM; }
 
     break;
 
   case 47:
-#line 392 "perly.y" /* yacc.c:1652  */
+#line 392 "perly.y"
     {
                          OP *initop = (ps[-9].val.opval);
                          OP *forop = newWHILEOP(0, 1, NULL,
@@ -442,7 +442,7 @@ case 2:
     break;
 
   case 48:
-#line 407 "perly.y" /* yacc.c:1652  */
+#line 407 "perly.y"
     {
                          (yyval.opval) = block_end((ps[-6].val.ival), newFOROP(0, (ps[-5].val.opval), (ps[-3].val.opval), (ps[-1].val.opval), (ps[0].val.opval)));
                          parser->copline = (line_t)(ps[-8].val.ival);
@@ -451,7 +451,7 @@ case 2:
     break;
 
   case 49:
-#line 412 "perly.y" /* yacc.c:1652  */
+#line 412 "perly.y"
     {
                          (yyval.opval) = block_end((ps[-4].val.ival), newFOROP(0,
                                      op_lvalue((ps[-6].val.opval), OP_ENTERLOOP), (ps[-3].val.opval), (ps[-1].val.opval), (ps[0].val.opval)));
@@ -461,13 +461,13 @@ case 2:
     break;
 
   case 50:
-#line 418 "perly.y" /* yacc.c:1652  */
+#line 418 "perly.y"
     { parser->in_my = 0; (yyval.opval) = my((ps[0].val.opval)); }
 
     break;
 
   case 51:
-#line 420 "perly.y" /* yacc.c:1652  */
+#line 420 "perly.y"
     {
                          (yyval.opval) = block_end(
                                (ps[-7].val.ival),
@@ -484,7 +484,7 @@ case 2:
     break;
 
   case 52:
-#line 433 "perly.y" /* yacc.c:1652  */
+#line 433 "perly.y"
     {
                          (yyval.opval) = block_end((ps[-4].val.ival), newFOROP(
                                0, op_lvalue(newUNOP(OP_REFGEN, 0,
@@ -496,7 +496,7 @@ case 2:
     break;
 
   case 53:
-#line 441 "perly.y" /* yacc.c:1652  */
+#line 441 "perly.y"
     {
                          (yyval.opval) = block_end((ps[-4].val.ival),
                                  newFOROP(0, NULL, (ps[-3].val.opval), (ps[-1].val.opval), (ps[0].val.opval)));
@@ -506,7 +506,7 @@ case 2:
     break;
 
   case 54:
-#line 447 "perly.y" /* yacc.c:1652  */
+#line 447 "perly.y"
     {
                          /* a block is a loop that happens once */
                          (yyval.opval) = newWHILEOP(0, 1, NULL,
@@ -516,7 +516,7 @@ case 2:
     break;
 
   case 55:
-#line 453 "perly.y" /* yacc.c:1652  */
+#line 453 "perly.y"
     {
                          package((ps[-2].val.opval));
                          if ((ps[-3].val.opval)) {
@@ -527,7 +527,7 @@ case 2:
     break;
 
   case 56:
-#line 460 "perly.y" /* yacc.c:1652  */
+#line 460 "perly.y"
     {
                          /* a block is a loop that happens once */
                          (yyval.opval) = newWHILEOP(0, 1, NULL,
@@ -539,7 +539,7 @@ case 2:
     break;
 
   case 57:
-#line 468 "perly.y" /* yacc.c:1652  */
+#line 468 "perly.y"
     {
                          (yyval.opval) = (ps[-1].val.opval);
                        }
@@ -547,7 +547,7 @@ case 2:
     break;
 
   case 58:
-#line 472 "perly.y" /* yacc.c:1652  */
+#line 472 "perly.y"
     {
                          (yyval.opval) = newLISTOP(OP_DIE, 0, newOP(OP_PUSHMARK, 0),
                                newSVOP(OP_CONST, 0, newSVpvs("Unimplemented")));
@@ -556,7 +556,7 @@ case 2:
     break;
 
   case 59:
-#line 477 "perly.y" /* yacc.c:1652  */
+#line 477 "perly.y"
     {
                          (yyval.opval) = NULL;
                          parser->copline = NOLINE;
@@ -565,7 +565,7 @@ case 2:
     break;
 
   case 60:
-#line 485 "perly.y" /* yacc.c:1652  */
+#line 485 "perly.y"
     { OP *list;
                          if ((ps[0].val.opval)) {
                              OP *term = (ps[0].val.opval);
@@ -584,74 +584,74 @@ case 2:
     break;
 
   case 61:
-#line 502 "perly.y" /* yacc.c:1652  */
+#line 502 "perly.y"
     { (yyval.opval) = NULL; }
 
     break;
 
   case 62:
-#line 504 "perly.y" /* yacc.c:1652  */
+#line 504 "perly.y"
     { (yyval.opval) = op_unscope((ps[-1].val.opval)); }
 
     break;
 
   case 63:
-#line 509 "perly.y" /* yacc.c:1652  */
+#line 509 "perly.y"
     { (yyval.opval) = NULL; }
 
     break;
 
   case 64:
-#line 511 "perly.y" /* yacc.c:1652  */
+#line 511 "perly.y"
     { (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
   case 65:
-#line 513 "perly.y" /* yacc.c:1652  */
+#line 513 "perly.y"
     { (yyval.opval) = newLOGOP(OP_AND, 0, (ps[0].val.opval), (ps[-2].val.opval)); }
 
     break;
 
   case 66:
-#line 515 "perly.y" /* yacc.c:1652  */
+#line 515 "perly.y"
     { (yyval.opval) = newLOGOP(OP_OR, 0, (ps[0].val.opval), (ps[-2].val.opval)); }
 
     break;
 
   case 67:
-#line 517 "perly.y" /* yacc.c:1652  */
+#line 517 "perly.y"
     { (yyval.opval) = newLOOPOP(OPf_PARENS, 1, scalar((ps[0].val.opval)), (ps[-2].val.opval)); }
 
     break;
 
   case 68:
-#line 519 "perly.y" /* yacc.c:1652  */
+#line 519 "perly.y"
     { (yyval.opval) = newLOOPOP(OPf_PARENS, 1, (ps[0].val.opval), (ps[-2].val.opval)); }
 
     break;
 
   case 69:
-#line 521 "perly.y" /* yacc.c:1652  */
+#line 521 "perly.y"
     { (yyval.opval) = newFOROP(0, NULL, (ps[0].val.opval), (ps[-2].val.opval), NULL);
                          parser->copline = (line_t)(ps[-1].val.ival); }
 
     break;
 
   case 70:
-#line 524 "perly.y" /* yacc.c:1652  */
+#line 524 "perly.y"
     { (yyval.opval) = newWHENOP((ps[0].val.opval), op_scope((ps[-2].val.opval))); }
 
     break;
 
   case 71:
-#line 529 "perly.y" /* yacc.c:1652  */
+#line 529 "perly.y"
     { (yyval.opval) = NULL; }
 
     break;
 
   case 72:
-#line 531 "perly.y" /* yacc.c:1652  */
+#line 531 "perly.y"
     {
                          ((ps[0].val.opval))->op_flags |= OPf_PARENS;
                          (yyval.opval) = op_scope((ps[0].val.opval));
@@ -660,7 +660,7 @@ case 2:
     break;
 
   case 73:
-#line 536 "perly.y" /* yacc.c:1652  */
+#line 536 "perly.y"
     { parser->copline = (line_t)(ps[-5].val.ival);
                            (yyval.opval) = newCONDOP(0,
                                newSTATEOP(OPf_SPECIAL,NULL,(ps[-3].val.opval)),
@@ -671,19 +671,19 @@ case 2:
     break;
 
   case 74:
-#line 546 "perly.y" /* yacc.c:1652  */
+#line 546 "perly.y"
     { (yyval.opval) = NULL; }
 
     break;
 
   case 75:
-#line 548 "perly.y" /* yacc.c:1652  */
+#line 548 "perly.y"
     { (yyval.opval) = op_scope((ps[0].val.opval)); }
 
     break;
 
   case 76:
-#line 553 "perly.y" /* yacc.c:1652  */
+#line 553 "perly.y"
     { (yyval.ival) = (PL_min_intro_pending &&
                            PL_max_intro_pending >=  PL_min_intro_pending);
                          intro_my(); }
@@ -691,13 +691,13 @@ case 2:
     break;
 
   case 77:
-#line 559 "perly.y" /* yacc.c:1652  */
+#line 559 "perly.y"
     { (yyval.opval) = NULL; }
 
     break;
 
   case 79:
-#line 565 "perly.y" /* yacc.c:1652  */
+#line 565 "perly.y"
     { YYSTYPE tmplval;
                          (void)scan_num("1", &tmplval);
                          (yyval.opval) = tmplval.opval; }
@@ -705,118 +705,118 @@ case 2:
     break;
 
   case 81:
-#line 573 "perly.y" /* yacc.c:1652  */
+#line 573 "perly.y"
     { (yyval.opval) = invert(scalar((ps[0].val.opval))); }
 
     break;
 
   case 82:
-#line 578 "perly.y" /* yacc.c:1652  */
+#line 578 "perly.y"
     { (yyval.opval) = (ps[0].val.opval); intro_my(); }
 
     break;
 
   case 83:
-#line 582 "perly.y" /* yacc.c:1652  */
+#line 582 "perly.y"
     { (yyval.opval) = (ps[0].val.opval); intro_my(); }
 
     break;
 
   case 84:
-#line 585 "perly.y" /* yacc.c:1652  */
+#line 585 "perly.y"
     { (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
   case 85:
-#line 586 "perly.y" /* yacc.c:1652  */
+#line 586 "perly.y"
     { (yyval.opval) = NULL; }
 
     break;
 
   case 86:
-#line 590 "perly.y" /* yacc.c:1652  */
+#line 590 "perly.y"
     { (yyval.ival) = start_subparse(FALSE, 0);
                            SAVEFREESV(PL_compcv); }
 
     break;
 
   case 87:
-#line 596 "perly.y" /* yacc.c:1652  */
+#line 596 "perly.y"
     { (yyval.ival) = start_subparse(FALSE, CVf_ANON);
                            SAVEFREESV(PL_compcv); }
 
     break;
 
   case 88:
-#line 601 "perly.y" /* yacc.c:1652  */
+#line 601 "perly.y"
     { (yyval.ival) = start_subparse(TRUE, 0);
                            SAVEFREESV(PL_compcv); }
 
     break;
 
   case 91:
-#line 612 "perly.y" /* yacc.c:1652  */
+#line 612 "perly.y"
     { (yyval.opval) = NULL; }
 
     break;
 
   case 93:
-#line 618 "perly.y" /* yacc.c:1652  */
+#line 618 "perly.y"
     { (yyval.opval) = NULL; }
 
     break;
 
   case 94:
-#line 620 "perly.y" /* yacc.c:1652  */
+#line 620 "perly.y"
     { (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
   case 95:
-#line 622 "perly.y" /* yacc.c:1652  */
+#line 622 "perly.y"
     { (yyval.opval) = NULL; }
 
     break;
 
   case 96:
-#line 627 "perly.y" /* yacc.c:1652  */
+#line 627 "perly.y"
     { (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
   case 97:
-#line 629 "perly.y" /* yacc.c:1652  */
+#line 629 "perly.y"
     { (yyval.opval) = NULL; }
 
     break;
 
   case 98:
-#line 640 "perly.y" /* yacc.c:1652  */
+#line 640 "perly.y"
     { parser->in_my = 0; (yyval.opval) = NULL; }
 
     break;
 
   case 99:
-#line 642 "perly.y" /* yacc.c:1652  */
+#line 642 "perly.y"
     { parser->in_my = 0; (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
   case 100:
-#line 647 "perly.y" /* yacc.c:1652  */
+#line 647 "perly.y"
     { (yyval.ival) = '@'; }
 
     break;
 
   case 101:
-#line 649 "perly.y" /* yacc.c:1652  */
+#line 649 "perly.y"
     { (yyval.ival) = '%'; }
 
     break;
 
   case 102:
-#line 653 "perly.y" /* yacc.c:1652  */
+#line 653 "perly.y"
     {
                             I32 sigil   = (ps[-2].val.ival);
                             OP *var     = (ps[-1].val.opval);
@@ -836,25 +836,25 @@ case 2:
     break;
 
   case 103:
-#line 672 "perly.y" /* yacc.c:1652  */
+#line 672 "perly.y"
     { (yyval.opval) = NULL; }
 
     break;
 
   case 104:
-#line 674 "perly.y" /* yacc.c:1652  */
+#line 674 "perly.y"
     { (yyval.opval) = newOP(OP_NULL, 0); }
 
     break;
 
   case 105:
-#line 676 "perly.y" /* yacc.c:1652  */
+#line 676 "perly.y"
     { (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
   case 106:
-#line 682 "perly.y" /* yacc.c:1652  */
+#line 682 "perly.y"
     {
                             OP *var     = (ps[-1].val.opval);
                             OP *defexpr = (ps[0].val.opval);
@@ -919,25 +919,25 @@ case 2:
     break;
 
   case 107:
-#line 747 "perly.y" /* yacc.c:1652  */
+#line 747 "perly.y"
     { parser->in_my = KEY_sigvar; (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
   case 108:
-#line 749 "perly.y" /* yacc.c:1652  */
+#line 749 "perly.y"
     { parser->in_my = KEY_sigvar; (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
   case 109:
-#line 755 "perly.y" /* yacc.c:1652  */
+#line 755 "perly.y"
     { (yyval.opval) = (ps[-1].val.opval); }
 
     break;
 
   case 110:
-#line 757 "perly.y" /* yacc.c:1652  */
+#line 757 "perly.y"
     {
                          (yyval.opval) = op_append_list(OP_LINESEQ, (ps[-2].val.opval), (ps[0].val.opval));
                        }
@@ -945,43 +945,43 @@ case 2:
     break;
 
   case 111:
-#line 761 "perly.y" /* yacc.c:1652  */
+#line 761 "perly.y"
     { (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
   case 112:
-#line 766 "perly.y" /* yacc.c:1652  */
+#line 766 "perly.y"
     { (yyval.opval) = NULL; }
 
     break;
 
   case 113:
-#line 768 "perly.y" /* yacc.c:1652  */
+#line 768 "perly.y"
     { (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
   case 114:
-#line 772 "perly.y" /* yacc.c:1652  */
+#line 772 "perly.y"
     { (yyval.opval) = NULL; }
 
     break;
 
   case 115:
-#line 774 "perly.y" /* yacc.c:1652  */
+#line 774 "perly.y"
     { (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
   case 116:
-#line 778 "perly.y" /* yacc.c:1652  */
+#line 778 "perly.y"
     { (yyval.opval) = (ps[-1].val.opval); }
 
     break;
 
   case 117:
-#line 781 "perly.y" /* yacc.c:1652  */
+#line 781 "perly.y"
     {
                             ENTER;
                             SAVEIV(parser->sig_elems);
@@ -996,7 +996,7 @@ case 2:
     break;
 
   case 118:
-#line 792 "perly.y" /* yacc.c:1652  */
+#line 792 "perly.y"
     {
                             OP            *sigops = (ps[0].val.opval);
                             struct op_argcheck_aux *aux;
@@ -1055,19 +1055,19 @@ case 2:
     break;
 
   case 119:
-#line 849 "perly.y" /* yacc.c:1652  */
+#line 849 "perly.y"
     { (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
   case 120:
-#line 850 "perly.y" /* yacc.c:1652  */
+#line 850 "perly.y"
     { (yyval.opval) = NULL; }
 
     break;
 
   case 121:
-#line 856 "perly.y" /* yacc.c:1652  */
+#line 856 "perly.y"
     {
                          if (parser->copline > (line_t)(ps[-2].val.ival))
                              parser->copline = (line_t)(ps[-2].val.ival);
@@ -1077,19 +1077,19 @@ case 2:
     break;
 
   case 122:
-#line 866 "perly.y" /* yacc.c:1652  */
+#line 866 "perly.y"
     { (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
   case 123:
-#line 867 "perly.y" /* yacc.c:1652  */
+#line 867 "perly.y"
     { (yyval.opval) = NULL; }
 
     break;
 
   case 124:
-#line 871 "perly.y" /* yacc.c:1652  */
+#line 871 "perly.y"
     {
                          if (parser->copline > (line_t)(ps[-2].val.ival))
                              parser->copline = (line_t)(ps[-2].val.ival);
@@ -1100,31 +1100,31 @@ case 2:
     break;
 
   case 125:
-#line 882 "perly.y" /* yacc.c:1652  */
+#line 882 "perly.y"
     { (yyval.opval) = newLOGOP(OP_AND, 0, (ps[-2].val.opval), (ps[0].val.opval)); }
 
     break;
 
   case 126:
-#line 884 "perly.y" /* yacc.c:1652  */
+#line 884 "perly.y"
     { (yyval.opval) = newLOGOP((ps[-1].val.ival), 0, (ps[-2].val.opval), (ps[0].val.opval)); }
 
     break;
 
   case 127:
-#line 886 "perly.y" /* yacc.c:1652  */
+#line 886 "perly.y"
     { (yyval.opval) = newLOGOP(OP_DOR, 0, (ps[-2].val.opval), (ps[0].val.opval)); }
 
     break;
 
   case 129:
-#line 892 "perly.y" /* yacc.c:1652  */
+#line 892 "perly.y"
     { (yyval.opval) = (ps[-1].val.opval); }
 
     break;
 
   case 130:
-#line 894 "perly.y" /* yacc.c:1652  */
+#line 894 "perly.y"
     {
                          OP* term = (ps[0].val.opval);
                          (yyval.opval) = op_append_elem(OP_LIST, (ps[-2].val.opval), term);
@@ -1133,7 +1133,7 @@ case 2:
     break;
 
   case 132:
-#line 903 "perly.y" /* yacc.c:1652  */
+#line 903 "perly.y"
     { (yyval.opval) = op_convert_list((ps[-2].val.ival), OPf_STACKED,
                                op_prepend_elem(OP_LIST, newGVREF((ps[-2].val.ival),(ps[-1].val.opval)), (ps[0].val.opval)) );
                        }
@@ -1141,7 +1141,7 @@ case 2:
     break;
 
   case 133:
-#line 907 "perly.y" /* yacc.c:1652  */
+#line 907 "perly.y"
     { (yyval.opval) = op_convert_list((ps[-4].val.ival), OPf_STACKED,
                                op_prepend_elem(OP_LIST, newGVREF((ps[-4].val.ival),(ps[-2].val.opval)), (ps[-1].val.opval)) );
                        }
@@ -1149,7 +1149,7 @@ case 2:
     break;
 
   case 134:
-#line 911 "perly.y" /* yacc.c:1652  */
+#line 911 "perly.y"
     { (yyval.opval) = op_convert_list(OP_ENTERSUB, OPf_STACKED,
                                op_append_elem(OP_LIST,
                                    op_prepend_elem(OP_LIST, scalar((ps[-5].val.opval)), (ps[-1].val.opval)),
@@ -1159,7 +1159,7 @@ case 2:
     break;
 
   case 135:
-#line 917 "perly.y" /* yacc.c:1652  */
+#line 917 "perly.y"
     { (yyval.opval) = op_convert_list(OP_ENTERSUB, OPf_STACKED,
                                op_append_elem(OP_LIST, scalar((ps[-2].val.opval)),
                                    newMETHOP(OP_METHOD, 0, (ps[0].val.opval))));
@@ -1168,7 +1168,7 @@ case 2:
     break;
 
   case 136:
-#line 922 "perly.y" /* yacc.c:1652  */
+#line 922 "perly.y"
     { (yyval.opval) = op_convert_list(OP_ENTERSUB, OPf_STACKED,
                                op_append_elem(OP_LIST,
                                    op_prepend_elem(OP_LIST, (ps[-1].val.opval), (ps[0].val.opval)),
@@ -1178,7 +1178,7 @@ case 2:
     break;
 
   case 137:
-#line 928 "perly.y" /* yacc.c:1652  */
+#line 928 "perly.y"
     { (yyval.opval) = op_convert_list(OP_ENTERSUB, OPf_STACKED,
                                op_append_elem(OP_LIST,
                                    op_prepend_elem(OP_LIST, (ps[-3].val.opval), (ps[-1].val.opval)),
@@ -1188,32 +1188,32 @@ case 2:
     break;
 
   case 138:
-#line 934 "perly.y" /* yacc.c:1652  */
+#line 934 "perly.y"
     { (yyval.opval) = op_convert_list((ps[-1].val.ival), 0, (ps[0].val.opval)); }
 
     break;
 
   case 139:
-#line 936 "perly.y" /* yacc.c:1652  */
+#line 936 "perly.y"
     { (yyval.opval) = op_convert_list((ps[-3].val.ival), 0, (ps[-1].val.opval)); }
 
     break;
 
   case 140:
-#line 938 "perly.y" /* yacc.c:1652  */
+#line 938 "perly.y"
     { (yyval.opval) = op_convert_list((ps[-3].val.ival), 0, (ps[-1].val.opval)); }
 
     break;
 
   case 141:
-#line 940 "perly.y" /* yacc.c:1652  */
+#line 940 "perly.y"
     { SvREFCNT_inc_simple_void(PL_compcv);
                          (yyval.opval) = newANONATTRSUB((ps[-1].val.ival), 0, NULL, (ps[0].val.opval)); }
 
     break;
 
   case 142:
-#line 943 "perly.y" /* yacc.c:1652  */
+#line 943 "perly.y"
     { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
                                 op_append_elem(OP_LIST,
                                   op_prepend_elem(OP_LIST, (ps[-1].val.opval), (ps[0].val.opval)), (ps[-4].val.opval)));
@@ -1222,20 +1222,20 @@ case 2:
     break;
 
   case 145:
-#line 958 "perly.y" /* yacc.c:1652  */
+#line 958 "perly.y"
     { (yyval.opval) = newBINOP(OP_GELEM, 0, (ps[-4].val.opval), scalar((ps[-2].val.opval))); }
 
     break;
 
   case 146:
-#line 960 "perly.y" /* yacc.c:1652  */
+#line 960 "perly.y"
     { (yyval.opval) = newBINOP(OP_AELEM, 0, oopsAV((ps[-3].val.opval)), scalar((ps[-1].val.opval)));
                        }
 
     break;
 
   case 147:
-#line 963 "perly.y" /* yacc.c:1652  */
+#line 963 "perly.y"
     { (yyval.opval) = newBINOP(OP_AELEM, 0,
                                        ref(newAVREF((ps[-4].val.opval)),OP_RV2AV),
                                        scalar((ps[-1].val.opval)));
@@ -1244,7 +1244,7 @@ case 2:
     break;
 
   case 148:
-#line 968 "perly.y" /* yacc.c:1652  */
+#line 968 "perly.y"
     { (yyval.opval) = newBINOP(OP_AELEM, 0,
                                        ref(newAVREF((ps[-3].val.opval)),OP_RV2AV),
                                        scalar((ps[-1].val.opval)));
@@ -1253,14 +1253,14 @@ case 2:
     break;
 
   case 149:
-#line 973 "perly.y" /* yacc.c:1652  */
+#line 973 "perly.y"
     { (yyval.opval) = newBINOP(OP_HELEM, 0, oopsHV((ps[-4].val.opval)), jmaybe((ps[-2].val.opval)));
                        }
 
     break;
 
   case 150:
-#line 976 "perly.y" /* yacc.c:1652  */
+#line 976 "perly.y"
     { (yyval.opval) = newBINOP(OP_HELEM, 0,
                                        ref(newHVREF((ps[-5].val.opval)),OP_RV2HV),
                                        jmaybe((ps[-2].val.opval))); }
@@ -1268,7 +1268,7 @@ case 2:
     break;
 
   case 151:
-#line 980 "perly.y" /* yacc.c:1652  */
+#line 980 "perly.y"
     { (yyval.opval) = newBINOP(OP_HELEM, 0,
                                        ref(newHVREF((ps[-4].val.opval)),OP_RV2HV),
                                        jmaybe((ps[-2].val.opval))); }
@@ -1276,7 +1276,7 @@ case 2:
     break;
 
   case 152:
-#line 984 "perly.y" /* yacc.c:1652  */
+#line 984 "perly.y"
     { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
                                   newCVREF(0, scalar((ps[-3].val.opval))));
                          if (parser->expect == XBLOCK)
@@ -1286,7 +1286,7 @@ case 2:
     break;
 
   case 153:
-#line 990 "perly.y" /* yacc.c:1652  */
+#line 990 "perly.y"
     { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
                                   op_append_elem(OP_LIST, (ps[-1].val.opval),
                                       newCVREF(0, scalar((ps[-4].val.opval)))));
@@ -1297,7 +1297,7 @@ case 2:
     break;
 
   case 154:
-#line 998 "perly.y" /* yacc.c:1652  */
+#line 998 "perly.y"
     { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
                                   op_append_elem(OP_LIST, (ps[-1].val.opval),
                                               newCVREF(0, scalar((ps[-3].val.opval)))));
@@ -1308,7 +1308,7 @@ case 2:
     break;
 
   case 155:
-#line 1005 "perly.y" /* yacc.c:1652  */
+#line 1005 "perly.y"
     { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
                                   newCVREF(0, scalar((ps[-2].val.opval))));
                          if (parser->expect == XBLOCK)
@@ -1318,37 +1318,37 @@ case 2:
     break;
 
   case 156:
-#line 1011 "perly.y" /* yacc.c:1652  */
+#line 1011 "perly.y"
     { (yyval.opval) = newSLICEOP(0, (ps[-1].val.opval), (ps[-4].val.opval)); }
 
     break;
 
   case 157:
-#line 1013 "perly.y" /* yacc.c:1652  */
+#line 1013 "perly.y"
     { (yyval.opval) = newSLICEOP(0, (ps[-1].val.opval), (ps[-3].val.opval)); }
 
     break;
 
   case 158:
-#line 1015 "perly.y" /* yacc.c:1652  */
+#line 1015 "perly.y"
     { (yyval.opval) = newSLICEOP(0, (ps[-1].val.opval), NULL); }
 
     break;
 
   case 159:
-#line 1020 "perly.y" /* yacc.c:1652  */
+#line 1020 "perly.y"
     { (yyval.opval) = newASSIGNOP(OPf_STACKED, (ps[-2].val.opval), (ps[-1].val.ival), (ps[0].val.opval)); }
 
     break;
 
   case 160:
-#line 1022 "perly.y" /* yacc.c:1652  */
+#line 1022 "perly.y"
     { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); }
 
     break;
 
   case 161:
-#line 1024 "perly.y" /* yacc.c:1652  */
+#line 1024 "perly.y"
     {   if ((ps[-1].val.ival) != OP_REPEAT)
                                scalar((ps[-2].val.opval));
                            (yyval.opval) = newBINOP((ps[-1].val.ival), 0, (ps[-2].val.opval), scalar((ps[0].val.opval)));
@@ -1357,183 +1357,183 @@ case 2:
     break;
 
   case 162:
-#line 1029 "perly.y" /* yacc.c:1652  */
+#line 1029 "perly.y"
     { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); }
 
     break;
 
   case 163:
-#line 1031 "perly.y" /* yacc.c:1652  */
+#line 1031 "perly.y"
     { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); }
 
     break;
 
   case 164:
-#line 1033 "perly.y" /* yacc.c:1652  */
+#line 1033 "perly.y"
     { (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
   case 165:
-#line 1035 "perly.y" /* yacc.c:1652  */
+#line 1035 "perly.y"
     { (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
   case 166:
-#line 1037 "perly.y" /* yacc.c:1652  */
+#line 1037 "perly.y"
     { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); }
 
     break;
 
   case 167:
-#line 1039 "perly.y" /* yacc.c:1652  */
+#line 1039 "perly.y"
     { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); }
 
     break;
 
   case 168:
-#line 1041 "perly.y" /* yacc.c:1652  */
+#line 1041 "perly.y"
     { (yyval.opval) = newRANGE((ps[-1].val.ival), scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); }
 
     break;
 
   case 169:
-#line 1043 "perly.y" /* yacc.c:1652  */
+#line 1043 "perly.y"
     { (yyval.opval) = newLOGOP(OP_AND, 0, (ps[-2].val.opval), (ps[0].val.opval)); }
 
     break;
 
   case 170:
-#line 1045 "perly.y" /* yacc.c:1652  */
+#line 1045 "perly.y"
     { (yyval.opval) = newLOGOP(OP_OR, 0, (ps[-2].val.opval), (ps[0].val.opval)); }
 
     break;
 
   case 171:
-#line 1047 "perly.y" /* yacc.c:1652  */
+#line 1047 "perly.y"
     { (yyval.opval) = newLOGOP(OP_DOR, 0, (ps[-2].val.opval), (ps[0].val.opval)); }
 
     break;
 
   case 172:
-#line 1049 "perly.y" /* yacc.c:1652  */
+#line 1049 "perly.y"
     { (yyval.opval) = bind_match((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); }
 
     break;
 
   case 173:
-#line 1053 "perly.y" /* yacc.c:1652  */
+#line 1053 "perly.y"
     { (yyval.opval) = cmpchain_finish((ps[0].val.opval)); }
 
     break;
 
   case 174:
-#line 1055 "perly.y" /* yacc.c:1652  */
+#line 1055 "perly.y"
     { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); }
 
     break;
 
   case 175:
-#line 1057 "perly.y" /* yacc.c:1652  */
+#line 1057 "perly.y"
     { yyerror("syntax error"); YYERROR; }
 
     break;
 
   case 176:
-#line 1059 "perly.y" /* yacc.c:1652  */
+#line 1059 "perly.y"
     { yyerror("syntax error"); YYERROR; }
 
     break;
 
   case 177:
-#line 1063 "perly.y" /* yacc.c:1652  */
+#line 1063 "perly.y"
     { (yyval.opval) = cmpchain_start((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); }
 
     break;
 
   case 178:
-#line 1065 "perly.y" /* yacc.c:1652  */
+#line 1065 "perly.y"
     { (yyval.opval) = cmpchain_extend((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); }
 
     break;
 
   case 179:
-#line 1069 "perly.y" /* yacc.c:1652  */
+#line 1069 "perly.y"
     { (yyval.opval) = cmpchain_finish((ps[0].val.opval)); }
 
     break;
 
   case 180:
-#line 1071 "perly.y" /* yacc.c:1652  */
+#line 1071 "perly.y"
     { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); }
 
     break;
 
   case 181:
-#line 1073 "perly.y" /* yacc.c:1652  */
+#line 1073 "perly.y"
     { yyerror("syntax error"); YYERROR; }
 
     break;
 
   case 182:
-#line 1075 "perly.y" /* yacc.c:1652  */
+#line 1075 "perly.y"
     { yyerror("syntax error"); YYERROR; }
 
     break;
 
   case 183:
-#line 1079 "perly.y" /* yacc.c:1652  */
+#line 1079 "perly.y"
     { (yyval.opval) = cmpchain_start((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); }
 
     break;
 
   case 184:
-#line 1081 "perly.y" /* yacc.c:1652  */
+#line 1081 "perly.y"
     { (yyval.opval) = cmpchain_extend((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); }
 
     break;
 
   case 185:
-#line 1086 "perly.y" /* yacc.c:1652  */
+#line 1086 "perly.y"
     { (yyval.opval) = newUNOP(OP_NEGATE, 0, scalar((ps[0].val.opval))); }
 
     break;
 
   case 186:
-#line 1088 "perly.y" /* yacc.c:1652  */
+#line 1088 "perly.y"
     { (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
   case 187:
-#line 1091 "perly.y" /* yacc.c:1652  */
+#line 1091 "perly.y"
     { (yyval.opval) = newUNOP(OP_NOT, 0, scalar((ps[0].val.opval))); }
 
     break;
 
   case 188:
-#line 1093 "perly.y" /* yacc.c:1652  */
+#line 1093 "perly.y"
     { (yyval.opval) = newUNOP((ps[-1].val.ival), 0, scalar((ps[0].val.opval))); }
 
     break;
 
   case 189:
-#line 1095 "perly.y" /* yacc.c:1652  */
+#line 1095 "perly.y"
     { (yyval.opval) = newUNOP(OP_POSTINC, 0,
                                        op_lvalue(scalar((ps[-1].val.opval)), OP_POSTINC)); }
 
     break;
 
   case 190:
-#line 1098 "perly.y" /* yacc.c:1652  */
+#line 1098 "perly.y"
     { (yyval.opval) = newUNOP(OP_POSTDEC, 0,
                                        op_lvalue(scalar((ps[-1].val.opval)), OP_POSTDEC));}
 
     break;
 
   case 191:
-#line 1101 "perly.y" /* yacc.c:1652  */
+#line 1101 "perly.y"
     { (yyval.opval) = op_convert_list(OP_JOIN, 0,
                                       op_append_elem(
                                        OP_LIST,
@@ -1548,155 +1548,155 @@ case 2:
     break;
 
   case 192:
-#line 1112 "perly.y" /* yacc.c:1652  */
+#line 1112 "perly.y"
     { (yyval.opval) = newUNOP(OP_PREINC, 0,
                                        op_lvalue(scalar((ps[0].val.opval)), OP_PREINC)); }
 
     break;
 
   case 193:
-#line 1115 "perly.y" /* yacc.c:1652  */
+#line 1115 "perly.y"
     { (yyval.opval) = newUNOP(OP_PREDEC, 0,
                                        op_lvalue(scalar((ps[0].val.opval)), OP_PREDEC)); }
 
     break;
 
   case 194:
-#line 1122 "perly.y" /* yacc.c:1652  */
+#line 1122 "perly.y"
     { (yyval.opval) = newANONLIST((ps[-1].val.opval)); }
 
     break;
 
   case 195:
-#line 1124 "perly.y" /* yacc.c:1652  */
+#line 1124 "perly.y"
     { (yyval.opval) = newANONLIST(NULL);}
 
     break;
 
   case 196:
-#line 1126 "perly.y" /* yacc.c:1652  */
+#line 1126 "perly.y"
     { (yyval.opval) = newANONHASH((ps[-2].val.opval)); }
 
     break;
 
   case 197:
-#line 1128 "perly.y" /* yacc.c:1652  */
+#line 1128 "perly.y"
     { (yyval.opval) = newANONHASH(NULL); }
 
     break;
 
   case 198:
-#line 1130 "perly.y" /* yacc.c:1652  */
+#line 1130 "perly.y"
     { SvREFCNT_inc_simple_void(PL_compcv);
                          (yyval.opval) = newANONATTRSUB((ps[-3].val.ival), (ps[-2].val.opval), (ps[-1].val.opval), (ps[0].val.opval)); }
 
     break;
 
   case 199:
-#line 1133 "perly.y" /* yacc.c:1652  */
+#line 1133 "perly.y"
     { SvREFCNT_inc_simple_void(PL_compcv);
                          (yyval.opval) = newANONATTRSUB((ps[-2].val.ival), NULL, (ps[-1].val.opval), (ps[0].val.opval)); }
 
     break;
 
   case 200:
-#line 1139 "perly.y" /* yacc.c:1652  */
+#line 1139 "perly.y"
     { (yyval.opval) = dofile((ps[0].val.opval), (ps[-1].val.ival));}
 
     break;
 
   case 201:
-#line 1141 "perly.y" /* yacc.c:1652  */
+#line 1141 "perly.y"
     { (yyval.opval) = newUNOP(OP_NULL, OPf_SPECIAL, op_scope((ps[0].val.opval)));}
 
     break;
 
   case 206:
-#line 1149 "perly.y" /* yacc.c:1652  */
+#line 1149 "perly.y"
     { (yyval.opval) = newCONDOP(0, (ps[-4].val.opval), (ps[-2].val.opval), (ps[0].val.opval)); }
 
     break;
 
   case 207:
-#line 1151 "perly.y" /* yacc.c:1652  */
+#line 1151 "perly.y"
     { (yyval.opval) = newUNOP(OP_REFGEN, 0, (ps[0].val.opval)); }
 
     break;
 
   case 208:
-#line 1153 "perly.y" /* yacc.c:1652  */
+#line 1153 "perly.y"
     { (yyval.opval) = newUNOP(OP_REFGEN, 0, localize((ps[0].val.opval),1)); }
 
     break;
 
   case 209:
-#line 1155 "perly.y" /* yacc.c:1652  */
+#line 1155 "perly.y"
     { (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
   case 210:
-#line 1157 "perly.y" /* yacc.c:1652  */
+#line 1157 "perly.y"
     { (yyval.opval) = localize((ps[0].val.opval),0); }
 
     break;
 
   case 211:
-#line 1159 "perly.y" /* yacc.c:1652  */
+#line 1159 "perly.y"
     { (yyval.opval) = sawparens((ps[-1].val.opval)); }
 
     break;
 
   case 212:
-#line 1161 "perly.y" /* yacc.c:1652  */
+#line 1161 "perly.y"
     { (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
   case 213:
-#line 1163 "perly.y" /* yacc.c:1652  */
+#line 1163 "perly.y"
     { (yyval.opval) = sawparens(newNULLLIST()); }
 
     break;
 
   case 214:
-#line 1165 "perly.y" /* yacc.c:1652  */
+#line 1165 "perly.y"
     { (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
   case 215:
-#line 1167 "perly.y" /* yacc.c:1652  */
+#line 1167 "perly.y"
     { (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
   case 216:
-#line 1169 "perly.y" /* yacc.c:1652  */
+#line 1169 "perly.y"
     { (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
   case 217:
-#line 1171 "perly.y" /* yacc.c:1652  */
+#line 1171 "perly.y"
     { (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
   case 218:
-#line 1173 "perly.y" /* yacc.c:1652  */
+#line 1173 "perly.y"
     { (yyval.opval) = newUNOP(OP_AV2ARYLEN, 0, ref((ps[0].val.opval), OP_AV2ARYLEN));}
 
     break;
 
   case 219:
-#line 1175 "perly.y" /* yacc.c:1652  */
+#line 1175 "perly.y"
     { (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
   case 220:
-#line 1177 "perly.y" /* yacc.c:1652  */
+#line 1177 "perly.y"
     { (yyval.opval) = op_prepend_elem(OP_ASLICE,
                                newOP(OP_PUSHMARK, 0),
                                    newLISTOP(OP_ASLICE, 0,
@@ -1710,7 +1710,7 @@ case 2:
     break;
 
   case 221:
-#line 1187 "perly.y" /* yacc.c:1652  */
+#line 1187 "perly.y"
     { (yyval.opval) = op_prepend_elem(OP_KVASLICE,
                                newOP(OP_PUSHMARK, 0),
                                    newLISTOP(OP_KVASLICE, 0,
@@ -1724,7 +1724,7 @@ case 2:
     break;
 
   case 222:
-#line 1197 "perly.y" /* yacc.c:1652  */
+#line 1197 "perly.y"
     { (yyval.opval) = op_prepend_elem(OP_HSLICE,
                                newOP(OP_PUSHMARK, 0),
                                    newLISTOP(OP_HSLICE, 0,
@@ -1738,7 +1738,7 @@ case 2:
     break;
 
   case 223:
-#line 1207 "perly.y" /* yacc.c:1652  */
+#line 1207 "perly.y"
     { (yyval.opval) = op_prepend_elem(OP_KVHSLICE,
                                newOP(OP_PUSHMARK, 0),
                                    newLISTOP(OP_KVHSLICE, 0,
@@ -1752,26 +1752,26 @@ case 2:
     break;
 
   case 224:
-#line 1217 "perly.y" /* yacc.c:1652  */
+#line 1217 "perly.y"
     { (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
   case 225:
-#line 1219 "perly.y" /* yacc.c:1652  */
+#line 1219 "perly.y"
     { (yyval.opval) = newUNOP(OP_ENTERSUB, 0, scalar((ps[0].val.opval))); }
 
     break;
 
   case 226:
-#line 1221 "perly.y" /* yacc.c:1652  */
+#line 1221 "perly.y"
     { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((ps[-2].val.opval)));
                        }
 
     break;
 
   case 227:
-#line 1224 "perly.y" /* yacc.c:1652  */
+#line 1224 "perly.y"
     {
                          (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
                                op_append_elem(OP_LIST, (ps[-1].val.opval), scalar((ps[-3].val.opval))));
@@ -1780,7 +1780,7 @@ case 2:
     break;
 
   case 228:
-#line 1229 "perly.y" /* yacc.c:1652  */
+#line 1229 "perly.y"
     { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
                            op_append_elem(OP_LIST, (ps[0].val.opval), scalar((ps[-1].val.opval))));
                        }
@@ -1788,130 +1788,130 @@ case 2:
     break;
 
   case 229:
-#line 1233 "perly.y" /* yacc.c:1652  */
+#line 1233 "perly.y"
     { (yyval.opval) = newSVREF((ps[-3].val.opval)); }
 
     break;
 
   case 230:
-#line 1235 "perly.y" /* yacc.c:1652  */
+#line 1235 "perly.y"
     { (yyval.opval) = newAVREF((ps[-3].val.opval)); }
 
     break;
 
   case 231:
-#line 1237 "perly.y" /* yacc.c:1652  */
+#line 1237 "perly.y"
     { (yyval.opval) = newHVREF((ps[-3].val.opval)); }
 
     break;
 
   case 232:
-#line 1239 "perly.y" /* yacc.c:1652  */
+#line 1239 "perly.y"
     { (yyval.opval) = newUNOP(OP_ENTERSUB, 0,
                                       scalar(newCVREF((ps[-1].val.ival),(ps[-3].val.opval)))); }
 
     break;
 
   case 233:
-#line 1242 "perly.y" /* yacc.c:1652  */
+#line 1242 "perly.y"
     { (yyval.opval) = newGVREF(0,(ps[-3].val.opval)); }
 
     break;
 
   case 234:
-#line 1244 "perly.y" /* yacc.c:1652  */
+#line 1244 "perly.y"
     { (yyval.opval) = newOP((ps[0].val.ival), OPf_SPECIAL);
                            PL_hints |= HINT_BLOCK_SCOPE; }
 
     break;
 
   case 235:
-#line 1247 "perly.y" /* yacc.c:1652  */
+#line 1247 "perly.y"
     { (yyval.opval) = newLOOPEX((ps[-1].val.ival),(ps[0].val.opval)); }
 
     break;
 
   case 236:
-#line 1249 "perly.y" /* yacc.c:1652  */
+#line 1249 "perly.y"
     { (yyval.opval) = newUNOP(OP_NOT, 0, scalar((ps[0].val.opval))); }
 
     break;
 
   case 237:
-#line 1251 "perly.y" /* yacc.c:1652  */
+#line 1251 "perly.y"
     { (yyval.opval) = newOP((ps[0].val.ival), 0); }
 
     break;
 
   case 238:
-#line 1253 "perly.y" /* yacc.c:1652  */
+#line 1253 "perly.y"
     { (yyval.opval) = newUNOP((ps[-1].val.ival), 0, (ps[0].val.opval)); }
 
     break;
 
   case 239:
-#line 1255 "perly.y" /* yacc.c:1652  */
+#line 1255 "perly.y"
     { (yyval.opval) = newUNOP((ps[-1].val.ival), 0, (ps[0].val.opval)); }
 
     break;
 
   case 240:
-#line 1257 "perly.y" /* yacc.c:1652  */
+#line 1257 "perly.y"
     { (yyval.opval) = newOP(OP_REQUIRE, (ps[0].val.ival) ? OPf_SPECIAL : 0); }
 
     break;
 
   case 241:
-#line 1259 "perly.y" /* yacc.c:1652  */
+#line 1259 "perly.y"
     { (yyval.opval) = newUNOP(OP_REQUIRE, (ps[-1].val.ival) ? OPf_SPECIAL : 0, (ps[0].val.opval)); }
 
     break;
 
   case 242:
-#line 1261 "perly.y" /* yacc.c:1652  */
+#line 1261 "perly.y"
     { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((ps[0].val.opval))); }
 
     break;
 
   case 243:
-#line 1263 "perly.y" /* yacc.c:1652  */
+#line 1263 "perly.y"
     { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
                            op_append_elem(OP_LIST, (ps[0].val.opval), scalar((ps[-1].val.opval)))); }
 
     break;
 
   case 244:
-#line 1266 "perly.y" /* yacc.c:1652  */
+#line 1266 "perly.y"
     { (yyval.opval) = newOP((ps[0].val.ival), 0); }
 
     break;
 
   case 245:
-#line 1268 "perly.y" /* yacc.c:1652  */
+#line 1268 "perly.y"
     { (yyval.opval) = newOP((ps[-2].val.ival), 0);}
 
     break;
 
   case 246:
-#line 1270 "perly.y" /* yacc.c:1652  */
+#line 1270 "perly.y"
     { (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
   case 247:
-#line 1272 "perly.y" /* yacc.c:1652  */
+#line 1272 "perly.y"
     { (yyval.opval) = (ps[-2].val.opval); }
 
     break;
 
   case 248:
-#line 1274 "perly.y" /* yacc.c:1652  */
+#line 1274 "perly.y"
     { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((ps[0].val.opval))); }
 
     break;
 
   case 249:
-#line 1276 "perly.y" /* yacc.c:1652  */
+#line 1276 "perly.y"
     { (yyval.opval) = ((ps[-2].val.ival) == OP_NOT)
                           ? newUNOP((ps[-2].val.ival), 0, newSVOP(OP_CONST, 0, newSViv(0)))
                           : newOP((ps[-2].val.ival), OPf_SPECIAL); }
@@ -1919,13 +1919,13 @@ case 2:
     break;
 
   case 250:
-#line 1280 "perly.y" /* yacc.c:1652  */
+#line 1280 "perly.y"
     { (yyval.opval) = newUNOP((ps[-3].val.ival), 0, (ps[-1].val.opval)); }
 
     break;
 
   case 251:
-#line 1282 "perly.y" /* yacc.c:1652  */
+#line 1282 "perly.y"
     {
                            if (   (ps[0].val.opval)->op_type != OP_TRANS
                                && (ps[0].val.opval)->op_type != OP_TRANSR
@@ -1940,115 +1940,115 @@ case 2:
     break;
 
   case 252:
-#line 1293 "perly.y" /* yacc.c:1652  */
+#line 1293 "perly.y"
     { (yyval.opval) = pmruntime((ps[-5].val.opval), (ps[-2].val.opval), (ps[-1].val.opval), 1, (ps[-4].val.ival)); }
 
     break;
 
   case 256:
-#line 1301 "perly.y" /* yacc.c:1652  */
+#line 1301 "perly.y"
     { (yyval.opval) = my_attrs((ps[-1].val.opval),(ps[0].val.opval)); }
 
     break;
 
   case 257:
-#line 1303 "perly.y" /* yacc.c:1652  */
+#line 1303 "perly.y"
     { (yyval.opval) = localize((ps[0].val.opval),1); }
 
     break;
 
   case 258:
-#line 1305 "perly.y" /* yacc.c:1652  */
+#line 1305 "perly.y"
     { (yyval.opval) = newUNOP(OP_REFGEN, 0, my_attrs((ps[-1].val.opval),(ps[0].val.opval))); }
 
     break;
 
   case 259:
-#line 1310 "perly.y" /* yacc.c:1652  */
+#line 1310 "perly.y"
     { (yyval.opval) = sawparens((ps[-1].val.opval)); }
 
     break;
 
   case 260:
-#line 1312 "perly.y" /* yacc.c:1652  */
+#line 1312 "perly.y"
     { (yyval.opval) = sawparens(newNULLLIST()); }
 
     break;
 
   case 261:
-#line 1315 "perly.y" /* yacc.c:1652  */
+#line 1315 "perly.y"
     { (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
   case 262:
-#line 1317 "perly.y" /* yacc.c:1652  */
+#line 1317 "perly.y"
     { (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
   case 263:
-#line 1319 "perly.y" /* yacc.c:1652  */
+#line 1319 "perly.y"
     { (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
   case 264:
-#line 1324 "perly.y" /* yacc.c:1652  */
+#line 1324 "perly.y"
     { (yyval.opval) = NULL; }
 
     break;
 
   case 265:
-#line 1326 "perly.y" /* yacc.c:1652  */
+#line 1326 "perly.y"
     { (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
   case 266:
-#line 1330 "perly.y" /* yacc.c:1652  */
+#line 1330 "perly.y"
     { (yyval.opval) = NULL; }
 
     break;
 
   case 267:
-#line 1332 "perly.y" /* yacc.c:1652  */
+#line 1332 "perly.y"
     { (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
   case 268:
-#line 1336 "perly.y" /* yacc.c:1652  */
+#line 1336 "perly.y"
     { (yyval.opval) = NULL; }
 
     break;
 
   case 269:
-#line 1338 "perly.y" /* yacc.c:1652  */
+#line 1338 "perly.y"
     { (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
   case 270:
-#line 1344 "perly.y" /* yacc.c:1652  */
+#line 1344 "perly.y"
     { parser->in_my = 0; (yyval.opval) = my((ps[0].val.opval)); }
 
     break;
 
   case 278:
-#line 1361 "perly.y" /* yacc.c:1652  */
+#line 1361 "perly.y"
     { (yyval.opval) = newCVREF((ps[-1].val.ival),(ps[0].val.opval)); }
 
     break;
 
   case 279:
-#line 1365 "perly.y" /* yacc.c:1652  */
+#line 1365 "perly.y"
     { (yyval.opval) = newSVREF((ps[0].val.opval)); }
 
     break;
 
   case 280:
-#line 1369 "perly.y" /* yacc.c:1652  */
+#line 1369 "perly.y"
     { (yyval.opval) = newAVREF((ps[0].val.opval));
                          if ((yyval.opval)) (yyval.opval)->op_private |= (ps[-1].val.ival);
                        }
@@ -2056,7 +2056,7 @@ case 2:
     break;
 
   case 281:
-#line 1375 "perly.y" /* yacc.c:1652  */
+#line 1375 "perly.y"
     { (yyval.opval) = newHVREF((ps[0].val.opval));
                          if ((yyval.opval)) (yyval.opval)->op_private |= (ps[-1].val.ival);
                        }
@@ -2064,61 +2064,61 @@ case 2:
     break;
 
   case 282:
-#line 1381 "perly.y" /* yacc.c:1652  */
+#line 1381 "perly.y"
     { (yyval.opval) = newAVREF((ps[0].val.opval)); }
 
     break;
 
   case 283:
-#line 1383 "perly.y" /* yacc.c:1652  */
+#line 1383 "perly.y"
     { (yyval.opval) = newAVREF((ps[-3].val.opval)); }
 
     break;
 
   case 284:
-#line 1387 "perly.y" /* yacc.c:1652  */
+#line 1387 "perly.y"
     { (yyval.opval) = newGVREF(0,(ps[0].val.opval)); }
 
     break;
 
   case 286:
-#line 1392 "perly.y" /* yacc.c:1652  */
+#line 1392 "perly.y"
     { (yyval.opval) = newAVREF((ps[-2].val.opval)); }
 
     break;
 
   case 288:
-#line 1397 "perly.y" /* yacc.c:1652  */
+#line 1397 "perly.y"
     { (yyval.opval) = newHVREF((ps[-2].val.opval)); }
 
     break;
 
   case 290:
-#line 1402 "perly.y" /* yacc.c:1652  */
+#line 1402 "perly.y"
     { (yyval.opval) = newGVREF(0,(ps[-2].val.opval)); }
 
     break;
 
   case 291:
-#line 1407 "perly.y" /* yacc.c:1652  */
+#line 1407 "perly.y"
     { (yyval.opval) = scalar((ps[0].val.opval)); }
 
     break;
 
   case 292:
-#line 1409 "perly.y" /* yacc.c:1652  */
+#line 1409 "perly.y"
     { (yyval.opval) = scalar((ps[0].val.opval)); }
 
     break;
 
   case 293:
-#line 1411 "perly.y" /* yacc.c:1652  */
+#line 1411 "perly.y"
     { (yyval.opval) = op_scope((ps[0].val.opval)); }
 
     break;
 
   case 294:
-#line 1414 "perly.y" /* yacc.c:1652  */
+#line 1414 "perly.y"
     { (yyval.opval) = (ps[0].val.opval); }
 
     break;
@@ -2129,6 +2129,6 @@ case 2:
     
 
 /* Generated from:
- * e5b801fdebce5c77dd8e644fc5a489cbea6af33db180e771dd9d669b12bbe0cf perly.y
- * 0947213b55d0ed11693554bea04987e886cf285f5c14cf9075fa1e7acc3f4061 regen_perly.pl
+ * f83d884147747f2d8f5a62eebc4ccd07d71b6b34e5ba1a8d7559526ad864dc97 perly.y
+ * 01ce33b49f9f04b8d3112b7f042cde113a7d29763a846e870f9766072a5bc614 regen_perly.pl
  * ex: set ro: */
diff --git a/perly.c b/perly.c
index 41978fa..0913719 100644 (file)
--- a/perly.c
+++ b/perly.c
@@ -53,6 +53,24 @@ typedef signed char yysigned_char;
 # define YY_NULLPTR NULL
 #endif
 
+#ifndef YY_CAST
+# ifdef __cplusplus
+#  define YY_CAST(Type, Val) static_cast<Type> (Val)
+#  define YY_REINTERPRET_CAST(Type, Val) reinterpret_cast<Type> (Val)
+# else
+#  define YY_CAST(Type, Val) ((Type) (Val))
+#  define YY_REINTERPRET_CAST(Type, Val) ((Type) (Val))
+# endif
+#endif
+
+#ifndef YY_ATTRIBUTE_UNUSED
+# if defined __GNUC__ && 2 < __GNUC__ + (7 <= __GNUC_MINOR__)
+#  define YY_ATTRIBUTE_UNUSED __attribute__ ((__unused__))
+# else
+#  define YY_ATTRIBUTE_UNUSED
+# endif
+#endif
+
 /* contains all the parser state tables; auto-generated from perly.y */
 #include "perly.tab"
 
@@ -247,7 +265,6 @@ S_clear_yystack(pTHX_  const yy_parser *parser)
 int
 Perl_yyparse (pTHX_ int gramtype)
 {
-    dVAR;
     int yystate;
     int yyn;
     int yyresult;
diff --git a/perly.h b/perly.h
index 45cb6ba..0cbbf3b 100644 (file)
--- a/perly.h
+++ b/perly.h
@@ -195,6 +195,6 @@ int yyparse (void);
 
 
 /* Generated from:
- * e5b801fdebce5c77dd8e644fc5a489cbea6af33db180e771dd9d669b12bbe0cf perly.y
- * 0947213b55d0ed11693554bea04987e886cf285f5c14cf9075fa1e7acc3f4061 regen_perly.pl
+ * f83d884147747f2d8f5a62eebc4ccd07d71b6b34e5ba1a8d7559526ad864dc97 perly.y
+ * 01ce33b49f9f04b8d3112b7f042cde113a7d29763a846e870f9766072a5bc614 regen_perly.pl
  * ex: set ro: */
index 4152221..0154f44 100644 (file)
--- a/perly.tab
+++ b/perly.tab
@@ -1189,6 +1189,6 @@ static const toketypes yy_type_tab[] =
 };
 
 /* Generated from:
- * e5b801fdebce5c77dd8e644fc5a489cbea6af33db180e771dd9d669b12bbe0cf perly.y
- * 0947213b55d0ed11693554bea04987e886cf285f5c14cf9075fa1e7acc3f4061 regen_perly.pl
+ * f83d884147747f2d8f5a62eebc4ccd07d71b6b34e5ba1a8d7559526ad864dc97 perly.y
+ * 01ce33b49f9f04b8d3112b7f042cde113a7d29763a846e870f9766072a5bc614 regen_perly.pl
  * ex: set ro: */
diff --git a/perly.y b/perly.y
index 191341f..843a3b1 100644 (file)
--- a/perly.y
+++ b/perly.y
@@ -31,7 +31,7 @@
 
 /*  Make the parser re-entrant. */
 
-%pure-parser
+%define api.pure
 
 %start grammar
 
diff --git a/plan9/9front.patch b/plan9/9front.patch
new file mode 100644 (file)
index 0000000..d57d4fc
--- /dev/null
@@ -0,0 +1,46 @@
+diff --git a/dist/IO/poll.h b/dist/IO/poll.h
+--- a/dist/IO/poll.h
++++ b/dist/IO/poll.h
+@@ -22,10 +22,12 @@
+ #define EMULATE_POLL_WITH_SELECT
++#ifdef __VMS
+ #ifdef poll
+ # undef poll
+ #endif
+ #define poll Perl_my_poll
++#endif
+ typedef struct pollfd {
+     int fd;
+diff --git a/ext/Errno/Errno_pm.PL b/ext/Errno/Errno_pm.PL
+--- a/ext/Errno/Errno_pm.PL
++++ b/ext/Errno/Errno_pm.PL
+@@ -125,6 +125,8 @@ sub get_files {
+     # VMS keeps its include files in system libraries
+     if ($^O eq 'VMS') {
+       $file{'Sys$Library:DECC$RTLDEF.TLB'} = 1;
++      } elsif ($^O eq 'plan9') {
++      $file{'/sys/include/ape/errno.h'} = 1;
+     } elsif ($^O eq 'os390') {
+       # OS/390 C compiler doesn't generate #file or #line directives
+       $file{'/usr/include/errno.h'} = 1;
+diff --git a/sv.c b/sv.c
+--- a/sv.c
++++ b/sv.c
+@@ -876,10 +876,10 @@
+     U8 body_size;     /* Size to allocate  */
+     U8 copy;          /* Size of structure to copy (may be shorter)  */
+     U8 offset;                /* Size of unalloced ghost fields to first alloced field*/
+-    PERL_BITFIELD8 type : 4;        /* We have space for a sanity check. */
+-    PERL_BITFIELD8 cant_upgrade : 1;/* Cannot upgrade this type */
+-    PERL_BITFIELD8 zero_nv : 1;     /* zero the NV when upgrading from this */
+-    PERL_BITFIELD8 arena : 1;       /* Allocated from an arena */
++    PERL_BITFIELD8 type;        /* We have space for a sanity check. */
++    PERL_BITFIELD8 cant_upgrade;/* Cannot upgrade this type */
++    PERL_BITFIELD8 zero_nv;     /* zero the NV when upgrading from this */
++    PERL_BITFIELD8 arena;       /* Allocated from an arena */
+     U32 arena_size;                 /* Size of arena to allocate */
+ };
index 4d032e3..b260973 100644 (file)
@@ -3,5 +3,6 @@
 # aperl:   
 # Executes perl command and alters stderr to produce Acme-friendly error messages
 # Created 02-JUL-1996, Luther Huffman,  lutherh@stratcom.com
+# Modified May 2020, David Romano, unobe@cpan.org
 
-/bin/perl $* |[2]  /bin/perl -pe 's/ line (\d+)/:$1/'  >[1=2]
+/bin/perl-_P9P_VERSION $* |[2]  /bin/perl-_P9P_VERSION -pe 's/ line (\d+)/:$1/'  >[1=2]
index 881e00e..597dea8 100644 (file)
@@ -1 +1 @@
-p9pvers = 5.008
+p9pvers = 5.32.0
index 0c778e5..9970f64 100644 (file)
@@ -2,12 +2,12 @@
  * This file is mangled by fndvers (and perhaps other scripts) to produce
  * the config.h for Plan 9. It was handwritten because the standard
  * configuration scripts were written in a shell dialect incomprehensible
- * to Plan 9. 
+ * to Plan 9.
  * config.h for Plan 9
- * Version: 5.8.0
- */                 
+ * Version: blead
+ */
 
-/* Configuration time: 21-Oct-1996 15:11
+/* First configuration time: 21-Oct-1996 15:11
  * Configured by: Luther Huffman, lutherh@stratcom.com
  * Target system: Plan 9
  */
  *
  */
 
+/* Last configuration time: June 2020
+ * Configured by: David Romano, unobe@cpan.org
+ * Target system: Plan 9/9front
+ */
+
 #ifndef _config_h_
 #define _config_h_
 
+/* CHARBITS:
+ *     This symbol contains the size of a char, so that the C preprocessor
+ *     can make decisions based on it.
+ */
+#define CHARBITS 8             /**/
+
+
 /* CAT2:
  *     This macro catenates 2 tokens together.
  */
 
-#define CAT2(a,b)a ## b
+#if 42 == 1
+#define CAT2(a,b)      a/**/b
+#define STRINGIFY(a)   "a"
+               /* If you can get stringification with catify, tell me how! */
+#endif
+#if 42 == 42
+#define PeRl_CaTiFy(a, b)      a ## b
+#define PeRl_StGiFy(a) #a
+/* the additional level of indirection enables these macros to be
+ * used as arguments to other macros.  See K&R 2nd ed., page 231. */
+#define CAT2(a,b)      PeRl_CaTiFy(a,b)
+#define StGiFy(a)      PeRl_StGiFy(a)
+#define STRINGIFY(a)   PeRl_StGiFy(a)
+#endif
+#if 42 != 1 && 42 != 42
+#   include "Bletch: How does this C preprocessor catenate tokens?"
+#endif
+
 #define CAT3(a,b,c)a ## b ## c
 #define CAT4(a,b,c,d)a ## b ## c ## d
 #define CAT5(a,b,c,d,e)a ## b ## c ## d ## e
-#define StGiFy(a)# a
-#define STRINGIFY(a)StGiFy(a)
 #define SCAT2(a,b)StGiFy(a) StGiFy(b)
 #define SCAT3(a,b,c)StGiFy(a) StGiFy(b) StGiFy(c)
 #define SCAT4(a,b,c,d)StGiFy(a) StGiFy(b) StGiFy(c) StGiFy(d)
 # endif
 #endif
 
-/* 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.
+/* BYTEORDER:
+ *     This symbol holds the hexadecimal constant defined in byteorder,
+ *     in a UV, i.e. 0x1234 or 0x4321 or 0x12345678, etc...
+ *     If the compiler supports cross-compiling or multiple-architecture
+ *     binaries (eg. on NeXT systems), use compiler-defined macros to
+ *     determine the byte order.
+ *     On NeXT 3.2 (and greater), you can build "Fat" Multiple Architecture
+ *     Binaries (MAB) on either big endian or little endian machines.
+ *     The endian-ness is available at compile-time.  This only matters
+ *     for perl, where the config.h can be generated and installed on
+ *     one system, and used by a different architecture to build an
+ *     extension.  Older versions of NeXT that might not have
+ *     defined either *_ENDIAN__ were all on Motorola 680x0 series,
+ *     so the default case (for NeXT) is big endian to catch them.
+ *     This might matter for NeXT 3.0.
  */
-#define BIN "/_P9P_OBJTYPE/bin"        /*  */
-#define BIN_EXP "/_P9P_OBJTYPE/bin"    /*  */
 
 /* LOC_SED:
  *     This symbol holds the complete pathname to the sed program.
 #define HAS_GETLOGIN           /**/
 
 /* HAS_GETPGID:
- *     This symbol, if defined, indicates to the C program that 
+ *     This symbol, if defined, indicates to the C program that
  *     the getpgid(pid) function is available to get the
  *     process group id.
  */
  *     This symbol, if defined, indicates that the link routine is
  *     available to create hard links.
  */
-/* #define HAS_LINK    / **/
+/* #define HAS_LINK    /**/
 
 /* HAS_LOCALECONV:
  *     This symbol, if defined, indicates that the localeconv routine is
  *     This symbol, if defined, indicates that the lstat routine is
  *     available to do file stats on symbolic links.
  */
-/*#define HAS_LSTAT            / **/
+/*#define HAS_LSTAT            /**/
 
 /* HAS_MBLEN:
  *     This symbol, if defined, indicates that the mblen routine is available
  *     This symbol, if defined, indicates that the readlink routine is
  *     available to read the value of a symbolic link.
  */
-/*#define HAS_READLINK         / **/
+/*#define HAS_READLINK         /**/
 
 /* HAS_RENAME:
  *     This symbol, if defined, indicates that the rename routine is available
  *     This symbol, if defined, indicates that the setpgid(pid, gpid)
  *     routine is available to set process group ID.
  */
-#define HAS_SETPGID    / **/
+#define HAS_SETPGID    /**/
 
 /* HAS_SETPGRP2:
  *     This symbol, if defined, indicates that the setpgrp2() (as in DG/UX)
  *     This symbol, if defined, indicates that the strtod routine is
  *     available to provide better numeric string conversion than atof().
  */
-#define HAS_STRTOD     /**/
+/*#define HAS_STRTOD   /**/
 
 /* HAS_STRTOL:
  *     This symbol, if defined, indicates that the strtol routine is available
  *     This symbol, if defined, indicates that the symlink routine is available
  *     to create symbolic links.
  */
-/*#define HAS_SYMLINK  / **/
+/*#define HAS_SYMLINK  /**/
 
 /* HAS_SYSCALL:
  *     This symbol, if defined, indicates that the syscall routine is
 #define        I_LOCALE                /**/
 
 /* I_NET_ERRNO:
- *     This symbol, if defined, indicates that <net/errno.h> exists and 
+ *     This symbol, if defined, indicates that <net/errno.h> exists and
  *     should be included.
  */
 /*#define I_NET_ERRNO          /* config-skip */
  */
 #define PLAN9           /**/
 
-/* MEM_ALIGNBYTES:
- *     This symbol contains the number of bytes required to align a
- *     double, or a long double when applicable. Usual values are 2,
- *     4 and 8. The default is eight, for safety.
- */
-#if defined(MULTIARCH)
-#  define MEM_ALIGNBYTES 8
-#else
-#define MEM_ALIGNBYTES 4
-#endif
-
 /* ARCHLIB:
  *     This variable, if defined, holds the name of the directory in
  *     which the user wants to put architecture-dependent public
  *     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/bin" /**/
-#define BIN_EXP "/usr/bin"     /**/
+#define BIN "/_P9P_OBJTYPE/bin"        /*  */
+#define BIN_EXP "/_P9P_OBJTYPE/bin"    /*  */
 
 /* BYTEORDER:
  *     This symbol holds the hexadecimal constant defined in byteorder,
 #define BYTEORDER 0x1234       /* large digits for MSB */
 #endif /* NeXT */
 
-/* CAT2:
- *     This macro catenates 2 tokens together.
- */
-/* STRINGIFY:
- *     This macro surrounds its token with double quotes.
- */
-#if 42 == 1
-#define CAT2(a,b)      a/**/b
-#define STRINGIFY(a)   "a"
-               /* If you can get stringification with catify, tell me how! */
-#endif
-#if 42 == 42
-#define PeRl_CaTiFy(a, b)      a ## b  
-#define PeRl_StGiFy(a) #a
-/* the additional level of indirection enables these macros to be
- * used as arguments to other macros.  See K&R 2nd ed., page 231. */
-#define CAT2(a,b)      PeRl_CaTiFy(a,b)
-#define StGiFy(a)      PeRl_StGiFy(a)
-#define STRINGIFY(a)   PeRl_StGiFy(a)
-#endif
-#if 42 != 1 && 42 != 42
-#   include "Bletch: How does this C preprocessor concatenate tokens?"
-#endif
-
 /* CPPSTDIN:
  *     This symbol contains the first part of the string which will invoke
  *     the C preprocessor on the standard input and produce to standard
  *     This symbol, if defined, indicates that the "fast stdio"
  *     is available to manipulate the stdio buffers directly.
  */
-/*#define HAS_FAST_STDIO               / **/
+/*#define HAS_FAST_STDIO               /**/
 
 /* HAS_FCHDIR:
  *     This symbol, if defined, indicates that the fchdir routine is
 
 /* HAS_FPCLASSIFY:
  *     This symbol, if defined, indicates that the fpclassify routine is
- *     available to classify doubles.  Available for example in HP-UX.
+ *     available to classify doubles.  Available for example in HP-UX and
+ *  Plan9/9front.
  *     The returned values are defined in <math.h> and are
  *
  *           FP_NORMAL     Normalized
  *           FP_NAN        NaN
  *
  */
-/*#define HAS_FPCLASSIFY               / **/
+#define HAS_FPCLASSIFY         / **/
 
 /* HAS_FPOS64_T:
  *     This symbol will be defined if the C compiler supports fpos64_t.
  *     REENTRANT_PROTO_T_ABC macros of reentr.h if d_gmtime_r
  *     is defined.
  */
-/*#define HAS_GMTIME_R    / **/
+#define HAS_GMTIME_R      / **/
 #define GMTIME_R_PROTO 0          /**/
 
 /* HAS_GNULIBC:
- *     This symbol, if defined, indicates to the C program that 
+ *     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.
  */
  *     This symbol, if defined, indicates that the ilogbl routine is
  *     available.  If scalbnl is also present we can emulate frexpl.
  */
-/*#define HAS_ILOGBL           / **/
+/*#define HAS_ILOGBL           /**/
 
 /* HAS_INT64_T:
  *     This symbol will defined if the C compiler supports int64_t.
 #define     HAS_INT64_T               /**/
 
 /* HAS_ISASCII:
- *     This manifest constant lets the C program know that isascii 
+ *     This manifest constant lets the C program know that isascii
  *     is available.
  */
 /*#define HAS_ISASCII          / **/
  *     REENTRANT_PROTO_T_ABC macros of reentr.h if d_localtime_r
  *     is defined.
  */
-/*#define HAS_LOCALTIME_R         / **/
-/*#define LOCALTIME_R_NEEDS_TZSET         / **/
+#define HAS_LOCALTIME_R
+#define LOCALTIME_R_NEEDS_TZSET           / **/
 #define LOCALTIME_R_PROTO 0       /**/
-
+#ifdef LOCALTIME_R_NEEDS_TZSET
+#define L_R_TZSET tzset(),
+#else
+#define L_R_TZSET
+#endif
 /* HAS_LONG_DOUBLE:
  *     This symbol will be defined if the C compiler supports long
  *     doubles.
  */
 /* LONG_DOUBLESIZE:
- *     This symbol contains the size of a long double, so that the 
+ *     This symbol contains the size of a long double, so that the
  *     C preprocessor can make decisions based on it.  It is only
- *     defined if the system supports long doubles.
- */
-#define HAS_LONG_DOUBLE                /**/
+ *     defined if the system supports long doubles.  Note that this
+ *     is sizeof(long double), which may include unused bytes.
+ */
+/* HAS_LDEXPL:
+ *     This symbol, if defined, indicates that the ldexpl routine is
+ *     available to shift a long double floating-point number
+ *     by an integral power of 2.
+ */
+/* LONG_DOUBLEKIND:
+ *     LONG_DOUBLEKIND will be one of
+ *     LONG_DOUBLE_IS_DOUBLE
+ *     LONG_DOUBLE_IS_IEEE_754_128_BIT_LITTLE_ENDIAN
+ *     LONG_DOUBLE_IS_IEEE_754_128_BIT_BIG_ENDIAN
+ *     LONG_DOUBLE_IS_X86_80_BIT_LITTLE_ENDIAN
+ *     LONG_DOUBLE_IS_X86_80_BIT_BIG_ENDIAN
+ *     LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LE_LE
+ *     LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BE_BE
+ *     LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LE_BE
+ *     LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BE_LE
+ *     LONG_DOUBLE_IS_UNKNOWN_FORMAT
+ *     It is only defined if the system supports long doubles.
+ */
+/*#define  HAS_LDEXPL          / **/
+#define HAS_LONG_DOUBLE                / **/
 #ifdef HAS_LONG_DOUBLE
 #define LONG_DOUBLESIZE 8              /**/
+#define LONG_DOUBLEKIND 0              /**/
+#define LONG_DOUBLE_IS_DOUBLE                          0
+#define LONG_DOUBLE_IS_IEEE_754_128_BIT_LITTLE_ENDIAN  1
+#define LONG_DOUBLE_IS_IEEE_754_128_BIT_BIG_ENDIAN     2
+#define LONG_DOUBLE_IS_X86_80_BIT_LITTLE_ENDIAN                3
+#define LONG_DOUBLE_IS_X86_80_BIT_BIG_ENDIAN           4
+#define LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LE_LE      5
+#define LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BE_BE      6
+#define LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LE_BE      7
+#define LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BE_LE      8
+#define LONG_DOUBLE_IS_UNKNOWN_FORMAT                  -1
+#define LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LITTLE_ENDIAN      LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LE_LE /* back-compat */
+#define LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BIG_ENDIAN LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BE_BE /* back-compat */
 #endif
 
+
 /* HAS_LONG_LONG:
  *     This symbol will be defined if the C compiler supports long long.
  */
 /* LONGLONGSIZE:
- *     This symbol contains the size of a long long, so that the 
+ *     This symbol contains the size of a long long, so that the
  *     C preprocessor can make decisions based on it.  It is only
  *     defined if the system supports long long.
  */
 /*#define OLD_PTHREAD_CREATE_JOINABLE  / **/
 
 /* HAS_PTHREAD_YIELD:
- *     This symbol, if defined, indicates that the 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.
  */
  *     This symbol, if defined, indicates that the scalbnl routine is
  *     available.  If ilogbl is also present we can emulate frexpl.
  */
-/*#define HAS_SCALBNL          / **/
+/*#define HAS_SCALBNL          /**/
 
 /* HAS_SENDMSG:
  *     This symbol, if defined, indicates that the sendmsg routine is
  *     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 
+ *     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()..
  */
 /*#define PWGECOS      / **/
 /*#define PWPASSWD     / **/
 
+/* I_QUADMATH:
+ *     This symbol, if defined, indicates that <quadmath.h> exists and
+ *     should be included.
+ */
+/*#define      I_QUADMATH              / **/
+
 /* I_SHADOW:
  *     This symbol, if defined, indicates that <shadow.h> exists and
  *     should be included.
  */
 /*#define INSTALL_USR_BIN_PERL / **/
 
+/* DOUBLEINFBYTES:
+ *     This symbol, if defined, is a comma-separated list of
+ *     hexadecimal bytes for the double precision infinity.
+ */
+/* DOUBLENANBYTES:
+ *     This symbol, if defined, is a comma-separated list of
+ *     hexadecimal bytes (0xHH) for the double precision not-a-number.
+ */
+/* LONGDBLINFBYTES:
+ *     This symbol, if defined, is a comma-separated list of
+ *     hexadecimal bytes for the long double precision infinity.
+ */
+/* LONGDBLNANBYTES:
+ *     This symbol, if defined, is a comma-separated list of
+ *     hexadecimal bytes (0xHH) for the long double precision not-a-number.
+ */
+#define DOUBLEINFBYTES  0xe2, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0x7f         /**/
+#define DOUBLENANBYTES  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x7f         /**/
+#define LONGDBLINFBYTES 0xe2, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0x7f         /**/
+#define LONGDBLNANBYTES 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00         /**/
+
 /* PERL_PRIfldbl:
  *     This symbol, if defined, contains the string used by stdio to
  *     format long doubles (format 'f') for output.
 #define MYMALLOC                       /**/
 
 /* Mode_t:
- *     This symbol holds the type used to declare file modes 
+ *     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.
  *     This symbol contains the number of bits a variable of type NVTYPE
  *     can preserve of a variable of type UVTYPE.
  */
+/* NV_OVERFLOWS_INTEGERS_AT:
+ *     This symbol gives the largest integer value that NVs can hold. This
+ *     value + 1.0 cannot be stored accurately. It is expressed as constant
+ *     floating point expression to reduce the chance of decimale/binary
+ *     conversion issues. If it can not be determined, the value 0 is given.
+ */
+/* NV_ZERO_IS_ALLBITS_ZERO:
+ *     This symbol, if defined, indicates that a variable of type NVTYPE
+ *     stores 0.0 in memory as all bits zero.
+ */
 #define        IVTYPE          long            /**/
 #define        UVTYPE          unsigned long           /**/
 #define        I8TYPE          char            /**/
 #define        U64SIZE         8       /**/
 #endif
 #define        NVSIZE          8               /**/
-/*#define      NV_PRESERVES_UV
+#define        NV_PRESERVES_UV
 #define        NV_PRESERVES_UV_BITS    31
+#define        NV_OVERFLOWS_INTEGERS_AT        256.0*256.0*256.0*256.0*256.0*256.0*2.0*2.0*2.0*2.0*2.0
+#undef NV_ZERO_IS_ALLBITS_ZERO
 
 /* IVdf:
  *     This symbol defines the format string used for printing a Perl IV
  *     This symbol contains the ~name expanded version of PRIVLIB, to be used
  *     in programs that are not prepared to deal with ~ expansion at run-time.
  */
-#define PRIVLIB "/sys/lib/perl/5.33.0"         /**/
-#define PRIVLIB_EXP "/sys/lib/perl/5.33.0"             /**/
+#define PRIVLIB "/sys/lib/perl/_P9P_VERSION"           /**/
+#define PRIVLIB_EXP "/sys/lib/perl/_P9P_VERSION"               /**/
 
 /* PTRSIZE:
  *     This symbol contains the size of a pointer, so that the C preprocessor
 /* 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 
+ *     is defined, and 'int *' otherwise.  This is only useful if you
  *     have select(), of course.
  */
 #define Select_fd_set_t        fd_set* /**/
  *     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. 
+ *     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.  
+ *     if (i < NSIG) then sig_number[i] == i.
  *     The last element is 0, corresponding to the 0 at the end of
  *     the sig_name list.
  */
  *     removed.  The elements in inc_version_list (inc_version_list.U) can
  *     be tacked onto this variable to generate a list of directories to search.
  */
-#define SITELIB "/sys/lib/perl/5.33.0/site_perl"               /**/
-#define SITELIB_EXP "/sys/lib/perl/5.33.0/site_perl"           /**/
-#define SITELIB_STEM "/sys/lib/perl/5.33.0/site_perl"          /**/
+#define SITELIB "/sys/lib/perl/_P9P_VERSION/site_perl"         /**/
+#define SITELIB_EXP "/sys/lib/perl/_P9P_VERSION/site_perl"             /**/
+#define SITELIB_STEM "/sys/lib/perl/_P9P_VERSION/site_perl"            /**/
 
 /* Size_t_size:
  *     This symbol holds the size of a Size_t in bytes.
  *     script to make sure (one hopes) that it runs with perl and not
  *     some shell.
  */
-#define STARTPERL "#!/bin/perl"                /**/
+#define STARTPERL "#!/bin/perl-_P9P_VERSION"           /**/
 
 /* STDCHAR:
  *     This symbol is defined to be the type of char used in stdio.h.
  */
 #define Uid_t uid_t            /* UID type */
 
+/* GMTIME_MAX:
+ *     This symbol contains the maximum value for the time_t offset that
+ *     the system function gmtime () accepts, and defaults to 0
+ */
+/* GMTIME_MIN:
+ *     This symbol contains the minimum value for the time_t offset that
+ *     the system function gmtime () accepts, and defaults to 0
+ */
+/* LOCALTIME_MAX:
+ *     This symbol contains the maximum value for the time_t offset that
+ *     the system function localtime () accepts, and defaults to 0
+ */
+/* LOCALTIME_MIN:
+ *     This symbol contains the minimum value for the time_t offset that
+ *     the system function localtime () accepts, and defaults to 0
+ */
+#define GMTIME_MAX             2147483647      /**/
+#define GMTIME_MIN             0       /**/
+#define LOCALTIME_MAX  2147483647      /**/
+#define LOCALTIME_MIN  0       /**/
+
 /* USE_64_BIT_INT:
  *     This symbol, if defined, indicates that 64-bit integers should
  *     be used when available.  If not defined, the native integers
 #define        USE_PERLIO              /**/
 #endif
 
+/* USE_QUADMATH:
+ *     This symbol, if defined, indicates that the quadmath library should
+ *     be used when available.
+ */
+#ifndef USE_QUADMATH
+/*#define      USE_QUADMATH            / **/
+#endif
+
 /* USE_SOCKS:
  *     This symbol, if defined, indicates that Perl should
  *     be built to use socks.
  *     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. 
+ *     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 
+ *             MakeMaker Makefile.PL INSTALLDIRS=vendor
  *     or equivalent.  See INSTALL for details.
  */
 /* PERL_VENDORARCH_EXP:
  *     This symbol, if defined, indicates that the copysignl routine is
  *     available.  If aintl is also present we can emulate modfl.
  */
-/*#define HAS_COPYSIGNL                / **/
+/*#define HAS_COPYSIGNL                /**/
 
 /* USE_CPLUSPLUS:
  *     This symbol, if defined, indicates that a C++ compiler was
  *     used to compiled Perl and will be used to compile extensions.
  */
-/*#define USE_CPLUSPLUS                / **/
+/*#define USE_CPLUSPLUS                /**/
 
 /* HAS_DBMINIT_PROTO:
  *     This symbol, if defined, indicates that the system provides
index 2b7aac3..00cf8d4 100644 (file)
@@ -31,12 +31,12 @@ afsroot='/afs'
 alignbytes='4'
 aphostname='/bin/uname -n'
 api_revision='5'
-api_subversion='0'
+api_subversion='1'
 api_version='33'
-api_versionstring='5.33.0'
+api_versionstring='5.33.1'
 ar='ar'
-archlib='/sys/lib/perl5/5.33.0/386'
-archlibexp='/sys/lib/perl5/5.33.0/386'
+archlib='/sys/lib/perl5/5.33.1/386'
+archlibexp='/sys/lib/perl5/5.33.1/386'
 archname64=''
 archname='386'
 archobjs=''
@@ -818,17 +818,17 @@ inc_version_list=' '
 inc_version_list_init='0'
 incpath=''
 inews=''
-installarchlib='/sys/lib/perl/5.33.0/386'
+installarchlib='/sys/lib/perl/5.33.1/386'
 installbin='/usr/bin'
 installman1dir='/sys/man/1pub'
 installman3dir='/sys/man/2pub'
 installprefix='/usr'
 installprefixexp='/usr'
-installprivlib='/sys/lib/perl/5.33.0'
+installprivlib='/sys/lib/perl/5.33.1'
 installscript='/usr/bin'
-installsitearch='/sys/lib/perl/5.33.0/site_perl/386'
+installsitearch='/sys/lib/perl/5.33.1/site_perl/386'
 installsitebin='/usr/bin'
-installsitelib='/sys/lib/perl/5.33.0/site_perl'
+installsitelib='/sys/lib/perl/5.33.1/site_perl'
 installstyle='lib/perl5'
 installusrbinperl='undef'
 installvendorarch=''
@@ -953,8 +953,8 @@ pmake=''
 pr=''
 prefix='/usr'
 prefixexp='/usr'
-privlib='/sys/lib/perl/5.33.0'
-privlibexp='/sys/lib/perl/5.33.0'
+privlib='/sys/lib/perl/5.33.1'
+privlibexp='/sys/lib/perl/5.33.1'
 procselfexe=''
 prototype='define'
 ptrsize='4'
@@ -1019,13 +1019,13 @@ sig_num='0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
 sig_num_init='0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 0'
 sig_size='50'
 signal_t='void'
-sitearch='/sys/lib/perl/5.33.0/site_perl/386'
+sitearch='/sys/lib/perl/5.33.1/site_perl/386'
 sitearchexp='/sys/lib/perl/site_perl/386'
 sitebin='/usr/bin'
 sitebinexp='/usr/bin'
-sitelib='/sys/lib/perl/5.33.0/site_perl'
-sitelib_stem='/sys/lib/perl/5.33.0/site_perl'
-sitelibexp='/sys/lib/perl/5.33.0/site_perl'
+sitelib='/sys/lib/perl/5.33.1/site_perl'
+sitelib_stem='/sys/lib/perl/5.33.1/site_perl'
+sitelibexp='/sys/lib/perl/5.33.1/site_perl'
 siteprefix='/usr'
 siteprefixexp='/usr'
 sizesize='4'
@@ -1058,7 +1058,7 @@ stdio_stream_array=''
 strerror_r_proto='0'
 strings='/sys/include/ape/string.h'
 submit=''
-subversion='0'
+subversion='1'
 sysman='/sys/man/1pub'
 tail=''
 tar=''
@@ -1139,8 +1139,8 @@ vendorlib_stem=''
 vendorlibexp=''
 vendorprefix=''
 vendorprefixexp=''
-version='5.33.0'
-version_patchlevel_string='version 33 subversion 0'
+version='5.33.1'
+version_patchlevel_string='version 33 subversion 1'
 versiononly='undef'
 vi=''
 xlibpth=''
@@ -1154,9 +1154,9 @@ config_args=''
 config_argc=0
 PERL_REVISION=5
 PERL_VERSION=33
-PERL_SUBVERSION=0
+PERL_SUBVERSION=1
 PERL_API_REVISION=5
 PERL_API_VERSION=33
-PERL_API_SUBVERSION=0
+PERL_API_SUBVERSION=1
 PERL_PATCHLEVEL=
 PERL_CONFIG_SH=true
index 7d9fc3c..1a6a8b5 100644 (file)
@@ -16,3 +16,4 @@ op/misc.t
 op/oct.t
 op/split.t
 op/stat.t
+.git
old mode 100644 (file)
new mode 100755 (executable)
index a848de2..b05a98f
@@ -12,3 +12,8 @@ ed plan9/genconfig.pl<<!
 g/_P9P_VERSION/s//$p9pvers/g
 w plan9/genconfig.pl
 !
+
+ed plan9/aperl<<!
+g/_P9P_VERSION/s//$p9pvers/g
+w plan9/aperl
+!
index ebd97db..14c1fae 100644 (file)
@@ -7,17 +7,21 @@
 # to run may be supplied on the command line as key=val pairs.
 #
 # Last Modified: 28-Jun-1996  Luther Huffman  lutherh@stratcom.com
+# Last Modified: May 2020 David Romano unobe@cpan.org
 #
 
+my $VERBOSE = 0;
+
 #==== Locations of installed Perl components
 $p9pvers="_P9P_VERSION";
+$version="$p9pvers";
 $prefix='';
 $p9p_objtype=$ENV{'objtype'};
 $builddir="/sys/src/cmd/perl/$p9pvers";
 $installbin="/$p9p_objtype/bin";
 $installman1dir="/sys/man/1";
 $installman3dir="/sys/man/2";
-$installprivlib="/sys/lib/perl";
+$installprivlib="/sys/lib/perl/$p9pvers";
 $installarchlib = "/$p9p_objtype/lib/perl/$p9pvers";
 $archname="plan9_$p9p_objtype";
 $installsitelib="$installprivlib/site_perl";
@@ -28,13 +32,15 @@ unshift(@INC,'lib');  # In case someone didn't define Perl_Root
                       # before the build
 
 if ($ARGV[0] eq '-f') {
+  shift @ARGV;
   open(ARGS,'<',$ARGV[1]) or die "Can't read data from $ARGV[1]: $!\n";
-  @ARGV = ();
+  shift @ARGV;
   while (<ARGS>) {
     push(@ARGV,split(/\|/,$_));
   }
   close ARGS;
 }
+my @extensions = @ARGV;
 
 if (-f "config.h") { $infile = "config.h"; $outdir = "../"; }
 elsif (-f "plan9/config.h") { $infile = "plan9/config.h";  $outdir = "./"; }
@@ -54,11 +60,9 @@ $time = localtime;
 $cf_by = $ENV{'user'};
 ($vers = $]) =~ tr/./_/;
 
-# Plan 9 doesn't actually use version numbering. Following the original Unix
-# precedent of assigning a Unix edition number based on the edition number
-# of the manuals, I am referring to this as Plan 9, 1st edition.
-$osvers = '1';
-
+# 9front as Plan 9, 5th edition.
+$osvers = '5';
 print OUT <<EndOfIntro;
 # This file generated by genconfig.pl on a Plan 9 system.
 # Input obtained from:
@@ -67,13 +71,15 @@ print OUT <<EndOfIntro;
 # Time: $time
 
 package='perl5'
-CONFIG='true'
+PERL_CONFIG_SH='true'
 cf_time='$time'
 cf_by='$cf_by'
 ccdlflags=''
 cccdlflags=''
 libpth='$installprivlib'
 ld='pcc'
+cppflags=''
+cppstdin='cpp'
 lddlflags=''
 ranlib=''
 ar='ar'
@@ -96,7 +102,8 @@ man3ext=''
 arch='$archname'
 archname='$archname'
 osname='plan9'
-extensions='IO Socket Opcode Fcntl POSIX DynaLoader FileHandle'
+version='$p9pvers'
+extensions='@extensions'
 osvers='$osvers'
 sig_maxsig='19'
 sig_name='ZERO HUP INT QUIT ILL ABRT FPE KILL SEGV PIPE ALRM TERM USR1 USR2 CHLD CONT STOP TSTP TTIN TTOU'
@@ -176,7 +183,9 @@ print OUT "myuname='Plan9 $myname $osvers $p9p_objtype'\n";
 # equivalent to the C preprocessor macros
 if (open(SH,'<',"${outdir}config_h.SH")) {
   while (<SH>) {
-    next unless m%^#(?!if).*\$%;
+       # suicide @ regcomp.c:22117
+    #next unless m%^#(?!if).*\$%;
+       next unless !index($_, '#') && index($_, '#if') == -1 && rindex($_, '$') == length($_)-1;
     s/^#//; s!(.*?)\s*/\*.*!$1!;
     my(@words) = split;
     $words[1] =~ s/\(.*//;  # Clip off args from macro
@@ -195,7 +204,7 @@ if (open(SH,'<',"${outdir}config_h.SH")) {
   }
   close SH;
 }
-else { warn "Couldn't read ${outfile}config_h.SH: $!\n"; }
+elsif ($VERBOSE) { warn "Couldn't read ${outfile}config_h.SH: $!\n"; }
 $pp_vars{PLAN9} = 'define'; #Plan 9 specific
 
 # OK, now read the C header file, and retcon statements into config.sh
@@ -233,7 +242,7 @@ while (<IN>) {
   }
   elsif (not length $val and not $had_val) {
     # Wups -- should have been shell var for C preprocessor directive
-    warn "Constant $token not found in config_h.SH\n";
+    warn "Constant $token not found in config_h.SH\n" if $VERBOSE;
     $token =~ tr/A-Z/a-z/;
     $token = "d_$token" unless $token =~ /^i_/;
     print OUT "$token='$state'\n";
@@ -248,7 +257,7 @@ while (<IN>) {
     delete $val_vars{$token};
   }
   elsif (!$pp_vars{$token}) {  # Haven't seen it previously, either
-    warn "Constant $token not found in config_h.SH (val=|$val|)\n";
+    warn "Constant $token not found in config_h.SH (val=|$val|)\n" if $VERBOSE;
     $token =~ tr/A-Z/a-z/;
     print OUT "$token='$val'\n";
     if ($token =~ s/exp$//) {print OUT "$token='$val'\n";}
@@ -256,14 +265,15 @@ while (<IN>) {
 }
 close IN;
 
-foreach (sort keys %pp_vars) {
-  warn "Didn't see $_ in $infile\n";
-}
-foreach (sort keys %val_vars) {
-  warn "Didn't see $_ in $infile(val)\n";
+if ($VERBOSE) {
+  foreach (sort keys %pp_vars) {
+    warn "Didn't see $_ in $infile\n";
+  }
+  foreach (sort keys %val_vars) {
+    warn "Didn't see $_ in $infile(val)\n";
+  }
 }
 
-
 # print OUT "libs='",join(' ',@libs),"'\n";
 # print OUT "libc='",join(' ',@crtls),"'\n";
 
@@ -280,10 +290,8 @@ if (open(PL,'<',"${outdir}patchlevel.h")) {
   }
   close PL;
 }
-else { warn "Can't read ${outdir}patchlevel.h - skipping 'PERL_VERSION'"; }
+elsif ($VERBOSE) { warn "Can't read ${outdir}patchlevel.h - skipping 'PERL_VERSION'" }
 
 print OUT "pager='/bin/p'\n";
 
 close OUT;
-
-
diff --git a/plan9/math.h b/plan9/math.h
new file mode 100644 (file)
index 0000000..fc0d725
--- /dev/null
@@ -0,0 +1,12 @@
+/* Our math.h for HAS_FPCLASSIFY in plan9.config
+ *           FP_NORMAL     Normalized
+ *           FP_ZERO       Zero
+ *           FP_INFINITE   Infinity
+ *           FP_SUBNORMAL  Denormalized
+ *           FP_NAN        NaN
+ */
+#define FP_NORMAL 1
+#define FP_ZERO 2
+#define FP_INFINITE 3
+#define FP_SUBNORMAL 4
+#define FP_NAN 5
index 588ade9..6bc420e 100644 (file)
@@ -1,21 +1,42 @@
 APE=/sys/src/ape
 < $APE/config
 <plan9/buildinfo
-sourcedir = /sys/src/cmd/perl/$p9pvers
 archname = plan9_$objtype
-privlib=/sys/lib/perl
-archlib = /$objtype/lib/perl/$p9pvers
-sitelib = $privlib/site_perl
+privroot = /sys/lib/perl
+privlib  = $privroot/$p9pvers
+archroot = /$objtype/lib/perl
+archlib  = $archroot/$p9pvers
+sitelib  = $privlib/site_perl
 sitearch = $archlib/site_perl
+corelib  = $archlib/CORE
+arpalib  = $corelib/arpa
 
-CFLAGS =  -B  -D_POSIX_SOURCE -D_BSD_EXTENSION -DMY_UV_MAX=0x7fffffffUL
-LDFLAGS = -B 
+pwd=`{pwd}
+cpanlib=`{cd cpan; ls -ld * | grep '^d' | awk '{ print $10 }' | grep -v '^\.'}
+icpanlib=`{echo $pwd^/cpan/^$cpanlib^/lib}
+distlib=`{cd dist; ls -ld * | grep '^d' | awk '{ print $10 }' | grep -v '^\.'}
+idistlib=`{echo $pwd^/dist/^$distlib $pwd^/dist/^$distlib^/lib }
+extlib=`{cd ext; ls -ld * | grep '^d' | awk '{ print $10 }' | grep -v '^\.'}
+iextlib=`{echo $pwd^/ext/^$extlib $pwd^/ext/^$extlib/lib }
 
-CCCMD = $CC  -c $CFLAGS 
+buildlibs=`{echo -I$pwd^/^(lib archlib privlib) -I^$icpanlib -I^$idistlib -I^$iextlib }
+miniperl=`{echo $pwd/miniperl $buildlibs }
+perl=`{echo $pwd/perl $buildlibs }
+xscmd=`{echo $pwd/dist/ExtUtils-ParseXS/lib/ExtUtils/xsubpp -noprototypes -typemap $pwd/dist/ExtUtils-ParseXS/t/typemap}
+miniperlxs=`{echo $miniperl $xscmd}
+perlxs=`{echo $perl $xscmd}
 
-perllib = $archlib/CORE/libperl.a
+BASECFLAGS=-B -D_SUSV2_SOURCE -D_POSIX_SOURCE -D_BSD_EXTENSION
+PERLCFLAGS =-DPERL_CORE $BASECFLAGS
+CFLAGS=-DPERL_IS_MINIPERL $PERLCFLAGS
 
-perlshr = $archlib/CORE/libperlshr.a
+CCCMD = $CC  -c $CFLAGS
+PERLCCCMD= $CC -c $PERLCFLAGS
+XSCCCMD= $CC -c $BASECFLAGS
+
+perllib = archlib/CORE/libperl.a
+
+perlshr = archlib/CORE/libperlshr.a
 
 installman1dir = /sys/man/1
 installman3dir = /sys/man/2
@@ -23,116 +44,377 @@ installman3dir = /sys/man/2
 podnames = perl perlbook perldata perldebtut perldiag perldsc perlform perlfunc perlipc perllexwarn perllol perlmod perlmodlib perlmodinstall perlnewmod perlop perlootut perlopentut perlpacktut perlpod perlport perlrequick perlretut perlref perlreftut perlrequick perlrun perlsec perlstyle perlsub perlsyn perltie perltrap perlutil perlunifaq perluniintro perlvar
 faqpodnames = perlfaq perlfaq1 perlfaq2 perlfaq3 perlfaq4 perlfaq5 perlfaq6 perlfaq7 perlfaq8 perlfaq9
 advpodnames = perlapi perlapio perlcall perlclib perlcompile perldebguts perldbmfilter perldebug perldelta perldiag perlebcdic perlembed perlfilter perlfork perlguts perlhack perlintern perliol perllocale perlnumber perlobj perlpodspec perlre perlthrtut perltodo perlunicode perlunicook perlxs perlxs perlxstut
-archpodnames = perlaix perlamiga perlbeos perlbs2000 perlcygwin perldgux perldos perlfreebsd perlhpux perlhurd perlirix perlmacos perlnetware perlos2 perlos390 perlos400 perlplan9 perlqnx perlsolaris perltru64 perlvms perlvos perlwin32
-histpods = perl5004delta perl5005delta perl561delta perl56delta perl570delta perl571delta perl572delta perl573delta perl58delta perlhist
+archpodnames = perlaix perlamiga perlbeos perlbs2000 perlce perlcygwin perldgux perldos perlfreebsd perlhpux perlhurd perlirix perlmacos perlmpeix perlnetware perlos2 perlos390 perlos400 perlplan9 perlqnx perlsolaris perltru64 perlvms perlvos perlwin32
+histpodnames = perl5004delta perl5005delta perl561delta perl56delta perl570delta perl571delta perl572delta perl573delta perl58delta perlhist
 
 libpods = ${podnames:%=pod/%.pod}
 
 perlpods = $libpods
 
-extensions = IO Socket Opcode DynaLoader Fcntl POSIX
-ext_xs = IO.xs Socket.xs Opcode.xs  dl_none.xs Fcntl.xs POSIX.xs
+extensions = File::Glob IO Opcode DynaLoader Fcntl POSIX Cwd re B Devel::Peek attributes Hash::Util Hash::Util::FieldHash mro Storable Time::HiRes Unicode::Normalize List::Util
+ext_xs = Glob.xs IO.xs Opcode.xs  dl_none.xs Fcntl.xs POSIX.xs Cwd.xs re.xs B.xs Peek.xs attributes.xs Util.xs FieldHash.xs mro.xs Storable.xs HiRes.xs Normalize.xs ListUtil.xs
 ext_c = ${ext_xs:%.xs=%.c}
-ext_obj = ${ext_xs:%.xs=%.$O}
+ext_obj = ${ext_xs:%.xs=%.$O} bsd_glob.$O poll.$O re_comp.$O re_exec.$O
+
+# Socket requires a full version of Perl (one with IO to build).
+more_extensions = Socket Data::Dumper
+more_ext_xs = Socket.xs Dumper.xs
+more_ext_c = ${more_ext_xs:%.xs=%.c}
+more_ext_obj = ${more_ext_xs:%.xs=%.$O}
 
-obj = av.$O deb.$O doio.$O doop.$O dquote.$O dump.$O globals.$O gv.$O hv.$O locale.$O malloc.$O mathoms.$O mg.$O numeric.$O op.$O pad.$O perlapi.$O perlio.$O perly.$O pp.$O pp_ctl.$O pp_hot.$O pp_pack.$O pp_sort.$O pp_sys.$O reentr.$O regcomp.$O regexec.$O run.$O scope.$O sv.$O taint.$O time64.$O toke.$O universal.$O utf8.$O util.$O
+obj = av.$O caretx.$O deb.$O doio.$O doop.$O dquote.$O dump.$O globals.$O gv.$O hv.$O keywords.$O locale.$O malloc.$O mathoms.$O mg.$O mro_core.$O numeric.$O op.$O pad.$O perlapi.$O perlio.$O perly.$O pp.$O pp_ctl.$O pp_hot.$O pp_pack.$O pp_sort.$O pp_sys.$O reentr.$O regcomp.$O regexec.$O run.$O scope.$O sv.$O taint.$O time64.$O toke.$O universal.$O utf8.$O util.$O
 
 OBJS = perl.$O plan9.$O $obj
 
-testlist = base/*.t comp/*.t cmd/*.t io/*.t op/*.t
+# TODO: what's this used for?
+testlist = `{cd t; echo base/*.t comp/*.t cmd/*.t run/*.t io/*.t re/*.t opbasic/*.t op/*.t uni/*.t perf/*.t}
 
 install:V:     perl preplibrary 
-               cp perl /$objtype/bin/perl
-               cp plan9/aperl /rc/bin/Perl
-               mk man
+               cp perl /$objtype/bin/perl-$p9pvers
+               cp plan9/aperl /rc/bin/Perl-$p9pvers
                
-perl:          config.h miniperlmain.$O miniperl $archlib/Config.pm perlmain.$O $perlshr 
-               $LD $CFLAGS -o perl perlmain.$O $perllib $perlshr
+               if (test ! -d $privroot) mkdir $privroot
+               if (test ! -d $privlib) mkdir $privlib
+               if (test ! -d $privlib/auto) mkdir $privlib/auto
+               if (test ! -d $sitelib) mkdir $sitelib
+               if (test ! -d $archroot) mkdir $archroot
+               if (test ! -d $archlib) mkdir $archlib
+               if (test ! -d $sitearch) mkdir $sitearch
+               if (test ! -d $corelib) mkdir $corelib
+               if (test ! -d $arpalib) mkdir $arpalib
+               cp *.h plan9/*.h  $corelib
+               cp plan9/arpa/*.h  $arpalib
+               
+               # Populate library directories
+               {cd privlib ; tar c . } | {cd $privlib ; tar x }
+               {cd lib ; tar c . } | {cd $privlib ; tar x }
+               {cd archlib ; tar c . } | {cd $archlib ; tar x }
+               # mk man # don't make man pages now--resolve multiversion
+               
+perl:  perlnosocket more_extensions
+               $LD $PERLCFLAGS -o perl perlmain.$O perl.$O $perllib $perlshr $more_ext_obj
+
+perlnosocket:          config.h miniperlmain.$O miniperl archlib/Config.pm perlmain.$O $perlshr
+               $LD $PERLCFLAGS -o perl perlmain.$O perl.$O $perllib $perlshr
                
 miniperl:      config.h $perllib miniperlmain.$O 
                $LD  $CFLAGS -o miniperl miniperlmain.$O  $perllib 
 
-preplibrary:V: miniperl $archlib/Config.pm
-                       cd $privlib
-                       for (file in *.pm */*.pm $archlib/Config.pm) $sourcedir/miniperl  -e 'use AutoSplit; autosplit(@ARGV)' $file $privlib/auto
+preplibrary:V: miniperl archlib/Config.pm
+                       mkdir -p privlib/auto
+                       for (file in lib/*.pm lib/*/*.pm archlib/Config.pm) $miniperl -e 'use AutoSplit; autosplit(@ARGV)' $file privlib/auto
        
 $perllib(%):N: %
 $perllib: ${OBJS:%=$perllib(%)}
+               mkdir -p archlib/CORE
                ar rv $perllib $OBJS
                $RANLIB $perllib
                        
-miniperlmain.$O:       config.h 
+miniperlmain.$O:       config.h uudmap.h
                                $CCCMD miniperlmain.c
 
 perlmain.$O:   config.h perlmain.c
-                       $CCCMD perlmain.c
+                       $PERLCCCMD perl.c
+                       $PERLCCCMD perlmain.c
 
-perlmain.c:    miniperl vms/writemain.pl
-                       ./miniperl vms/writemain.pl $extensions
+malloc.$O: malloc.c
+                       # Does the PTRDIFF_MAX need to be set per architecture?
+                       $CCCMD -DPTRDIFF_MAX^'='^9223372036854775807L malloc.c
+
+perlmain.c:    miniperl extensions archlib/Config.pm
+                       $miniperl -MExtUtils::Miniperl -e 'writemain(\q{perlmain.c}, @ARGV)' $extensions
 
 config.h:              plan9/fndvers
                        plan9/fndvers 
-                       cp config.h $archlib/CORE
+                       mkdir -p archlib/CORE
+                       cp config.h archlib/CORE
 
 $perlshr(%):N: %
 $perlshr:  ${ext_obj:%=$perlshr(%)}
                ar rv $perlshr $ext_obj
                $RANLIB $perlshr
 
-IO.c:          miniperl ext/IO/IO.xs
-                       ./miniperl $privlib/ExtUtils/xsubpp -noprototypes -typemap $privlib/ExtUtils/typemap ext/IO/IO.xs > $target
-                       cp ext/IO/*.pm $privlib
-                       if (test !-d $privlib/IO) { 
-                       mkdir $privlib/IO
-                       cp ext/IO/lib/IO/*.pm $privlib/IO
-                        }
-
-Socket.$O:     config.h Socket.c
-                       $CCCMD -I plan9 Socket.c
-
-Socket.c:              miniperl ext/Socket/Socket.xs
-                       ./miniperl $privlib/ExtUtils/xsubpp -noprototypes -typemap $privlib/ExtUtils/typemap ext/Socket/Socket.xs > $target
-                       cp ext/Socket/Socket.pm $privlib
-
-Opcode.c:              miniperl ext/Opcode/Opcode.xs
-                       ./miniperl $privlib/ExtUtils/xsubpp -noprototypes -typemap $privlib/ExtUtils/typemap ext/Opcode/Opcode.xs > $target
-                       cp ext/Opcode/*.pm $privlib
-
-Fcntl.c:               miniperl ext/Fcntl/Fcntl.xs
-                       ./miniperl $privlib/ExtUtils/xsubpp -noprototypes -typemap $privlib/ExtUtils/typemap ext/Fcntl/Fcntl.xs > $target
-                       cp ext/Fcntl/Fcntl.pm $privlib
-
-POSIX.c:               miniperl ext/POSIX/POSIX.xs
-                       ./miniperl $privlib/ExtUtils/xsubpp -noprototypes -typemap $privlib/ExtUtils/typemap ext/POSIX/POSIX.xs > $target
-                       cp ext/POSIX/POSIX.pm $privlib
-
-dl_none.c:     miniperl ext/DynaLoader/dl_none.xs
-                       ./miniperl $privlib/ExtUtils/xsubpp -noprototypes -typemap $privlib/ExtUtils/typemap ext/DynaLoader/dl_none.xs > $target
-                       cp ext/DynaLoader/DynaLoader.pm $privlib
-
-test:V:                
-                       bind -b $privlib $sourcedir/lib
-                       bind -b $archlib $sourcedir/lib
-                       cd $sourcedir/t
-                       rm -f perl
-                       cp /$objtype/bin/perl $sourcedir/t
+uudmap.h:      generate_uudmap.c
+                       $CCCMD generate_uudmap.c
+                       # This is currently a show-stopper for cross-compilation: find the true $objtype by looking at kernel?
+                       $LD $CFLAGS -o generate_uudmap generate_uudmap.$O
+                       chmod +x generate_uudmap
+                       ./generate_uudmap uudmap.h bitcount.h mg_data.h
+
+extensions:V: miniperl archlib/Config.pm $ext_c dist/XSLoader/XSLoader.pm
+
+more_extensions:V: perlnosocket $more_ext_c $more_ext_obj
+                       ext_obj=`{echo $ext_obj $more_ext_obj}
+
+Socket.$O: Socket.c
+                       $XSCCCMD -I plan9 Socket.c
+
+attributes.$O: attributes.c
+                       $XSCCCMD -I plan9 attributes.c
+
+mro.$O: mro.c
+                       $XSCCCMD -I plan9 mro.c
+
+B.$O: B.c
+                       $XSCCCMD -I plan9 B.c
+
+Peek.$O: Peek.c
+                       $XSCCCMD -I plan9 Peek.c
+
+Util.$O: Util.c
+                       $XSCCCMD -I plan9 Util.c
+
+FieldHash.$O: FieldHash.c
+                       $XSCCCMD -I plan9 FieldHash.c
+
+re.$O: re.c
+                       $XSCCCMD -DPERL_EXT_RE_BUILD -DPERL_EXT_RE_DEBUG -DPERL_EXT -I plan9 re.c
+
+re_comp.$O: re_comp.c
+                       $XSCCCMD -DPERL_EXT_RE_BUILD -DPERL_EXT_RE_DEBUG -DPERL_EXT -I plan9 re_comp.c
+
+re_exec.$O: re_exec.c
+                       $XSCCCMD -DPERL_EXT_RE_BUILD -DPERL_EXT_RE_DEBUG -DPERL_EXT -I plan9 re_exec.c
+
+Cwd.$O: Cwd.c IO.c
+                       cp dist/IO/ppport.h dist/PathTools
+                       $XSCCCMD -DDOUBLE_SLASHES_SPECIAL^'='^0 -I plan9 Cwd.c
+
+IO.$O: extensions
+                       $XSCCCMD -I plan9 IO.c
+
+poll.$O: extensions
+                       $XSCCCMD -I plan9 poll.c
+
+POSIX.$O: extensions
+                       $XSCCCMD -I plan9 POSIX.c
+
+Glob.$O: extensions
+                       $XSCCCMD -I plan9 Glob.c
+
+bsd_glob.$O: extensions
+                       $XSCCCMD -I plan9 -I. bsd_glob.c
+
+Normalize.$O:  extensions
+                       $XSCCCMD -I plan9 -I. Normalize.c
+
+Dumper.$O:     Dumper.c
+                       $XSCCCMD -I plan9 -I. Dumper.c
+
+HiRes.$O:      extensions
+                       $XSCCCMD -I plan9 -I. HiRes.c
+
+Storable.$O:   extensions
+                       $XSCCCMD -I plan9 -I. Storable.c
+
+ListUtil.$O:   extensions
+                       $XSCCCMD -I plan9 -I. ListUtil.c
+
+Opcode.$O: extensions
+                       $XSCCCMD -I plan9 Opcode.c
+
+Fcntl.$O: extensions
+                       $XSCCCMD -I plan9 Fcntl.c
+
+dl_none.$O: extensions
+                       $XSCCCMD -I plan9 dl_none.c
+
+Glob.c:                archlib/Config.pm       ext/File-Glob/Glob.xs
+                       cd ext/File-Glob
+                       $miniperl Makefile.PL # to write constants      
+                       cd $pwd
+                       $miniperlxs ext/File-Glob/Glob.xs > $target
+                       cp ext/File-Glob/bsd_glob.^(c h) $pwd
+                       mkdir -p archlib/File
+                       cp ext/File-Glob/Glob.pm archlib/File/Glob.pm
+
+ppport.h:   archlib/Config.pm
+                       if (test ! -f /bin/sh) bind -a /386/bin/ape /bin
+                       # specify the list, otherwise suicide
+                       $miniperl mkppport --list mkppport.lst
+
+Cwd.c:         archlib/Config.pm dist/PathTools/Cwd.xs
+                       $miniperlxs dist/PathTools/Cwd.xs > $target
+                       cp dist/PathTools/Cwd.pm archlib
+                       { cd dist/PathTools/lib; tar c . } | { mkdir -p archlib; cd archlib; tar x }
+
+IO.c:          archlib/Config.pm dist/IO/IO.xs ppport.h
+                       $miniperlxs dist/IO/IO.xs > $target
+                       cp dist/IO/poll.^(c h) $pwd
+                       cp dist/IO/IO.pm archlib
+                       { cd dist/IO/lib; tar c . } | { mkdir -p archlib; cd archlib; tar x }
+
+dist/XSLoader/XSLoader.pm:  archlib/Config.pm
+                       cd dist/XSLoader
+                       $miniperl XSLoader_pm.PL
+                       cp XSLoader.pm $pwd/archlib
+
+ext/Errno/Errno.pm: perlnosocket       
+                       cd ext/Errno
+                       $perl Makefile.PL
+                       $perl Errno_pm.PL arch.txt
+                       cp Errno.pm $pwd/archlib
+               
+Socket.c:              perlnosocket cpan/Socket/Socket.xs ext/Errno/Errno.pm
+                       cd cpan/Socket
+                       $perl Makefile.PL # to write const-xs.inc
+                       cd $pwd
+                       $perlxs cpan/Socket/Socket.xs > $target
+                       cp cpan/Socket/Socket.pm archlib
+
+uni.data:      archlib/Config.pm lib/unicore/mktables
+                       $miniperl lib/unicore/mktables -C lib/unicore -makelist -p
+
+Normalize.c:           archlib/Config.pm dist/Unicode-Normalize/Normalize.xs uni.data
+                       $miniperl dist/Unicode-Normalize/mkheader
+                       $miniperlxs dist/Unicode-Normalize/Normalize.xs > $target
+                       mkdir -p archlib/Unicode
+                       cp dist/Unicode-Normalize/Normalize.pm archlib/Unicode
+
+Dumper.c:              perlnosocket dist/Data-Dumper/Dumper.xs
+                       $perlxs dist/Data-Dumper/Dumper.xs > $target
+                       mkdir -p archlib/Data
+                       cp dist/Data-Dumper/Dumper.pm archlib/Data
+
+HiRes.c:               archlib/Config.pm dist/Time-HiRes/HiRes.xs
+                       cd dist/Time-HiRes
+                       $miniperl Makefile.PL # to write const-xs.inc
+                       cd $pwd
+                       $miniperlxs dist/Time-HiRes/HiRes.xs > $target
+                       mkdir -p archlib/Time
+                       cp dist/Time-HiRes/HiRes.pm archlib/Time
+
+ListUtil.c:            archlib/Config.pm cpan/Scalar-List-Utils/ListUtil.xs
+                       cp cpan/Scalar-List-Utils/multicall.h $pwd
+                       $miniperlxs cpan/Scalar-List-Utils/ListUtil.xs > $target
+                       { cd cpan/Scalar-List-Utils/lib; tar c . } | { mkdir -p archlib; cd archlib; tar x }
+
+Storable.c:            archlib/Config.pm dist/Storable/Storable.xs
+                       $miniperlxs dist/Storable/Storable.xs > $target
+                       cp dist/Storable/Storable.pm archlib
+
+Opcode.c:              archlib/Config.pm ext/Opcode/Opcode.xs
+                       $miniperlxs ext/Opcode/Opcode.xs > $target
+                       cp ext/Opcode/^(Opcode ops)^.pm archlib
+
+Fcntl.c:               archlib/Config.pm ext/Fcntl/Fcntl.xs
+                       cd ext/Fcntl
+                       $miniperl Makefile.PL # to write const-xs.inc
+                       cd $pwd
+                       $miniperlxs ext/Fcntl/Fcntl.xs > $target
+                       cp ext/Fcntl/Fcntl.pm archlib
+
+POSIX.c:               archlib/Config.pm ext/POSIX/POSIX.xs
+                       cd ext/POSIX
+                       $miniperl Makefile.PL # to write const-xs.inc
+                       cd $pwd
+                       $miniperlxs ext/POSIX/POSIX.xs > $target
+                       cp ext/POSIX/lib/POSIX.pm archlib
+
+B.c:           archlib/Config.pm ext/B/B.xs
+                       cd ext/B
+                       $miniperl Makefile.PL PERL_CORE^'='^1 # to write const-xs.inc
+                       cd $pwd
+                       $miniperlxs ext/B/B.xs > $target
+                       cp ext/B/^(B O)^.pm archlib
+
+Peek.c:                archlib/Config.pm ext/Devel-Peek/Peek.xs
+                       $miniperlxs ext/Devel-Peek/Peek.xs > $target
+                       cp ext/Devel-Peek/Peek.pm archlib
+
+attributes.c:  archlib/Config.pm ext/attributes/attributes.xs
+                       $miniperlxs ext/attributes/attributes.xs > $target
+                       cp ext/attributes/attributes.pm archlib
+
+mro.c: archlib/Config.pm ext/mro/mro.xs
+                       $miniperlxs ext/mro/mro.xs > $target
+                       cp ext/mro/mro.pm archlib
+
+Util.c:        archlib/Config.pm ext/Hash-Util/Util.xs
+                       $miniperlxs ext/Hash-Util/Util.xs > $target
+                       { cd ext/Hash-Util/lib; tar c . } | { cd archlib; tar x }
+
+FieldHash.c:   archlib/Config.pm ext/Hash-Util-FieldHash/FieldHash.xs
+                       $miniperlxs ext/Hash-Util-FieldHash/FieldHash.xs > $target
+                       { cd ext/Hash-Util-FieldHash/lib; tar c . } | { cd archlib; tar x }
+       
+re.c:  archlib/Config.pm ext/re/re.xs
+                       $miniperlxs ext/re/re.xs > $target
+                       cp ext/re/re_^(comp top)^.h $pwd
+                       cp ext/re/re.pm archlib
+
+re_comp.c:     miniperl re.c regcomp.c
+                       cp regcomp.c $target
+
+re_exec.c:     miniperl re.c regexec.c
+                       cp regexec.c $target
+
+dl_none.c:     archlib/Config.pm ext/DynaLoader/dl_none.xs
+                       cd ext/DynaLoader;
+                       $miniperl DynaLoader_pm.PL
+                       cd $pwd
+                       $miniperlxs ext/DynaLoader/dl_none.xs > $target
+                       cp ext/DynaLoader/DynaLoader.pm archlib
+
+preptest:Q: perl
+                       # Bind the crap out of everything, as different tests expect different INCs
+                       cp perl t/perl
+                       cd t
+                       mntpt=/$objtype/lib/perl
+                       if (test ! -d $mntpt ) {
+                               mkdir $mntpt
+                               rmdir=1
+                       }
+                       ramfs -m $mntpt
+                       mkdir -p $mntpt/5.32.0/site_perl
+                       echo -n Binding directories
+                       for (l in $pwd/lib $pwd/archlib $icpanlib $idistlib $iextlib ) {
+                               if (test -d $l ) {
+                                       if (! ~ `{grep $l <{ns} >[1]/dev/null; echo $status} '') bind -a $l $mntpt/5.32.0/site_perl
+                                       echo -n .
+                               }
+                       }
+                       bind $mntpt/5.32.0/site_perl $pwd/lib
+                       echo done
+                       echo Binding sh
+                       if (! ~ `{grep /$objtype/bin/ape <{ns} >[1]/dev/null; echo $status} '') bind -a /$objtype/bin/ape /bin
+
+minitest:V: preptest
+                       cd t
+                       perl TEST $testlist
+                       unmount $pwd/lib
+                       unmount $mntpt
+                       if (~ $rmdir 1) rm $mntpt
+                       rm t/perl
+
+test:V: preptest
+                       cd t
                        perl TEST `{ ls */*.t | comm -23 - ../plan9/exclude }
+                       unmount $pwd/lib
+                       unmount $mntpt
+                       if (~ $rmdir 1) rm $mntpt
+                       rm t/perl
 
-plan9.$O:      config.h ./plan9/plan9.c
-                       cp ./plan9/plan9.c ./plan9.c
+plan9.$O:      config.h plan9/plan9.c
+                       cp plan9/plan9.c plan9.c
                        $CCCMD plan9.c
 
 %.$O:  config.h %.c
                $CCCMD $stem.c
 
-$archlib/Config.pm:            miniperl config.sh
-                               ./miniperl configpm $archlib/Config.pm
+archlib/Config.pm:             config.sh
+                               $miniperl make_patchnum.pl
+                               $miniperl configpm
+                               cp lib/Config.pm archlib/Config.pm
+                               cp lib/Config_heavy.pl archlib/Config_heavy.pl
+                               cp lib/Config_git.pl archlib/Config_git.pl
+
 
-config.sh:     miniperl config.h
-               ./miniperl ./plan9/genconfig.pl
+config.sh:     miniperl
+               miniperl plan9/genconfig.pl $extensions $more_extensions
 
 installall:V:  
-                       for (objtype in 386 mips 68020 sparc) mk install
+                       for (386 68000 68020 arm arm amd64 mips power power64 sparc sparc64 spim) mk install
 
 man:V:         $perlpods pod/pod2man.PL perl
                        perl pod/pod2man.PL
@@ -143,8 +425,8 @@ man:V:              $perlpods pod/pod2man.PL perl
                        for (i in $histpodnames) pod/pod2man pod/$i.pod > $installman3dir/$i
                        
 nuke clean:V:  
-               rm -f *.$O   $extensions^.pm config.sh $perllib config.h $perlshr perlmain.c perl miniperl $archlib/Config.pm $ext_c
-               rm -rf $privlib/IO
+               rm -f *.$O config.sh $perllib config.h $perlshr perlmain.c perl miniperl git_version.h $ext_c $more_ext_c generate_uudmap uudmap.h bitcount.h mg_data.h plan9.c plan9ish.h math.h bsd_glob.^(c h) poll.^(c h) re_*.^(c h) uni.data multicall.h
+               rm -rf privlib archlib
 
 deleteman:V:
                        rm -f $installman1dir/perl* $installman3dir/perl*
index ebdac27..02ef76c 100644 (file)
@@ -1,20 +1,31 @@
 #include "EXTERN.h"
 #include "perl.h"
+#include "./plan9/math.h"
 
-/* Functions mentioned in <sys/socket.h> but not implemented */
+#define _PLAN9_SOURCE
+#include <u.h>
 
-int getsockopt(int a, int b, int c, void *d, int *e)
-{
-    croak("Function \"getsockopt\" not implemented in this version of perl.");
-    return (int)NULL; 
-}
+/** Function fpclassify(double) is required by sv.c, which was refactored in perl-5.24 era and uses other libraries to classify floating points. **/
 
-int setsockopt(int a, int b, int c, void *d, int *e)
-{
-    croak("Function \"setsockopt\" not implemented in this version of perl.");
-    return (int)NULL;
+/* See /sys/src/lib/port/frexp.c */
+#define SHIFT 20
+
+int fpclassify(double d) {
+       FPdbleword x;
+
+       /* order matters: only isNaN can operate on NaN */
+       if ( isNaN(d) )
+               return FP_NAN;
+       else if ( isInf(d, 0) )
+               return FP_INFINITE;
+       else if ( d == 0 )
+               return FP_ZERO;
+
+       x.x = fabs(d);
+       return (x.hi >> SHIFT) ? FP_NORMAL : FP_SUBNORMAL;
 }
 
+/* Functions mentioned in /sys/include/ape/sys/socket.h but not implemented */
 
 int recvmsg(int a, struct msghdr *b, int c)
 {
@@ -29,7 +40,7 @@ int sendmsg(int a, struct msghdr *b, int c)
 } 
 
 
-/* Functions mentioned in <netdb.h> but not implemented */
+/* Functions mentioned in /sys/include/ape/sys/netdb.h but not implemented */
 struct netent *getnetbyname(const char *a)
 {
     croak("Function \"getnetbyname\" not implemented in this version of perl.");
@@ -112,23 +123,3 @@ void endservent()
 {
     croak("Function \"endservent\" not implemented in this version of perl.");
 }
-
-int tcdrain(int)
-{
-croak("Function \"tcdrain\" not implemented in this version of perl.");
-}
-
-int tcflow(int, int)
-{
-croak("Function \"tcflow\" not implemented in this version of perl.");
-}
-
-int tcflush(int, int)
-{
-croak("Function \"tcflush\" not implemented in this version of perl.");
-}
-
-int tcsendbreak(int, int)
-{
-croak("Function \"tcsendbreak\" not implemented in this version of perl.");
-}
index fa81502..7fd8c7e 100644 (file)
  *     getgrgid() routines are available to get group entries.
  *     The getgrent() has a separate definition, HAS_GETGRENT.
  */
-/*#define HAS_GROUP            / **/
+/*#define HAS_GROUP            /**/
 
 /* HAS_PASSWD
  *     This symbol, if defined, indicates that the getpwnam() and
  *     getpwuid() routines are available to get password entries.
  *     The getpwent() has a separate definition, HAS_GETPWENT.
  */
-/*#define HAS_PASSWD           / **/
+/*#define HAS_PASSWD           /**/
 
 #define HAS_KILL
 #define HAS_WAIT
@@ -42,7 +42,7 @@
  *     to remove all versions of a file if unlink() is called.  This is
  *     probably only relevant for VMS.
  */
-/* #define UNLINK_ALL_VERSIONS         / **/
+/* #define UNLINK_ALL_VERSIONS         /**/
 
 /* PLAN9:
  *     This symbol, if defined, indicates that the program is running under
old mode 100644 (file)
new mode 100755 (executable)
index dd96c1f..d300966
@@ -1,51 +1,59 @@
 #!/bin/rc
-# This is an rc shell script which unpacks the perl distribution, builds 
-# directories, and puts files where they belong.
-# To use, just run it from within the plan9 subdirectory with the appropriate
-# permissions.
-# Last modified 6/30/96 by:
+# This is an rc shell script puts files where they belong and does a bit of
+# patching in order not to modify some perl core code which might impact other
+# OSes. To use, just run it from within the plan9 subdirectory with the
+# appropriate permissions.
+# First modified 6/30/96 by:
 # Luther Huffman, Strategic Computer Solutions, Inc., lutherh@stratcom.com
+# Last modified May 2020 by:
+# David Romano, unobe@cpan.org
 
+# Get the Perl version information
 awk -f versnum ../patchlevel.h
 . buildinfo
-builddir = `{ cd .. ; pwd } 
+
+builddir = `{ cd .. ; pwd }
+# 'typestr' is used by /sys/src/cmd/cc/lex.c, but not sure when/if it is ever used.
+# Patch sv.c from afar, which uses 'typestr' as a variable name, and uses bit-fields.
+# Also patch some other things:
+status=`{cd $builddir; ape/patch -p1 <plan9/9front.patch}
+
 if (~ $#* 0) platforms = $objtype
 if not switch($1) {
-       case -a ; platforms = (386 mips sparc 68020)
+       case -a ; platforms = (386 68000 68020 arm arm amd64 mips power power64 sparc sparc64 spim)
        case * ; echo 'Usage: setup.rc [-a]' >[1=2] ; exit
 }
-sourcedir=/sys/src/cmd/perl/$p9pvers
-privlib=/sys/lib/perl
-sitelib=$privlib/site_perl
 
-#Build source directory
-if (test ! -d /sys/src/cmd/perl) mkdir /sys/src/cmd/perl
-if (test ! -d $sourcedir) mkdir $sourcedir
+# Update some files
+cp plan9.c plan9ish.h mkfile $builddir
 
-#Populate source directory
-echo Building source directories ...
-{cd $builddir ; tar c .} | { cd $sourcedir ; tar x}
-cp $builddir/plan9/plan9.c $builddir/plan9/plan9ish.h $builddir/plan9/mkfile $sourcedir
-cd $sourcedir/lib ; rm -rf *
-
-#Build library directories
+exit;
+# Why is this done during setup and not during 'mk install'?
+# Build library directories
 echo Building library directories ...
+privroot=/sys/lib/perl
+privlib=$privroot/$p9pvers
+sitelib=$privlib/site_perl
+
+if (test ! -d $privroot) mkdir $privroot
 if (test ! -d $privlib) mkdir $privlib
 if (test ! -d $privlib/auto) mkdir $privlib/auto
 if (test ! -d $sitelib) mkdir $sitelib
 for(i in $platforms){
-       archlib=/$i/lib/perl/$p9pvers
+       archroot=/$i/lib/perl
+       archlib=$archroot/$p9pvers
        sitearch=$archlib/site_perl
        corelib=$archlib/CORE
        arpalib=$corelib/arpa
-       if (test ! -d /$i/lib/perl) mkdir /$i/lib/perl
+       if (test ! -d $archroot) mkdir $archroot
        if (test ! -d $archlib) mkdir $archlib
        if (test ! -d $sitearch) mkdir $sitearch
        if (test ! -d $corelib) mkdir $corelib
        if (test ! -d $arpalib) mkdir $arpalib
-       cp $builddir/*.h $builddir/plan9/*.h  $corelib
-       cp $builddir/plan9/arpa/*.h  $arpalib
+       cp $builddir/*.h *.h  $corelib
+       cp arpa/*.h  $arpalib
 }
 
-#Populate library directories
+# Populate library directories
 {cd $builddir/lib ; tar c . } | {cd $privlib ; tar x }
diff --git a/plan9/uninstall.rc b/plan9/uninstall.rc
new file mode 100755 (executable)
index 0000000..503991a
--- /dev/null
@@ -0,0 +1,25 @@
+#!/bin/rc
+
+. buildinfo
+if (~ $#* 0) platforms = $objtype
+if not switch($1) {
+       case -a ; platforms = (386 68000 68020 arm arm amd64 mips power power64 sparc sparc64 spim)
+       case * ; echo 'Usage: uninstall.rc [-a]' >[1=2] ; exit
+}
+sourceroot=/sys/src/cmd/perl
+sourcedir=$sourceroot/$p9pvers
+privroot=/sys/lib/perl
+privlib=$privroot/$p9pvers
+sitelib=$privlib/site_perl
+
+echo Uninstalling perl/$p9pvers
+cd $sourceroot
+
+for(i in $platforms){
+    archroot=/$i/lib/perl
+       archlib=$archroot/$p9pvers
+       if (test -d $archlib) rm -r $archlib
+    rm /$i/bin/perl-$p9pvers
+}
+if (test -d $privlib) rm -r $privlib
+if (test -d $sourcedir) rm -r $sourcedir
index 6e579f3..55f80d0 100644 (file)
@@ -1,8 +1,9 @@
-/PERL_VERSION/ {base = $3}
-/PERL_SUBVERSION/ {subvers = $3}
+/define PERL_REVISION/ {revision = $3}
+/define PERL_VERSION/ {version = $3}
+/define PERL_SUBVERSION/ {subvers = $3}
 END {
 if (subvers == 0) 
-       printf "p9pvers = 5.%03d\n", base> "buildinfo";
+       printf "p9pvers = %d.%d\n", revision, version> "buildinfo";
 else
-       printf "p9pvers = 5.%03d_%02d\n" , base, subvers> "buildinfo";
+       printf "p9pvers = %d.%d.%d\n" , revision, version, subvers> "buildinfo";
 }
index 3e1ab89..b1e2037 100644 (file)
@@ -181,6 +181,7 @@ aux h2ph h2xs perlbug pl2pm pod2html pod2man splain xsubpp
 
     perlhist           Perl history records
     perldelta          Perl changes since previous version
+    perl5330delta      Perl changes in version 5.33.0
     perl5320delta      Perl changes in version 5.32.0
     perl5303delta      Perl changes in version 5.30.3
     perl5302delta      Perl changes in version 5.30.2
@@ -253,7 +254,7 @@ aux h2ph h2xs perlbug pl2pm pod2html pod2man splain xsubpp
 
 =for buildtoc flag +r
 
-    perlcn             Perl for Simplified Chinese (in EUC-CN)
+    perlcn             Perl for Simplified Chinese (in UTF-8)
     perljp             Perl for Japanese (in EUC-JP)
     perlko             Perl for Korean (in EUC-KR)
     perltw             Perl for Traditional Chinese (in Big5)
@@ -283,7 +284,6 @@ aux h2ph h2xs perlbug pl2pm pod2html pod2man splain xsubpp
     perlqnx            Perl notes for QNX
     perlriscos         Perl notes for RISC OS
     perlsolaris        Perl notes for Solaris
-    perlsymbian        Perl notes for Symbian
     perlsynology       Perl notes for Synology
     perltru64          Perl notes for Tru64
     perlvms            Perl notes for VMS
index d81b551..b976913 100644 (file)
@@ -48,12 +48,12 @@ L<perlop/Operator Precedence and Associativity>.
 
 =head2 New Unicode properties C<Identifier_Status> and C<Identifier_Type> supported
 
-Unicode is in the process of revising its regular expression
-requirements: L<https://www.unicode.org/draft/reports/tr18/tr18.html>.
+Unicode has revised its regular expression requirements:
+L<https://www.unicode.org/reports/tr18/tr18-21.html>.
 As part of that they are wanting more properties to be exposed, ones
 that aren't part of the strict UCD (Unicode character database). These
 two are used for examining inputs for security purposes. Details on
-their usage is at L<https://www.unicode.org/reports/tr39/proposed.html>.
+their usage is at L<https://www.unicode.org/reports/tr39/>.
 
 =head2 It is now possible to write C<qr/\p{Name=...}/>, or
 C<qr!\p{na=/(SMILING|GRINNING) FACE/}!>
diff --git a/pod/perl5330delta.pod b/pod/perl5330delta.pod
new file mode 100644 (file)
index 0000000..ab879e0
--- /dev/null
@@ -0,0 +1,94 @@
+=encoding utf8
+
+=head1 NAME
+
+perl5330delta - what is new for perl v5.33.0
+
+=head1 DESCRIPTION
+
+This document describes differences between the 5.32.0 release and the 5.33.0
+release.
+
+If you are upgrading from an earlier release such as 5.30.0, first read
+L<perl5320delta>, which describes differences between 5.30.0 and 5.32.0.
+
+=head1 Modules and Pragmata
+
+=head2 Updated Modules and Pragmata
+
+=over 4
+
+=item *
+
+L<feature> has been upgraded from version 1.58 to 1.59.
+
+=item *
+
+L<Module::CoreList> has been upgraded from version 5.20200620 to 5.20200717.
+
+=back
+
+=head1 Acknowledgements
+
+Perl 5.33.0 represents approximately 4 weeks of development since Perl
+5.32.0 and contains approximately 4,300 lines of changes across 47 files
+from 6 authors.
+
+Excluding auto-generated files, documentation and release tools, there were
+approximately 69 lines of changes to 9 .pm, .t, .c and .h files.
+
+Perl continues to flourish into its fourth decade thanks to a vibrant
+community of users and developers. The following people are known to have
+contributed the improvements that became Perl 5.33.0:
+
+Andy Dougherty, Dagfinn Ilmari Mannsåker, Eric Herman, Karen Etheridge,
+Leon Timmermans, Sawyer X.
+
+The list above is almost certainly incomplete as it is automatically
+generated from version control history. In particular, it does not include
+the names of the (very much appreciated) contributors who reported issues to
+the Perl bug tracker.
+
+Many of the changes included in this version originated in the CPAN modules
+included in Perl's core. We're grateful to the entire CPAN community for
+helping Perl to flourish.
+
+For a more complete list of all of Perl's historical contributors, please
+see the F<AUTHORS> file in the Perl source distribution.
+
+=head1 Reporting Bugs
+
+If you find what you think is a bug, you might check the perl bug database
+at L<https://github.com/Perl/perl5/issues>.  There may also be information at
+L<http://www.perl.org/>, the Perl Home Page.
+
+If you believe you have an unreported bug, please open an issue at
+L<https://github.com/Perl/perl5/issues>.  Be sure to trim your bug down to a
+tiny but sufficient test case.
+
+If the bug you are reporting has security implications which make it
+inappropriate to send to a public issue tracker, then see
+L<perlsec/SECURITY VULNERABILITY CONTACT INFORMATION>
+for details of how to report the issue.
+
+=head1 Give Thanks
+
+If you wish to thank the Perl 5 Porters for the work we had done in Perl 5,
+you can do so by running the C<perlthanks> program:
+
+    perlthanks
+
+This will send an email to the Perl 5 Porters list with your show of thanks.
+
+=head1 SEE ALSO
+
+The F<Changes> file for an explanation of how to view exhaustive details on
+what changed.
+
+The F<INSTALL> file for how to build Perl.
+
+The F<README> file for general stuff.
+
+The F<Artistic> and F<Copying> files for copyright information.
+
+=cut
index cc90839..3c7b7c0 100644 (file)
@@ -56,9 +56,9 @@ looks like C<(eval 34)>.
 
 =item *
 
-Each scalar C<${"_<$filename"}> contains C<"_<$filename">.  This is
+Each scalar C<${"_<$filename"}> contains C<$filename>.  This is
 also the case for evaluated strings that contain subroutines, or
-which are currently being executed.  The $filename for C<eval>ed
+which are currently being executed.  The C<$filename> for C<eval>ed
 strings looks like C<(eval 34)>.
 
 =item *
index d0b27c9..33edd82 100644 (file)
 
 =head1 NAME
 
-perldelta - what is new for perl v5.33.0
+perldelta - what is new for perl v5.33.1
 
 =head1 DESCRIPTION
 
-This document describes differences between the 5.32.0 release and the 5.33.0
+This document describes differences between the 5.33.0 release and the 5.33.1
 release.
 
-If you are upgrading from an earlier release such as 5.30.0, first read
-L<perl5320delta>, which describes differences between 5.30.0 and 5.32.0.
+If you are upgrading from an earlier release such as 5.32.0, first read
+L<perl5330delta>, which describes differences between 5.32.0 and 5.33.0.
 
 =head1 Modules and Pragmata
 
+=head2 New Modules and Pragmata
+
+=over 4
+
+=item *
+
+L<ExtUtils::PL2Bat> 0.002 has been added to the Perl core.
+
+This module is a generalization of the C<pl2bat> script. It being a script has led
+to at least two forks of this code, this modules will unify them under one
+implementation with tests.
+
+=back
+
 =head2 Updated Modules and Pragmata
 
 =over 4
 
 =item *
 
-L<feature> has been upgraded from version 1.58 to 1.59.
+L<B> has been upgraded from version 1.80 to 1.81.
+
+=item *
+
+L<B::Deparse> has been upgraded from version 1.54 to 1.55.
+
+=item *
+
+L<Data::Dumper> has been upgraded from version 2.174 to 2.175.
+
+=item *
+
+L<Devel::Peek> has been upgraded from version 1.28 to 1.29.
+
+=item *
+
+L<Devel::PPPort> has been upgraded from version 3.57 to 3.60.
+
+New C<PERL_VERSION_*> comparison macros are now available.
+
+C<ppport.h --api-info> no longer includes non-API info unless that is the only match
+
+=item *
+
+L<DynaLoader> has been upgraded from version 1.47 to 1.48.
+
+=item *
+
+L<Errno> has been upgraded from version 1.30 to 1.31.
+
+=item *
+
+L<Exporter> has been upgraded from version 5.74 to 5.75.
+
+=item *
+
+L<ExtUtils::Miniperl> has been upgraded from version 1.09 to 1.10.
+
+=item *
+
+L<ExtUtils::ParseXS> has been upgraded from version 3.40 to 3.41.
+
+=item *
+
+L<Fcntl> has been upgraded from version 1.13 to 1.14.
+
+=item *
+
+L<feature> has been upgraded from version 1.59 to 1.60.
+
+A new L<multidimensional|feature/"The 'multidimensional' feature">
+feature has been added, which is enabled by
+default but allows turning off L<multi-dimensional array
+emulation|perldata/Multi-dimensional array emulation>.
+
+=item *
+
+L<File::Path> has been upgraded from version 2.16 to 2.17.
+
+=item *
+
+L<Hash::Util> has been upgraded from version 0.23 to 0.24.
+
+=item *
+
+L<Hash::Util::FieldHash> has been upgraded from version 1.20 to 1.21.
+
+=item *
+
+L<IO> has been upgraded from version 1.43 to 1.44.
+
+The C<error> method now reports the error state for both the input and
+output streams for sockets and character devices.  Similarly
+C<clearerr> now clears the error state for both streams.
+
+A spurious error reported for regular file handles has been
+fixed in L<IO::Handle>.  L<GH #18019|https://github.com/Perl/perl5/issues/18019>
+
+=item *
+
+L<IPC::SysV> has been upgraded from version 2.07 to 2.08.
+
+=item *
+
+L<JSON::PP> has been upgraded from version 4.04 to 4.05.
+
+=item *
+
+L<Math::Complex> has been upgraded from version 1.5901 to 1.5902.
+
+=item *
+
+L<Module::CoreList> has been upgraded from version 5.20200717 to 5.20200820.
+
+=item *
+
+L<mro> has been upgraded from version 1.23 to 1.24.
+
+=item *
+
+L<Net::Ping> has been upgraded from version 2.72 to 2.73_01.
+
+=item *
+
+L<PerlIO::mmap> has been upgraded from version 0.016 to 0.017.
+
+=item *
+
+L<Pod::Usage> has been upgraded from version 1.69 to 1.70.
+
+=item *
+
+L<POSIX> has been upgraded from version 1.94 to 1.95.
+
+=item *
+
+L<Safe> has been upgraded from version 2.41 to 2.42.
+
+=item *
+
+L<Socket> has been upgraded from version 2.029 to 2.030.
+
+=item *
+
+L<Storable> has been upgraded from version 3.21 to 3.22.
+
+=item *
+
+L<strict> has been upgraded from version 1.11 to 1.12.
+
+=item *
+
+L<threads> has been upgraded from version 2.25 to 2.26.
+
+=item *
+
+L<threads::shared> has been upgraded from version 1.61 to 1.62.
+
+=item *
+
+L<Time::HiRes> has been upgraded from version 1.9764 to 1.9765.
+
+=item *
+
+L<Unicode::Normalize> has been upgraded from version 1.27 to 1.28.
+
+=item *
+
+L<warnings> has been upgraded from version 1.47 to 1.48.
+
+=item *
+
+L<XS::APItest> has been upgraded from version 1.09 to 1.11.
+
+=item *
+
+L<XS::Typemap> has been upgraded from version 0.17 to 0.18.
+
+=back
+
+=head1 Documentation
+
+=head2 Changes to Existing Documentation
+
+We have attempted to update the documentation to reflect the changes
+listed in this document.  If you find any we have missed, open an issue
+at L<https://github.com/Perl/perl5/issues>.
+
+Additionally, the following selected changes have been made:
+
+=head3 L<perldebguts>
+
+=over 4
+
+=item *
+
+Corrected the description of the scalar C<< ${"_<$filename"} >>
+variables.
+
+=back
+
+=head3 L<perlfunc>
+
+=over 4
+
+=item *
+
+Better explanation of what happens when C<sleep> is called with a zero or
+negative value.
+
+=back
+
+=head3 L<perlguts>
+
+=over 4
+
+=item *
+
+Corrected C<my_rpeep> example in perlguts.
+
+=item *
+
+A section has been added on the formatted printing of special sizes.
+
+=back
+
+=head3 L<perlop>
+
+=over 4
+
+=item *
+
+The C<< <> >> and C<<< <<>> >>> operators are commonly referred to as
+the diamond and double diamond operators respectively, but that wasn't
+mentioned previously in their documentation.
+
+=item *
+
+Document range op behavior change.
+
+=back
+
+=head3 L<perlpacktut>
+
+=over 4
+
+=item *
+
+Incorrect variables used in an example have been fixed.
+
+=back
+
+=head1 Diagnostics
+
+The following additions or changes have been made to diagnostic output,
+including warnings and fatal error messages.  For the complete list of
+diagnostic messages, see L<perldiag>.
+
+=head2 New Diagnostics
+
+=head3 New Errors
+
+=over 4
+
+=item *
+
+L<Multidimensional hash lookup is disabled|perldiag/"Multidimensional hash lookup is disabled">
+
+This accompanies the new L<multidimensional|feature/"The 'multidimensional' feature"> feature.
+
+=back
+
+=head2 Changes to Existing Diagnostics
+
+=over 4
 
 =item *
 
-L<Module::CoreList> has been upgraded from version 5.20200620 to 5.20200717.
+L<Use of uninitialized value%s|perldiag/"Use of uninitialized value%s">
+
+This warning may now include the array or hash index when the
+uninitialized value is the result of an element not found.  This will
+only happen if the index is a simple non-magical variable.
+
+=back
+
+=head1 Utility Changes
+
+=head2 L<perl5db.pl> (the debugger)
+
+=over 4
+
+=item * New option: C<HistItemMinLength>
+
+This option controls the minimum length a command must be to get stored in
+history.  Traditionally, this has been fixed at 2.  Changes to the debugger
+are often perilous, and new bugs should be reported so the debugger can be
+debugged.
+
+=item * Fix to C<i> and C<l> commands
+
+The C<i $var> and C<l $var> commands work again with lexical variables.
+
+=back
+
+=head1 Configuration and Compilation
+
+=over 4
+
+=item *
+
+The minimum supported Bison version is now 2.4, and the maxiumm is 3.7.
+
+=item *
+
+Newer 64-bit versions of the Intel C/C++ compiler are now recognised
+and have the correct flags set.
+
+=back
+
+=head1 Testing
+
+Tests were added and changed to reflect the other additions and changes
+in this release.
+
+=head1 Platform Support
+
+=head2 New Platforms
+
+=over 4
+
+=item 9front
+
+Allow building Perl on i386 9front systems (fork of plan9).
+
+=back
+
+=head2 Updated Platforms
+
+=over 4
+
+=item Plan9
+
+Improve support for Plan9 on i386 platforms.
+
+=item MacOS (Darwin)
+
+The hints file for darwin has been updated to handle future MacOS versions
+beyond 10. L<GH #17946|https://github.com/Perl/perl5/issues/17946>
+
+=back
+
+=head2 Discontinued Platforms
+
+=over 4
+
+=item Symbian
+
+Support code relating to Symbian has been removed.  Symbian was an
+operating system for mobile devices.  The port was last updated in July
+2009, and the platform itself in October 2012.
+
+=back
+
+=head2 Platform-Specific Notes
+
+=over 4
+
+=item z/OS
+
+The locale categories C<LC_SYNTAX> and C<LC_TOD> are now recognized.
+Perl doesn't do anything with these, except it now allows you to specify
+them.  They are included in C<LC_ALL>.
+
+=back
+
+=head1 Internal Changes
+
+=over 4
+
+=item *
+
+The C<PERL_GLOBAL_STRUCT> compilation option has been removed, and
+with it the need or the C<dVAR> macro.  C<dVAR> remains defined as a
+no-op outside C<PERL_CORE> for backwards compatiblity with XS modules.
+
+=item *
+
+A new savestack type C<SAVEt_HINTS_HH> has been added, which neatens the
+previous behaviour of C<SAVEt_HINTS>.  On previous versions the types and
+values pushed to the save stack would depend on whether the hints included the
+C<HINT_LOCALIZE_HH> bit, which complicates external code that inspects the
+save stack. The new version uses a different savestack type to indicate the
+difference.
+
+=item *
+
+A new API function L<perlapi/av_count> has been added which gives a
+clearly named way to find how many elements are in an array.
+
+=back
+
+=head1 Selected Bug Fixes
+
+=over 4
+
+=item *
+
+On Win32, C<waitpid(-1, WNOHANG)> could sometimes have a very large
+timeout.  L<GH #16529|https://github.com/Perl/perl5/issues/16529>
+
+=item *
+
+C<MARK> and hence C<items> are now correctly initialized in BOOT XSUBs.
+
+=item *
+
+Some list assignments involving C<undef> on the left-hand side were
+over-optimized and produced incorrect results. L<GH #16685|https://github.com/Perl/perl5/issues/16685>, L<GH #17816|https://github.com/Perl/perl5/issues/17816>
 
 =back
 
 =head1 Acknowledgements
 
-Perl 5.33.0 represents approximately 4 weeks of development since Perl
-5.32.0 and contains approximately 4,300 lines of changes across 47 files
-from 6 authors.
+Perl 5.33.1 represents approximately 5 weeks of development since Perl
+5.33.0 and contains approximately 37,000 lines of changes across 740 files
+from 34 authors.
 
 Excluding auto-generated files, documentation and release tools, there were
-approximately 69 lines of changes to 9 .pm, .t, .c and .h files.
+approximately 11,000 lines of changes to 290 .pm, .t, .c and .h files.
 
 Perl continues to flourish into its fourth decade thanks to a vibrant
 community of users and developers. The following people are known to have
-contributed the improvements that became Perl 5.33.0:
-
-Andy Dougherty, Dagfinn Ilmari Mannsåker, Eric Herman, Karen Etheridge,
-Leon Timmermans, Sawyer X.
+contributed the improvements that became Perl 5.33.1:
+
+Adam Hartley, Christian Walde (Mithaldu), Dagfinn Ilmari Mannsåker, Dan
+Book, David Mitchell, E. Choroba, Graham Knop, Graham Ollis, Hauke D, Ivan
+Baidakou, James E Keenan, John Lightsey, Karen Etheridge, Karl Williamson,
+Leon Timmermans, Nicolas R., Paul Evans, Petr Písař, raiph, Renee Baecker,
+Ricardo Signes, Richard Leach, Romano, Ryan Voots, Samuel Thibault, Sawyer
+X, Scott Baker, Sizhe Zhao, Thibault Duponchelle, Todd Rinaldo, Tomasz
+Konojacki, Tom Stellard, Tony Cook, vividsnow.
 
 The list above is almost certainly incomplete as it is automatically
 generated from version control history. In particular, it does not include
index 2b2df17..5dc85d0 100644 (file)
@@ -2235,8 +2235,8 @@ variable and glob that.
 
 =item exec? I'm not *that* kind of operating system
 
-(F) The C<exec> function is not implemented on some systems, e.g., Symbian
-OS.  See L<perlport>.
+(F) The C<exec> function is not implemented on some systems, e.g.
+Catamount. See L<perlport>.
 
 =item %sExecution of %s aborted due to compilation errors.
 
@@ -3886,6 +3886,17 @@ mutable before freeing the ops.
 
 (F) You don't have System V message IPC on your system.
 
+=item Multidimensional hash lookup is disabled
+
+(F) You supplied a list of subscripts to a hash lookup under
+C<< no feature "multidimensional"; >>, eg:
+
+  $z = $foo{$x, $y};
+
+which by default acts like:
+
+  $z = $foo{join($;, $x, $y)};
+
 =item Multidimensional syntax %s not supported
 
 (W syntax) Multidimensional arrays aren't written like C<$foo[1,2,3]>.
@@ -5302,6 +5313,11 @@ a dirhandle.  Check your control flow.
 (W closed) The filehandle you're reading from got itself closed sometime
 before now.  Check your control flow.
 
+=item readline() on unopened filehandle %s
+
+(W unopened) The filehandle you're reading from was never opened.  Check your
+control flow.
+
 =item read() on closed filehandle %s
 
 (W closed) You tried to read from a closed filehandle.
index 2bf2e85..6f2fd52 100644 (file)
@@ -127,6 +127,16 @@ C<experimental::vlb>.
 See also: L<perlre/(*positive_lookbehind:I<pattern>)> and
 L<perlre/(*negative_lookbehind:I<pattern>)>
 
+=item isa infix operator
+
+Introduced in Perl 5.32.0.
+
+Using this feature triggers warnings in the category
+C<experimental::isa>.
+
+The ticket for this feature is
+L<[perl #17200]|https://github.com/Perl/perl5/issues/17200>
+
 =back
 
 =head2 Accepted features
index e95c54f..0ce5512 100644 (file)
@@ -3585,6 +3585,20 @@ respectively.  POSITION and the return value are based at zero.
 If the substring is not found, L<C<index>|/index STR,SUBSTR,POSITION>
 returns -1.
 
+Find characters or strings:
+
+    index("Perl is great", "P");     # Returns 0
+    index("Perl is great", "g");     # Returns 8
+    index("Perl is great", "great"); # Also returns 8
+
+Attempting to find something not there:
+
+    index("Perl is great", "Z");     # Returns -1 (not found)
+
+Using an offset to find the I<second> occurrence:
+
+    index("Perl is great", "e", 5);  # Returns 10
+
 =item int EXPR
 X<int> X<integer> X<truncate> X<trunc> X<floor>
 
@@ -7389,6 +7403,14 @@ X<sleep> X<pause>
 Causes the script to sleep for (integer) EXPR seconds, or forever if no
 argument is given.  Returns the integer number of seconds actually slept.
 
+EXPR should be a positive integer. If called with a negative integer,
+L<C<sleep>|/sleep EXPR> does not sleep but instead emits a warning, sets
+$! (C<errno>), and returns zero.
+
+C<sleep 0> is permitted, but a function call to the underlying platform
+implementation still occurs, with any side effects that may have.
+C<sleep 0> is therefore not exactly identical to not sleeping at all.
+
 May be interrupted if the process receives a signal such as C<SIGALRM>.
 
     eval {
index 1d9f18a..b37e701 100644 (file)
@@ -2195,11 +2195,14 @@ per-subroutine or recursive stage, like this:
         PL_peepp = my_peep;
 
     static peep_t prev_rpeepp;
-    static void my_rpeep(pTHX_ OP *o)
+    static void my_rpeep(pTHX_ OP *first)
     {
-        OP *orig_o = o;
-        for(; o; o = o->op_next) {
+        OP *o = first, *t = first;
+        for(; o = o->op_next, t = t->op_next) {
             /* custom per-op optimisation goes here */
+            o = o->op_next;
+            if (!o || o == t) break;
+            /* custom per-op optimisation goes AND here */
         }
         prev_rpeepp(aTHX_ orig_o);
     }
@@ -2336,12 +2339,12 @@ the op tree of the main root.
 The Perl interpreter can be regarded as a closed box: it has an API
 for feeding it code or otherwise making it do things, but it also has
 functions for its own use.  This smells a lot like an object, and
-there are ways for you to build Perl so that you can have multiple
+there is a way for you to build Perl so that you can have multiple
 interpreters, with one interpreter represented either as a C structure,
 or inside a thread-specific structure.  These structures contain all
 the context, the state of that interpreter.
 
-One macro controls the major Perl build flavor: MULTIPLICITY.  The
+The macro that controls the major Perl build flavor is MULTIPLICITY.  The
 MULTIPLICITY build has a C structure that packages all the interpreter
 state.  With multiplicity-enabled perls, PERL_IMPLICIT_CONTEXT is also
 normally defined, and enables the support for passing in a "hidden" first
@@ -2349,23 +2352,6 @@ argument that represents all three data structures.  MULTIPLICITY makes
 multi-threaded perls possible (with the ithreads threading model, related
 to the macro USE_ITHREADS.)
 
-Two other "encapsulation" macros are the PERL_GLOBAL_STRUCT and
-PERL_GLOBAL_STRUCT_PRIVATE (the latter turns on the former, and the
-former turns on MULTIPLICITY.)  The PERL_GLOBAL_STRUCT causes all the
-internal variables of Perl to be wrapped inside a single global struct,
-struct perl_vars, accessible as (globals) &PL_Vars or PL_VarsPtr or
-the function  Perl_GetVars().  The PERL_GLOBAL_STRUCT_PRIVATE goes
-one step further, there is still a single struct (allocated in main()
-either from heap or from stack) but there are no global data symbols
-pointing to it.  In either case the global struct should be initialized
-as the very first thing in main() using Perl_init_global_struct() and
-correspondingly tear it down after perl_free() using Perl_free_global_struct(),
-please see F<miniperlmain.c> for usage details.  You may also need
-to use C<dVAR> in your coding to "declare the global variables"
-when you are using them.  dTHX does this for you automatically.
-
-=for apidoc Amnh||dVAR
-
 To see whether you have non-const data you can use a BSD (or GNU)
 compatible C<nm>:
 
@@ -2379,11 +2365,6 @@ and the C<U> is <undefined>, external symbols referred to.
 The test F<t/porting/libperl.t> does this kind of symbol sanity
 checking on C<libperl.a>.
 
-For backward compatibility reasons defining just PERL_GLOBAL_STRUCT
-doesn't actually hide all symbols inside a big global struct: some
-PerlIO_xxx vtables are left visible.  The PERL_GLOBAL_STRUCT_PRIVATE
-then hides everything (see how the PERLIO_FUNCS_DECL is used).
-
 All this obviously requires a way for the Perl internal functions to be
 either subroutines taking some kind of structure as the first
 argument, or subroutines taking nothing as the first argument.  To
@@ -2594,13 +2575,6 @@ Never add a comma after C<pTHX> yourself--always use the form of the
 macro with the underscore for functions that take explicit arguments,
 or the form without the argument for functions with no explicit arguments.
 
-If one is compiling Perl with the C<-DPERL_GLOBAL_STRUCT> the C<dVAR>
-definition is needed if the Perl global variables (see F<perlvars.h>
-or F<globvar.sym>) are accessed in the function and C<dTHX> is not
-used (the C<dTHX> includes the C<dVAR> if necessary).  One notices
-the need for C<dVAR> only with the said compile-time define, because
-otherwise the Perl global variables are visible as-is.
-
 =head2 Should I do anything special if I call perl from multiple threads?
 
 If you create interpreters in one thread and then proceed to call them in
@@ -2790,6 +2764,11 @@ clutter to use the C<%z> length modifier (for I<siZe>):
 This modifier is not portable, so its use should be restricted to
 C<PerlIO_printf()>.
 
+=head2 Formatted Printing of C<Ptrdiff_t>, C<intmax_t>, C<short> and other special sizes
+
+There are modifiers for these special situations if you are using
+C<PerlIO_printf()>.  See L<perlfunc/size>.
+
 =head2 Pointer-To-Integer and Integer-To-Pointer
 
 Because pointer size does not necessarily equal integer size,
index ba57259..032eb8b 100644 (file)
@@ -1080,7 +1080,7 @@ C<make>, however, failed with output (excerpted) like this:
       mg.o reentr.o mro.o hv.o av.o run.o pp_hot.o sv.o \
       pp.o scope.o pp_ctl.o pp_sys.o doop.o doio.o regexec.o \
       utf8.o taint.o deb.o universal.o globals.o perlio.o \
-      perlapi.o numeric.o mathoms.o locale.o pp_pack.o pp_sort.o  \
+      numeric.o mathoms.o locale.o pp_pack.o pp_sort.o  \
       miniperlmain.o opmini.o perlmini.o
     pp.o: In function `Perl_pp_pow':
     pp.c:(.text+0x2db9): undefined reference to `pow'
index d66869f..7f412e4 100644 (file)
@@ -43,7 +43,7 @@ APIs, for example:
 The first one explicitly passes in the context, which is needed for
 e.g. threaded builds.  The second one does that implicitly; do not get
 them mixed.  If you are not passing in a aTHX_, you will need to do a
-dTHX (or a dVAR) as the first thing in the function.
+dTHX as the first thing in the function.
 
 See L<perlguts/"How multiple interpreters and concurrency are
 supported"> for further discussion about context.
@@ -80,12 +80,6 @@ right combination of C<const>s:
     static const char * const yippee[] =
         {"hi", "ho", "silver"};
 
-There is a way to completely hide any modifiable globals (they are all
-moved to heap), the compilation setting
-C<-DPERL_GLOBAL_STRUCT_PRIVATE>.  It is not normally used, but can be
-used for testing, read more about it in L<perlguts/"Background and
-PERL_IMPLICIT_CONTEXT">.
-
 =item *
 
 Not exporting your new function
index cb9934c..00393be 100644 (file)
@@ -696,6 +696,7 @@ the strings?).
  Sawyer X  5.32.0       2020-Jun-20
 
  Sawyer X  5.33.0       2020-Jul-17     The 5.33 development track
+ Ether     5.33.1       2020-Aug-20
 
 =head2 SELECTED RELEASE SIZES
 
index 2f0fa4a..4b895d9 100644 (file)
@@ -1214,6 +1214,14 @@ If you want to force strings to be interpreted as numbers, you could say
 
     @numbers = ( 0+$first .. 0+$last );
 
+B<Note:> In Perl versions 5.30 and below, I<any> string on the left-hand
+side beginning with C<"0">, including the string C<"0"> itself, would
+cause the magic string increment behavior. This means that on these Perl
+versions, C<"0".."-1"> would produce C<"0"> through C<"99">, which was
+inconsistent with C<0..-1>, which produces the empty list. This also means
+that C<"0".."9"> now produces a list of integers instead of a list of
+strings.
+
 =item *
 
 If the initial value specified isn't part of a magical increment
@@ -3367,7 +3375,8 @@ way, so use with care.
 C<< <I<FILEHANDLE>> >>  may also be spelled C<readline(*I<FILEHANDLE>)>.
 See L<perlfunc/readline>.
 
-The null filehandle C<< <> >> is special: it can be used to emulate the
+The null filehandle C<< <> >> (sometimes called the diamond operator) is
+special: it can be used to emulate the
 behavior of B<sed> and B<awk>, and any other Unix filter program
 that takes a list of filenames, doing the same to each line
 of input from all of them.  Input from C<< <> >> comes either from
@@ -3408,7 +3417,8 @@ it interprets special characters, so if you have a script like this:
 and call it with S<C<perl dangerous.pl 'rm -rfv *|'>>, it actually opens a
 pipe, executes the C<rm> command and reads C<rm>'s output from that pipe.
 If you want all items in C<@ARGV> to be interpreted as file names, you
-can use the module C<ARGV::readonly> from CPAN, or use the double bracket:
+can use the module C<ARGV::readonly> from CPAN, or use the double
+diamond bracket:
 
     while (<<>>) {
         print;
index 0ede0d5..bf8f93a 100644 (file)
@@ -407,7 +407,7 @@ and that's why the low order byte is stored at the lower address. To
 unpack such a (unsigned) short we'll have to use code C<v>. A repeat
 count unpacks all 12 shorts:
 
-   my( $ip, $cs, $flags, $ax, $bx, $cd, $dx, $si, $di, $bp, $ds, $es ) =
+   my( $ip, $cs, $flags, $ax, $bx, $cx, $dx, $si, $di, $bp, $ds, $es ) =
      unpack( 'v12', $frame );
 
 Alternatively, we could have used C<C> to unpack the individually
index 1715eaf..a980980 100644 (file)
@@ -1655,9 +1655,6 @@ code.
 (SunOS, Solaris, HP-UX)
 Does not automatically flush output handles on some platforms.
 
-(Symbian OS)
-Not supported.
-
 =item exit
 
 (VMS)
@@ -2301,8 +2298,6 @@ F<ext/Win32CORE/t/win32core.t> - may fail on recent cygwin installs.
 
 =back
 
-=item Symbian
-
 =item NetBSD
 
 =item FreeBSD
@@ -2333,8 +2328,6 @@ Caveats:
 
 =back
 
-=item Symbian (Series 60 v3, 3.2 and 5 - what else?)
-
 =item Stratus VOS / OpenVOS
 
 =item AIX
index ee2f14d..5802819 100644 (file)
@@ -529,7 +529,9 @@ place before the bracketed class is parsed:
  $, = "\t| ";
  $a =~ m'[$,]';        # single-quotish: matches '$' or ','
  $a =~ q{[$,]}'        # same
- $a =~ m/[$,]/;        # double-quotish: matches "\t", "|", or " "
+ $a =~ m/[$,]/;        # double-quotish: Because we made an
+                       #   assignment to $, above, this now
+                       #   matches "\t", "|", or " "
 
 Characters that may carry a special meaning inside a character class are:
 C<\>, C<^>, C<->, C<[> and C<]>, and are discussed below. They can be
index 2c4cedf..5cd9ee2 100644 (file)
@@ -712,26 +712,6 @@ outer() at the time outer is invoked.
 This has the interesting effect of creating a function local to another
 function, something not normally supported in Perl.
 
-=head1 WARNING: Don't use references as hash keys
-X<reference, string context> X<reference, use as hash key>
-
-You may not (usefully) use a reference as the key to a hash.  It will be
-converted into a string:
-
-    $x{ \$a } = $a;
-
-If you try to dereference the key, it won't do a hard dereference, and
-you won't accomplish what you're attempting.  You might want to do something
-more like
-
-    $r = \@a;
-    $x{ $r } = $r;
-
-And then at least you can use the values(), which will be
-real refs, instead of the keys(), which won't.
-
-The standard Tie::RefHash module provides a convenient workaround to this.
-
 =head2 Postfix Dereference Syntax
 
 Beginning in v5.20.0, a postfix syntax for using references is
@@ -903,7 +883,7 @@ will only be visible within that inner sub, and will not affect the outer
 subroutine where the variables are declared.  This bizarre behavior is
 subject to change.
 
-=head1 Declaring a Reference to a Variable
+=head2 Declaring a Reference to a Variable
 
 Beginning in v5.26.0, the referencing operator can come after C<my>,
 C<state>, C<our>, or C<local>.  This syntax must be enabled with C<use
@@ -926,6 +906,26 @@ used on just some items in a list of declared variables:
 
     my ($foo, \@bar, \%baz); # equivalent to:  my $foo, \my(@bar, %baz);
 
+=head1 WARNING: Don't use references as hash keys
+X<reference, string context> X<reference, use as hash key>
+
+You may not (usefully) use a reference as the key to a hash.  It will be
+converted into a string:
+
+    $x{ \$a } = $a;
+
+If you try to dereference the key, it won't do a hard dereference, and
+you won't accomplish what you're attempting.  You might want to do something
+more like
+
+    $r = \@a;
+    $x{ $r } = $r;
+
+And then at least you can use the values(), which will be
+real refs, instead of the keys(), which won't.
+
+The standard Tie::RefHash module provides a convenient workaround to this.
+
 =head1 SEE ALSO
 
 Besides the obvious documents, source code can be instructive.
index 89a7aa8..acfc64c 100644 (file)
@@ -797,7 +797,7 @@ Bourne shell:
 
     #!/usr/bin/perl
     eval 'exec /usr/bin/perl -wS $0 ${1+"$@"}'
-           if $running_under_some_shell;
+           if 0; # ^ Run only under a shell
 
 The system ignores the first line and feeds the program to F</bin/sh>,
 which proceeds to try to execute the Perl program as a shell script.
@@ -805,8 +805,8 @@ The shell executes the second line as a normal shell command, and thus
 starts up the Perl interpreter.  On some systems $0 doesn't always
 contain the full pathname, so the L</-S> tells Perl to search for the
 program if necessary.  After Perl locates the program, it parses the
-lines and ignores them because the variable $running_under_some_shell
-is never true.  If the program will be interpreted by csh, you will need
+lines and ignores them because the check 'if 0' is never true.
+If the program will be interpreted by csh, you will need
 to replace C<${1+"$@"}> with C<$*>, even though that doesn't understand
 embedded spaces (and such) in the argument list.  To start up I<sh> rather
 than I<csh>, some systems may have to replace the C<#!> line with a line
@@ -816,7 +816,7 @@ will work under any of I<csh>, I<sh>, or Perl, such as the following:
 
        eval '(exit $?0)' && eval 'exec perl -wS $0 ${1+"$@"}'
        & eval 'exec /usr/bin/perl -wS $0 $argv:q'
-               if $running_under_some_shell;
+               if 0; # ^ Run only under a shell
 
 If the filename supplied contains directory separators (and so is an
 absolute or relative pathname), and if that file is not found,
diff --git a/pp.c b/pp.c
index df80830..f836b16 100644 (file)
--- a/pp.c
+++ b/pp.c
@@ -2062,14 +2062,20 @@ PP(pp_lt)
 {
     dSP;
     SV *left, *right;
+    U32 flags_and, flags_or;
 
     tryAMAGICbin_MG(lt_amg, AMGf_numeric);
     right = POPs;
     left  = TOPs;
+    flags_and = SvFLAGS(left) & SvFLAGS(right);
+    flags_or  = SvFLAGS(left) | SvFLAGS(right);
+
     SETs(boolSV(
-       (SvIOK_notUV(left) && SvIOK_notUV(right))
-       ? (SvIVX(left) < SvIVX(right))
-       : (do_ncmp(left, right) == -1)
+        ( (flags_and & SVf_IOK) && ((flags_or & SVf_IVisUV) ==0 ) )
+        ?    (SvIVX(left) < SvIVX(right))
+        : (flags_and & SVf_NOK)
+        ?    (SvNVX(left) < SvNVX(right))
+        : (do_ncmp(left, right) == -1)
     ));
     RETURN;
 }
@@ -2078,14 +2084,20 @@ PP(pp_gt)
 {
     dSP;
     SV *left, *right;
+    U32 flags_and, flags_or;
 
     tryAMAGICbin_MG(gt_amg, AMGf_numeric);
     right = POPs;
     left  = TOPs;
+    flags_and = SvFLAGS(left) & SvFLAGS(right);
+    flags_or  = SvFLAGS(left) | SvFLAGS(right);
+
     SETs(boolSV(
-       (SvIOK_notUV(left) && SvIOK_notUV(right))
-       ? (SvIVX(left) > SvIVX(right))
-       : (do_ncmp(left, right) == 1)
+        ( (flags_and & SVf_IOK) && ((flags_or & SVf_IVisUV) ==0 ) )
+        ?    (SvIVX(left) > SvIVX(right))
+        : (flags_and & SVf_NOK)
+        ?    (SvNVX(left) > SvNVX(right))
+        : (do_ncmp(left, right) == 1)
     ));
     RETURN;
 }
@@ -2094,14 +2106,20 @@ PP(pp_le)
 {
     dSP;
     SV *left, *right;
+    U32 flags_and, flags_or;
 
     tryAMAGICbin_MG(le_amg, AMGf_numeric);
     right = POPs;
     left  = TOPs;
+    flags_and = SvFLAGS(left) & SvFLAGS(right);
+    flags_or  = SvFLAGS(left) | SvFLAGS(right);
+
     SETs(boolSV(
-       (SvIOK_notUV(left) && SvIOK_notUV(right))
-       ? (SvIVX(left) <= SvIVX(right))
-       : (do_ncmp(left, right) <= 0)
+        ( (flags_and & SVf_IOK) && ((flags_or & SVf_IVisUV) ==0 ) )
+        ?    (SvIVX(left) <= SvIVX(right))
+        : (flags_and & SVf_NOK)
+        ?    (SvNVX(left) <= SvNVX(right))
+        : (do_ncmp(left, right) <= 0)
     ));
     RETURN;
 }
@@ -2110,14 +2128,20 @@ PP(pp_ge)
 {
     dSP;
     SV *left, *right;
+    U32 flags_and, flags_or;
 
     tryAMAGICbin_MG(ge_amg, AMGf_numeric);
     right = POPs;
     left  = TOPs;
+    flags_and = SvFLAGS(left) & SvFLAGS(right);
+    flags_or  = SvFLAGS(left) | SvFLAGS(right);
+
     SETs(boolSV(
-       (SvIOK_notUV(left) && SvIOK_notUV(right))
-       ? (SvIVX(left) >= SvIVX(right))
-       : ( (do_ncmp(left, right) & 2) == 0)
+        ( (flags_and & SVf_IOK) && ((flags_or & SVf_IVisUV) ==0 ) )
+        ?    (SvIVX(left) >= SvIVX(right))
+        : (flags_and & SVf_NOK)
+        ?    (SvNVX(left) >= SvNVX(right))
+        : ( (do_ncmp(left, right) & 2) == 0)
     ));
     RETURN;
 }
@@ -2126,14 +2150,20 @@ PP(pp_ne)
 {
     dSP;
     SV *left, *right;
+    U32 flags_and, flags_or;
 
     tryAMAGICbin_MG(ne_amg, AMGf_numeric);
     right = POPs;
     left  = TOPs;
+    flags_and = SvFLAGS(left) & SvFLAGS(right);
+    flags_or  = SvFLAGS(left) | SvFLAGS(right);
+
     SETs(boolSV(
-       (SvIOK_notUV(left) && SvIOK_notUV(right))
-       ? (SvIVX(left) != SvIVX(right))
-       : (do_ncmp(left, right) != 0)
+        ( (flags_and & SVf_IOK) && ((flags_or & SVf_IVisUV) ==0 ) )
+        ?    (SvIVX(left) != SvIVX(right))
+        : (flags_and & SVf_NOK)
+        ?    (SvNVX(left) != SvNVX(right))
+        : (do_ncmp(left, right) != 0)
     ));
     RETURN;
 }
@@ -3654,11 +3684,8 @@ PP(pp_crypt)
 #    endif /* HAS_CRYPT_R */
 #  endif /* USE_ITHREADS */
 
-#  ifdef FCRYPT
-    sv_setpv(TARG, fcrypt(tmps, SvPV_nolen_const(right)));
-#  else
     sv_setpv(TARG, PerlProc_crypt(tmps, SvPV_nolen_const(right)));
-#  endif
+
     SvUTF8_off(TARG);
     SETTARG;
     RETURN;
@@ -4024,7 +4051,6 @@ PP(pp_ucfirst)
 
 PP(pp_uc)
 {
-    dVAR;
     dSP;
     SV *source = TOPs;
     STRLEN len;
@@ -4962,7 +4988,7 @@ PP(pp_aeach)
     IV *iterp = Perl_av_iter_p(aTHX_ array);
     const IV current = (*iterp)++;
 
-    if (current > av_tindex(array)) {
+    if (current > av_top_index(array)) {
        *iterp = 0;
        if (gimme == G_SCALAR)
            RETPUSHUNDEF;
@@ -4990,7 +5016,7 @@ PP(pp_akeys)
 
     if (gimme == G_SCALAR) {
        dTARGET;
-       PUSHi(av_tindex(array) + 1);
+       PUSHi(av_count(array));
     }
     else if (gimme == G_ARRAY) {
       if (UNLIKELY(PL_op->op_private & OPpMAYBE_LVSUB)) {
@@ -5833,7 +5859,7 @@ PP(pp_reverse)
                const MAGIC *mg;
                bool can_preserve = SvCANEXISTDELETE(av);
 
-               for (i = 0, j = av_tindex(av); i < j; ++i, --j) {
+               for (i = 0, j = av_top_index(av); i < j; ++i, --j) {
                    SV *begin, *end;
 
                    if (can_preserve) {
@@ -6638,7 +6664,7 @@ PP(pp_coreargs)
 
 PP(pp_avhvswitch)
 {
-    dVAR; dSP;
+    dSP;
     return PL_ppaddr[
                (SvTYPE(TOPs) == SVt_PVAV ? OP_AEACH : OP_EACH)
                    + (PL_op->op_private & OPpAVHVSWITCH_MASK)
diff --git a/pp.h b/pp.h
index 1ab9a47..4805dfb 100644 (file)
--- a/pp.h
+++ b/pp.h
@@ -599,7 +599,7 @@ Does not use C<TARG>.  See also C<L</XPUSHu>>, C<L</mPUSHu>> and C<L</PUSHu>>.
                 SSize_t i;                                      \
                 SSize_t len;                                    \
                 assert(SvTYPE(tmpsv) == SVt_PVAV);              \
-                len = av_tindex((AV *)tmpsv) + 1;               \
+                len = av_count((AV *)tmpsv);                    \
                 (void)POPs; /* get rid of the arg */            \
                 EXTEND(sp, len);                                \
                 for (i = 0; i < len; ++i)                       \
index c53dced..b8cd869 100644 (file)
--- a/pp_ctl.c
+++ b/pp_ctl.c
@@ -2794,7 +2794,7 @@ S_check_op_type(pTHX_ OP * const o)
 
 PP(pp_goto)
 {
-    dVAR; dSP;
+    dSP;
     OP *retop = NULL;
     I32 ix;
     PERL_CONTEXT *cx;
@@ -3752,7 +3752,7 @@ S_path_is_searchable(const char *name)
 static OP *
 S_require_version(pTHX_ SV *sv)
 {
-    dVAR; dSP;
+    dSP;
 
     sv = sv_2mortal(new_version(sv));
     if (!Perl_sv_derived_from_pvn(aTHX_ PL_patchlevel, STR_WITH_LEN("version"), 0))
@@ -3777,7 +3777,7 @@ S_require_version(pTHX_ SV *sv)
             first  = SvIV(*av_fetch(lav,0,0));
             if (   first > (int)PERL_REVISION    /* probably 'use 6.0' */
                 || hv_exists(MUTABLE_HV(req), "qv", 2 ) /* qv style */
-                || av_tindex(lav) > 1            /* FP with > 3 digits */
+                || av_count(lav) > 2             /* FP with > 3 digits */
                 || strstr(SvPVX(pv),".0")        /* FP with leading 0 */
                ) {
                 DIE(aTHX_ "Perl %" SVf " required--this is only "
@@ -3790,7 +3790,7 @@ S_require_version(pTHX_ SV *sv)
                 SV *hintsv;
                 I32 second = 0;
 
-                if (av_tindex(lav)>=1)
+                if (av_count(lav) > 1)
                     second = SvIV(*av_fetch(lav,1,0));
 
                 second /= second >= 600  ? 100 : 10;
@@ -3818,7 +3818,7 @@ S_require_version(pTHX_ SV *sv)
 static OP *
 S_require_file(pTHX_ SV *sv)
 {
-    dVAR; dSP;
+    dSP;
 
     PERL_CONTEXT *cx;
     const char *name;
@@ -4145,18 +4145,6 @@ S_require_file(pTHX_ SV *sv)
                        continue;
                    sv_setpv(namesv, unixdir);
                    sv_catpv(namesv, unixname);
-#elif defined(__SYMBIAN32__)
-                   if (PL_origfilename[0] &&
-                       PL_origfilename[1] == ':' &&
-                       !(dir[0] && dir[1] == ':'))
-                       Perl_sv_setpvf(aTHX_ namesv,
-                                      "%c:%s\\%s",
-                                      PL_origfilename[0],
-                                      dir, name);
-                   else
-                       Perl_sv_setpvf(aTHX_ namesv,
-                                      "%s\\%s",
-                                      dir, name);
 #else
                    /* The equivalent of                    
                       Perl_sv_setpvf(aTHX_ namesv, "%s/%s", dir, name);
@@ -4872,14 +4860,14 @@ S_do_smartmatch(pTHX_ HV *seen_this, HV *seen_other, const bool copied)
        }
        else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
            /* Test sub truth for each element */
-           SSize_t i;
+           Size_t i;
            bool andedresults = TRUE;
            AV *av = (AV*) SvRV(d);
-           const I32 len = av_tindex(av);
+           const Size_t len = av_count(av);
            DEBUG_M(Perl_deb(aTHX_ "    applying rule Array-CodeRef\n"));
-           if (len == -1)
+           if (len == 0)
                RETPUSHYES;
-           for (i = 0; i <= len; ++i) {
+           for (i = 0; i < len; ++i) {
                SV * const * const svp = av_fetch(av, i, FALSE);
                DEBUG_M(Perl_deb(aTHX_ "        testing array element...\n"));
                ENTER_with_name("smartmatch_array_elem_test");
@@ -4987,8 +4975,8 @@ S_do_smartmatch(pTHX_ HV *seen_this, HV *seen_other, const bool copied)
        }
        else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
            AV * const other_av = MUTABLE_AV(SvRV(d));
-           const SSize_t other_len = av_tindex(other_av) + 1;
-           SSize_t i;
+           const Size_t other_len = av_count(other_av);
+           Size_t i;
            HV *hv = MUTABLE_HV(SvRV(e));
 
            DEBUG_M(Perl_deb(aTHX_ "    applying rule Array-Hash\n"));
@@ -5042,8 +5030,8 @@ S_do_smartmatch(pTHX_ HV *seen_this, HV *seen_other, const bool copied)
        }
        else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
            AV * const other_av = MUTABLE_AV(SvRV(e));
-           const SSize_t other_len = av_tindex(other_av) + 1;
-           SSize_t i;
+           const Size_t other_len = av_count(other_av);
+           Size_t i;
 
            DEBUG_M(Perl_deb(aTHX_ "    applying rule Hash-Array\n"));
            for (i = 0; i < other_len; ++i) {
@@ -5060,11 +5048,11 @@ S_do_smartmatch(pTHX_ HV *seen_this, HV *seen_other, const bool copied)
        if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
            AV *other_av = MUTABLE_AV(SvRV(d));
            DEBUG_M(Perl_deb(aTHX_ "    applying rule Array-Array\n"));
-           if (av_tindex(MUTABLE_AV(SvRV(e))) != av_tindex(other_av))
+           if (av_count(MUTABLE_AV(SvRV(e))) != av_count(other_av))
                RETPUSHNO;
            else {
-               SSize_t i;
-                const SSize_t other_len = av_tindex(other_av);
+                Size_t i;
+                const Size_t other_len = av_count(other_av);
 
                if (NULL == seen_this) {
                    seen_this = newHV();
@@ -5074,7 +5062,7 @@ S_do_smartmatch(pTHX_ HV *seen_this, HV *seen_other, const bool copied)
                    seen_other = newHV();
                    (void) sv_2mortal(MUTABLE_SV(seen_other));
                }
-               for(i = 0; i <= other_len; ++i) {
+               for(i = 0; i < other_len; ++i) {
                    SV * const * const this_elem = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
                    SV * const * const other_elem = av_fetch(other_av, i, FALSE);
 
@@ -5119,10 +5107,10 @@ S_do_smartmatch(pTHX_ HV *seen_this, HV *seen_other, const bool copied)
          sm_regex_array:
            {
                PMOP * const matcher = make_matcher((REGEXP*) SvRV(d));
-               const SSize_t this_len = av_tindex(MUTABLE_AV(SvRV(e)));
-               SSize_t i;
+               const Size_t this_len = av_count(MUTABLE_AV(SvRV(e)));
+               Size_t i;
 
-               for(i = 0; i <= this_len; ++i) {
+               for(i = 0; i < this_len; ++i) {
                    SV * const * const svp = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
                    DEBUG_M(Perl_deb(aTHX_ "        testing element against pattern...\n"));
                     PUTBACK;
@@ -5139,11 +5127,11 @@ S_do_smartmatch(pTHX_ HV *seen_this, HV *seen_other, const bool copied)
        }
        else if (!SvOK(d)) {
            /* undef ~~ array */
-           const SSize_t this_len = av_tindex(MUTABLE_AV(SvRV(e)));
-           SSize_t i;
+           const Size_t this_len = av_count(MUTABLE_AV(SvRV(e)));
+           Size_t i;
 
            DEBUG_M(Perl_deb(aTHX_ "    applying rule Undef-Array\n"));
-           for (i = 0; i <= this_len; ++i) {
+           for (i = 0; i < this_len; ++i) {
                SV * const * const svp = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
                DEBUG_M(Perl_deb(aTHX_ "        testing for undef element...\n"));
                if (!svp || !SvOK(*svp))
@@ -5154,11 +5142,11 @@ S_do_smartmatch(pTHX_ HV *seen_this, HV *seen_other, const bool copied)
        else {
          sm_any_array:
            {
-               SSize_t i;
-               const SSize_t this_len = av_tindex(MUTABLE_AV(SvRV(e)));
+               Size_t i;
+               const Size_t this_len = av_count(MUTABLE_AV(SvRV(e)));
 
                DEBUG_M(Perl_deb(aTHX_ "    applying rule Any-Array\n"));
-               for (i = 0; i <= this_len; ++i) {
+               for (i = 0; i < this_len; ++i) {
                    SV * const * const svp = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
                    if (!svp)
                        continue;
index 004dfba..7faa1a9 100644 (file)
--- a/pp_hot.c
+++ b/pp_hot.c
@@ -1262,14 +1262,20 @@ PP(pp_eq)
 {
     dSP;
     SV *left, *right;
+    U32 flags_and, flags_or;
 
     tryAMAGICbin_MG(eq_amg, AMGf_numeric);
     right = POPs;
     left  = TOPs;
+    flags_and = SvFLAGS(left) & SvFLAGS(right);
+    flags_or  = SvFLAGS(left) | SvFLAGS(right);
+
     SETs(boolSV(
-       (SvIOK_notUV(left) && SvIOK_notUV(right))
-       ? (SvIVX(left) == SvIVX(right))
-       : ( do_ncmp(left, right) == 0)
+        ( (flags_and & SVf_IOK) && ((flags_or & SVf_IVisUV) ==0 ) )
+        ?    (SvIVX(left) == SvIVX(right))
+        : (flags_and & SVf_NOK)
+        ?    (SvNVX(left) == SvNVX(right))
+        : ( do_ncmp(left, right) == 0)
     ));
     RETURN;
 }
@@ -2072,7 +2078,6 @@ S_aassign_copy_common(pTHX_ SV **firstlelem, SV **lastlelem,
 #endif
 )
 {
-    dVAR;
     SV **relem;
     SV **lelem;
     SSize_t lcount = lastlelem - firstlelem + 1;
@@ -2200,7 +2205,7 @@ S_aassign_copy_common(pTHX_ SV **firstlelem, SV **lastlelem,
 
 PP(pp_aassign)
 {
-    dVAR; dSP;
+    dSP;
     SV **lastlelem = PL_stack_sp;
     SV **lastrelem = PL_stack_base + POPMARK;
     SV **firstrelem = PL_stack_base + POPMARK + 1;
@@ -2738,8 +2743,8 @@ PP(pp_aassign)
            if (!SvIMMORTAL(lsv)) {
                 sv_set_undef(lsv);
                 SvSETMAGIC(lsv);
-                *relem++ = lsv;
             }
+            *relem++ = lsv;
            break;
         } /* switch */
     } /* while */
@@ -3176,7 +3181,7 @@ Perl_do_readline(pTHX)
            if (IoFLAGS(io) & IOf_ARGV) {
                if (IoFLAGS(io) & IOf_START) {
                    IoLINES(io) = 0;
-                   if (av_tindex(GvAVn(PL_last_in_gv)) < 0) {
+                   if (av_count(GvAVn(PL_last_in_gv)) == 0) {
                        IoFLAGS(io) &= ~IOf_START;
                        do_open6(PL_last_in_gv, "-", 1, NULL, NULL, 0);
                        SvTAINTED_off(GvSVn(PL_last_in_gv)); /* previous tainting irrelevant */
@@ -3635,7 +3640,7 @@ PP(pp_multideref)
                             IV len;
                             if (!defer)
                                 DIE(aTHX_ PL_no_aelem, elem);
-                            len = av_tindex(av);
+                            len = av_top_index(av);
                             /* Resolve a negative index that falls within
                              * the array.  Leave it negative it if falls
                              * outside the array.  */
@@ -4659,7 +4664,6 @@ PP(pp_grepwhile)
 void
 Perl_leave_adjust_stacks(pTHX_ SV **from_sp, SV **to_sp, U8 gimme, int pass)
 {
-    dVAR;
     dSP;
     SSize_t tmps_base; /* lowest index into tmps stack that needs freeing now */
     SSize_t nargs;
@@ -5388,7 +5392,7 @@ PP(pp_aelem)
            IV len;
            if (!defer)
                DIE(aTHX_ PL_no_aelem, elem);
-           len = av_tindex(av);
+           len = av_top_index(av);
            /* Resolve a negative index that falls within the array.  Leave
               it negative it if falls outside the array.  */
            if (elem < 0 && len + elem >= 0)
index 8ac5316..53d63f9 100644 (file)
--- a/pp_pack.c
+++ b/pp_pack.c
@@ -1808,7 +1808,7 @@ S_unpack_rec(pTHX_ tempsym_t* symptr, const char *s, const char *strbeg, const c
            }
            else {
                if (checksum < bits_in_uv) {
-                   UV mask = ((UV)1 << checksum) - 1;
+                   UV mask = nBIT_MASK(checksum);
                    cuv &= mask;
                }
                sv = newSVuv(cuv);
index a431bbe..2727456 100644 (file)
--- a/pp_sys.c
+++ b/pp_sys.c
@@ -2129,7 +2129,7 @@ PP(pp_eof)
 
     if (!MAXARG && (PL_op->op_flags & OPf_SPECIAL)) {  /* eof() */
        if (io && !IoIFP(io)) {
-           if ((IoFLAGS(io) & IOf_START) && av_tindex(GvAVn(gv)) < 0) {
+           if ((IoFLAGS(io) & IOf_START) && av_count(GvAVn(gv)) == 0) {
                SV ** svp;
                IoLINES(io) = 0;
                IoFLAGS(io) &= ~IOf_START;
@@ -2705,30 +2705,16 @@ PP(pp_ssockopt)
        PUSHs(sv);
        break;
     case OP_SSOCKOPT: {
-#if defined(__SYMBIAN32__)
-# define SETSOCKOPT_OPTION_VALUE_T void *
-#else
-# define SETSOCKOPT_OPTION_VALUE_T const char *
-#endif
-       /* XXX TODO: We need to have a proper type (a Configure probe,
-        * etc.) for what the C headers think of the third argument of
-        * setsockopt(), the option_value read-only buffer: is it
-        * a "char *", or a "void *", const or not.  Some compilers
-        * don't take kindly to e.g. assuming that "char *" implicitly
-        * promotes to a "void *", or to explicitly promoting/demoting
-        * consts to non/vice versa.  The "const void *" is the SUS
-        * definition, but that does not fly everywhere for the above
-        * reasons. */
-           SETSOCKOPT_OPTION_VALUE_T buf;
+           const char *buf;
            int aint;
            if (SvPOKp(sv)) {
                STRLEN l;
-               buf = (SETSOCKOPT_OPTION_VALUE_T) SvPV_const(sv, l);
+               buf = SvPV_const(sv, l);
                len = l;
            }
            else {
                aint = (int)SvIV(sv);
-               buf = (SETSOCKOPT_OPTION_VALUE_T) &aint;
+               buf = (const char *) &aint;
                len = sizeof(int);
            }
            if (PerlSock_setsockopt(fd, lvl, optname, buf, len) < 0)
@@ -4494,14 +4480,14 @@ PP(pp_system)
     result = 0;
     if (PL_op->op_flags & OPf_STACKED) {
        SV * const really = *++MARK;
-#  if defined(WIN32) || defined(OS2) || defined(__SYMBIAN32__) || defined(__VMS)
+#  if defined(WIN32) || defined(OS2) || defined(__VMS)
        value = (I32)do_aspawn(really, MARK, SP);
 #  else
        value = (I32)do_aspawn(really, (void **)MARK, (void **)SP);
 #  endif
     }
     else if (SP - MARK != 1) {
-#  if defined(WIN32) || defined(OS2) || defined(__SYMBIAN32__) || defined(__VMS)
+#  if defined(WIN32) || defined(OS2) || defined(__VMS)
        value = (I32)do_aspawn(NULL, MARK, SP);
 #  else
        value = (I32)do_aspawn(NULL, (void **)MARK, (void **)SP);
diff --git a/proto.h b/proto.h
index 02ef4ed..1b030a9 100644 (file)
--- a/proto.h
+++ b/proto.h
@@ -219,6 +219,13 @@ PERL_CALLCONV SV** Perl_av_arylen_p(pTHX_ AV *av);
 PERL_CALLCONV void     Perl_av_clear(pTHX_ AV *av);
 #define PERL_ARGS_ASSERT_AV_CLEAR      \
        assert(av)
+#ifndef PERL_NO_INLINE_FUNCTIONS
+PERL_STATIC_INLINE Size_t      Perl_av_count(pTHX_ AV *av)
+                       __attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_AV_COUNT      \
+       assert(av)
+#endif
+
 PERL_CALLCONV void     Perl_av_create_and_push(pTHX_ AV **const avp, SV *const val);
 #define PERL_ARGS_ASSERT_AV_CREATE_AND_PUSH    \
        assert(avp); assert(val)
@@ -284,12 +291,10 @@ PERL_CALLCONV SV**        Perl_av_store(pTHX_ AV *av, SSize_t key, SV *val);
                        __attribute__warn_unused_result__; */
 #define PERL_ARGS_ASSERT_AV_TINDEX
 
-#ifndef PERL_NO_INLINE_FUNCTIONS
-PERL_STATIC_INLINE SSize_t     Perl_av_top_index(pTHX_ AV *av)
+PERL_CALLCONV SSize_t  Perl_av_top_index(pTHX_ AV *av)
                        __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_AV_TOP_INDEX  \
        assert(av)
-#endif
 
 PERL_CALLCONV void     Perl_av_undef(pTHX_ AV *av);
 #define PERL_ARGS_ASSERT_AV_UNDEF      \
@@ -4186,13 +4191,6 @@ PERL_CALLCONV bool       Perl_do_exec(pTHX_ const char* cmd);
 #define PERL_ARGS_ASSERT_DO_EXEC       \
        assert(cmd)
 #endif
-#if !(defined(PERL_GLOBAL_STRUCT_PRIVATE))
-#  if defined(PERL_IMPLICIT_CONTEXT)
-PERL_CALLCONV void*    Perl_my_cxt_init(pTHX_ int *indexp, size_t size);
-#define PERL_ARGS_ASSERT_MY_CXT_INIT   \
-       assert(indexp)
-#  endif
-#endif
 #if !(defined(PERL_USE_3ARG_SIGHANDLER))
 PERL_CALLCONV Signal_t Perl_csighandler(int sig);
 #define PERL_ARGS_ASSERT_CSIGHANDLER
@@ -4795,25 +4793,6 @@ PERL_CALLCONV GV*        Perl_gv_SVadd(pTHX_ GV *gv);
 #define PERL_ARGS_ASSERT_GV_SVADD
 #endif
 #endif
-#if defined(PERL_GLOBAL_STRUCT)
-PERL_CALLCONV struct perl_vars *       Perl_GetVars(pTHX);
-#define PERL_ARGS_ASSERT_GETVARS
-PERL_CALLCONV void     Perl_free_global_struct(pTHX_ struct perl_vars *plvarsp);
-#define PERL_ARGS_ASSERT_FREE_GLOBAL_STRUCT    \
-       assert(plvarsp)
-PERL_CALLCONV struct perl_vars*        Perl_init_global_struct(pTHX);
-#define PERL_ARGS_ASSERT_INIT_GLOBAL_STRUCT
-#endif
-#if defined(PERL_GLOBAL_STRUCT_PRIVATE)
-#  if defined(PERL_IMPLICIT_CONTEXT)
-PERL_CALLCONV int      Perl_my_cxt_index(pTHX_ const char *my_cxt_key);
-#define PERL_ARGS_ASSERT_MY_CXT_INDEX  \
-       assert(my_cxt_key)
-PERL_CALLCONV void*    Perl_my_cxt_init(pTHX_ const char *my_cxt_key, size_t size);
-#define PERL_ARGS_ASSERT_MY_CXT_INIT   \
-       assert(my_cxt_key)
-#  endif
-#endif
 #if defined(PERL_IMPLICIT_CONTEXT)
 PERL_CALLCONV_NO_RET void      Perl_croak_nocontext(const char* pat, ...)
                        __attribute__noreturn__
@@ -4851,6 +4830,9 @@ PERL_CALLCONV SV* Perl_mess_nocontext(const char* pat, ...)
 #define PERL_ARGS_ASSERT_MESS_NOCONTEXT        \
        assert(pat)
 
+PERL_CALLCONV void*    Perl_my_cxt_init(pTHX_ int *indexp, size_t size);
+#define PERL_ARGS_ASSERT_MY_CXT_INIT   \
+       assert(indexp)
 PERL_CALLCONV SV*      Perl_newSVpvf_nocontext(const char *const pat, ...)
                        __attribute__format__(__printf__,1,2);
 #define PERL_ARGS_ASSERT_NEWSVPVF_NOCONTEXT    \
@@ -6894,7 +6876,7 @@ PERL_CALLCONV_NO_RET void win32_croak_not_implemented(const char * fname)
        assert(fname)
 
 #endif
-#if defined(WIN32) || defined(__SYMBIAN32__) || defined(VMS)
+#if defined(WIN32) || defined(VMS)
 PERL_CALLCONV int      Perl_do_aspawn(pTHX_ SV* really, SV** mark, SV** sp);
 #define PERL_ARGS_ASSERT_DO_ASPAWN     \
        assert(mark); assert(sp)
index 8ddda7b..2429aa2 100644 (file)
--- a/reentr.c
+++ b/reentr.c
@@ -36,7 +36,7 @@
 
 #define RenewDouble(data_pointer, size_pointer, type) \
     STMT_START { \
-       const size_t size = *(size_pointer) * 2; \
+       const size_t size = MAX(*(size_pointer), 1) * 2; \
        Renew((data_pointer), (size), type); \
        *(size_pointer) = size; \
     } STMT_END
@@ -52,14 +52,14 @@ Perl_reentrant_size(pTHX) {
 #  define REENTRANTUSUALSIZE   4096    /* Make something up. */
 
 #  ifdef HAS_ASCTIME_R
-       PL_reentrant_buffer->_asctime_size = REENTRANTSMALLSIZE;
+       PL_reentrant_buffer->_asctime_size = 26;
 #  endif /* HAS_ASCTIME_R */
 
 #  ifdef HAS_CRYPT_R
 #  endif /* HAS_CRYPT_R */
 
 #  ifdef HAS_CTIME_R
-       PL_reentrant_buffer->_ctime_size = REENTRANTSMALLSIZE;
+       PL_reentrant_buffer->_ctime_size = 26;
 #  endif /* HAS_CTIME_R */
 
 #  ifdef HAS_GETGRNAM_R
index cf41900..78b8518 100644 (file)
--- a/reentr.h
+++ b/reentr.h
 
 #ifdef USE_REENTRANT_API
 
+/* For thread-safe builds, alternative methods are used to make calls to this
+ * safe. */
+#ifdef USE_THREAD_SAFE_LOCALE
+#   undef HAS_SETLOCALE_R
+#endif
 /* Deprecations: some platforms have the said reentrant interfaces
  * but they are declared obsolete and are not to be used.  Often this
  * means that the platform has threadsafed the interfaces (hopefully).
index 640c99d..e5a85f5 100644 (file)
--- a/regcomp.c
+++ b/regcomp.c
@@ -370,13 +370,11 @@ struct RExC_state_t {
         RExC_naughty += RExC_naughty / (exp) + (add)
 
 #define        ISMULT1(c)      ((c) == '*' || (c) == '+' || (c) == '?')
-#define        ISMULT2(s)      ((*s) == '*' || (*s) == '+' || (*s) == '?' || \
-       ((*s) == '{' && regcurly(s)))
+#define        ISMULT2(s)      (ISMULT1(*s) || ((*s) == '{' && regcurly(s)))
 
 /*
  * Flags to be passed up and down.
  */
-#define        WORST           0       /* Worst case. */
 #define        HASWIDTH        0x01    /* Known to not match null strings, could match
                                    non-null ones. */
 
@@ -385,7 +383,6 @@ struct RExC_state_t {
  * for any node marked SIMPLE.)  Note that this is not the same thing as
  * REGNODE_SIMPLE */
 #define        SIMPLE          0x02
-#define        SPSTART         0x04    /* Starts with * or + */
 #define POSTPONED      0x08    /* (?1),(?&name), (??{...}) or similar */
 #define TRYAGAIN       0x10    /* Weeded out a declaration. */
 #define RESTART_PARSE   0x20    /* Need to redo the parse */
@@ -1661,7 +1658,6 @@ S_get_ANYOF_cp_list_for_ssc(pTHX_ const RExC_state_t *pRExC_state,
      * returned list must, and will, contain every code point that is a
      * possibility. */
 
-    dVAR;
     SV* invlist = NULL;
     SV* only_utf8_locale_invlist = NULL;
     unsigned int i;
@@ -4534,8 +4530,6 @@ S_unwind_scan_frames(pTHX_ const void *p)
 STATIC void
 S_rck_elide_nothing(pTHX_ regnode *node)
 {
-    dVAR;
-
     PERL_ARGS_ASSERT_RCK_ELIDE_NOTHING;
 
     if (OP(node) != CURLYX) {
@@ -4584,7 +4578,6 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp,
                        /* recursed: which subroutines have we recursed into */
                        /* and_withp: Valid if flags & SCF_DO_STCLASS_OR */
 {
-    dVAR;
     SSize_t final_minlen;
     /* There must be at least this number of characters to match */
     SSize_t min = 0;
@@ -7416,7 +7409,7 @@ S_set_regex_pv(pTHX_ RExC_state_t *pRExC_state, REGEXP *Rx)
     PERL_ARGS_ASSERT_SET_REGEX_PV;
 
     /* make sure PL_bitcount bounds not exceeded */
-    assert(sizeof(STD_PAT_MODS) <= 8);
+    STATIC_ASSERT_STMT(sizeof(STD_PAT_MODS) <= 8);
 
     p = sv_grow(MUTABLE_SV(Rx), wraplen + 1); /* +1 for the ending NUL */
     SvPOK_on(Rx);
@@ -7528,7 +7521,6 @@ Perl_re_op_compile(pTHX_ SV ** const patternp, int pat_count,
                    OP *expr, const regexp_engine* eng, REGEXP *old_re,
                     bool *is_bare_re, const U32 orig_rx_flags, const U32 pm_flags)
 {
-    dVAR;
     REGEXP *Rx;         /* Capital 'R' means points to a REGEXP */
     STRLEN plen;
     char *exp;
@@ -7889,13 +7881,6 @@ Perl_re_op_compile(pTHX_ SV ** const patternp, int pat_count,
 
         /* We have that number in RExC_npar */
         RExC_total_parens = RExC_npar;
-
-        /* XXX For backporting, use long jumps if there is any possibility of
-         * overflow */
-        if (RExC_size > U16_MAX && ! RExC_use_BRANCHJ) {
-            RExC_use_BRANCHJ = TRUE;
-            flags |= RESTART_PARSE;
-        }
     }
     else if (! MUST_RESTART(flags)) {
        ReREFCNT_dec(Rx);
@@ -8729,9 +8714,9 @@ Perl_reg_named_buff_scalar(pTHX_ REGEXP * const r, const U32 flags)
         } else if (flags & RXapif_ONE) {
             ret = CALLREG_NAMED_BUFF_ALL(r, (flags | RXapif_REGNAMES));
             av = MUTABLE_AV(SvRV(ret));
-            length = av_tindex(av);
+            length = av_count(av);
            SvREFCNT_dec_NN(ret);
-            return newSViv(length + 1);
+            return newSViv(length);
         } else {
             Perl_croak(aTHX_ "panic: Unknown flags %d in named_buff_scalar",
                                                 (int)flags);
@@ -10651,7 +10636,6 @@ Perl__invlistEQ(pTHX_ SV* const a, SV* const b, const bool complement_b)
 STATIC SV*
 S_make_exactf_invlist(pTHX_ RExC_state_t *pRExC_state, regnode *node)
 {
-    dVAR;
     const U8 * s = (U8*)STRING(node);
     SSize_t bytelen = STR_LEN(node);
     UV uc;
@@ -11189,7 +11173,7 @@ S_reg(pTHX_ RExC_state_t *pRExC_state, I32 paren, I32 *flagp, U32 depth)
         vFAIL("Too many nested open parens");
     }
 
-    *flagp = 0;                                /* Tentatively. */
+    *flagp = 0;                                /* Initialize. */
 
     if (RExC_in_lookbehind) {
        RExC_in_lookbehind++;
@@ -12283,7 +12267,7 @@ S_reg(pTHX_ RExC_state_t *pRExC_state, I32 paren, I32 *flagp, U32 depth)
     }
     else if (paren != '?')             /* Not Conditional */
        ret = br;
-    *flagp |= flags & (SPSTART | HASWIDTH | POSTPONED);
+    *flagp |= flags & (HASWIDTH | POSTPONED);
     lastbr = br;
     while (*RExC_parse == '|') {
        if (RExC_use_BRANCHJ) {
@@ -12313,7 +12297,7 @@ S_reg(pTHX_ RExC_state_t *pRExC_state, I32 paren, I32 *flagp, U32 depth)
             REQUIRE_BRANCHJ(flagp, 0);
         }
        lastbr = br;
-       *flagp |= flags & (SPSTART | HASWIDTH | POSTPONED);
+       *flagp |= flags & (HASWIDTH | POSTPONED);
     }
 
     if (have_branch || paren != ':') {
@@ -12546,7 +12530,7 @@ S_regbranch(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, I32 first, U32 depth)
         }
     }
 
-    *flagp = WORST;                    /* Tentatively. */
+    *flagp = 0;                        /* Initialize. */
 
     skip_to_be_ignored_text(pRExC_state, &RExC_parse,
                             FALSE /* Don't force to /x */ );
@@ -12562,9 +12546,7 @@ S_regbranch(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, I32 first, U32 depth)
        else if (ret == 0)
             ret = latest;
        *flagp |= flags&(HASWIDTH|POSTPONED);
-       if (chain == 0)         /* First piece. */
-           *flagp |= flags&SPSTART;
-       else {
+       if (chain != 0) {
            /* FIXME adding one for every branch after the first is probably
             * excessive now we have TRIE support. (hv) */
            MARK_NAUGHTY(1);
@@ -12769,7 +12751,7 @@ S_regpiece(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth)
            FLAGS(REGNODE_p(ret)) = 0;
 
            if (min > 0)
-               *flagp = WORST;
+               *flagp = 0;
            if (max > 0)
                *flagp |= HASWIDTH;
             ARG1_SET(REGNODE_p(ret), (U16)min);
@@ -12807,7 +12789,7 @@ S_regpiece(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth)
 #endif
     nextchar(pRExC_state);
 
-    *flagp = (op != '+') ? (WORST|SPSTART|HASWIDTH) : (WORST|HASWIDTH);
+    *flagp = HASWIDTH;
 
     if (op == '*') {
        min = 0;
@@ -13305,7 +13287,7 @@ S_grok_bslash_N(pTHX_ RExC_state_t *pRExC_state,
         FAIL2("panic: reg returned failure to grok_bslash_N, flags=%#" UVxf,
             (UV) flags);
     }
-    *flagp |= flags&(HASWIDTH|SPSTART|SIMPLE|POSTPONED);
+    *flagp |= flags&(HASWIDTH|SIMPLE|POSTPONED);
 
     nextchar(pRExC_state);
 
@@ -13468,7 +13450,6 @@ S_backref_value(char *p, char *e)
 STATIC regnode_offset
 S_regatom(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth)
 {
-    dVAR;
     regnode_offset ret = 0;
     I32 flags = 0;
     char *parse_start;
@@ -13477,7 +13458,7 @@ S_regatom(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth)
 
     DECLARE_AND_GET_RE_DEBUG_FLAGS;
 
-    *flagp = WORST;            /* Tentatively. */
+    *flagp = 0;                /* Initialize. */
 
     DEBUG_PARSE("atom");
 
@@ -13555,7 +13536,7 @@ S_regatom(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth)
                 FAIL2("panic: reg returned failure to regatom, flags=%#" UVxf,
                                                                  (UV) flags);
        }
-       *flagp |= flags&(HASWIDTH|SPSTART|SIMPLE|POSTPONED);
+       *flagp |= flags&(HASWIDTH|SIMPLE|POSTPONED);
        break;
     case '|':
     case ')':
@@ -13950,10 +13931,8 @@ S_regatom(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth)
                         num > 9
                         /* any numeric escape < RExC_npar is a backref */
                         && num >= RExC_npar
-                        /* cannot be an octal escape if it starts with 8 */
-                        && *RExC_parse != '8'
-                        /* cannot be an octal escape if it starts with 9 */
-                        && *RExC_parse != '9'
+                        /* cannot be an octal escape if it starts with [89] */
+                        && ! inRANGE(*RExC_parse, '8', '9')
                     ) {
                         /* Probably not meant to be a backref, instead likely
                          * to be an octal character escape, e.g. \35 or \777.
@@ -15212,6 +15191,8 @@ S_regatom(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth)
                                 FAIL2("panic: loc_correspondence[%d] is 0",
                                       (int) (s - s_start));
                             }
+                            Safefree(locfold_buf);
+                            Safefree(loc_correspondence);
                         }
                         else {
                             upper_fill = s - s0;
@@ -15390,7 +15371,6 @@ S_populate_ANYOF_from_invlist(pTHX_ regnode *node, SV** invlist_ptr)
      * sets up the bitmap and any flags, removing those code points from the
      * inversion list, setting it to NULL should it become completely empty */
 
-    dVAR;
 
     PERL_ARGS_ASSERT_POPULATE_ANYOF_FROM_INVLIST;
     assert(PL_regkind[OP(node)] == ANYOF);
@@ -15430,9 +15410,7 @@ S_populate_ANYOF_from_invlist(pTHX_ regnode *node, SV** invlist_ptr)
                    ? end
                    : NUM_ANYOF_CODE_POINTS - 1;
            for (i = start; i <= (int) high; i++) {
-               if (! ANYOF_BITMAP_TEST(node, i)) {
-                   ANYOF_BITMAP_SET(node, i);
-               }
+                ANYOF_BITMAP_SET(node, i);
            }
        }
        invlist_iterfinish(*invlist_ptr);
@@ -16247,7 +16225,7 @@ S_handle_possible_posix(pTHX_ RExC_state_t *pRExC_state,
 
             if (   posix_warnings
                 && RExC_warn_text
-                && av_top_index(RExC_warn_text) > -1)
+                && av_count(RExC_warn_text) > 0)
             {
                 *posix_warnings = RExC_warn_text;
             }
@@ -17303,7 +17281,6 @@ S_regclass(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth,
      * UTF-8
      */
 
-    dVAR;
     UV prevvalue = OOB_UNICODE, save_prevvalue = OOB_UNICODE;
     IV range = 0;
     UV value = OOB_UNICODE, save_value = OOB_UNICODE;
@@ -17796,16 +17773,16 @@ S_regclass(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth,
                             }
 
                             /* For each multi-character string ... */
-                            while (av_tindex(strings) >= 0) {
+                            while (av_count(strings) > 0) {
                                 /* ... Each entry is itself an array of code
                                 * points. */
                                 AV * this_string = (AV *) av_shift( strings);
-                                STRLEN cp_count = av_tindex(this_string) + 1;
+                                STRLEN cp_count = av_count(this_string);
                                 SV * final = newSV(cp_count * 4);
                                 SvPVCLEAR(final);
 
                                 /* Create another string of sequences of \x{...} */
-                                while (av_tindex(this_string) >= 0) {
+                                while (av_count(this_string) > 0) {
                                     SV * character = av_shift(this_string);
                                     UV cp = SvUV(character);
 
@@ -18617,7 +18594,7 @@ S_regclass(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth,
 
        ret = reg(pRExC_state, 1, &reg_flags, depth+1);
 
-        *flagp |= reg_flags & (HASWIDTH|SIMPLE|SPSTART|POSTPONED|RESTART_PARSE|NEED_UTF8);
+        *flagp |= reg_flags & (HASWIDTH|SIMPLE|POSTPONED|RESTART_PARSE|NEED_UTF8);
 
         /* And restore so can parse the rest of the pattern */
         RExC_parse = save_parse;
@@ -20025,6 +20002,9 @@ S_set_ANYOF_arg(pTHX_ RExC_state_t* const pRExC_state,
             av_store(av, INVLIST_INDEX, SvREFCNT_inc_NN(cp_list));
         }
 
+        /* (Note that if any of this changes, the size calculations in
+         * S_optimize_regclass() might need to be updated.) */
+
         if (only_utf8_locale_list) {
             av_store(av, ONLY_LOCALE_MATCHES_INDEX,
                                      SvREFCNT_inc_NN(only_utf8_locale_list));
@@ -20687,7 +20667,8 @@ S_regtail(pTHX_ RExC_state_t * pRExC_state,
     PERL_UNUSED_ARG(depth);
 #endif
 
-    /* Find last node. */
+    /* The final node in the chain is the first one with a nonzero next pointer
+     * */
     scan = (regnode_offset) p;
     for (;;) {
        regnode * const temp = regnext(REGNODE_p(scan));
@@ -20705,6 +20686,7 @@ S_regtail(pTHX_ RExC_state_t * pRExC_state,
         scan = REGNODE_OFFSET(temp);
     }
 
+    /* Populate this node's next pointer */
     assert(val >= scan);
     if (reg_off_by_arg[OP(REGNODE_p(scan))]) {
         assert((UV) (val - scan) <= U32_MAX);
@@ -21097,7 +21079,6 @@ void
 Perl_regprop(pTHX_ const regexp *prog, SV *sv, const regnode *o, const regmatch_info *reginfo, const RExC_state_t *pRExC_state)
 {
 #ifdef DEBUGGING
-    dVAR;
     int k;
     RXi_GET_DECL(prog, progi);
     DECLARE_AND_GET_RE_DEBUG_FLAGS;
@@ -21815,7 +21796,6 @@ Perl_regfree_internal(pTHX_ REGEXP * const rx)
                     U32 refcount;
                     reg_ac_data *aho=(reg_ac_data*)ri->data->data[n];
 #ifdef USE_ITHREADS
-                    dVAR;
 #endif
                     OP_REFCNT_LOCK;
                     refcount = --aho->refcount;
@@ -21844,7 +21824,6 @@ Perl_regfree_internal(pTHX_ REGEXP * const rx)
                    U32 refcount;
                    reg_trie_data *trie=(reg_trie_data*)ri->data->data[n];
 #ifdef USE_ITHREADS
-                    dVAR;
 #endif
                     OP_REFCNT_LOCK;
                     refcount = --trie->refcount;
@@ -21888,7 +21867,7 @@ Perl_regfree_internal(pTHX_ REGEXP * const rx)
    After all of the core data stored in struct regexp is duplicated
    the regexp_engine.dupe method is used to copy any private data
    stored in the *pprivate pointer. This allows extensions to handle
-   any duplication it needs to do.
+   any duplication they need to do.
 
    See pregfree() and regfree_internal() if you change anything here.
 */
@@ -21897,7 +21876,6 @@ Perl_regfree_internal(pTHX_ REGEXP * const rx)
 void
 Perl_re_dup_guts(pTHX_ const REGEXP *sstr, REGEXP *dstr, CLONE_PARAMS *param)
 {
-    dVAR;
     I32 npar;
     const struct regexp *r = ReANY(sstr);
     struct regexp *ret = ReANY(dstr);
@@ -22000,7 +21978,6 @@ Perl_re_dup_guts(pTHX_ const REGEXP *sstr, REGEXP *dstr, CLONE_PARAMS *param)
 void *
 Perl_regdupe_internal(pTHX_ REGEXP * const rx, CLONE_PARAMS *param)
 {
-    dVAR;
     struct regexp *const r = ReANY(rx);
     regexp_internal *reti;
     int len;
@@ -22265,9 +22242,11 @@ S_put_range(pTHX_ SV *sv, UV start, const UV end, const bool allow_literals)
         UV this_end;
         const char * format;
 
-        if (end - start < min_range_count) {
-
-            /* Output chars individually when they occur in short ranges */
+        if (    end - start < min_range_count
+            && (end - start <= 2 || (isPRINT_A(start) && isPRINT_A(end))))
+        {
+            /* Output a range of 1 or 2 chars individually, or longer ranges
+             * when printable */
             for (; start <= end; start++) {
                 put_code_point(sv, start);
             }
@@ -22491,7 +22470,6 @@ S_put_charclass_bitmap_innards_common(pTHX_
      * output would have been only the inversion indicator '^', NULL is instead
      * returned. */
 
-    dVAR;
     SV * output;
 
     PERL_ARGS_ASSERT_PUT_CHARCLASS_BITMAP_INNARDS_COMMON;
@@ -22598,7 +22576,6 @@ S_put_charclass_bitmap_innards(pTHX_ SV *sv,
      * cases where it can't try inverting, as what actually matches isn't known
      * until runtime, and hence the inversion isn't either. */
 
-    dVAR;
     bool inverting_allowed = ! force_as_is_display;
 
     int i;
@@ -22991,7 +22968,6 @@ S_dumpuntil(pTHX_ const regexp *r, const regnode *start, const regnode *node,
 void
 Perl_init_uniprops(pTHX)
 {
-    dVAR;
 
 #  ifdef DEBUGGING
     char * dump_len_string;
@@ -23583,7 +23559,6 @@ S_delete_recursion_entry(pTHX_ void *key)
      * properties.  This is a function so it can be set up to be called even if
      * the program unexpectedly quits */
 
-    dVAR;
     SV ** current_entry;
     const STRLEN key_len = strlen((const char *) key);
     DECLARATION_FOR_GLOBAL_CONTEXT;
@@ -23676,7 +23651,6 @@ S_parse_uniprop_string(pTHX_
                                    this */
     const STRLEN level)         /* Recursion level of this call */
 {
-    dVAR;
     char* lookup_name;          /* normalized name for lookup in our tables */
     unsigned lookup_len;        /* Its length */
     enum { Not_Strict = 0,      /* Some properties have stricter name */
@@ -24068,7 +24042,7 @@ S_parse_uniprop_string(pTHX_
                 goto append_name_to_msg;
             }
 
-            lookup_loose = get_cv("_charnames::_loose_regcomp_lookup", 0);
+            lookup_loose = get_cvs("_charnames::_loose_regcomp_lookup", 0);
             if (! lookup_loose) {
                 Perl_croak(aTHX_
                        "panic: Can't find '_charnames::_loose_regcomp_lookup");
@@ -24697,8 +24671,10 @@ S_parse_uniprop_string(pTHX_
         /* Try again stripping off any initial 'Is'.  This is because we
          * promise that an initial Is is optional.  The same isn't true of
          * names that start with 'In'.  Those can match only blocks, and the
-         * lookup table already has those accounted for. */
-        if (starts_with_Is) {
+         * lookup table already has those accounted for.  The lookup table also
+         * has already accounted for Perl extensions (without and = sign)
+         * starting with 'i's'. */
+        if (starts_with_Is && equals_pos >= 0) {
             lookup_name += 2;
             lookup_len -= 2;
             equals_pos -= 2;
index 312c905..e12ce35 100644 (file)
--- a/regcomp.h
+++ b/regcomp.h
@@ -259,7 +259,7 @@ struct regnode_ssc {
 */
 #if SHORTSIZE > 2
 #  ifndef REG_INFTY
-#    define REG_INFTY ((1<<16)-1)
+#    define REG_INFTY  nBIT_UMAX(16)
 #  endif
 #endif
 
@@ -359,7 +359,7 @@ struct regnode_ssc {
     } STMT_END
 
 #define ANYOFR_BASE_BITS    20
-#define ANYOFRbase(p)   (ARG(p) & ((1 << ANYOFR_BASE_BITS) - 1))
+#define ANYOFRbase(p)   (ARG(p) & nBIT_MASK(ANYOFR_BASE_BITS))
 #define ANYOFRdelta(p)  (ARG(p) >> ANYOFR_BASE_BITS)
 
 #undef NODE_ALIGN
@@ -697,7 +697,7 @@ struct regnode_ssc {
      } STMT_END
 
 /* Shifts a bit to get, eg. 0x4000_0000, then subtracts 1 to get 0x3FFF_FFFF */
-#define ANYOF_POSIXL_SETALL(ret) STMT_START { ((regnode_charclass_posixl*) (ret))->classflags = ((1U << ((ANYOF_POSIXL_MAX) - 1))) - 1; } STMT_END
+#define ANYOF_POSIXL_SETALL(ret) STMT_START { ((regnode_charclass_posixl*) (ret))->classflags = nBIT_MASK(ANYOF_POSIXL_MAX); } STMT_END
 #define ANYOF_CLASS_SETALL(ret) ANYOF_POSIXL_SETALL(ret)
 
 #define ANYOF_POSIXL_TEST_ANY_SET(p)                               \
@@ -711,12 +711,12 @@ struct regnode_ssc {
                             cBOOL(((regnode_ssc*)(p))->classflags)
 #define ANYOF_POSIXL_SSC_TEST_ALL_SET(p) /* Are all bits set? */       \
         (((regnode_ssc*) (p))->classflags                              \
-                        == ((1U << ((ANYOF_POSIXL_MAX) - 1))) - 1)
+                                        == nBIT_MASK(ANYOF_POSIXL_MAX))
 
 #define ANYOF_POSIXL_TEST_ALL_SET(p)                                   \
-        ((ANYOF_FLAGS(p) & ANYOF_MATCHES_POSIXL)                               \
+        ((ANYOF_FLAGS(p) & ANYOF_MATCHES_POSIXL)                       \
          && ((regnode_charclass_posixl*) (p))->classflags              \
-                        == ((1U << ((ANYOF_POSIXL_MAX) - 1))) - 1)
+                                    == nBIT_MASK(ANYOF_POSIXL_MAX))
 
 #define ANYOF_POSIXL_OR(source, dest) STMT_START { (dest)->classflags |= (source)->classflags ; } STMT_END
 #define ANYOF_CLASS_OR(source, dest) ANYOF_POSIXL_OR((source), (dest))
index 863e9b9..42cb7aa 100644 (file)
@@ -55,7 +55,11 @@ sub output_table_start($$$;$) {
     my ($out_fh, $TYPE, $name, $size) = @_;
 
     $size = "" unless defined $size;
-    my $declaration = "EXTCONST $TYPE $name\[$size\]";
+
+    # Anything locale related will be written on
+    my $const = ($name !~ /locale/i) ? 'CONST' : "";
+
+    my $declaration = "EXT$const $TYPE $name\[$size\]";
     print $out_fh <<EOF;
 #  ifndef DOINIT
     $declaration;
@@ -72,6 +76,8 @@ sub output_table ($$;$) {
     my $table_ref = shift;
     my $name = shift;
 
+    my $size = @$table_ref;
+
     # 0 => print in decimal
     # 1 => print in hex (translates code point to code point)
     # >= 2 => is a dfa table, like https://bjoern.hoehrmann.de/utf-8/decoder/dfa/
@@ -141,7 +147,7 @@ EOF
     my $TYPE = 'U8';
     $TYPE = 'U16' if grep { $_ > 255 } @$table_ref;
 
-    output_table_start $out_fh, $TYPE, $name;
+    output_table_start $out_fh, $TYPE, $name, $size;
 
     # First the headers for the columns
     print $out_fh get_column_headers($row_hdr_length, $field_width);
@@ -378,6 +384,9 @@ END
  * is A-Z; all other code points map to themselves */
 END
         output_table(\@ascii_fold, "PL_fold");
+
+        # This table is also the correct folding for the default C locale
+        output_table(\@ascii_fold, "PL_fold_locale");
     }
 
     {
index 5c33127..cdd9f57 100755 (executable)
@@ -4,8 +4,6 @@
 #
 #    embed.h
 #    embedvar.h
-#    perlapi.c
-#    perlapi.h
 #    proto.h
 #
 # from information stored in
@@ -526,179 +524,10 @@ for $sym (@intrp) {
 print $em <<'END';
 
 #endif /* MULTIPLICITY */
-
-#if defined(PERL_GLOBAL_STRUCT)
-
-END
-
-for $sym (@globvar) {
-    print $em "#ifdef OS2\n" if $sym eq 'sh_path';
-    print $em "#ifdef __VMS\n" if $sym eq 'perllib_sep';
-    print $em multon($sym,   'G','my_vars->');
-    print $em multon("G$sym",'', 'my_vars->');
-    print $em "#endif\n" if $sym eq 'sh_path';
-    print $em "#endif\n" if $sym eq 'perllib_sep';
-}
-
-print $em <<'END';
-
-#endif /* PERL_GLOBAL_STRUCT */
 END
 
 read_only_bottom_close_and_rename($em) if ! $error_count;
 
-my $capih = open_print_header('perlapi.h');
-
-print $capih <<'EOT';
-/* declare accessor functions for Perl variables */
-#ifndef __perlapi_h__
-#define __perlapi_h__
-
-#if defined (MULTIPLICITY) && defined (PERL_GLOBAL_STRUCT)
-
-START_EXTERN_C
-
-#undef PERLVAR
-#undef PERLVARA
-#undef PERLVARI
-#undef PERLVARIC
-#define PERLVAR(p,v,t) EXTERN_C t* Perl_##p##v##_ptr(pTHX);
-#define PERLVARA(p,v,n,t)      typedef t PL_##v##_t[n];                \
-                       EXTERN_C PL_##v##_t* Perl_##p##v##_ptr(pTHX);
-#define PERLVARI(p,v,t,i)      PERLVAR(p,v,t)
-#define PERLVARIC(p,v,t,i) PERLVAR(p,v, const t)
-
-#include "perlvars.h"
-
-#undef PERLVAR
-#undef PERLVARA
-#undef PERLVARI
-#undef PERLVARIC
-
-END_EXTERN_C
-
-#if defined(PERL_CORE)
-
-/* accessor functions for Perl "global" variables */
-
-/* these need to be mentioned here, or most linkers won't put them in
-   the perl executable */
-
-#ifndef PERL_NO_FORCE_LINK
-
-START_EXTERN_C
-
-#ifndef DOINIT
-EXTCONST void * const PL_force_link_funcs[];
-#else
-EXTCONST void * const PL_force_link_funcs[] = {
-#undef PERLVAR
-#undef PERLVARA
-#undef PERLVARI
-#undef PERLVARIC
-#define PERLVAR(p,v,t)         (void*)Perl_##p##v##_ptr,
-#define PERLVARA(p,v,n,t)      PERLVAR(p,v,t)
-#define PERLVARI(p,v,t,i)      PERLVAR(p,v,t)
-#define PERLVARIC(p,v,t,i)     PERLVAR(p,v,t)
-
-/* In Tru64 (__DEC && __osf__) the cc option -std1 causes that one
- * cannot cast between void pointers and function pointers without
- * info level warnings.  The PL_force_link_funcs[] would cause a few
- * hundred of those warnings.  In code one can circumnavigate this by using
- * unions that overlay the different pointers, but in declarations one
- * cannot use this trick.  Therefore we just disable the warning here
- * for the duration of the PL_force_link_funcs[] declaration. */
-
-#if defined(__DECC) && defined(__osf__)
-#pragma message save
-#pragma message disable (nonstandcast)
-#endif
-
-#include "perlvars.h"
-
-#if defined(__DECC) && defined(__osf__)
-#pragma message restore
-#endif
-
-#undef PERLVAR
-#undef PERLVARA
-#undef PERLVARI
-#undef PERLVARIC
-};
-#endif /* DOINIT */
-
-END_EXTERN_C
-
-#endif /* PERL_NO_FORCE_LINK */
-
-#else  /* !PERL_CORE */
-
-EOT
-
-foreach $sym (@globvar) {
-    print $capih
-       "#undef  PL_$sym\n" . hide("PL_$sym", "(*Perl_G${sym}_ptr(NULL))");
-}
-
-print $capih <<'EOT';
-
-#endif /* !PERL_CORE */
-#endif /* MULTIPLICITY && PERL_GLOBAL_STRUCT */
-
-#endif /* __perlapi_h__ */
-EOT
-
-read_only_bottom_close_and_rename($capih) if ! $error_count;
-
-my $capi = open_print_header('perlapi.c', <<'EOQ');
- *
- *
- * Up to the threshold of the door there mounted a flight of twenty-seven
- * broad stairs, hewn by some unknown art of the same black stone.  This
- * was the only entrance to the tower; ...
- *
- *     [p.577 of _The Lord of the Rings_, III/x: "The Voice of Saruman"]
- *
- */
-EOQ
-
-print $capi <<'EOT';
-#include "EXTERN.h"
-#include "perl.h"
-#include "perlapi.h"
-
-#if defined (MULTIPLICITY) && defined (PERL_GLOBAL_STRUCT)
-
-/* accessor functions for Perl "global" variables */
-START_EXTERN_C
-
-#undef PERLVARI
-#define PERLVARI(p,v,t,i) PERLVAR(p,v,t)
-
-#undef PERLVAR
-#undef PERLVARA
-#define PERLVAR(p,v,t)         t* Perl_##p##v##_ptr(pTHX)              \
-                       { dVAR; PERL_UNUSED_CONTEXT; return &(PL_##v); }
-#define PERLVARA(p,v,n,t)      PL_##v##_t* Perl_##p##v##_ptr(pTHX)     \
-                       { dVAR; PERL_UNUSED_CONTEXT; return &(PL_##v); }
-#undef PERLVARIC
-#define PERLVARIC(p,v,t,i)     \
-                       const t* Perl_##p##v##_ptr(pTHX)                \
-                       { PERL_UNUSED_CONTEXT; return (const t *)&(PL_##v); }
-#include "perlvars.h"
-
-#undef PERLVAR
-#undef PERLVARA
-#undef PERLVARI
-#undef PERLVARIC
-
-END_EXTERN_C
-
-#endif /* MULTIPLICITY && PERL_GLOBAL_STRUCT */
-EOT
-
-read_only_bottom_close_and_rename($capi) if ! $error_count;
-
 die "$error_count errors found" if $error_count;
 
 # ex: set ts=8 sts=4 sw=4 noet:
index f312e81..fe338fa 100755 (executable)
@@ -14,8 +14,9 @@ BEGIN {
     require './regen/regen_lib.pl';
     push @INC, './lib';
 }
-use strict ;
 
+use strict;
+use warnings;
 
 ###########################################################################
 # Hand-editable data
@@ -37,6 +38,7 @@ my %feature = (
     signatures      => 'signatures',
     isa             => 'isa',
     indirect        => 'indirect',
+    multidimensional => 'multidimensional',
 );
 
 # NOTE: If a feature is ever enabled in a non-contiguous range of Perl
@@ -44,33 +46,36 @@ my %feature = (
 #       be changed to account.
 
 # 5.odd implies the next 5.even, but an explicit 5.even can override it.
+
+# features bundles
+use constant V5_9_5 => sort qw{say state switch indirect multidimensional};
+use constant V5_11  => sort ( +V5_9_5, qw{unicode_strings} );
+use constant V5_15  => sort ( +V5_11, qw{unicode_eval evalbytes current_sub fc} );
+use constant V5_23  => sort ( +V5_15, qw{postderef_qq} );
+use constant V5_27  => sort ( +V5_23, qw{bitwise} );
+
 my %feature_bundle = (
-     all     => [ keys %feature ],
-     default =>        [qw(indirect)],
-    "5.9.5"  =>        [qw(say state switch indirect)],
-    "5.10"   =>        [qw(say state switch indirect)],
-    "5.11"   =>        [qw(say state switch unicode_strings indirect)],
-    "5.13"   =>        [qw(say state switch unicode_strings indirect)],
-    "5.15"   =>        [qw(say state switch unicode_strings unicode_eval
-                   evalbytes current_sub fc indirect)],
-    "5.17"   =>        [qw(say state switch unicode_strings unicode_eval
-                   evalbytes current_sub fc indirect)],
-    "5.19"   =>        [qw(say state switch unicode_strings unicode_eval
-                   evalbytes current_sub fc indirect)],
-    "5.21"   =>        [qw(say state switch unicode_strings unicode_eval
-                   evalbytes current_sub fc indirect)],
-    "5.23"   =>        [qw(say state switch unicode_strings unicode_eval
-                   evalbytes current_sub fc postderef_qq indirect)],
-    "5.25"   =>        [qw(say state switch unicode_strings unicode_eval
-                   evalbytes current_sub fc postderef_qq indirect)],
-    "5.27"   =>        [qw(say state switch unicode_strings unicode_eval
-                   evalbytes current_sub fc postderef_qq bitwise indirect)],
-    "5.29"   =>        [qw(say state switch unicode_strings unicode_eval
-                   evalbytes current_sub fc postderef_qq bitwise indirect)],
-    "5.31"   =>        [qw(say state switch unicode_strings unicode_eval
-                   evalbytes current_sub fc postderef_qq bitwise indirect)],
-    "5.33"   =>        [qw(say state switch unicode_strings unicode_eval
-                   evalbytes current_sub fc postderef_qq bitwise indirect)],
+    all     => [ sort keys %feature ],
+    default => [ qw{indirect multidimensional} ],
+    # using 5.9.5 features bundle
+    "5.9.5" => [ +V5_9_5 ],
+    "5.10"  => [ +V5_9_5 ],
+    # using 5.11 features bundle
+    "5.11"  => [ +V5_11 ],
+    "5.13"  => [ +V5_11 ],
+    # using 5.15 features bundle
+    "5.15"  => [ +V5_15 ],
+    "5.17"  => [ +V5_15 ],
+    "5.19"  => [ +V5_15 ],
+    "5.21"  => [ +V5_15 ],
+    # using 5.23 features bundle
+    "5.23"  => [ +V5_23 ],
+    "5.25"  => [ +V5_23 ],
+    # using 5.27 features bundle
+    "5.27"  => [ +V5_27 ],
+    "5.29"  => [ +V5_27 ],
+    "5.31"  => [ +V5_27 ],
+    "5.33"  => [ +V5_27 ],
 );
 
 my @noops = qw( postderef lexical_subs );
@@ -471,7 +476,7 @@ read_only_bottom_close_and_rename($h);
 __END__
 package feature;
 
-our $VERSION = '1.59';
+our $VERSION = '1.60';
 
 FEATURES
 
@@ -776,6 +781,23 @@ previous versions, it was simply on all the time.  To disallow (or
 warn on) indirect object syntax on older Perls, see the L<indirect>
 CPAN module.
 
+=head2 The 'multidimensional' feature
+
+This feature enables multidimensional array emulation, a perl 4 (or
+earlier) feature that was used to emulate multidimensional arrays with
+hashes.  This works by converting code like C<< $foo{$x, y} >> into
+C<< $foo{join($;, $x, $y} >>.  It is enabled by default, but can be
+turned off to disable multidimensional array emulation.
+
+When this feature is disabled the syntax that is normally replaced
+will report a compilation error.
+
+This feature is available under this name from Perl 5.34 onwards. In
+previous versions, it was simply on all the time.
+
+You can use the L<multidimensional> module on CPAN to disable
+multidimensional array emulation for older versions of Perl.
+
 =head1 FEATURE BUNDLES
 
 It's possible to load multiple features together, using
index 6438c37..c14bb16 100644 (file)
@@ -515,9 +515,9 @@ for (qw(trans transr)) {
     addbits($_,
         # There is a character in the lhs representable not using UTF-8 whose
         # replacement requires UTF-8.
-        0 => qw(OPpTRANS_CAN_FORCE_UTF8 CAN_FORCE_UTF8),
-
-        1 => qw(OPpTRANS_USE_SVOP   USE_SVOP),# This is implemented as an svop
+        0 => qw(OPpTRANS_CAN_FORCE_UTF8 CAN_FORCE_UTF8),    # 0-255 range
+                                              # character maps to 256-INF
+        1 => qw(OPpTRANS_USE_SVOP   USE_SVOP),# This is implemented an an svop
                                               # vs pvop
         2 => qw(OPpTRANS_IDENTICAL  IDENT),   # right side is same as left
         3 => qw(OPpTRANS_SQUASH     SQUASH),  # /s
index e7b59a4..cbd2979 100755 (executable)
@@ -819,9 +819,7 @@ sub print_PL_op_private_tables {
     print $fh <<EOF;
 START_EXTERN_C
 
-#ifndef PERL_GLOBAL_STRUCT_INIT
-
-#  ifndef DOINIT
+#ifndef DOINIT
 
 /* data about the flags in op_private */
 
@@ -831,7 +829,7 @@ EXTCONST char PL_op_private_labels[];
 EXTCONST I16  PL_op_private_bitfields[];
 EXTCONST U8   PL_op_private_valid[];
 
-#  else
+#else
 
 
 /* PL_op_private_labels[]: the short descriptions of private flags.
@@ -893,8 +891,7 @@ EXTCONST U8 PL_op_private_valid[] = {
 $PL_op_private_valid
 };
 
-#  endif /* !DOINIT */
-#endif /* !PERL_GLOBAL_STRUCT_INIT */
+#endif /* !DOINIT */
 
 END_EXTERN_C
 
@@ -923,8 +920,6 @@ require './regen/op_private';
 
 # Emit defines.
 
-print $oc    "#ifndef PERL_GLOBAL_STRUCT_INIT\n\n";
-
 {
     my $last_cond = '';
     my @unimplemented;
@@ -1012,8 +1007,6 @@ print $oc <<'END';
 #endif
 
 END_EXTERN_C
-
-#endif /* !PERL_GLOBAL_STRUCT_INIT */
 END
 
 # Emit ppcode switch array.
@@ -1022,15 +1015,8 @@ print $oc <<'END';
 
 START_EXTERN_C
 
-#ifdef PERL_GLOBAL_STRUCT_INIT
-#  define PERL_PPADDR_INITED
-static const Perl_ppaddr_t Gppaddr[]
-#elif !defined(PERL_GLOBAL_STRUCT)
-#  define PERL_PPADDR_INITED
 EXT Perl_ppaddr_t PL_ppaddr[] /* or perlvars.h */
-#endif /* PERL_GLOBAL_STRUCT */
-#if (defined(DOINIT) && !defined(PERL_GLOBAL_STRUCT)) || defined(PERL_GLOBAL_STRUCT_INIT)
-#  define PERL_PPADDR_INITED
+#if defined(DOINIT)
 = {
 END
 
@@ -1048,19 +1034,10 @@ for (@ops) {
 print $oc <<'END';
 }
 #endif
-#ifdef PERL_PPADDR_INITED
 ;
-#endif
 
-#ifdef PERL_GLOBAL_STRUCT_INIT
-#  define PERL_CHECK_INITED
-static const Perl_check_t Gcheck[]
-#elif !defined(PERL_GLOBAL_STRUCT)
-#  define PERL_CHECK_INITED
 EXT Perl_check_t PL_check[] /* or perlvars.h */
-#endif
-#if (defined(DOINIT) && !defined(PERL_GLOBAL_STRUCT)) || defined(PERL_GLOBAL_STRUCT_INIT)
-#  define PERL_CHECK_INITED
+#if defined(DOINIT)
 = {
 END
 
@@ -1071,11 +1048,7 @@ for (@ops) {
 print $oc <<'END';
 }
 #endif
-#ifdef PERL_CHECK_INITED
 ;
-#endif /* #ifdef PERL_CHECK_INITED */
-
-#ifndef PERL_GLOBAL_STRUCT_INIT
 
 #ifndef DOINIT
 EXTCONST U32 PL_opargs[];
@@ -1185,8 +1158,6 @@ print $oc <<'END';
 };
 #endif
 
-#endif /* !PERL_GLOBAL_STRUCT_INIT */
-
 END_EXTERN_C
 END
 
index f2c1d7c..ba2e1c8 100644 (file)
@@ -91,6 +91,12 @@ print $h <<EOF;
 
 #ifdef USE_REENTRANT_API
 
+/* For thread-safe builds, alternative methods are used to make calls to this
+ * safe. */
+#ifdef USE_THREAD_SAFE_LOCALE
+#   undef HAS_SETLOCALE_R
+#endif
 /* Deprecations: some platforms have the said reentrant interfaces
  * but they are declared obsolete and are not to be used.  Often this
  * means that the platform has threadsafed the interfaces (hopefully).
@@ -489,8 +495,11 @@ for my $func (@seenf) {
        char*   _${func}_buffer;
        size_t  _${func}_size;
 EOF
+            my $size = ($func =~ /^(asctime|ctime)$/)
+                       ? 26
+                       : "REENTRANTSMALLSIZE";
            push @size, <<EOF;
-       PL_reentrant_buffer->_${func}_size = REENTRANTSMALLSIZE;
+       PL_reentrant_buffer->_${func}_size = $size;
 EOF
            pushinitfree $func;
            pushssif $endif;
@@ -809,7 +818,7 @@ print $c <<"EOF";
 
 #define RenewDouble(data_pointer, size_pointer, type) \\
     STMT_START { \\
-       const size_t size = *(size_pointer) * 2; \\
+       const size_t size = MAX(*(size_pointer), 1) * 2; \\
        Renew((data_pointer), (size), type); \\
        *(size_pointer) = size; \\
     } STMT_END
index cbe51ed..82c5c7a 100644 (file)
@@ -96,7 +96,7 @@ sub close_and_rename {
         }
         if ($fail) {
             print STDOUT "not ok - $0 $final_name\n";
-            print STDERR "$fail\n";
+            die "$fail\n";
         } else {
             print STDOUT "ok - $0 $final_name\n";
         }
@@ -204,6 +204,8 @@ sub read_only_bottom_close_and_rename {
     print $fh "\n$comment\n";
 
     close_and_rename($fh);
+
+    return;
 }
 
 sub tab {
index 9fbf607..1a272d5 100644 (file)
@@ -16,7 +16,7 @@
 #
 # This script is normally invoked from regen.pl.
 
-$VERSION = '1.47';
+$VERSION = '1.48';
 
 BEGIN {
     require './regen/regen_lib.pl';
@@ -205,15 +205,15 @@ sub walk
 
 sub mkRange
 {
-    my @a = @_ ;
-    my @out = @a ;
+    my @in = @_ ;
+    my @out = @in ;
 
-    for my $i (1 .. @a - 1) {
+    for my $i (1 .. @in - 1) {
        $out[$i] = ".."
-          if $a[$i] == $a[$i - 1] + 1
-             && ($i >= @a  - 1 || $a[$i] + 1 == $a[$i + 1] );
+          if $in[$i] == $in[$i - 1] + 1
+             && ($i >= @in  - 1 || $in[$i] + 1 == $in[$i + 1] );
     }
-    $out[-1] = $a[-1] if $out[-1] eq "..";
+    $out[-1] = $in[-1] if $out[-1] eq "..";
 
     my $out = join(",",@out);
 
@@ -267,11 +267,11 @@ sub warningsTree
 
 sub mkHexOct
 {
-    my ($f, $max, @a) = @_ ;
+    my ($f, $max, @bits) = @_ ;
     my $mask = "\x00" x $max ;
     my $string = "" ;
 
-    foreach (@a) {
+    foreach (@bits) {
        vec($mask, $_, 1) = 1 ;
     }
 
@@ -288,14 +288,14 @@ sub mkHexOct
 
 sub mkHex
 {
-    my($max, @a) = @_;
-    return mkHexOct("x", $max, @a);
+    my($max, @bits) = @_;
+    return mkHexOct("x", $max, @bits);
 }
 
 sub mkOct
 {
-    my($max, @a) = @_;
-    return mkHexOct("o", $max, @a);
+    my($max, @bits) = @_;
+    return mkHexOct("o", $max, @bits);
 }
 
 ###########################################################################
@@ -566,7 +566,7 @@ print $pm ");\n\n" ;
 print $pm "# These are used by various things, including our own tests\n";
 print $pm tab(6, 'our $NONE'), '=  "', ('\0' x $warn_size) , "\";\n" ;
 print $pm tab(6, 'our $DEFAULT'), '=  "', mkHex($warn_size, map $_ * 2, @def),
-                          '", # [', mkRange(sort { $a <=> $b } @def), "]\n" ;
+                          '"; # [', mkRange(sort { $a <=> $b } @def), "]\n" ;
 print $pm tab(6, 'our $LAST_BIT'), '=  ' . "$index ;\n" ;
 print $pm tab(6, 'our $BYTES'),    '=  ' . "$warn_size ;\n" ;
 while (<DATA>) {
@@ -612,10 +612,10 @@ sub _expand_bits {
        } elsif ($len > $want_len) {
            substr $bits, $want_len, $len-$want_len, "";
        } else {
-           my $a = vec($bits, $Offsets{all} >> 1, 2);
-           $a |= $a << 2;
-           $a |= $a << 4;
-           $bits .= chr($a) x ($want_len - $len);
+           my $x = vec($bits, $Offsets{all} >> 1, 2);
+           $x |= $x << 2;
+           $x |= $x << 4;
+           $bits .= chr($x) x ($want_len - $len);
        }
     }
     return $bits;
@@ -943,17 +943,17 @@ Similarly all warnings are disabled in a block by either of these:
 For example, consider the code below:
 
     use warnings;
-    my @a;
+    my @x;
     {
         no warnings;
-       my $b = @a[0];
+       my $y = @x[0];
     }
-    my $c = @a[0];
+    my $z = @x[0];
 
 The code in the enclosing block has warnings enabled, but the inner
 block has them disabled.  In this case that means the assignment to the
-scalar C<$c> will trip the C<"Scalar value @a[0] better written as $a[0]">
-warning, but the assignment to the scalar C<$b> will not.
+scalar C<$z> will trip the C<"Scalar value @x[0] better written as $x[0]">
+warning, but the assignment to the scalar C<$y> will not.
 
 =head2 Default Warnings and Optional Warnings
 
@@ -965,18 +965,18 @@ would get a warning whether you wanted it or not.
 For example, the code below would always produce an C<"isn't numeric">
 warning about the "2:".
 
-    my $a = "2:" + 3;
+    my $x = "2:" + 3;
 
 With the introduction of lexical warnings, mandatory warnings now become
 I<default> warnings.  The difference is that although the previously
 mandatory warnings are still enabled by default, they can then be
 subsequently enabled or disabled with the lexical warning pragma.  For
 example, in the code below, an C<"isn't numeric"> warning will only
-be reported for the C<$a> variable.
+be reported for the C<$x> variable.
 
-    my $a = "2:" + 3;
+    my $x = "2:" + 3;
     no warnings;
-    my $b = "2:" + 3;
+    my $y = "2:" + 3;
 
 Note that neither the B<-w> flag or the C<$^W> can be used to
 disable/enable default warnings.  They are still mandatory in this case.
@@ -996,20 +996,20 @@ 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;
+        my $x =+ 2;
+        my $y; chop $y;
      }
 
 When this code is run with the B<-w> flag, a warning will be produced
-for the C<$a> line:  C<"Reversed += operator">.
+for the C<$x> line:  C<"Reversed += operator">.
 
 The problem is that Perl has both compile-time and run-time warnings.  To
 disable compile-time warnings you need to rewrite the code like this:
 
      {
          BEGIN { $^W = 0 }
-        my $a =+ 2;
-        my $b; chop $b;
+        my $x =+ 2;
+        my $y; chop $y;
      }
 
 And note that unlike the first example, this will permanently set C<$^W>
@@ -1024,7 +1024,7 @@ the first will not.
 
     sub doit
     {
-        my $b; chop $b;
+        my $y; chop $y;
     }
 
     doit();
@@ -1050,7 +1050,7 @@ warnings are (or aren't) produced:
 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
+used in any of your code, or any of the modules that you use, this flag
 will enable warnings everywhere.  See L</Backward Compatibility> for
 details of how this flag interacts with lexical warnings.
 
@@ -1392,12 +1392,12 @@ C<Derived>.
     use Original;
     use Derived;
     use warnings 'Derived';
-    my $a = Original->new();
-    $a->doit(1);
-    my $b = Derived->new();
-    $a->doit(1);
+    my $x = Original->new();
+    $x->doit(1);
+    my $y = Derived->new();
+    $x->doit(1);
 
-When this code is run only the C<Derived> object, C<$b>, will generate
+When this code is run only the C<Derived> object, C<$y>, will generate
 a warning.
 
     Odd numbers are unsafe at main.pl line 7
index ac5f13a..044fd28 100644 (file)
@@ -76,11 +76,11 @@ EOF
 
 # Don't change this to add new bison versions without testing that the generated
 # files actually work :-) Win32 in particular may not like them. :-(
-unless ($version =~ /\b(1\.875[a-z]?|2\.[0134567]|3\.[0-4])\b/) { die <<EOF; }
+unless ($version =~ /\b(2\.[4567]|3\.[0-7])\b/) { die <<EOF; }
 
 You have the wrong version of bison in your path; currently versions
-1.875, 2.0-2.7 or 3.0-3.4 are known to work.  Try installing
-    http://ftp.gnu.org/gnu/bison/bison-2.5.1.tar.gz
+2.4-2.7 or 3.0-3.7 are known to work.  Try installing
+    http://ftp.gnu.org/gnu/bison/bison-3.3.tar.gz
 or similar.  Your bison identifies itself as:
 
 $version
@@ -133,8 +133,7 @@ open my $tmph_fh, '<', $tmph_file or die "Can't open $tmph_file: $!\n";
 }
 
 my $endcore_done = 0;
-# Token macros need to be generated manually from bison 2.4 on
-my $gather_tokens = $version >= 2.4 ? undef : 0;
+my $gather_tokens = 0;
 my $tokens;
 while (<$tmph_fh>) {
     # bison 2.6 adds header guards, which break things because of where we
@@ -163,10 +162,10 @@ j
        $endcore_done = 1;
     }
     next if /^#line \d+ ".*"/;
-    if (not defined $gather_tokens) {
+    if (!$gather_tokens) {
        $gather_tokens = 1 if /^\s* enum \s* yytokentype \s* \{/x;
     }
-    elsif ($gather_tokens) {
+    else {
        if (/^\# \s* endif/x) { # The #endif just after the end of the token enum
            $gather_tokens = 0;
            $_ .= "\n/* Tokens.  */\n$tokens";
@@ -188,13 +187,25 @@ foreach ($act_fh, $tab_fh, $h_fh) {
 exit 0;
 
 
-# extract the tables and actions from the generated .c file
+# extract the symbol kinds, tables and actions from the generated .c file
 
 sub extract {
     my $clines = shift;
     my $tablines;
     my $actlines;
 
+    # extract the symbol kind table if it exists
+    $clines =~ m@
+        (?:
+            ^/\* \s* Symbol \s+ kind\. \s* \*/\n
+        )?
+        enum \s+ yysymbol_kind_t \s* \{
+        .*?
+        \} \s* ;\n
+        typedef \s+ enum \s+ \w+ \s+ \w+ ; \n+
+    @xms
+        and $tablines .= $&;
+
     my $last_table = $version >= 3 ? 'yyr2' : 'yystos';
     $clines =~ m@
        (?:
@@ -207,7 +218,7 @@ sub extract {
        }\s*;                           # end of last table
     @xms
        or die "Can't extract tables from $tmpc_file\n";
-    $tablines = $&;
+    $tablines .= $&;
 
 
     # extract all the cases in the big action switch statement
@@ -223,6 +234,9 @@ sub extract {
     # Remove extraneous comments from bison 2.4
     $actlines =~ s!\s* /\* \s* Line \s* \d+ \s* of \s* yacc\.c \s* \*/!!gx;
 
+    # Remove extraneous comments from bison 3.x
+    $actlines =~ s!\s* /\* \s* yacc\.c : \d+ \s* \*/!!gx;
+
     # C<#line 188 "perlytmp.c"> gets picked up by make depend, so remove them.
     $actlines =~ s/^#line \d+ "\Q$tmpc_file\E".*$//gm;
 
@@ -308,7 +322,7 @@ sub make_type_tab {
            /xsm
        or die "Can't extract yytname[] from table string\n";
     my $fields = $1;
-    $fields =~ s{"([^"]+)"}
+    $fields =~ s{"((?:[^"\\]|\\.)+)"}
                { "toketype_" .
                    (defined $tokens{$1} ? $tokens{$1} : $default_token)
                }ge;
index 5cbde65..e763c0a 100644 (file)
--- a/regexec.c
+++ b/regexec.c
@@ -496,7 +496,6 @@ S_isFOO_utf8_lc(pTHX_ const U8 classnum, const U8* character, const U8* e)
      * rules, ignoring any locale.  So use the Unicode function if this class
      * requires an inversion list, and use the Unicode macro otherwise. */
 
-    dVAR;
 
     PERL_ARGS_ASSERT_ISFOO_UTF8_LC;
 
@@ -1920,7 +1919,8 @@ STMT_START {
 
 /* Like FBC_UTF8_A, but TEST_UV is a macro which takes a UV as its input, and
  * TEST_UTF8 is a macro that for the same input code points returns identically
- * to TEST_UV, but takes a pointer to a UTF-8 encoded string instead */
+ * to TEST_UV, but takes a pointer to a UTF-8 encoded string instead (and an
+ * end pointer as well) */
 #define FBC_UTF8(TEST_UV, TEST_UTF8, IF_SUCCESS, IF_FAIL)                      \
     if (s == reginfo->strbeg) {                                                \
         tmp = '\n';                                                            \
@@ -2098,7 +2098,6 @@ STATIC char *
 S_find_byclass(pTHX_ regexp * prog, const regnode *c, char *s, 
     const char *strend, regmatch_info *reginfo)
 {
-    dVAR;
 
     /* TRUE if x+ need not match at just the 1st pos of run of x's */
     const I32 doevery = (prog->intflags & PREGf_SKIP) == 0;
@@ -3611,7 +3610,7 @@ Perl_regexec_flags(pTHX_ REGEXP * const rx, char *stringarg, char *strend,
                 to_utf8_substr(prog);
             }
             ch = SvPVX_const(prog->anchored_utf8)[0];
-           REXEC_FBC_SCAN(0,   /* 0=>not-utf8 */
+           REXEC_FBC_SCAN(1,   /* 1=>utf8 */
                if (*s == ch) {
                    DEBUG_EXECUTE_r( did_match = 1 );
                    if (regtry(reginfo, &s)) goto got_it;
@@ -4273,7 +4272,6 @@ S_setup_EXACTISH_ST_c1_c2(pTHX_ const regnode * const text_node, int *c1p,
      * to/from code points */
     bool utf8_has_been_setup = FALSE;
 
-    dVAR;
 
     U8 *pat = (U8*)STRING(text_node);
     U8 folded[UTF8_MAX_FOLD_CHAR_EXPAND * UTF8_MAXBYTES_CASE + 1] = { '\0' };
@@ -4606,7 +4604,6 @@ S_isGCB(pTHX_ const GCB_enum before, const GCB_enum after, const U8 * const strb
 STATIC GCB_enum
 S_backup_one_GCB(pTHX_ const U8 * const strbeg, U8 ** curpos, const bool utf8_target)
 {
-    dVAR;
     GCB_enum gcb;
 
     PERL_ARGS_ASSERT_BACKUP_ONE_GCB;
@@ -4884,7 +4881,6 @@ S_isLB(pTHX_ LB_enum before,
 STATIC LB_enum
 S_advance_one_LB(pTHX_ U8 ** curpos, const U8 * const strend, const bool utf8_target)
 {
-    dVAR;
 
     LB_enum lb;
 
@@ -4915,7 +4911,6 @@ S_advance_one_LB(pTHX_ U8 ** curpos, const U8 * const strend, const bool utf8_ta
 STATIC LB_enum
 S_backup_one_LB(pTHX_ const U8 * const strbeg, U8 ** curpos, const bool utf8_target)
 {
-    dVAR;
     LB_enum lb;
 
     PERL_ARGS_ASSERT_BACKUP_ONE_LB;
@@ -5152,7 +5147,6 @@ S_isSB(pTHX_ SB_enum before,
 STATIC SB_enum
 S_advance_one_SB(pTHX_ U8 ** curpos, const U8 * const strend, const bool utf8_target)
 {
-    dVAR;
     SB_enum sb;
 
     PERL_ARGS_ASSERT_ADVANCE_ONE_SB;
@@ -5186,7 +5180,6 @@ S_advance_one_SB(pTHX_ U8 ** curpos, const U8 * const strend, const bool utf8_ta
 STATIC SB_enum
 S_backup_one_SB(pTHX_ const U8 * const strbeg, U8 ** curpos, const bool utf8_target)
 {
-    dVAR;
     SB_enum sb;
 
     PERL_ARGS_ASSERT_BACKUP_ONE_SB;
@@ -5423,7 +5416,6 @@ S_advance_one_WB(pTHX_ U8 ** curpos,
                        const bool utf8_target,
                        const bool skip_Extend_Format)
 {
-    dVAR;
     WB_enum wb;
 
     PERL_ARGS_ASSERT_ADVANCE_ONE_WB;
@@ -5461,7 +5453,6 @@ S_advance_one_WB(pTHX_ U8 ** curpos,
 STATIC WB_enum
 S_backup_one_WB(pTHX_ WB_enum * previous, const U8 * const strbeg, U8 ** curpos, const bool utf8_target)
 {
-    dVAR;
     WB_enum wb;
 
     PERL_ARGS_ASSERT_BACKUP_ONE_WB;
@@ -5760,7 +5751,6 @@ bounds of our window into the string.
 STATIC SSize_t
 S_regmatch(pTHX_ regmatch_info *reginfo, char *startpos, regnode *prog)
 {
-    dVAR;
     const bool utf8_target = reginfo->is_utf8_target;
     const U32 uniflags = UTF8_ALLOW_DEFAULT;
     REGEXP *rex_sv = reginfo->prog;
@@ -9422,7 +9412,6 @@ STATIC I32
 S_regrepeat(pTHX_ regexp *prog, char **startposp, const regnode *p,
             char * loceol, regmatch_info *const reginfo, I32 max _pDEPTH)
 {
-    dVAR;
     char *scan;     /* Pointer to current position in target string */
     I32 c;
     char *this_eol = loceol;   /* potentially adjusted version. */
@@ -10115,7 +10104,6 @@ S_regrepeat(pTHX_ regexp *prog, char **startposp, const regnode *p,
 STATIC bool
 S_reginclass(pTHX_ regexp * const prog, const regnode * const n, const U8* const p, const U8* const p_end, const bool utf8_target)
 {
-    dVAR;
     const char flags = (inRANGE(OP(n), ANYOFH, ANYOFHs))
                         ? 0
                         : ANYOF_FLAGS(n);
@@ -10158,7 +10146,7 @@ S_reginclass(pTHX_ regexp * const prog, const regnode * const n, const U8* const
        }
        else if (flags & ANYOF_LOCALE_FLAGS) {
            if (  (flags & ANYOFL_FOLD)
-                && c < sizeof(PL_fold_locale)
+                && c < 256
                && ANYOF_BITMAP_TEST(n, PL_fold_locale[c]))
             {
                 match = TRUE;
@@ -10488,7 +10476,7 @@ S_setup_eval_state(pTHX_ regmatch_info *const reginfo)
             /* this regexp is also owned by the new PL_reg_curpm, which
                will try to free it.  */
             av_push(PL_regex_padav, repointer);
-            PL_reg_curpm->op_pmoffset = av_tindex(PL_regex_padav);
+            PL_reg_curpm->op_pmoffset = av_top_index(PL_regex_padav);
             PL_regex_pad = AvARRAY(PL_regex_padav);
         }
 #endif
@@ -10660,7 +10648,6 @@ Perl_is_grapheme(pTHX_ const U8 * strbeg, const U8 * s, const U8 * strend, const
      * so code using it would then break), and there has to be a GCB break
      * before and after the character. */
 
-    dVAR;
 
     GCB_enum cp_gcb_val, prev_cp_gcb_val, next_cp_gcb_val;
     const U8 * prev_cp_start;
@@ -10782,7 +10769,6 @@ Perl_isSCRIPT_RUN(pTHX_ const U8 * s, const U8 * send, const bool utf8_target)
      * characters for at least one language in the Unicode Common Locale Data
      * Repository [CLDR]. */
 
-    dVAR;
 
     /* Things that match /\d/u */
     SV * decimals_invlist = PL_XPosix_ptrs[_CC_DIGIT];
@@ -10871,10 +10857,7 @@ Perl_isSCRIPT_RUN(pTHX_ const U8 * s, const U8 * send, const bool utf8_target)
         /* If is within the range [+0 .. +9] of the script's zero, it also is a
          * digit in that script.  We can skip the rest of this code for this
          * character. */
-        if (UNLIKELY(   zero_of_run
-                     && cp >= zero_of_run
-                     && cp - zero_of_run <= 9))
-        {
+        if (UNLIKELY(zero_of_run && withinCOUNT(cp, zero_of_run, 9))) {
             continue;
         }
 
@@ -11095,7 +11078,7 @@ Perl_isSCRIPT_RUN(pTHX_ const U8 * s, const U8 * send, const bool utf8_target)
          * several scripts, and the intersection is not empty.  However, if the
          * character is a decimal digit, it could still mean failure if it is
          * from the wrong sequence of 10.  So, we need to look at if it's a
-         * digit.  We've already handled the 10 decimal digits, and the next
+         * digit.  We've already handled the 10 digits [0-9], and the next
          * lowest one is this one: */
         if (cp < FIRST_NON_ASCII_DECIMAL_DIGIT) {
             continue;   /* Not a digit; this character is part of the run */
@@ -11107,9 +11090,7 @@ Perl_isSCRIPT_RUN(pTHX_ const U8 * s, const U8 * send, const bool utf8_target)
         if (   script_of_char >= 0
             && (zero_of_char = script_zeros[script_of_char]))
         {
-            if (   cp < zero_of_char
-                || cp > zero_of_char + 9)
-            {
+            if (! withinCOUNT(cp, zero_of_char, 9)) {
                 continue;   /* Not a digit; this character is part of the run
                              */
             }
diff --git a/scope.c b/scope.c
index a948a7b..5b4fe11 100644 (file)
--- a/scope.c
+++ b/scope.c
@@ -686,7 +686,14 @@ Perl_save_hints(pTHX)
     COPHH *save_cophh = cophh_copy(CopHINTHASH_get(&PL_compiling));
     if (PL_hints & HINT_LOCALIZE_HH) {
        HV *oldhh = GvHV(PL_hintgv);
-       save_pushptri32ptr(oldhh, PL_hints, save_cophh, SAVEt_HINTS);
+        {
+            dSS_ADD;
+            SS_ADD_INT(PL_hints);
+            SS_ADD_PTR(save_cophh);
+            SS_ADD_PTR(oldhh);
+            SS_ADD_UV(SAVEt_HINTS_HH);
+            SS_ADD_END(4);
+        }
        GvHV(PL_hintgv) = NULL; /* in case copying dies */
        GvHV(PL_hintgv) = hv_copy_hints_hv(oldhh);
         SAVEFEATUREBITS();
@@ -863,7 +870,8 @@ static const U8 arg_counts[] = {
     3, /* SAVEt_SET_SVFLAGS        */
     3, /* SAVEt_GVSLOT             */
     3, /* SAVEt_AELEM              */
-    3  /* SAVEt_DELETE             */
+    3, /* SAVEt_DELETE             */
+    3  /* SAVEt_HINTS_HH           */
 };
 
 
@@ -1347,7 +1355,10 @@ Perl_leave_scope(pTHX_ I32 base)
            PL_op = (OP*)a0.any_ptr;
            break;
 
-       case SAVEt_HINTS:
+        case SAVEt_HINTS_HH:
+            a2 = ap[2];
+            /* FALLTHROUGH */
+        case SAVEt_HINTS:
             a0 = ap[0]; a1 = ap[1];
            if ((PL_hints & HINT_LOCALIZE_HH)) {
              while (GvHV(PL_hintgv)) {
@@ -1359,9 +1370,9 @@ Perl_leave_scope(pTHX_ I32 base)
            cophh_free(CopHINTHASH_get(&PL_compiling));
            CopHINTHASH_set(&PL_compiling, (COPHH*)a1.any_ptr);
            *(I32*)&PL_hints = a0.any_i32;
-           if (PL_hints & HINT_LOCALIZE_HH) {
+           if (type == SAVEt_HINTS_HH) {
                SvREFCNT_dec(MUTABLE_SV(GvHV(PL_hintgv)));
-               GvHV(PL_hintgv) = MUTABLE_HV(SSPOPPTR);
+                GvHV(PL_hintgv) = MUTABLE_HV(a2.any_ptr);
            }
            if (!GvHV(PL_hintgv)) {
                /* Need to add a new one manually, else rv2hv can
diff --git a/scope.h b/scope.h
index 483bc5d..176ac94 100644 (file)
--- a/scope.h
+++ b/scope.h
@@ -75,6 +75,7 @@
 #define SAVEt_GVSLOT           51
 #define SAVEt_AELEM            52
 #define SAVEt_DELETE           53
+#define SAVEt_HINTS_HH         54
 
 
 #define SAVEf_SETMAGIC         1
diff --git a/sv.c b/sv.c
index 9c7f3ba..da697b9 100644 (file)
--- a/sv.c
+++ b/sv.c
@@ -1085,14 +1085,9 @@ Perl_more_bodies (pTHX_ const svtype sv_type, const size_t body_size,
     char *start;
     const char *end;
     const size_t good_arena_size = Perl_malloc_good_size(arena_size);
-#if defined(DEBUGGING) && defined(PERL_GLOBAL_STRUCT)
-    dVAR;
-#endif
-#if defined(DEBUGGING) && !defined(PERL_GLOBAL_STRUCT)
+#if defined(DEBUGGING)
     static bool done_sanity_check;
 
-    /* PERL_GLOBAL_STRUCT cannot coexist with global
-     * variables like done_sanity_check. */
     if (!done_sanity_check) {
        unsigned int i = SVt_LAST;
 
@@ -3065,8 +3060,8 @@ Perl_sv_2pv_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags)
  
                return RX_WRAPPED(re);
            } else {
-               const char *const typestr = sv_reftype(referent, 0);
-               const STRLEN typelen = strlen(typestr);
+               const char *const typestring = sv_reftype(referent, 0);
+               const STRLEN typelen = strlen(typestring);
                UV addr = PTR2UV(referent);
                const char *stashname = NULL;
                STRLEN stashnamelen = 0; /* hush, gcc */
@@ -3109,7 +3104,7 @@ Perl_sv_2pv_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags)
                *--retval = '(';
 
                retval -= typelen;
-               memcpy(retval, typestr, typelen);
+               memcpy(retval, typestring, typelen);
 
                if (stashname) {
                    *--retval = '=';
@@ -6585,7 +6580,6 @@ instead.
 void
 Perl_sv_clear(pTHX_ SV *const orig_sv)
 {
-    dVAR;
     HV *stash;
     U32 type;
     const struct body_details *sv_type_details;
@@ -7108,7 +7102,6 @@ Perl_sv_free(pTHX_ SV *const sv)
 void
 Perl_sv_free2(pTHX_ SV *const sv, const U32 rc)
 {
-    dVAR;
 
     PERL_ARGS_ASSERT_SV_FREE2;
 
@@ -8854,13 +8847,7 @@ Perl_sv_gets(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
    else
     {
        /*The big, slow, and stupid way. */
-#ifdef USE_HEAP_INSTEAD_OF_STACK       /* Even slower way. */
-       STDCHAR *buf = NULL;
-       Newx(buf, 8192, STDCHAR);
-       assert(buf);
-#else
        STDCHAR buf[8192];
-#endif
 
       screamer2:
        if (rslen) {
@@ -8909,9 +8896,6 @@ Perl_sv_gets(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
                goto screamer2;
        }
 
-#ifdef USE_HEAP_INSTEAD_OF_STACK
-       Safefree(buf);
-#endif
     }
 
     if (rspara) {              /* have to do this both before and after */
@@ -9383,7 +9367,6 @@ C<L</sv_newmortal>> and C<L</sv_mortalcopy>>.
 SV *
 Perl_sv_2mortal(pTHX_ SV *const sv)
 {
-    dVAR;
     if (!sv)
        return sv;
     if (SvIMMORTAL(sv))
@@ -9530,7 +9513,6 @@ C<SvPVX_const == HeKEY> and hash lookup will avoid string compare.
 SV *
 Perl_newSVpvn_share(pTHX_ const char *src, I32 len, U32 hash)
 {
-    dVAR;
     SV *sv;
     bool is_utf8 = FALSE;
     const char *const orig_src = src;
@@ -12824,7 +12806,7 @@ Perl_sv_vcatpvfn_flags(pTHX_ SV *const sv, const char *const pat, const STRLEN p
                          (!UVCHR_IS_INVARIANT(uv) && SvUTF8(sv)))
                         && !IN_BYTES)
                     {
-                        assert(sizeof(ebuf) >= UTF8_MAXBYTES + 1);
+                        STATIC_ASSERT_STMT(sizeof(ebuf) >= UTF8_MAXBYTES + 1);
                         eptr = ebuf;
                         elen = uvchr_to_utf8((U8*)eptr, uv) - (U8*)ebuf;
                         is_utf8 = TRUE;
@@ -14125,7 +14107,6 @@ S_sv_dup_inc_multiple(pTHX_ SV *const *source, SV **dest,
 static SV *
 S_sv_dup_common(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
 {
-    dVAR;
     SV *dstr;
 
     PERL_ARGS_ASSERT_SV_DUP_COMMON;
@@ -14783,7 +14764,6 @@ Perl_any_dup(pTHX_ void *v, const PerlInterpreter *proto_perl)
 ANY *
 Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl, CLONE_PARAMS* param)
 {
-    dVAR;
     ANY * const ss     = proto_perl->Isavestack;
     const I32 max      = proto_perl->Isavestack_max + SS_MAXPUSH;
     I32 ix             = proto_perl->Isavestack_ix;
@@ -15016,16 +14996,16 @@ Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl, CLONE_PARAMS* param)
            ptr = POPPTR(ss,ix);
            TOPPTR(nss,ix) = ptr;
            break;
+        case SAVEt_HINTS_HH:
+            hv = (const HV *)POPPTR(ss,ix);
+            TOPPTR(nss,ix) = hv_dup_inc(hv, param);
+            /* FALLTHROUGH */
        case SAVEt_HINTS:
            ptr = POPPTR(ss,ix);
            ptr = cophh_copy((COPHH*)ptr);
            TOPPTR(nss,ix) = ptr;
            i = POPINT(ss,ix);
            TOPINT(nss,ix) = i;
-           if (i & HINT_LOCALIZE_HH) {
-               hv = (const HV *)POPPTR(ss,ix);
-               TOPPTR(nss,ix) = hv_dup_inc(hv, param);
-           }
            break;
        case SAVEt_PADSV_AND_MORTALIZE:
            longval = (long)POPLONG(ss,ix);
@@ -15138,7 +15118,6 @@ perl_clone_host(PerlInterpreter* proto_perl, UV flags);
 PerlInterpreter *
 perl_clone(PerlInterpreter *proto_perl, UV flags)
 {
-   dVAR;
 #ifdef PERL_IMPLICIT_SYS
 
     PERL_ARGS_ASSERT_PERL_CLONE;
@@ -15355,10 +15334,6 @@ perl_clone_using(PerlInterpreter *proto_perl, UV flags,
 
     PL_cv_has_eval     = proto_perl->Icv_has_eval;
 
-#ifdef FCRYPT
-    PL_cryptseen       = proto_perl->Icryptseen;
-#endif
-
 #ifdef USE_LOCALE_COLLATE
     PL_collation_ix    = proto_perl->Icollation_ix;
     PL_collation_standard      = proto_perl->Icollation_standard;
@@ -15866,7 +15841,7 @@ perl_clone_using(PerlInterpreter *proto_perl, UV flags,
     /* Call the ->CLONE method, if it exists, for each of the stashes
        identified by sv_dup() above.
     */
-    while(av_tindex(param->stashes) != -1) {
+    while(av_count(param->stashes) != 0) {
        HV* const stash = MUTABLE_HV(av_shift(param->stashes));
        GV* const cloner = gv_fetchmethod_autoload(stash, "CLONE", 0);
        if (cloner && GvCV(cloner)) {
@@ -15949,11 +15924,9 @@ S_unreferenced_to_tmp_stack(pTHX_ AV *const unreferenced)
 void
 Perl_clone_params_del(CLONE_PARAMS *param)
 {
-    /* This seemingly funky ordering keeps the build with PERL_GLOBAL_STRUCT
-       happy: */
+    PerlInterpreter *const was = PERL_GET_THX;
     PerlInterpreter *const to = param->new_perl;
     dTHXa(to);
-    PerlInterpreter *const was = PERL_GET_THX;
 
     PERL_ARGS_ASSERT_CLONE_PARAMS_DEL;
 
@@ -15975,7 +15948,6 @@ Perl_clone_params_del(CLONE_PARAMS *param)
 CLONE_PARAMS *
 Perl_clone_params_new(PerlInterpreter *const from, PerlInterpreter *const to)
 {
-    dVAR;
     /* Need to play this game, as newAV() can call safesysmalloc(), and that
        does a dTHX; to get the context from thread local storage.
        FIXME - under PERL_CORE Newx(), Safefree() and friends should expand to
@@ -16010,7 +15982,6 @@ Perl_clone_params_new(PerlInterpreter *const from, PerlInterpreter *const to)
 void
 Perl_init_constants(pTHX)
 {
-    dVAR;
 
     SvREFCNT(&PL_sv_undef)     = SvREFCNT_IMMORTAL;
     SvFLAGS(&PL_sv_undef)      = SVf_READONLY|SVf_PROTECT|SVt_NULL;
@@ -16223,7 +16194,6 @@ Perl_sv_cat_decode(pTHX_ SV *dsv, SV *encoding,
 STATIC SV*
 S_find_hash_subscript(pTHX_ const HV *const hv, const SV *const val)
 {
-    dVAR;
     HE **array;
     I32 i;
 
@@ -16374,7 +16344,6 @@ STATIC SV *
 S_find_uninit_var(pTHX_ const OP *const obase, const SV *const uninit_sv,
                  bool match, const char **desc_p)
 {
-    dVAR;
     SV *sv;
     const GV *gv;
     const OP *o, *o2, *kid;
@@ -16810,6 +16779,34 @@ S_find_uninit_var(pTHX_ const OP *const obase, const SV *const uninit_sv,
                    return varname(agg_gv, '@', agg_targ,
                                        NULL, index, FUV_SUBSCRIPT_ARRAY);
            }
+            /* look for an element not found */
+            if (!SvMAGICAL(sv)) {
+                SV *index_sv = NULL;
+                if (index_targ) {
+                    index_sv = PL_curpad[index_targ];
+                }
+                else if (index_gv) {
+                    index_sv = GvSV(index_gv);
+                }
+                if (index_sv && !SvMAGICAL(index_sv) && !SvROK(index_sv)) {
+                    if (is_hv) {
+                        HE *he = hv_fetch_ent(MUTABLE_HV(sv), index_sv, 0, 0);
+                        if (!he) {
+                            return varname(agg_gv, '%', agg_targ,
+                                           index_sv, 0, FUV_SUBSCRIPT_HASH);
+                        }
+                    }
+                    else {
+                        SSize_t index = SvIV(index_sv);
+                        SV * const * const svp =
+                            av_fetch(MUTABLE_AV(sv), index, FALSE);
+                        if (!svp) {
+                            return varname(agg_gv, '@', agg_targ,
+                                           NULL, index, FUV_SUBSCRIPT_ARRAY);
+                        }
+                    }
+                }
+            }
            if (match)
                break;
            return varname(agg_gv,
diff --git a/sv.h b/sv.h
index 8c13566..91cc39c 100644 (file)
--- a/sv.h
+++ b/sv.h
@@ -1607,20 +1607,18 @@ false.  See C<L</SvOK>> for a defined/undefined test.  Handles 'get' magic
 unless the scalar is already C<SvPOK>, C<SvIOK> or C<SvNOK> (the public, not the
 private flags).
 
-See C<L</SvTRUEx>> for a version which guarantees to evaluate C<sv> only once.
+As of Perl 5.32, this is guaranteed to evaluate C<sv> only once.  Prior to that
+release, use C<L</SvTRUEx>> for single evaluation.
 
 =for apidoc Am|bool|SvTRUE_nomg|SV* sv
 Returns a boolean indicating whether Perl would evaluate the SV as true or
 false.  See C<L</SvOK>> for a defined/undefined test.  Does not handle 'get' magic.
 
 =for apidoc Am|bool|SvTRUEx|SV* sv
-Returns a boolean indicating whether Perl would evaluate the SV as true or
-false.  See C<L</SvOK>> for a defined/undefined test.  Handles 'get' magic
-unless the scalar is already C<SvPOK>, C<SvIOK> or C<SvNOK> (the public, not the
-private flags).
-
-This form guarantees to evaluate C<sv> only once.  Only use this if C<sv> is an
-expression with side effects, otherwise use the more efficient C<SvTRUE>.
+Identical to C<L</SvTRUE>>.  Prior to 5.32, they differed in that only this one
+was guaranteed to evaluate C<sv> only once; in 5.32 they both evaluated it
+once, but C<SvTRUEx> was slightly slower on some platforms; now they are
+identical.
 
 =for apidoc Am|char*|SvPVutf8_force|SV* sv|STRLEN len
 Like C<SvPV_force>, but converts C<sv> to UTF-8 first if necessary.
@@ -1711,50 +1709,50 @@ Like C<sv_catsv> but doesn't process magic.
 #define SvNV(sv) (SvNOK_nog(sv) ? SvNVX(sv) : sv_2nv(sv))
 
 #define SvIV_nomg(sv) (SvIOK(sv) ? SvIVX(sv) : sv_2iv_flags(sv, 0))
-#define SvUV_nomg(sv) (SvIOK(sv) ? SvUVX(sv) : sv_2uv_flags(sv, 0))
+#define SvUV_nomg(sv) (SvUOK(sv) ? SvUVX(sv) : sv_2uv_flags(sv, 0))
 #define SvNV_nomg(sv) (SvNOK(sv) ? SvNVX(sv) : sv_2nv_flags(sv, 0))
 
 /* ----*/
 
-#define SvPV(sv, lp)         SvPV_flags(sv, lp, SV_GMAGIC)
-#define SvPV_const(sv, lp)   SvPV_flags_const(sv, lp, SV_GMAGIC)
-#define SvPV_mutable(sv, lp) SvPV_flags_mutable(sv, lp, SV_GMAGIC)
+#define SvPV(sv, len)         SvPV_flags(sv, len, SV_GMAGIC)
+#define SvPV_const(sv, len)   SvPV_flags_const(sv, len, SV_GMAGIC)
+#define SvPV_mutable(sv, len) SvPV_flags_mutable(sv, len, SV_GMAGIC)
 
-#define SvPV_flags(sv, lp, flags) \
+#define SvPV_flags(sv, len, flags) \
     (SvPOK_nog(sv) \
-     ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_2pv_flags(sv, &lp, flags))
-#define SvPV_flags_const(sv, lp, flags) \
+     ? ((len = SvCUR(sv)), SvPVX(sv)) : sv_2pv_flags(sv, &len, flags))
+#define SvPV_flags_const(sv, len, flags) \
     (SvPOK_nog(sv) \
-     ? ((lp = SvCUR(sv)), SvPVX_const(sv)) : \
-     (const char*) sv_2pv_flags(sv, &lp, (flags|SV_CONST_RETURN)))
+     ? ((len = SvCUR(sv)), SvPVX_const(sv)) : \
+     (const char*) sv_2pv_flags(sv, &len, (flags|SV_CONST_RETURN)))
 #define SvPV_flags_const_nolen(sv, flags) \
     (SvPOK_nog(sv) \
      ? SvPVX_const(sv) : \
      (const char*) sv_2pv_flags(sv, 0, (flags|SV_CONST_RETURN)))
-#define SvPV_flags_mutable(sv, lp, flags) \
+#define SvPV_flags_mutable(sv, len, flags) \
     (SvPOK_nog(sv) \
-     ? ((lp = SvCUR(sv)), SvPVX_mutable(sv)) : \
-     sv_2pv_flags(sv, &lp, (flags|SV_MUTABLE_RETURN)))
+     ? ((len = SvCUR(sv)), SvPVX_mutable(sv)) : \
+     sv_2pv_flags(sv, &len, (flags|SV_MUTABLE_RETURN)))
 
-#define SvPV_force(sv, lp) SvPV_force_flags(sv, lp, SV_GMAGIC)
+#define SvPV_force(sv, len) SvPV_force_flags(sv, len, SV_GMAGIC)
 #define SvPV_force_nolen(sv) SvPV_force_flags_nolen(sv, SV_GMAGIC)
-#define SvPV_force_mutable(sv, lp) SvPV_force_flags_mutable(sv, lp, SV_GMAGIC)
+#define SvPV_force_mutable(sv, len) SvPV_force_flags_mutable(sv, len, SV_GMAGIC)
 
-#define SvPV_force_nomg(sv, lp) SvPV_force_flags(sv, lp, 0)
+#define SvPV_force_nomg(sv, len) SvPV_force_flags(sv, len, 0)
 #define SvPV_force_nomg_nolen(sv) SvPV_force_flags_nolen(sv, 0)
 
-#define SvPV_force_flags(sv, lp, flags) \
+#define SvPV_force_flags(sv, len, flags) \
     (SvPOK_pure_nogthink(sv) \
-     ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_pvn_force_flags(sv, &lp, flags))
+     ? ((len = SvCUR(sv)), SvPVX(sv)) : sv_pvn_force_flags(sv, &len, flags))
 
 #define SvPV_force_flags_nolen(sv, flags) \
     (SvPOK_pure_nogthink(sv) \
      ? SvPVX(sv) : sv_pvn_force_flags(sv, 0, flags))
 
-#define SvPV_force_flags_mutable(sv, lp, flags) \
+#define SvPV_force_flags_mutable(sv, len, flags) \
     (SvPOK_pure_nogthink(sv) \
-     ? ((lp = SvCUR(sv)), SvPVX_mutable(sv)) \
-     : sv_pvn_force_flags(sv, &lp, flags|SV_MUTABLE_RETURN))
+     ? ((len = SvCUR(sv)), SvPVX_mutable(sv)) \
+     : sv_pvn_force_flags(sv, &len, flags|SV_MUTABLE_RETURN))
 
 #define SvPV_nolen(sv) \
     (SvPOK_nog(sv) \
@@ -1769,33 +1767,33 @@ Like C<sv_catsv> but doesn't process magic.
     (SvPOK_nog(sv) \
      ? SvPVX_const(sv) : sv_2pv_flags(sv, 0, SV_GMAGIC|SV_CONST_RETURN))
 
-#define SvPV_nomg(sv, lp) SvPV_flags(sv, lp, 0)
-#define SvPV_nomg_const(sv, lp) SvPV_flags_const(sv, lp, 0)
+#define SvPV_nomg(sv, len) SvPV_flags(sv, len, 0)
+#define SvPV_nomg_const(sv, len) SvPV_flags_const(sv, len, 0)
 #define SvPV_nomg_const_nolen(sv) SvPV_flags_const_nolen(sv, 0)
 
 /* ----*/
 
-#define SvPVutf8(sv, lp) \
+#define SvPVutf8(sv, len) \
     (SvPOK_utf8_nog(sv) \
-     ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_2pvutf8(sv, &lp))
+     ? ((len = SvCUR(sv)), SvPVX(sv)) : sv_2pvutf8(sv, &len))
 
-#define SvPVutf8_or_null(sv, lp) \
+#define SvPVutf8_or_null(sv, len) \
     (SvPOK_utf8_nog(sv) \
-     ? ((lp = SvCUR(sv)), SvPVX(sv)) : (SvGETMAGIC(sv), SvOK(sv)) \
-     ? sv_2pvutf8_flags(sv, &lp, 0) : ((lp = 0), NULL))
+     ? ((len = SvCUR(sv)), SvPVX(sv)) : (SvGETMAGIC(sv), SvOK(sv)) \
+     ? sv_2pvutf8_flags(sv, &len, 0) : ((len = 0), NULL))
 
-#define SvPVutf8_nomg(sv, lp) \
+#define SvPVutf8_nomg(sv, len) \
     (SvPOK_utf8_nog(sv) \
-     ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_2pvutf8_flags(sv, &lp, 0))
+     ? ((len = SvCUR(sv)), SvPVX(sv)) : sv_2pvutf8_flags(sv, &len, 0))
 
-#define SvPVutf8_or_null_nomg(sv, lp) \
+#define SvPVutf8_or_null_nomg(sv, len) \
     (SvPOK_utf8_nog(sv) \
-     ? ((lp = SvCUR(sv)), SvPVX(sv)) : SvOK(sv) \
-     ? sv_2pvutf8_flags(sv, &lp, 0) : ((lp = 0), NULL))
+     ? ((len = SvCUR(sv)), SvPVX(sv)) : SvOK(sv) \
+     ? sv_2pvutf8_flags(sv, &len, 0) : ((len = 0), NULL))
 
-#define SvPVutf8_force(sv, lp) \
+#define SvPVutf8_force(sv, len) \
     (SvPOK_utf8_pure_nogthink(sv) \
-     ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_pvutf8n_force(sv, &lp))
+     ? ((len = SvCUR(sv)), SvPVX(sv)) : sv_pvutf8n_force(sv, &len))
 
 #define SvPVutf8_nolen(sv) \
     (SvPOK_utf8_nog(sv) \
@@ -1803,27 +1801,27 @@ Like C<sv_catsv> but doesn't process magic.
 
 /* ----*/
 
-#define SvPVbyte(sv, lp) \
+#define SvPVbyte(sv, len) \
     (SvPOK_byte_nog(sv) \
-     ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_2pvbyte(sv, &lp))
+     ? ((len = SvCUR(sv)), SvPVX(sv)) : sv_2pvbyte(sv, &len))
 
-#define SvPVbyte_or_null(sv, lp) \
+#define SvPVbyte_or_null(sv, len) \
     (SvPOK_byte_nog(sv) \
-     ? ((lp = SvCUR(sv)), SvPVX(sv)) : (SvGETMAGIC(sv), SvOK(sv)) \
-     ? sv_2pvbyte_flags(sv, &lp, 0) : ((lp = 0), NULL))
+     ? ((len = SvCUR(sv)), SvPVX(sv)) : (SvGETMAGIC(sv), SvOK(sv)) \
+     ? sv_2pvbyte_flags(sv, &len, 0) : ((len = 0), NULL))
 
-#define SvPVbyte_nomg(sv, lp) \
+#define SvPVbyte_nomg(sv, len) \
     (SvPOK_byte_nog(sv) \
-     ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_2pvbyte_flags(sv, &lp, 0))
+     ? ((len = SvCUR(sv)), SvPVX(sv)) : sv_2pvbyte_flags(sv, &len, 0))
 
-#define SvPVbyte_or_null_nomg(sv, lp) \
+#define SvPVbyte_or_null_nomg(sv, len) \
     (SvPOK_utf8_nog(sv) \
-     ? ((lp = SvCUR(sv)), SvPVX(sv)) : SvOK(sv) \
-     ? sv_2pvbyte_flags(sv, &lp, 0) : ((lp = 0), NULL))
+     ? ((len = SvCUR(sv)), SvPVX(sv)) : SvOK(sv) \
+     ? sv_2pvbyte_flags(sv, &len, 0) : ((len = 0), NULL))
 
-#define SvPVbyte_force(sv, lp) \
+#define SvPVbyte_force(sv, len) \
     (SvPOK_byte_pure_nogthink(sv) \
-     ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_pvbyten_force(sv, &lp))
+     ? ((len = SvCUR(sv)), SvPVX(sv)) : sv_pvbyten_force(sv, &len))
 
 #define SvPVbyte_nolen(sv) \
     (SvPOK_byte_nog(sv) \
@@ -1835,11 +1833,12 @@ Like C<sv_catsv> but doesn't process magic.
  * failing that, call a function to do the work
  */
 
-#define SvPVx_force(sv, lp) sv_pvn_force(sv, &lp)
-#define SvPVutf8x_force(sv, lp) sv_pvutf8n_force(sv, &lp)
-#define SvPVbytex_force(sv, lp) sv_pvbyten_force(sv, &lp)
+#define SvPVx_force(sv, len) sv_pvn_force(sv, &len)
+#define SvPVutf8x_force(sv, len) sv_pvutf8n_force(sv, &len)
+#define SvPVbytex_force(sv, len) sv_pvbyten_force(sv, &len)
 
 #define SvTRUE(sv)         Perl_SvTRUE(aTHX_ sv)
+#define SvTRUEx(sv)        SvTRUE(sv)
 #define SvTRUE_nomg(sv)    (LIKELY(sv) && SvTRUE_nomg_NN(sv))
 #define SvTRUE_NN(sv)      (SvGETMAGIC(sv), SvTRUE_nomg_NN(sv))
 #define SvTRUE_nomg_NN(sv) (SvTRUE_common(sv, sv_2bool_nomg(sv)))
@@ -1863,14 +1862,13 @@ Like C<sv_catsv> but doesn't process magic.
 #  define SvIVx(sv) ({SV *_sv = MUTABLE_SV(sv); SvIV(_sv); })
 #  define SvUVx(sv) ({SV *_sv = MUTABLE_SV(sv); SvUV(_sv); })
 #  define SvNVx(sv) ({SV *_sv = MUTABLE_SV(sv); SvNV(_sv); })
-#  define SvPVx(sv, lp) ({SV *_sv = (sv); SvPV(_sv, lp); })
-#  define SvPVx_const(sv, lp) ({SV *_sv = (sv); SvPV_const(_sv, lp); })
+#  define SvPVx(sv, len) ({SV *_sv = (sv); SvPV(_sv, len); })
+#  define SvPVx_const(sv, len) ({SV *_sv = (sv); SvPV_const(_sv, len); })
 #  define SvPVx_nolen(sv) ({SV *_sv = (sv); SvPV_nolen(_sv); })
 #  define SvPVx_nolen_const(sv) ({SV *_sv = (sv); SvPV_nolen_const(_sv); })
-#  define SvPVutf8x(sv, lp) ({SV *_sv = (sv); SvPVutf8(_sv, lp); })
-#  define SvPVbytex(sv, lp) ({SV *_sv = (sv); SvPVbyte(_sv, lp); })
+#  define SvPVutf8x(sv, len) ({SV *_sv = (sv); SvPVutf8(_sv, len); })
+#  define SvPVbytex(sv, len) ({SV *_sv = (sv); SvPVbyte(_sv, len); })
 #  define SvPVbytex_nolen(sv) ({SV *_sv = (sv); SvPVbyte_nolen(_sv); })
-#  define SvTRUEx(sv)      ({SV *_sv = (sv); SvTRUE(_sv); })
 #  define SvTRUEx_nomg(sv) ({SV *_sv = (sv); SvTRUE_nomg(_sv); })
 
 #else /* __GNUC__ */
@@ -1881,14 +1879,13 @@ Like C<sv_catsv> but doesn't process magic.
 #  define SvIVx(sv) ((PL_Sv = (sv)), SvIV(PL_Sv))
 #  define SvUVx(sv) ((PL_Sv = (sv)), SvUV(PL_Sv))
 #  define SvNVx(sv) ((PL_Sv = (sv)), SvNV(PL_Sv))
-#  define SvPVx(sv, lp) ((PL_Sv = (sv)), SvPV(PL_Sv, lp))
-#  define SvPVx_const(sv, lp) ((PL_Sv = (sv)), SvPV_const(PL_Sv, lp))
+#  define SvPVx(sv, len) ((PL_Sv = (sv)), SvPV(PL_Sv, len))
+#  define SvPVx_const(sv, len) ((PL_Sv = (sv)), SvPV_const(PL_Sv, len))
 #  define SvPVx_nolen(sv) ((PL_Sv = (sv)), SvPV_nolen(PL_Sv))
 #  define SvPVx_nolen_const(sv) ((PL_Sv = (sv)), SvPV_nolen_const(PL_Sv))
-#  define SvPVutf8x(sv, lp) ((PL_Sv = (sv)), SvPVutf8(PL_Sv, lp))
-#  define SvPVbytex(sv, lp) ((PL_Sv = (sv)), SvPVbyte(PL_Sv, lp))
+#  define SvPVutf8x(sv, len) ((PL_Sv = (sv)), SvPVutf8(PL_Sv, len))
+#  define SvPVbytex(sv, len) ((PL_Sv = (sv)), SvPVbyte(PL_Sv, len))
 #  define SvPVbytex_nolen(sv) ((PL_Sv = (sv)), SvPVbyte_nolen(PL_Sv))
-#  define SvTRUEx(sv)      ((PL_Sv = (sv)), SvTRUE(PL_Sv))
 #  define SvTRUEx_nomg(sv) ((PL_Sv = (sv)), SvTRUE_nomg(PL_Sv))
 #endif /* __GNU__ */
 
@@ -1914,6 +1911,13 @@ Like C<sv_catsv> but doesn't process magic.
 
 /* flag values for sv_*_flags functions */
 #define SV_UTF8_NO_ENCODING    0       /* No longer used */
+
+/*
+=for apidoc AmnhD||SV_UTF8_NO_ENCODING
+
+=cut
+*/
+
 #define SV_IMMEDIATE_UNREF     1
 #define SV_GMAGIC              2
 #define SV_COW_DROP_PV         4
@@ -1976,7 +1980,7 @@ Like C<sv_catsv> but doesn't process magic.
                            && SvCUR(sv)+1 < SvLEN(sv))
    /* Note: To allow 256 COW "copies", a refcnt of 0 means 1. */
 #   define CowREFCNT(sv)       (*(U8 *)(SvPVX(sv)+SvLEN(sv)-1))
-#   define SV_COW_REFCNT_MAX   ((1 << sizeof(U8)*8) - 1)
+#   define SV_COW_REFCNT_MAX   nBIT_UMAX(sizeof(U8) * CHARBITS)
 #   define CAN_COW_MASK        (SVf_POK|SVf_ROK|SVp_POK|SVf_FAKE| \
                         SVf_OOK|SVf_BREAK|SVf_READONLY|SVf_PROTECT)
 #endif
@@ -2305,7 +2309,7 @@ Evaluates C<sv> more than once.  Sets C<len> to 0 if C<SvOOK(sv)> is false.
 10:28 <+meta> Nicholas: crash
 */
 #  define SvOOK_offset(sv, offset) STMT_START {                                \
-       assert(sizeof(offset) == sizeof(STRLEN));                       \
+       STATIC_ASSERT_STMT(sizeof(offset) == sizeof(STRLEN));           \
        if (SvOOK(sv)) {                                                \
            const U8 *_crash = (U8*)SvPVX_const(sv);                    \
            (offset) = *--_crash;                                       \
@@ -2329,7 +2333,7 @@ Evaluates C<sv> more than once.  Sets C<len> to 0 if C<SvOOK(sv)> is false.
 #else
     /* This is the same code, but avoids using any temporary variables:  */
 #  define SvOOK_offset(sv, offset) STMT_START {                                \
-       assert(sizeof(offset) == sizeof(STRLEN));                       \
+       STATIC_ASSERT_STMT(sizeof(offset) == sizeof(STRLEN));           \
        if (SvOOK(sv)) {                                                \
            (offset) = ((U8*)SvPVX_const(sv))[-1];                      \
            if (!(offset)) {                                            \
diff --git a/symbian/PerlApp.cpp b/symbian/PerlApp.cpp
deleted file mode 100644 (file)
index ffca7af..0000000
+++ /dev/null
@@ -1,546 +0,0 @@
-/* Copyright (c) 2004-2005 Nokia. All rights reserved. */
-
-/* The PerlApp application is licensed under the same terms as Perl itself.
- *
- * Note that this PerlApp is for Symbian/Series 60/80/UIQ smartphones
- * and it has nothing whatsoever to do with the ActiveState PerlApp. */
-
-#include "PerlApp.h"
-
-#include <apparc.h>
-#include <e32base.h>
-#include <e32cons.h>
-#include <eikenv.h>
-#include <bautils.h>
-#include <eikappui.h>
-#include <utf.h>
-#include <f32file.h>
-
-#include <coemain.h>
-
-#ifndef PerlAppMinimal
-
-#include "PerlApp.hrh"
-
-#endif //#ifndef PerlAppMinimal
-
-#define PERL_GLOBAL_STRUCT
-#define PERL_GLOBAL_STRUCT_PRIVATE
-
-#include "EXTERN.h"
-#include "perl.h"
-#include "XSUB.h"
-
-#include "PerlBase.h"
-#include "PerlUtil.h"
-
-#define symbian_get_vars() Dll::Tls() // Not visible from perlXYZ.lib?
-
-const TUid KPerlAppUid = {
-#ifdef PerlAppMinimalUid
-  PerlAppMinimalUid
-#else
-  0x102015F6
-#endif
-};
-
-_LIT(KDefaultScript, "default.pl");
-
-#ifdef PerlAppMinimalName
-_LIT_NO_L(KAppName, PerlAppMinimalName);
-#else
-_LIT(KAppName, "PerlApp");
-#endif
-
-#ifndef PerlAppMinimal
-
-_LIT_NO_L(KFlavor, PERL_SYMBIANSDK_FLAVOR);
-_LIT(KAboutFormat,
-     "Perl %d.%d.%d, Symbian port %d.%d.%d, built for %S SDK %d.%d");
-_LIT(KCopyrightFormat,
-     "Copyright 1987-2005 Larry Wall and others, Symbian port Copyright Nokia 2004-2005");
-_LIT(KInboxPrefix, "\\System\\Mail\\");
-_LIT(KScriptPrefix, "\\Perl\\");
-
-_LIT8(KModulePrefix, SITELIB); // SITELIB from Perl config.h
-
-typedef TBuf<256>  TMessageBuffer;
-typedef TBuf8<256> TPeekBuffer;
-typedef TBuf8<256> TFileName8;
-
-#endif // #ifndef PerlAppMinimal
-
-static void DoRunScriptL(TFileName aScriptName);
-
-TUid CPerlAppApplication::AppDllUid() const
-{
-    return KPerlAppUid;
-}
-
-enum TPerlAppPanic
-{
-    EPerlAppCommandUnknown = 1
-};
-
-void Panic(TPerlAppPanic aReason)
-{
-    User::Panic(KAppName, aReason);
-}
-
-#ifndef PerlAppMinimal
-
-// The isXXX() come from the Perl headers.
-#define FILENAME_IS_ABSOLUTE(n) \
-        (isALPHA(((n)[0])) && ((n)[1]) == ':' && ((n)[2]) == '\\')
-
-static TBool IsInPerl(TFileName aFileName)
-{
-    TInt offset = aFileName.FindF(KScriptPrefix);
-    return ((offset == 0 && // \foo
-             aFileName[0] == '\\')
-            ||
-            (offset == 2 && // x:\foo
-             FILENAME_IS_ABSOLUTE(aFileName)));
-}
-
-static TBool IsInInbox(TFileName aFileName)
-{
-    TInt offset = aFileName.FindF(KInboxPrefix);
-    return ((offset == 0 && // \foo
-             aFileName[0] == '\\')
-            ||
-            (offset == 2 && // x:\foo
-             FILENAME_IS_ABSOLUTE(aFileName)));
-}
-
-static TBool IsPerlModule(TParsePtrC aParsed)
-{
-    return aParsed.Ext().CompareF(_L(".pm")) == 0;
-}
-
-static TBool IsPerlScript(TParsePtrC aParsed)
-{
-    return aParsed.Ext().CompareF(_L(".pl")) == 0;
-}
-
-static void CopyFromInboxL(RFs aFs, const TFileName& aSrc, const TFileName& aDst)
-{
-    TBool proceed = ETrue;
-    TMessageBuffer message;
-
-    message.Format(_L("%S is untrusted. Install only if you trust provider."), &aDst);
-    if (CPerlUi::OkCancelDialogL(message)) {
-        message.Format(_L("Install as %S?"), &aDst);
-        if (CPerlUi::OkCancelDialogL(message)) {
-            if (BaflUtils::FileExists(aFs, aDst)) {
-                message.Format(_L("Replace old %S?"), &aDst);
-                if (!CPerlUi::OkCancelDialogL(message))
-                    proceed = EFalse;
-            }
-            if (proceed) {
-                // Create directory?
-                TInt err = BaflUtils::CopyFile(aFs, aSrc, aDst);
-                if (err == KErrNone) {
-                    message.Format(_L("Installed %S"), &aDst);
-                    CPerlUi::InformationNoteL(message);
-                }
-                else {
-                    message.Format(_L("Failure %d installing %S"), err, &aDst);
-                    CPerlUi::WarningNoteL(message);
-                }
-            }
-        }
-    }
-}
-
-static TBool FindPerlPackageName(TPeekBuffer aPeekBuffer, TInt aOff, TFileName& aFn)
-{
-    aFn.SetMax();
-    TInt m = aFn.MaxLength();
-    TInt n = aPeekBuffer.Length();
-    TInt i = 0;
-    TInt j = aOff;
-
-    aFn.SetMax();
-    // The following is a little regular expression
-    // engine that matches Perl package names.
-    if (j < n && isSPACE(aPeekBuffer[j])) {
-        while (j < n && isSPACE(aPeekBuffer[j])) j++;
-        if (j < n && isALPHA(aPeekBuffer[j])) {
-            while (j < n && isALNUM(aPeekBuffer[j])) {
-                while (j < n &&
-                       isALNUM(aPeekBuffer[j]) &&
-                       i < m)
-                    aFn[i++] = aPeekBuffer[j++];
-                if (j + 1 < n &&
-                    aPeekBuffer[j    ] == ':' &&
-                    aPeekBuffer[j + 1] == ':' &&
-                    i < m) {
-                    aFn[i++] = '\\';
-                    j += 2;
-                    if (j < n &&
-                        isALPHA(aPeekBuffer[j])) {
-                        while (j < n &&
-                               isALNUM(aPeekBuffer[j]) &&
-                               i < m)
-                            aFn[i++] = aPeekBuffer[j++];
-                    }
-                }
-            }
-            while (j < n && isSPACE(aPeekBuffer[j])) j++;
-            if (j < n && aPeekBuffer[j] == ';' && i + 3 < m) {
-                aFn.SetLength(i);
-                aFn.Append(_L(".pm"));
-                return ETrue;
-            }
-        }
-    }
-    return EFalse;
-}
-
-static void GuessPerlModule(TFileName& aGuess, TPeekBuffer aPeekBuffer, TParse aDrive)
-{
-   TInt offset = aPeekBuffer.Find(_L8("package"));
-   if (offset != KErrNotFound) {
-       const TInt KPackageLen = 7;
-       TFileName q;
-
-       if (!FindPerlPackageName(aPeekBuffer, offset + KPackageLen, q))
-           return;
-
-       TFileName8 p;
-       p.Copy(aDrive.Drive());
-       p.Append(KModulePrefix);
-
-       aGuess.SetMax();
-       if (p.Length() + 1 + q.Length() < aGuess.MaxLength()) {
-           TInt i = 0, j;
-
-           for (j = 0; j < p.Length(); j++)
-               aGuess[i++] = p[j];
-           aGuess[i++] = '\\';
-           for (j = 0; j < q.Length(); j++)
-               aGuess[i++] = q[j];
-           aGuess.SetLength(i);
-       }
-       else
-           aGuess.SetLength(0);
-   }
-}
-
-static TBool LooksLikePerlL(TPeekBuffer aPeekBuffer)
-{
-    return aPeekBuffer.Left(2).Compare(_L8("#!")) == 0 &&
-           aPeekBuffer.Find(_L8("perl")) != KErrNotFound;
-}
-
-static TBool InstallStuffL(const TFileName &aSrc, TParse aDrive, TParse aFile, TPeekBuffer aPeekBuffer, RFs aFs)
-{
-    TFileName aDst;
-    TPtrC drive  = aDrive.Drive();
-    TPtrC namext = aFile.NameAndExt();
-
-    aDst.Format(_L("%S%S%S"), &drive, &KScriptPrefix, &namext);
-    if (!IsPerlScript(aDst) && !LooksLikePerlL(aPeekBuffer)) {
-        aDst.SetLength(0);
-        if (IsPerlModule(aDst))
-            GuessPerlModule(aDst, aPeekBuffer, aDrive);
-    }
-    if (aDst.Length() > 0) {
-        CopyFromInboxL(aFs, aSrc, aDst);
-        return ETrue;
-    }
-
-    return EFalse;
-}
-
-static TBool RunStuffL(const TFileName& aScriptName, TPeekBuffer aPeekBuffer)
-{
-    TBool isModule = EFalse;
-
-    if (IsInPerl(aScriptName) &&
-        (IsPerlScript(aScriptName) ||
-         (isModule = IsPerlModule(aScriptName)) ||
-         LooksLikePerlL(aPeekBuffer))) {
-        TMessageBuffer message;
-
-        if (isModule)
-            message.Format(_L("Really run module %S?"), &aScriptName);
-        else
-            message.Format(_L("Run %S?"), &aScriptName);
-        if (CPerlUi::YesNoDialogL(message))
-            DoRunScriptL(aScriptName);
-        return ETrue;
-    }
-
-    return EFalse;
-}
-
-void CPerlAppAppUi::InstallOrRunL(const TFileName& aFileName)
-{
-    TParse aFile;
-    TParse aDrive;
-    TMessageBuffer message;
-
-    aFile.Set(aFileName, NULL, NULL);
-    if (FILENAME_IS_ABSOLUTE(aFileName)) {
-        aDrive.Set(aFileName, NULL, NULL);
-    } else {
-        TFileName appName =
-          CEikonEnv::Static()->EikAppUi()->Application()->AppFullName();
-        aDrive.Set(appName, NULL, NULL);
-    }
-    if (!iFs)
-        iFs = &CEikonEnv::Static()->FsSession();
-    RFile f;
-    TInt err = f.Open(*iFs, aFileName, EFileRead);
-    if (err == KErrNone) {
-        TPeekBuffer aPeekBuffer;
-        err = f.Read(aPeekBuffer);
-        f.Close();  // Release quickly.
-        if (err == KErrNone) {
-            if (!(IsInInbox(aFileName) ?
-                  InstallStuffL(aFileName, aDrive, aFile, aPeekBuffer, *iFs) :
-                  RunStuffL(aFileName, aPeekBuffer))) {
-                message.Format(_L("Failed for file %S"), &aFileName);
-                CPerlUi::WarningNoteL(message);
-            }
-        } else {
-            message.Format(_L("Error %d reading %S"), err, &aFileName);
-            CPerlUi::WarningNoteL(message);
-        }
-    } else {
-        message.Format(_L("Error %d opening %S"), err, &aFileName);
-        CPerlUi::WarningNoteL(message);
-    }
-    if (iDoorObserver)
-        delete CEikonEnv::Static()->EikAppUi();
-    else
-        Exit();
-}
-
-#endif /* #ifndef PerlAppMinimal */
-
-CPerlAppAppUi::~CPerlAppAppUi()
-{
-    if (iAppView) {
-        iEikonEnv->RemoveFromStack(iAppView);
-        delete iAppView;
-        iAppView = NULL;
-    }
-    if (iFs) {
-        delete iFs;
-        iFs = NULL;
-    }
-    if (iDoorObserver) // Otherwise the embedding application waits forever.
-        iDoorObserver->NotifyExit(MApaEmbeddedDocObserver::EEmpty);
-}
-
-static void DoRunScriptL(TFileName aScriptName)
-{
-    CPerlBase* perl = CPerlBase::NewInterpreterLC();
-    TRAPD(error, perl->RunScriptL(aScriptName));
-#ifndef PerlAppMinimal
-    if (error != KErrNone) {
-        TMessageBuffer message;
-        message.Format(_L("Error %d"), error);
-        CPerlUi::YesNoDialogL(message);
-    }
-#endif // #ifndef PerlAppMinimal
-    CleanupStack::PopAndDestroy(perl);
-}
-
-#ifndef PerlAppMinimal
-
-void CPerlAppAppUi::OpenFileL(const TDesC& aFileName)
-{
-    InstallOrRunL(aFileName);
-    return;
-}
-
-#endif // #ifndef PerlAppMinimal
-
-TBool CPerlAppAppUi::ProcessCommandParametersL(TApaCommand aCommand, TFileName& /* aDocumentName */, const TDesC8& /* aTail */)
-{
-    if (aCommand == EApaCommandRun) {
-        TFileName appName = Application()->AppFullName();
-        TParse p;
-        p.Set(KDefaultScript, &appName, NULL);
-        TEntry aEntry;
-        RFs aFs;
-        aFs.Connect();
-        if (aFs.Entry(p.FullName(), aEntry) == KErrNone) {
-            DoRunScriptL(p.FullName());
-            Exit();
-        }
-    }
-    return aCommand == EApaCommandOpen ? ETrue : EFalse;
-}
-
-#ifndef PerlAppMinimal
-
-void CPerlAppAppUi::SetFs(const RFs& aFs)
-{
-    iFs = (RFs*) &aFs;
-}
-
-#endif // #ifndef PerlAppMinimal
-
-void CPerlAppAppUi::DoHandleCommandL(TInt aCommand) {
-#ifndef PerlAppMinimal
-    TMessageBuffer message;
-#endif // #ifndef PerlAppMinimal
-
-    switch(aCommand)
-    {
-#ifndef PerlAppMinimal
-    case EPerlAppCommandAbout:
-        {
-            message.Format(KAboutFormat,
-                           PERL_REVISION,
-                           PERL_VERSION,
-                           PERL_SUBVERSION,
-                           PERL_SYMBIANPORT_MAJOR,
-                           PERL_SYMBIANPORT_MINOR,
-                           PERL_SYMBIANPORT_PATCH,
-                           &KFlavor,
-                           PERL_SYMBIANSDK_MAJOR,
-                           PERL_SYMBIANSDK_MINOR
-                           );
-            CPerlUi::InformationNoteL(message);
-        }
-        break;
-    case EPerlAppCommandTime:
-        {
-            CPerlBase* perl = CPerlBase::NewInterpreterLC();
-            const char *const argv[] =
-              { "perl", "-le",
-                "print 'Running in ', $^O, \"\\n\", scalar localtime" };
-            perl->ParseAndRun(sizeof(argv)/sizeof(char*), (char **)argv, 0);
-            CleanupStack::PopAndDestroy(perl);
-        }
-        break;
-#ifndef __UIQ__
-     case EPerlAppCommandRunFile:
-        {
-            TFileName aScriptUtf16;
-            aScriptUtf16.Copy(_L("C:\\"));
-            if (CPerlUi::FileQueryDialogL(aScriptUtf16))
-              DoRunScriptL(aScriptUtf16);
-        }
-        break;
-#endif
-     case EPerlAppCommandOneLiner:
-        {
-#ifdef __SERIES60__
-            _LIT(prompt, "Oneliner:");
-#endif /* #ifdef __SERIES60__ */
-#if defined(__SERIES80__) || defined(__SERIES90__) || defined(__UIQ__)
-            _LIT(prompt, "Code:"); // The title has "Oneliner" already.
-#endif /* #if defined(__SERIES80__) || defined(__SERIES90__) || defined(__UIQ__) */
-            CPerlAppAppUi* cAppUi =
-              static_cast<CPerlAppAppUi*>(CEikonEnv::Static()->EikAppUi());
-            if (CPerlUi::TextQueryDialogL(_L("Oneliner"),
-                                          prompt,
-                                          cAppUi->iOneLiner,
-                                          KPerlUiOneLinerSize)) {
-                const TUint KPerlUiUtf8Multi = 3; // Expansion multiplier.
-                TBuf8<KPerlUiUtf8Multi * KPerlUiOneLinerSize> utf8;
-
-                CnvUtfConverter::ConvertFromUnicodeToUtf8(utf8,
-                                                          cAppUi->iOneLiner);
-                CPerlBase* perl = CPerlBase::NewInterpreterLC();
-#ifdef __SERIES90__
-               int argc = 5;
-#else
-               int argc = 3;
-#endif
-               char **argv = (char**) malloc(argc * sizeof(char *));
-                User::LeaveIfNull(argv);
-
-                TCleanupItem argvCleanupItem = TCleanupItem(free, argv);
-                CleanupStack::PushL(argvCleanupItem);
-                argv[0] = (char *) "perl";
-                argv[1] = (char *) "-le";
-#ifdef __SERIES90__
-                argv[2] = (char *) "unshift @INC, 'C:/Mydocs';";
-                argv[3] = (char *) "-e";
-                argv[4] = (char *) utf8.PtrZ();
-#else
-                argv[2] = (char *) utf8.PtrZ();
-#endif
-               perl->ParseAndRun(argc, argv);
-                CleanupStack::PopAndDestroy(2, perl);
-            }
-        }
-        break;
-     case EPerlAppCommandCopyright:
-        {
-            message.Format(KCopyrightFormat);
-            CPerlUi::InformationNoteL(message);
-        }
-        break;
-     case EPerlAppCommandAboutCopyright:
-        {
-            TMessageBuffer m1;
-            TMessageBuffer m2;
-            m1.Format(KAboutFormat,
-                      PERL_REVISION,
-                      PERL_VERSION,
-                      PERL_SUBVERSION,
-                      PERL_SYMBIANPORT_MAJOR,
-                      PERL_SYMBIANPORT_MINOR,
-                      PERL_SYMBIANPORT_PATCH,
-                      &KFlavor,
-                      PERL_SYMBIANSDK_MAJOR,
-                      PERL_SYMBIANSDK_MINOR
-                      );
-            CPerlUi::InformationNoteL(m1);
-            User::After((TTimeIntervalMicroSeconds32) (1000*1000)); // 1 sec.
-            m2.Format(KCopyrightFormat);
-            CPerlUi::InformationNoteL(m2);
-        }
-        break;
-#endif // #ifndef PerlAppMinimal
-    default:
-        Panic(EPerlAppCommandUnknown);
-    }
-}
-
-CApaDocument* CPerlAppApplication::CreateDocumentL()
-{
-    CPerlAppDocument* cDoc = new (ELeave) CPerlAppDocument(*this);
-    return cDoc;
-}
-
-CEikAppUi* CPerlAppDocument::CreateAppUiL()
-{
-    CPerlAppAppUi* cAppUi = new (ELeave) CPerlAppAppUi();
-    return cAppUi;
-}
-
-
-#ifndef PerlAppMinimal
-
-CFileStore* CPerlAppDocument::OpenFileL(TBool aDoOpen, const TDesC& aFileName, RFs& aFs)
-{
-    CPerlAppAppUi* cAppUi =
-      static_cast<CPerlAppAppUi*>(CEikonEnv::Static()->EikAppUi());
-    cAppUi->SetFs(aFs);
-    if (aDoOpen)
-        cAppUi->OpenFileL(aFileName);
-    return NULL;
-}
-
-#endif // #ifndef PerlAppMinimal
-
-EXPORT_C CApaApplication* NewApplication()
-{
-    return new CPerlAppApplication;
-}
-
-GLDEF_C TInt E32Dll(TDllReason /*aReason*/)
-{
-    return KErrNone;
-}
-
diff --git a/symbian/PerlApp.h b/symbian/PerlApp.h
deleted file mode 100644 (file)
index cbf1963..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-/* Copyright (c) 2004-2005 Nokia. All rights reserved. */
-
-/* The PerlApp application is licensed under the same terms as Perl itself. */
-
-#ifndef __PerlApp_h__
-#define __PerlApp_h__
-
-#include "PerlUi.h"
-
-/* The source code can be compiled into "PerlApp" which is the simple
- * launchpad application/demonstrator, or into "PerlAppMinimal", which
- * is the minimal Perl launchpad application.  Define the cpp symbols
- * CreatePerlAppMinimal (a boolean), PerlAppMinimalUid (the Symbian
- * application uid in the 0x... format), and PerlAppMinimalName (a C
- * wide string, with the L prefix) to compile as "PerlAppMinimal". */
-
-// #define CreatePerlAppMinimal
-
-#ifdef CreatePerlAppMinimal
-# define PerlAppMinimal
-# ifndef PerlAppMinimalUid // PerlApp is ...F6, PerlRecog is ...F7
-#  define PerlAppMinimalUid 0x102015F8
-# endif
-# ifndef PerlAppMinimalName
-#  define PerlAppMinimalName L"PerlAppMinimal"
-# endif
-#endif
-
-#ifdef PerlAppMinimal
-# ifndef PerlAppMinimalUid
-#   error PerlAppMinimal defined but PerlAppMinimalUid undefined
-# endif
-# ifndef PerlAppMinimalName
-#  error PerlAppMinimal defined but PerlAppMinimalName undefined
-# endif
-#endif
-
-class CPerlAppDocument : public CgPerlUiDocument
-{
-  public:
-    CPerlAppDocument(CEikApplication& aApp) : CgPerlUiDocument(aApp) {;}
-#ifndef PerlAppMinimal
-    CFileStore* OpenFileL(TBool aDoOpen, const TDesC& aFilename, RFs& aFs);
-#endif // #ifndef PerlAppMinimal
-  private: // from CEikDocument
-    CEikAppUi* CreateAppUiL();
-};
-
-class CPerlAppApplication : public CPerlUiApplication
-{
-  private:
-    CApaDocument* CreateDocumentL();
-    TUid AppDllUid() const;
-};
-
-class CPerlAppAppView;
-
-class CPerlAppAppUi : public CPerlUiAppUi
-{
-  public:
-    TBool ProcessCommandParametersL(TApaCommand aCommand, TFileName& aDocumentName, const TDesC8& aTail);
-    void DoHandleCommandL(TInt aCommand);
-#ifndef PerlAppMinimal
-    void OpenFileL(const TDesC& aFileName);
-    void InstallOrRunL(const TFileName& aFileName);
-    void SetFs(const RFs& aFs);
-#endif // #ifndef PerlAppMinimal
-    ~CPerlAppAppUi();
-  private:
-    RFs* iFs;
-};
-
-class CPerlAppAppView : public CPerlUiAppView
-{
-  public:
-#if defined(__SERIES80__) || defined(__SERIES90__) || defined(__UIQ__)
-    void HandleCommandL(TInt aCommand);
-#endif /* #if defined(__SERIES80__) || defined(__SERIES90__) || defined(__UIQ__) */
-};
-
-#endif // __PerlApp_h__
diff --git a/symbian/PerlApp.hrh b/symbian/PerlApp.hrh
deleted file mode 100644 (file)
index fd37a96..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-/* Copyright (c) 2004-2005 Nokia.  All rights reserved. */
-
-/* The PerlApp application is licensed under the same terms as Perl itself. */
-
-#ifndef __PerlApp_HRH__
-#define __PerlApp_HRH__
-
-enum TPerlAppIds
-{
-    EPerlAppCommandAbout              = 1024,  // start value must not be 0
-    EPerlAppCommandTime               = 1025,
-    EPerlAppCommandRunFile            = 1026,
-    EPerlAppCommandOneLiner           = 1027,
-    EPerlAppCommandCopyright          = 1028,
-    EPerlAppCommandAboutCopyright     = 1029,
-    EPerlAppLast                      = 1099   // no comma here
-};
-
-#endif // __PerlApp_HRH__
diff --git a/symbian/PerlAppAif.rss b/symbian/PerlAppAif.rss
deleted file mode 100644 (file)
index 03e17cd..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-/* Copyright (c) 2004-2005 Nokia. All rights reserved. */
-
-/* The PerlApp application is licensed under the same terms as Perl itself. */
-
-#include <aiftool.rh>
-
-RESOURCE AIF_DATA
-{
-    app_uid = 0x102015F6;
-    embeddability = KAppEmbeddable;
-    hidden = KAppNotHidden;
-    launch = KAppLaunchInForeground;
-    newfile = KAppDoesNotSupportNewFile;
-    datatype_list = {
-        DATATYPE
-            {
-            priority = EDataTypePriorityNormal;
-            type = "x-application/x-perl";
-            }
-        };
-}
diff --git a/symbian/PerlBase.cpp b/symbian/PerlBase.cpp
deleted file mode 100644 (file)
index 9312abe..0000000
+++ /dev/null
@@ -1,425 +0,0 @@
-/* Copyright (c) 2004-2005 Nokia. All rights reserved. */
-
-/* The CPerlBase class is licensed under the same terms as Perl itself. */
-
-/* See PerlBase.pod for documentation. */
-
-#define PERLBASE_CPP
-
-#include <e32cons.h>
-#include <e32keys.h>
-#include <utf.h>
-
-#include "PerlBase.h"
-
-const TUint KPerlConsoleBufferMaxTChars = 0x0200;
-const TUint KPerlConsoleNoPos           = 0xffff;
-
-CPerlBase::CPerlBase()
-{
-}
-
-EXPORT_C void CPerlBase::Destruct()
-{
-    dTHX;
-    iState = EPerlDestroying;
-    if (iConsole) {
-        iConsole->Printf(_L("[Any key to continue]"));
-        iConsole->Getch();
-    }
-    if (iPerl)  {
-        (void)perl_destruct(iPerl);
-        perl_free(iPerl);
-        iPerl = NULL;
-        PERL_SYS_TERM();
-    }
-    if (iConsole) {
-        delete iConsole;
-        iConsole = NULL;
-    }
-    if (iConsoleBuffer) {
-        free(iConsoleBuffer);
-        iConsoleBuffer = NULL;
-    }
-#ifdef PERL_GLOBAL_STRUCT
-    if (iVars) {
-        PerlInterpreter* my_perl = NULL;
-        free_global_struct(iVars);
-        iVars = NULL;
-    }
-#endif
-}
-
-CPerlBase::~CPerlBase()
-{
-    Destruct();
-}
-
-EXPORT_C CPerlBase* CPerlBase::NewInterpreter(TBool aCloseStdlib,
-                                               void (*aStdioInitFunc)(void*),
-                                               void *aStdioInitCookie)
-{
-   CPerlBase* self = new (ELeave) CPerlBase;
-   self->iCloseStdlib     = aCloseStdlib;
-   self->iStdioInitFunc   = aStdioInitFunc;
-   self->iStdioInitCookie = aStdioInitCookie;
-   self->ConstructL();
-   PERL_APPCTX_SET(self);
-   return self;
-}
-
-EXPORT_C CPerlBase* CPerlBase::NewInterpreterL(TBool aCloseStdlib,
-                                               void (*aStdioInitFunc)(void*),
-                                               void *aStdioInitCookie)
-{
-    CPerlBase* self =
-      CPerlBase::NewInterpreterLC(aCloseStdlib,
-                                  aStdioInitFunc,
-                                  aStdioInitCookie);
-    CleanupStack::Pop(self);
-    return self;
-}
-
-EXPORT_C CPerlBase* CPerlBase::NewInterpreterLC(TBool aCloseStdlib,
-                                                void (*aStdioInitFunc)(void*),
-                                                void *aStdioInitCookie)
-{
-    CPerlBase* self = new (ELeave) CPerlBase;
-    CleanupStack::PushL(self);
-    self->iCloseStdlib     = aCloseStdlib;
-    self->iStdioInitFunc   = aStdioInitFunc;
-    self->iStdioInitCookie = aStdioInitCookie;
-    self->ConstructL();
-    PERL_APPCTX_SET(self);
-    return self;
-}
-
-static int _console_stdin(void* cookie, char* buf, int n)
-{
-    return ((CPerlBase*)cookie)->ConsoleRead(0, buf, n);
-}
-
-static int _console_stdout(void* cookie, const char* buf, int n)
-{
-    return ((CPerlBase*)cookie)->ConsoleWrite(1, buf, n);
-}
-
-static int _console_stderr(void* cookie, const char* buf, int n)
-{
-    return ((CPerlBase*)cookie)->ConsoleWrite(2, buf, n);
-}
-
-void CPerlBase::StdioRewire(void *arg) {
-    _REENT->_sf[0]._cookie = (void*)this;
-    _REENT->_sf[0]._read   = &_console_stdin;
-    _REENT->_sf[0]._write  = 0;
-    _REENT->_sf[0]._seek   = 0;
-    _REENT->_sf[0]._close  = 0;
-
-    _REENT->_sf[1]._cookie = (void*)this;
-    _REENT->_sf[1]._read   = 0;
-    _REENT->_sf[1]._write  = &_console_stdout;
-    _REENT->_sf[1]._seek   = 0;
-    _REENT->_sf[1]._close  = 0;
-
-    _REENT->_sf[2]._cookie = (void*)this;
-    _REENT->_sf[2]._read   = 0;
-    _REENT->_sf[2]._write  = &_console_stderr;
-    _REENT->_sf[2]._seek   = 0;
-    _REENT->_sf[2]._close  = 0;
-}
-
-void CPerlBase::ConstructL()
-{
-    iState = EPerlNone;
-#ifdef PERL_GLOBAL_STRUCT
-    PerlInterpreter *my_perl = 0;
-    iVars = init_global_struct();
-    User::LeaveIfNull(iVars);
-#endif
-    iPerl = perl_alloc();
-    User::LeaveIfNull(iPerl);
-    iState = EPerlAllocated;
-    perl_construct(iPerl); // returns void
-    if (!iStdioInitFunc) {
-        iConsole =
-          Console::NewL(_L("Perl Console"),
-                        TSize(KConsFullScreen, KConsFullScreen));
-        iConsoleBuffer =
-          (TUint16*)malloc(sizeof(TUint) *
-                           KPerlConsoleBufferMaxTChars);
-        User::LeaveIfNull(iConsoleBuffer);
-        iConsoleUsed = 0;
-#ifndef USE_PERLIO
-        iStdioInitFunc = &StdioRewire;
-#endif
-    }
-    if (iStdioInitFunc)
-        iStdioInitFunc(iStdioInitCookie);
-    iReadFunc  = NULL;
-    iWriteFunc = NULL;
-    iState = EPerlConstructed;
-}
-
-EXPORT_C PerlInterpreter* CPerlBase::GetInterpreter()
-{
-    return (PerlInterpreter*) iPerl;
-}
-
-#ifdef PERL_MINIPERL
-static void boot_DynaLoader(pTHX_ CV* cv) { }
-#else
-EXTERN_C void boot_DynaLoader(pTHX_ CV* cv);
-#endif
-
-static void xs_init(pTHX)
-{
-    dXSUB_SYS;
-    newXS("DynaLoader::boot_DynaLoader", boot_DynaLoader, __FILE__);
-}
-
-EXPORT_C TInt CPerlBase::RunScriptL(const TDesC& aFileName,
-                                    int argc,
-                                    char **argv,
-                                    char *envp[]) {
-    TBuf8<KMaxFileName> scriptUtf8;
-    TInt error;
-    error = CnvUtfConverter::ConvertFromUnicodeToUtf8(scriptUtf8, aFileName);
-    User::LeaveIfError(error);
-    char *filename = (char*)scriptUtf8.PtrZ();
-    struct stat st;
-    if (stat(filename, &st) == -1)
-        return KErrNotFound;
-    if (argc < 2)
-        return KErrGeneral; /* Anything better? */
-    char **Argv = (char**)malloc(argc * sizeof(char*));
-    User::LeaveIfNull(Argv);
-    TCleanupItem ArgvCleanupItem = TCleanupItem(free, Argv);
-    CleanupStack::PushL(ArgvCleanupItem);
-    Argv[0] = "perl";
-    if (argv && argc > 2)
-        for (int i = 2; i < argc - 1; i++)
-            Argv[i] = argv[i];
-    Argv[argc - 1] = filename;
-    error = this->ParseAndRun(argc, Argv, envp);
-    CleanupStack::PopAndDestroy(Argv);
-    Argv = 0;
-    return error == 0 ? KErrNone : KErrGeneral;
-}
-
-
-EXPORT_C int CPerlBase::Parse(int argc, char *argv[], char *envp[])
-{
-    if (iState == EPerlConstructed) {
-        const char* const NullArgv[] = { "perl", "-e", "0" };
-        if (argc == 0 || argv == 0) {
-            argc = 3;
-            argv = (char**) NullArgv;
-        }
-        PERL_SYS_INIT(&argc, &argv);
-        int parsed = perl_parse(iPerl, xs_init, argc, argv, envp);
-        if (parsed == 0)
-            iState = EPerlParsed;
-        return parsed;
-    } else
-        return -1;
-}
-
-EXPORT_C void CPerlBase::SetupExit()
-{
-    if (iState == EPerlParsed) {
-        diTHX;
-        PL_exit_flags |= PERL_EXIT_DESTRUCT_END;
-       // PL_perl_destruct level of 2 would be nice but
-       // it causes "Unbalanced scopes" for some reason.
-        PL_perl_destruct_level = 1;
-    }
-}
-
-EXPORT_C int CPerlBase::Run()
-{
-    if (iState == EPerlParsed) {
-        SetupExit();
-        iState = EPerlRunning;
-        int ran = perl_run(iPerl);
-        iState = (ran == 0) ? EPerlSuccess : EPerlFailure;
-        return ran;
-    } else
-        return -1;
-}
-
-EXPORT_C int CPerlBase::ParseAndRun(int argc, char *argv[], char *envp[])
-{
-    int parsed = Parse(argc, argv, envp);
-    int ran    = (parsed == 0) ? Run() : -1;
-    return ran;
-}
-
-int CPerlBase::ConsoleReadLine()
-{
-    if (!iConsole)
-        return -EIO;
-
-    TUint currX  = KPerlConsoleNoPos;
-    TUint currY  = KPerlConsoleNoPos;
-    TUint prevX  = KPerlConsoleNoPos;
-    TUint prevY  = KPerlConsoleNoPos;
-    TUint maxX   = KPerlConsoleNoPos;
-    TUint offset = 0;
-
-    for (;;) {
-        TKeyCode code = iConsole->Getch();
-
-        if (code == EKeyLineFeed || code == EKeyEnter) {
-            if (offset < KPerlConsoleBufferMaxTChars) {
-                iConsoleBuffer[offset++] = '\n';
-                iConsole->Printf(_L("\n"));
-                iConsoleBuffer[offset++] = 0;
-            }
-            break;
-        }
-        else {
-            TBool doBackward  = EFalse;
-            TBool doBackspace = EFalse;
-
-            prevX = currX;
-            prevY = currY;
-            if (code == EKeyBackspace) {
-                if (offset > 0) {
-                    iConsoleBuffer[--offset] = 0;
-                    doBackward  = ETrue;
-                    doBackspace = ETrue;
-                }
-            }
-            else if (offset < KPerlConsoleBufferMaxTChars) {
-                TChar ch = TChar(code);
-
-                if (ch.IsPrint()) {
-                    iConsoleBuffer[offset++] = (unsigned short)code;
-                    iConsole->Printf(_L("%c"), code);
-                }
-            }
-            currX = iConsole->WhereX();
-            currY = iConsole->WhereY();
-            if (maxX  == KPerlConsoleNoPos && prevX != KPerlConsoleNoPos &&
-                prevY != KPerlConsoleNoPos && currY == prevY + 1)
-                maxX = prevX;
-            if (doBackward) {
-                if (currX > 0)
-                    iConsole->SetPos(currX - 1);
-                else if (currY > 0)
-                    iConsole->SetPos(maxX, currY - 1);
-                if (doBackspace) {
-                    TUint nowX = iConsole->WhereX();
-                    TUint nowY = iConsole->WhereY();
-                    iConsole->Printf(_L(" ")); /* scrub */
-                    iConsole->SetPos(nowX, nowY);
-                }
-            }
-         }
-    }
-
-    return offset;
-}
-
-int CPerlBase::ConsoleRead(const int fd, char* buf, int n)
-{
-    if (iReadFunc)
-        return iReadFunc(fd, buf, n);
-
-    if (!iConsole) {
-        errno = EIO;
-        return -1;
-    }
-
-    if (n < 0) {
-        errno = EINVAL;
-        return -1;
-    }
-
-    if (n == 0)
-        return 0;
-
-    TBuf8<4 * KPerlConsoleBufferMaxTChars> aBufferUtf8;
-    TBuf16<KPerlConsoleBufferMaxTChars>    aBufferUtf16;
-    int length = ConsoleReadLine();
-    int i;
-
-    iConsoleUsed += length;
-
-    aBufferUtf16.SetLength(length);
-    for (i = 0; i < length; i++)
-        aBufferUtf16[i] = iConsoleBuffer[i];
-    aBufferUtf8.SetLength(4 * length);
-
-    CnvUtfConverter::ConvertFromUnicodeToUtf8(aBufferUtf8, aBufferUtf16);
-
-    char *pUtf8 = (char*)aBufferUtf8.PtrZ();
-    int nUtf8 = aBufferUtf8.Size();
-    if (nUtf8 > n)
-        nUtf8 = n; /* Potential data loss. */
-#ifdef PERL_SYMBIAN_CONSOLE_UTF8
-    for (i = 0; i < nUtf8; i++)
-        buf[i] = pUtf8[i];
-#else
-    dTHX;
-    for (i = 0; i < nUtf8; i+= UTF8SKIP(pUtf8 + i)) {
-        unsigned long u = utf8_to_uvchr_buf((U8*)(pUtf8 + i),
-                                            (U8*)(pUtf8 + nUtf8),
-                                            0);
-        if (u > 0xFF) {
-            iConsole->Printf(_L("(keycode > 0xFF)\n"));
-            buf[i] = 0;
-            return -1;
-        }
-        buf[i] = u;
-    }
-#endif
-    if (nUtf8 < n)
-        buf[nUtf8] = 0;
-    return nUtf8;
-}
-
-int CPerlBase::ConsoleWrite(const int fd, const char* buf, int n)
-{
-    if (iWriteFunc)
-        return iWriteFunc(fd, buf, n);
-
-    if (!iConsole) {
-        errno = EIO;
-        return -1;
-    }
-
-    if (n < 0) {
-        errno = EINVAL;
-        return -1;
-    }
-
-    if (n == 0)
-        return 0;
-
-    int wrote = 0;
-#ifdef PERL_SYMBIAN_CONSOLE_UTF8
-    dTHX;
-    if (is_utf8_string((U8*)buf, n)) {
-        for (int i = 0; i < n; i += UTF8SKIP(buf + i)) {
-            TChar u = valid_utf8_to_uvchr((U8*)(buf + i), 0);
-            iConsole->Printf(_L("%c"), u);
-            wrote++;
-        }
-    } else {
-        iConsole->Printf(_L("(malformed utf8: "));
-        for (int i = 0; i < n; i++)
-            iConsole->Printf(_L("%02x "), buf[i]);
-        iConsole->Printf(_L(")\n"));
-    }
-#else
-    for (int i = 0; i < n; i++) {
-        iConsole->Printf(_L("%c"), buf[i]);
-    }
-    wrote = n;
-#endif
-    iConsoleUsed += wrote;
-    return n;
-}
-
diff --git a/symbian/PerlBase.h b/symbian/PerlBase.h
deleted file mode 100644 (file)
index 769958d..0000000
+++ /dev/null
@@ -1,127 +0,0 @@
-/* Copyright (c) 2004-2005 Nokia. All rights reserved. */
-
-/* The CPerlBase class is licensed under the same terms as Perl itself. */
-
-/* See PerlBase.pod for documentation. */
-
-#ifndef __PerlBase_h__
-#define __PerlBase_h__
-
-#include <e32base.h>
-
-#if !defined(PERL_MINIPERL) && !defined(PERL_PERL)
-#  ifndef PERL_IMPLICIT_CONTEXT
-#    define PERL_IMPLICIT_CONTEXT
-#  endif
-#  ifndef PERL_MULTIPLICITY
-#    define PERL_MULTIPLICITY
-#  endif
-#  ifndef PERL_GLOBAL_STRUCT
-#    define PERL_GLOBAL_STRUCT
-#  endif
-#  ifndef PERL_GLOBAL_STRUCT_PRIVATE
-#    define PERL_GLOBAL_STRUCT_PRIVATE
-#  endif
-#endif
-
-#include "EXTERN.h"
-#include "perl.h"
-
-typedef enum {
-   EPerlNone,
-   EPerlAllocated,
-   EPerlConstructed,
-   EPerlParsed,
-   EPerlRunning,
-   EPerlTerminated,
-   EPerlPaused,
-   EPerlSuccess,
-   EPerlFailure,
-   EPerlDestroying
-} TPerlState;
-
-class PerlConsole;
-
-class CPerlBase : public CBase
-{
-  public:
-    CPerlBase();
-    IMPORT_C virtual ~CPerlBase();
-    IMPORT_C static CPerlBase* NewInterpreter(TBool aCloseStdlib = ETrue,
-                                               void (*aStdioInitFunc)(void*) = NULL,
-                                               void *aStdioInitCookie = NULL);
-    IMPORT_C static CPerlBase* NewInterpreterL(TBool aCloseStdlib = ETrue,
-                                               void (*aStdioInitFunc)(void*) = NULL,
-                                               void *aStdioInitCookie = NULL);
-    IMPORT_C static CPerlBase* NewInterpreterLC(TBool iCloseStdlib = ETrue,
-                                                void (*aStdioInitFunc)(void*) = NULL,
-                                                void *aStdioInitCookie = NULL);
-    IMPORT_C TInt RunScriptL(const TDesC& aFileName, int argc = 2, char **argv = NULL, char *envp[] = NULL);
-    IMPORT_C int  Parse(int argc = 0, char *argv[] = NULL, char *envp[] = NULL);
-    IMPORT_C void SetupExit();
-    IMPORT_C int  Run();
-    IMPORT_C int  ParseAndRun(int argc = 0, char *argv[] = 0, char *envp[] = 0);
-    IMPORT_C void Destruct();
-
-    IMPORT_C PerlInterpreter* GetInterpreter();
-
-    // These two really should be private but when not using PERLIO
-    // certain C callback functions of STDLIB need to be able to call
-    // these.  In general, all the console related functionality is
-    // intentionally hidden and underdocumented.
-    int               ConsoleRead(const int fd, char* buf, int n);
-    int               ConsoleWrite(const int fd, const char* buf, int n);
-
-    // Having these public does not feel right, but maybe someone needs
-    // to do creative things with them.
-    int               (*iReadFunc)(const int fd, char *buf, int n);
-    int               (*iWriteFunc)(const int fd, const char *buf, int n);
-
-   protected:
-    PerlInterpreter*  iPerl;
-#ifdef PERL_GLOBAL_STRUCT
-    struct perl_vars* iVars;
-#else
-    void*             iAppCtx;
-#endif
-    TPerlState        iState;
-
-   private:
-    void              ConstructL();
-    CConsoleBase*     iConsole;                /* The screen. */
-    TUint16*          iConsoleBuffer;  /* The UTF-16 characters. */
-    TUint             iConsoleUsed;    /* How many in iConsoleBuffer. */
-    TBool             iCloseStdlib;    /* Close STDLIB on exit? */
-
-    void              (*iStdioInitFunc)(void *);
-    void*             iStdioInitCookie;
-
-    int               ConsoleReadLine();
-    void              StdioRewire(void*);
-};
-
-#define diTHX PerlInterpreter*  my_perl = iPerl
-#define diVAR struct perl_vars* my_vars = iVars
-
-#ifdef PERL_GLOBAL_STRUCT
-#  define PERL_APPCTX_SET(c) ((c)->iVars->Gappctx = (c))
-#else
-#  define PERL_APPCTX_SET(c) (PL_appctx = (c))
-#endif
-
-#undef Copy
-#undef CopyD /* For symmetry, not for Symbian reasons. */
-#undef New
-#define PerlCopy(s,d,n,t)      (MEM_WRAP_CHECK(n,t), (void)memcpy((char*)(d),(char*)(s), (n) * sizeof(t)))
-#define PerlCopyD(s,d,n,t)     (MEM_WRAP_CHECK(n,t), memcpy((char*)(d),(char*)(s), (n) * sizeof(t)))
-#define PerlNew(x,v,n,t)       (v = (MEM_WRAP_CHECK(n,t), (t*)safemalloc((MEM_SIZE)((n)*sizeof(t)))))
-
-// This is like the Symbian _LIT() but without the embedded L prefix,
-// which enables using #defined constants (which need to carry their
-// own L prefix).
-#ifndef _LIT_NO_L
-# define _LIT_NO_L(n, s) static const TLitC<sizeof(s)/2> n={sizeof(s)/2-1,s}
-#endif // #ifndef _LIT_NO_L
-
-#endif /* #ifndef __PerlBase_h__ */
-
diff --git a/symbian/PerlBase.pod b/symbian/PerlBase.pod
deleted file mode 100644 (file)
index 70fc9af..0000000
+++ /dev/null
@@ -1,204 +0,0 @@
-=head1 NAME
-
-CPerlBase - a C++ base class encapsulating a Perl interpreter in Symbian
-
-=head1 SYNOPSIS
-
-       // in your App.mmp
-       USERINCLUDE     \symbian\perl\x.y.z\include
-       LIBRARY         perlXYZ.lib
-
-       // in your App
-       #include "PerlBase.h" // includes also EXTERN.h and perl.h
-       CPerlBase* perl = CPerlBase::NewInterpreterLC();
-       ...
-       delete perl;
-
-=head1 DESCRIPTION
-
-CPerlBase is a simple Symbian C++ class that wraps a Perl
-interpreter; its creation, use, and destroying.  To understand
-what this is doing, and how to use the interpreter, a fair knowledge
-of L<perlapi>, L<perlguts>, and L<perlembed> is recommended.
-
-One useful thing CPerlBase does compared with just using the raw
-Perl C API is that it redirects the "std streams" (STDOUT et alia)
-to a text console implementation which while being very basic
-is marginally more usable than the Symbian basic text console.
-
-=head2 The Basics
-
-=over 4
-
-=item *
-
-CPerlBase* NewInterpreterL();
-
-The constructor that does not keep the object in the Symbian "cleanup stack".
-perl_alloc() and perl_construct() are called behind the curtains.
-
-Accepts the same arguments as NewInterpreterLC().
-
-=item *
-
-CPerlBase* NewInterpreterLC();
-
-The constructor that keeps the object in the Symbian "cleanup stack".
-perl_alloc() and perl_construct() are called behind the curtains.
-
-Can have three arguments:
-
-=over 8
-
-=item *
-
-TBool aCloseStdlib = ETrue
-
-Should a CPerlBase close the Symbian POSIX STDLIB when closing down.
-Good for one-shot script execution, probably less good for longer term
-embedded interpreter.
-
-=item *
-
-void (*aStdioInitFunc)(void*) = NULL
-
-If set, called with aStdioInitCookie, and the default console is
-not created.  You may want to set the iReadFunc() and iWriteFunc().
-
-=item *
-
-void *aStdioInitCookie = NULL
-
-Used as the argument for aStdioInitFunc().
-
-=back
-
-=item *
-
-void Destroy();
-
-The destructor of the interpreter.  The class destructor calls
-first this and then the Symbian CloseSTDLIB().
-
-perl_destruct(), perl_free(), and PERL_SYS_TERM() are called
-behind the curtains.
-
-=back
-
-=head2 Utility functions
-
-=over 4
-
-=item *
-
-int Parse(int argc = 0, char *argv[] = 0, char *envp[] = 0);
-
-Prepare an interpreter for executing by parsing input as if a C main()
-had been called.  For example to parse a script, use argc of 2 and argv
-of { "perl", script_name }.
-
-All arguments are optional: in case either argc or argv are zero,
-argc of 3 and argv of { "perl", "-e", "0" } is assumed.
-
-PERL_SYS_INIT() and perl_parse() are called behind the curtains.
-
-Note that a call to Parse() is required before Run().
-
-Returns zero if parsing was successful, non-zero if not (and the stderr
-will get the error).
-
-=item *
-
-int Run()
-
-Start executing an interpreter.  A Parse() must have been called before
-a Run(): use 3 and { "", "-e", 0 } if you do not have an argv.
-
-Note that a call to Parse() is required before Run().
-
-perl_run() is called behind the curtains.
-
-Returns zero if execution was successful, non-zero if not (and the stderr
-will get the error).
-
-=item *
-
-int ParseAndRun(int argc, char *argv[], char *envp[]);
-
-Combined Parse() and Run().  The Run() is not run if the Parse() fails.
-
-Returns zero if parsing and execution were successful, non-zero if not.
-
-=item *
-
-TInt RunScriptL(TDesC& aFileName, int argc, char **argv, char *envp[])
-
-Like ParseAndRun() but works for Symbian filenames (UTF-16LE).
-The UTF-8 version of aFileName is always argv[argc-1], and argv[0]
-is always "perl".
-
-=back
-
-=head2 Macros
-
-=over 4
-
-=item *
-
-diTHX
-
-Set up my_perl from the current object (like dTHX).
-
-=item *
-
-diVAR
-
-Set up my_vars from the current object (like dVAR).
-
-=back
-
-=head2 Extending CPerlBase (subclassing, deriving from)
-
-Note that it probably isn't worth the trouble to try to wrap the
-whole, rather large, Perl C API into a C++ API.  Just use the C API.
-
-The protected members of the class are:
-
-=over 4
-
-=item *
-
-PerlInterpreter* iPerl
-
-The Perl interpreter.
-
-=item *
-
-struct perl_vars* iVars
-
-The global variables of the interpreter.
-
-=item *
-
-TPerlState iState
-
-The state of the Perl interpreter. TPerlState is one of EPerlNone,
-EPerlAllocated, EPerlConstructed, EPerlParsed, EPerlRunning,
-EPerlTerminated, EPerlPaused (these two are currently unused
-but in the future they might be used to indicate that the interpreter
-was stopped either non-resumably or resumably for some reason),
-EPerlSuccess (perl_run() succeeded), EPerlFailure (perl_run() failed),
-EPerlDestroying.
-
-=back
-
-=head1 COPYRIGHT
-
-Copyright (c) 2004-2005 Nokia.  All rights reserved.
-
-=head1 LICENSE
-
-The CPerlBase class is licensed under the same terms as Perl itself.
-
-=cut
-
diff --git a/symbian/PerlRecog.cpp b/symbian/PerlRecog.cpp
deleted file mode 100644 (file)
index d2db544..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-/* Copyright (c) 2004-2005 Nokia. All rights reserved. */
-/* The PerlRecog application is licensed under the same terms as Perl itself. */
-
-#include <apmrec.h>
-#include <apmstd.h>
-#include <f32file.h>
-
-const TUid KUidPerlRecog = { 0x102015F7 };
-_LIT8(KPerlMimeType, "x-application/x-perl");
-_LIT8(KPerlSig, "#!/usr/bin/perl");
-const TInt KPerlSigLen = 15;
-
-class CApaPerlRecognizer : public CApaDataRecognizerType {
-  public:
-    CApaPerlRecognizer():CApaDataRecognizerType(KUidPerlRecog, EHigh) {
-        iCountDataTypes = 1;
-    }
-    virtual TUint PreferredBufSize() { return KPerlSigLen; }
-    virtual TDataType SupportedDataTypeL(TInt /* aIndex */) const {
-        return TDataType(KPerlMimeType);
-    }
-  private:
-    virtual void DoRecognizeL(const TDesC& aName, const TDesC8& aBuffer);
-};
-
-void CApaPerlRecognizer::DoRecognizeL(const TDesC& aName, const TDesC8& aBuffer)
-{
-    iConfidence = ENotRecognized;
-
-    if (aBuffer.Length() >= KPerlSigLen &&
-        aBuffer.Left(KPerlSigLen).Compare(KPerlSig) == 0) {
-        iConfidence = ECertain;
-        iDataType   = TDataType(KPerlMimeType);
-    } else {
-        TParsePtrC p(aName);
-
-        if ((p.Ext().CompareF(_L(".pl"))  == 0) ||
-            (p.Ext().CompareF(_L(".pm"))  == 0)) {
-            iConfidence = ECertain;
-            iDataType = TDataType(KPerlMimeType);
-        }
-    }
-}
-
-EXPORT_C CApaDataRecognizerType* CreateRecognizer()
-{
-    return new CApaPerlRecognizer;
-}
-
-GLDEF_C TInt E32Dll(TDllReason /* aReason */)
-{
-    return KErrNone;
-}
-
-
-    
diff --git a/symbian/PerlRecog.mmp b/symbian/PerlRecog.mmp
deleted file mode 100644 (file)
index 6850103..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-TARGET         PerlRecog.mdl
-TARGETTYPE     mdl
-UID            0x10003A19 0x102015F7
-TARGETPATH     \system\recogs
-SOURCE         PerlRecog.cpp
-USERINCLUDE    .
-SYSTEMINCLUDE  \epoc32\include
-LIBRARY                euser.lib efsrv.lib apmime.lib
-
diff --git a/symbian/PerlUi.cpp b/symbian/PerlUi.cpp
deleted file mode 100644 (file)
index 01be136..0000000
+++ /dev/null
@@ -1,273 +0,0 @@
-/* Copyright (c) 2005 Nokia. All rights reserved. */
-
-/* The PerlUi class is licensed under the same terms as Perl itself. */
-
-#include "PerlUi.h"
-
-#ifdef __SERIES60__
-# include <avkon.hrh>
-# include <aknnotewrappers.h> 
-# include <AknCommonDialogs.h>
-# ifndef __SERIES60_1X__
-#  include <CAknFileSelectionDialog.h>
-# endif
-#endif /* #ifdef __SERIES60__ */
-
-#if defined(__SERIES80__) || defined(__SERIES90__)
-# include <eikon.hrh>
-# include <cknflash.h>
-# include <ckndgopn.h>
-# include <ckndgfob.h>
-# include <eiklabel.h>
-# include <cknconf.h>
-#endif /* #if defined(__SERIES80__) || defined(__SERIES90__) */
-
-#ifdef __UIQ__
-# include <qikon.hrh>
-# include <eikedwin.h>
-# include <eiklabel.h>
-#endif /* #ifdef __UIQ__ */
-
-#include <apparc.h>
-#include <e32base.h>
-#include <e32cons.h>
-#include <eikenv.h>
-#include <bautils.h>
-#include <eikappui.h>
-#include <utf.h>
-#include <f32file.h>
-
-#include <coemain.h>
-
-#include "PerlUi.hrh"
-#include "PerlUi.rsg"
-
-#if defined(__SERIES80__) || defined(__SERIES90__)
-#include "Eikon.rsg"
-#endif /* #if defined(__SERIES80__) || defined(__SERIES90__) */
-
-#include "EXTERN.h"
-#include "perl.h"
-#include "XSUB.h"
-
-#include "PerlBase.h"
-#include "PerlUtil.h"
-
-#define symbian_get_vars() Dll::Tls() // Not visible from perlXYZ.lib?
-
-_LIT(KDefaultScript, "default.pl");
-
-EXPORT_C void CPerlUiAppUi::ConstructL()
-{
-    BaseConstructL();
-    iAppView = CPerlUiAppView::NewL(ClientRect());
-    AddToStackL(iAppView);
-    CEikonEnv::Static()->DisableExitChecks(ETrue); // Symbian FAQ-0577.
-}
-
-EXPORT_C TBool CPerlUi::OkCancelDialogL(TDesC& aMessage)
-{
-#ifdef __SERIES60__
-    CAknNoteDialog* dlg =
-        new (ELeave) CAknNoteDialog(CAknNoteDialog::EConfirmationTone);
-    dlg->PrepareLC(R_PERLUI_OK_CANCEL_DIALOG);
-    dlg->SetTextL(aMessage);
-    return dlg->RunDlgLD() == EAknSoftkeyOk;
-#endif /* #ifdef __SERIES60__ */
-#if defined(__SERIES80__) || defined(__SERIES90__)
-    return CCknConfirmationDialog::RunDlgWithDefaultIconLD(aMessage, R_EIK_BUTTONS_CANCEL_OK);
-#endif /* #if defined(__SERIES80__) || defined(__SERIES90__) */
-#ifdef __UIQ__
-    CEikDialog* dlg = new (ELeave) CEikDialog();
-    return dlg->ExecuteLD(R_PERLUI_OK_CANCEL_DIALOG) == EEikBidOk;
-#endif /* #ifdef __UIQ__ */
-}
-
-EXPORT_C TBool CPerlUi::YesNoDialogL(TDesC& aMessage)
-{
-#ifdef __SERIES60__
-    CAknNoteDialog* dlg =
-        new (ELeave) CAknNoteDialog(CAknNoteDialog::EConfirmationTone);
-    dlg->PrepareLC(R_PERLUI_YES_NO_DIALOG);
-    dlg->SetTextL(aMessage);
-    return dlg->RunDlgLD() == EAknSoftkeyOk;
-#endif /* #ifdef __SERIES60__ */
-#if defined(__SERIES80__) || defined(__SERIES90__)
-    return CCknConfirmationDialog::RunDlgWithDefaultIconLD(aMessage, R_EIK_BUTTONS_NO_YES);
-#endif /* #if defined(__SERIES80__) || defined(__SERIES90__) */
-#ifdef __UIQ__
-    CEikDialog* dlg = new (ELeave) CEikDialog();
-    return dlg->ExecuteLD(R_PERLUI_YES_NO_DIALOG) == EEikBidOk;
-#endif /* #ifdef __UIQ__ */
-}
-
-EXPORT_C void CPerlUi::InformationNoteL(TDesC& aMessage)
-{
-#ifdef __SERIES60__
-    CAknInformationNote* note = new (ELeave) CAknInformationNote;
-    note->ExecuteLD(aMessage);
-#endif /* #ifdef __SERIES60__ */
-#if defined(__SERIES80__) || defined(__SERIES90__) || defined(__UIQ__)
-    CEikonEnv::Static()->InfoMsg(aMessage);
-#endif /* #if defined(__SERIES80__) || defined(__SERIES90__) || defined(__UIQ__) */
-}
-
-EXPORT_C TInt CPerlUi::WarningNoteL(TDesC& aMessage)
-{
-#ifdef __SERIES60__
-    CAknWarningNote* note = new (ELeave) CAknWarningNote;
-    return note->ExecuteLD(aMessage);
-#endif /* #ifdef __SERIES60__ */
-#if defined(__SERIES80__) || defined(__SERIES90__) || defined(__UIQ__)
-    CEikonEnv::Static()->AlertWin(aMessage);
-    return ETrue;
-#endif /* #if defined(__SERIES80__) || defined(__SERIES90__) || defined(__UIQ__) */
-}
-
-#if defined(__SERIES80__) || defined(__SERIES90__) || defined(__UIQ__)
-
-CPerlUiTextQueryDialog::CPerlUiTextQueryDialog(HBufC*& aBuffer) :
-  iData(aBuffer)
-{
-}
-
-TBool CPerlUiTextQueryDialog::OkToExitL(TInt /* aKeycode */)
-{
-  iData = static_cast<CEikEdwin*>(Control(EPerlUiTextQueryInputField))->GetTextInHBufL();
-  return ETrue;
-}
-
-void CPerlUiTextQueryDialog::PreLayoutDynInitL()
-{
-  SetTitleL(iTitle);
-  CEikLabel* promptLabel = ControlCaption(EPerlUiTextQueryInputField);
-  promptLabel->SetTextL(iPrompt);
-}
-
-/* TODO: OfferKeyEventL() so that newline can be seen as 'OK'.
- * Or a hotkey for the button? */
-
-#endif /* #if defined(__SERIES80__) || defined(__SERIES90__) || defined(__UIQ__) */
-
-EXPORT_C TBool CPerlUi::TextQueryDialogL(const TDesC& aTitle, const TDesC& aPrompt, TDes& aData, const TInt aMaxLength)
-{
-#ifdef __SERIES60__
-    CAknTextQueryDialog* dlg =
-        new (ELeave) CAknTextQueryDialog(aData);
-    dlg->SetPromptL(aPrompt);
-    dlg->SetMaxLength(aMaxLength);
-    return dlg->ExecuteLD(R_PERLUI_TEXT_QUERY_DIALOG);
-#endif /* #ifdef __SERIES60__ */
-#if defined(__SERIES80__) || defined(__SERIES90__) || defined(__UIQ__)
-    HBufC* data = NULL;
-    CPerlUiTextQueryDialog* dlg =
-      new (ELeave) CPerlUiTextQueryDialog(data);
-    dlg->iTitle.Set(aTitle);
-    dlg->iPrompt.Set(aPrompt);
-    dlg->iMaxLength = aMaxLength;
-    if (dlg->ExecuteLD(R_PERLUI_ONELINER_DIALOG)) {
-        aData.Copy(*data);
-        return ETrue;
-    }
-    return EFalse;
-#endif /* #if defined(__SERIES80__) || defined(__SERIES90__) || defined(__UIQ__) */
-}
-
-EXPORT_C TBool CPerlUi::FileQueryDialogL(TDes& aFilename)
-{
-#ifdef __SERIES60__
-  return AknCommonDialogs::RunSelectDlgLD(aFilename,
-                                          R_PERLUI_FILE_SELECTION_DIALOG);
-#endif /* #ifdef __SERIES60__ */
-#if defined(__SERIES80__) || defined(__SERIES90__)
-  if (CCknOpenFileDialog::RunDlgLD(aFilename,
-                                    CCknFileListDialogBase::EShowAllDrives
-                                   |CCknFileListDialogBase::EShowSystemFilesAndFolders
-                                   |CCknFileListDialogBase::EShowBothFilesAndFolders
-                                   )) {
-    TEntry aEntry; // Be paranoid and check that the file is there.
-    RFs aFs;
-    aFs.Connect();
-    if (aFs.Entry(aFilename, aEntry) == KErrNone)
-      return ETrue;
-    else
-      CEikonEnv::Static()->InfoMsg(_L("File not found"));
-  }
-  return EFalse;
-#endif /* #if defined(__SERIES80__) || defined(__SERIES90__) */
-#ifdef __UIQ__
-  return EFalse; // No filesystem access in UIQ 2.x!
-#endif /* #ifdef __UIQ__ */
-}
-
-#ifdef __SERIES60__
-
-EXPORT_C void CPerlUiAppUi::HandleCommandL(TInt aCommand)
-{
-    switch(aCommand)
-    {
-    case EEikCmdExit:
-    case EAknSoftkeyExit:
-        Exit();
-        break;
-    default:
-        DoHandleCommandL(aCommand);
-        break;
-    }
-}
-
-#endif /* #ifdef __SERIES60__ */
-
-#if defined(__SERIES80__) || defined(__SERIES90__) || defined(__UIQ__)
-
-EXPORT_C void CPerlUiAppView::HandleCommandL(TInt aCommand, CPerlUiAppUi* aAppUi) {
-    aAppUi->DoHandleCommandL(aCommand);
-}
-
-EXPORT_C void CPerlUiAppUi::HandleCommandL(TInt aCommand) {
-    switch(aCommand)
-    {
-    case EEikCmdExit:
-        Exit();
-        break;
-    default:
-        iAppView->HandleCommandL(aCommand, this);
-        break;
-    }
-}
-
-#endif /* #if defined(__SERIES80__) || defined(__SERIES90__) || defined(__UIQ__) */
-
-CPerlUiAppView* CPerlUiAppView::NewL(const TRect& aRect)
-{
-    CPerlUiAppView* self = CPerlUiAppView::NewLC(aRect);
-    CleanupStack::Pop(self);
-    return self;
-}
-
-CPerlUiAppView* CPerlUiAppView::NewLC(const TRect& aRect)
-{
-    CPerlUiAppView* self = new (ELeave) CPerlUiAppView;
-    CleanupStack::PushL(self);
-    self->ConstructL(aRect);
-    return self;
-}
-
-void CPerlUiAppView::ConstructL(const TRect& aRect)
-{
-    CreateWindowL();
-    SetRect(aRect);
-    ActivateL();
-}
-
-CPerlUiAppView::~CPerlUiAppView()
-{
-}
-
-void CPerlUiAppView::Draw(const TRect& /*aRect*/) const
-{
-    CWindowGc& gc = SystemGc();
-    TRect rect = Rect();
-    gc.Clear(rect);
-}
-
diff --git a/symbian/PerlUi.h b/symbian/PerlUi.h
deleted file mode 100644 (file)
index 9a50020..0000000
+++ /dev/null
@@ -1,120 +0,0 @@
-/* Copyright (c) 2005 Nokia. All rights reserved. */
-
-/* The PerlUi class is licensed under the same terms as Perl itself. */
-
-#ifndef __PerlUi_h__
-#define __PerlUi_h__
-
-#ifdef __SERIES60__
-# include <aknapp.h>
-# include <aknappui.h>
-# include <akndoc.h>
-#endif /* #ifdef __SERIES60__ */
-
-#if defined(__SERIES80__) || defined(__SERIES90__)
-# include <eikapp.h>
-# include <eikappui.h>
-# include <eikdoc.h>
-# include <eikbctrl.h>
-# include <eikgted.h>
-# include <eikdialg.h>
-#endif /* #if defined(__SERIES80__) || defined(__SERIES90__) */
-
-#ifdef __UIQ__
-# include <qikapplication.h>
-# include <qikappui.h>
-# include <qikdocument.h>
-# include <eikdialg.h>
-#endif /* #ifdef __UIQ____ */
-
-#include <coecntrl.h>
-#include <f32file.h>
-
-#ifdef __SERIES60__
-# define CgPerlUiDocument    CAknDocument
-# define CgPerlUiApplication CAknApplication
-# define CgPerlUiAppUi       CAknAppUi
-# define CgPerlUiNoteDialog  CAknNoteDialog
-# define CgPerlUiAppView     CCoeControl
-#endif /* #ifdef __SERIES60__ */
-
-#if defined(__SERIES80__) || defined(__SERIES90__)
-# define CgPerlUiDocument    CEikDocument
-# define CgPerlUiApplication CEikApplication
-# define CgPerlUiAppUi       CEikAppUi
-# define CgPerlUiNoteDialog  CCknFlashingDialog
-# define CgPerlUiAppView     CEikBorderedControl
-#endif /* #if defined(__SERIES80__) || defined(__SERIES90__) */
-
-#ifdef __UIQ__
-# define CgPerlUiDocument    CEikDocument
-# define CgPerlUiApplication CQikApplication
-# define CgPerlUiAppUi       CQikAppUi
-# define CgPerlUiNoteDialog  CCknFlashingDialog
-# define CgPerlUiAppView     CCoeControl
-#endif /* #ifdef __UIQ__ */
-
-class CPerlUiApplication : public CgPerlUiApplication
-{
-};
-
-const TUint KPerlUiPromptSize   = 20;
-const TUint KPerlUiOneLinerSize = 128;
-
-class CPerlUiAppView;
-
-class CPerlUiAppUi : public CgPerlUiAppUi
-{
-  public:
-    IMPORT_C void ConstructL();
-    void virtual DoHandleCommandL(TInt aCommand) = 0;
-    IMPORT_C void HandleCommandL(TInt aCommand);
-    TBuf<KPerlUiOneLinerSize> iOneLiner; // Perl code to evaluate.
-    CPerlUiAppView* iAppView;
-};
-
-class CPerlUiAppView : public CgPerlUiAppView
-{
-  public:
-    static CPerlUiAppView* NewL(const TRect& aRect);
-    static CPerlUiAppView* NewLC(const TRect& aRect);
-    ~CPerlUiAppView();
-    void Draw(const TRect& aRect) const;
-#if defined(__SERIES80__) || defined(__SERIES90__) || defined(__UIQ__)
-    IMPORT_C void HandleCommandL(TInt aCommand, CPerlUiAppUi* aAppUi);
-#endif /* #if defined(__SERIES80__) || defined(__SERIES90__) || defined(__UIQ__) */
-  private:
-    void ConstructL(const TRect& aRect);
-};
-
-#if defined(__SERIES80__) || defined(__SERIES90__) || defined(__UIQ__)
-
-class CPerlUiTextQueryDialog : public CEikDialog
-{
-  public:
-    CPerlUiTextQueryDialog(HBufC*& aBuffer);
-    /* TODO: OfferKeyEventL() so that newline can be seen as 'OK'. */
-    HBufC*& iData;
-    TPtrC iTitle;  // used in S80 but not in S60
-    TPtrC iPrompt; // used in S60 and S80
-    TInt iMaxLength;
-  protected:
-    void PreLayoutDynInitL();
-  private:
-    TBool OkToExitL(TInt aKeycode);
-};
-
-#endif /* #if defined(__SERIES80__) || defined(__SERIES90__) || defined(__UIQ__) */
-
-class CPerlUi : public CgPerlUiAppUi
-{
-  public:
-    IMPORT_C static TBool OkCancelDialogL(TDesC& aMessage);
-    IMPORT_C static TBool YesNoDialogL(TDesC& aMessage);
-    IMPORT_C static void  InformationNoteL(TDesC& aMessage);
-    IMPORT_C static TInt  WarningNoteL(TDesC& aMessage);
-    IMPORT_C static TBool TextQueryDialogL(const TDesC& aTitle, const TDesC& aPrompt, TDes& aData, const TInt aMaxLength);
-    IMPORT_C static TBool FileQueryDialogL(TDes& aFilename);
-};
-
-#endif // __PerlUi_h__
diff --git a/symbian/PerlUi.hrh b/symbian/PerlUi.hrh
deleted file mode 100644 (file)
index edb657d..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-/* Copyright (c) 2005 Nokia.  All rights reserved. */
-
-/* The PerlUi class is licensed under the same terms as Perl itself. */
-
-#ifndef __PerlUi_HRH__
-#define __PerlUi_HRH__
-
-enum TPerlUiIds
-{
-    EPerlUiTextQueryInputField        = 2048,
-    EPerlUiLast                       = 2099  // no comma here
-};
-
-#endif // __PerlUi_HRH__
diff --git a/symbian/PerlUiS60.rss b/symbian/PerlUiS60.rss
deleted file mode 100644 (file)
index 757fb33..0000000
+++ /dev/null
@@ -1,144 +0,0 @@
-/* Copyright (c) 2004-2005 Nokia. All rights reserved. */ 
-
-/* The PerlUi class is licensed under the same terms as Perl itself. */
-
-/* The S60 definitions. */
-
-NAME PERL
-
-#include <eikon.rh>
-#include <avkon.rh>
-#include <avkon.rsg>
-
-#include "PerlUi.hrh"
-#include "PerlApp.hrh"
-
-RESOURCE RSS_SIGNATURE
-{
-}
-
-RESOURCE TBUF r_default_document_name
-{
-    buf = "";
-}
-
-RESOURCE EIK_APP_INFO
-{
-    menubar = r_Perl_menubar;
-    cba = R_AVKON_SOFTKEYS_OPTIONS_EXIT;
-}
-
-
-RESOURCE MENU_BAR r_Perl_menubar
-{
-    titles = {
-        MENU_TITLE
-            {
-            menu_pane = r_Perl_menu;
-            }
-    };
-}
-
-
-RESOURCE MENU_PANE r_Perl_menu
-{
-    items = {
-        MENU_ITEM {
-            command = EPerlAppCommandAbout;
-            txt = "About";
-        },
-        MENU_ITEM {
-            command = EPerlAppCommandTime;
-            txt = "Time";
-        },
-        MENU_ITEM {
-            command = EPerlAppCommandRunFile;
-            txt = "Run";
-        },
-        MENU_ITEM {
-            command = EPerlAppCommandOneLiner;
-            txt = "Oneliner";
-        },
-        MENU_ITEM {
-            command = EPerlAppCommandCopyright;
-            txt = "Copyright";
-            }
-        };
-}
-
-RESOURCE DIALOG r_perlui_ok_cancel_dialog
-{
-    flags = EEikDialogFlagWait | EEikDialogFlagCbaButtons;
-    buttons = R_AVKON_SOFTKEYS_OK_CANCEL;
-    items = {
-        DLG_LINE
-        {
-            type = EAknCtNote;
-            id = EGeneralNote;
-            control = AVKON_NOTE
-            {
-                layout = EGeneralLayout;
-            };
-        }
-    };
-}
-
-RESOURCE DIALOG r_perlui_yes_no_dialog
-{
-    flags = EEikDialogFlagWait | EEikDialogFlagCbaButtons;
-    buttons = R_AVKON_SOFTKEYS_YES_NO;
-    items = {
-        DLG_LINE
-        {
-            type = EAknCtNote;
-            id = EGeneralNote;
-            control = AVKON_NOTE
-            {
-                layout = EGeneralLayout;
-            };
-        }
-    };
-}
-
-RESOURCE DIALOG r_perlui_text_query_dialog
-{
-    flags = EGeneralQueryFlags;
-    buttons = R_AVKON_SOFTKEYS_OK_CANCEL;
-    items = {
-        DLG_LINE
-        {
-            type = EAknCtQuery;
-            id = EGeneralQuery;
-            control = AVKON_DATA_QUERY
-            {
-                layout = EDataLayout;
-                control = EDWIN {};
-            };
-        }
-    }; 
-}
-
-RESOURCE AVKON_LIST_QUERY r_perlui_list_query_dialog
-{
-    flags = EGeneralQueryFlags;
-    softkeys = R_AVKON_SOFTKEYS_OK_CANCEL;
-    items = {
-        DLG_LINE
-        {
-            type = EAknCtListQueryControl;
-            id = EListQueryControl;
-            control = AVKON_LIST_QUERY_CONTROL
-            {
-                listtype = EAknCtSinglePopupMenuListBox;
-            };
-        }
-    };
-}
-
-#include <CommonDialogs.hrh>
-#include <CommonDialogs.rh>
-
-RESOURCE MEMORYSELECTIONDIALOG r_perlui_file_selection_dialog
-{
-}
-
diff --git a/symbian/PerlUiS80.rss b/symbian/PerlUiS80.rss
deleted file mode 100644 (file)
index 8028311..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-/* Copyright (c) 2004-2005 Nokia. All rights reserved. */ 
-
-/* The PerlUi class is licensed under the same terms as Perl itself. */
-
-/* The S80 definitions. */
-
-NAME PERL
-
-#include <eikon.rh>
-#include <eikon.rsg>
-
-#include "PerlUi.hrh"
-#include "PerlApp.hrh"
-
-RESOURCE RSS_SIGNATURE
-{
-}
-
-RESOURCE TBUF r_default_document_name
-{
-    buf = "";
-}
-
-RESOURCE EIK_APP_INFO
-{
-    menubar = r_perlui_menubar;
-    cba = r_perlui_cba;
-}
-
-RESOURCE CBA r_perlui_cba
-{
-    buttons = {
-        CBA_BUTTON { id = EPerlAppCommandRunFile;        txt = "Run"; },
-        CBA_BUTTON { id = EPerlAppCommandOneLiner;       txt = "Oneliner"; },
-        CBA_BUTTON { id = EPerlAppCommandAboutCopyright; txt = "About"; },
-        CBA_BUTTON { id = EEikCmdExit;                   txt = "Exit"; }
-    };
-}
-
-
-RESOURCE MENU_BAR r_perlui_menubar
-{
-    titles = {
-        MENU_TITLE
-            {
-            menu_pane = r_perlui_menu; txt = "Options";
-            }
-    };
-}
-
-
-RESOURCE MENU_PANE r_perlui_menu
-{
-    items = {
-        MENU_ITEM {
-            command = EPerlAppCommandAbout;
-            txt = "About";
-        },
-        MENU_ITEM {
-            command = EPerlAppCommandTime;
-            txt = "Time";
-        },
-        MENU_ITEM {
-            command = EPerlAppCommandRunFile;
-            txt = "Run";
-        },
-        MENU_ITEM {
-            command = EPerlAppCommandOneLiner;
-            txt = "Oneliner";
-        },
-        MENU_ITEM {
-            command = EPerlAppCommandCopyright;
-            txt = "Copyright";
-            }
-        };
-}
-
-RESOURCE DIALOG r_perlui_oneliner_dialog
-{
-    title = "Title";
-    buttons = R_EIK_BUTTONS_CANCEL_OK;
-    flags = EEikDialogFlagWait;
-    items = {
-        DLG_LINE {
-            type = EEikCtEdwin;
-           prompt = "Prompt";
-            id = EPerlUiTextQueryInputField;
-            control = EDWIN {
-                width = 10;
-                maxlength = 128;
-            };
-        }
-    };
-}
-
diff --git a/symbian/PerlUiS90.rss b/symbian/PerlUiS90.rss
deleted file mode 100644 (file)
index 28f71dd..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-/* Copyright (c) 2006 Alexander Smishlajev. All rights reserved. */ 
-
-/* The PerlUi class is licensed under the same terms as Perl itself. */
-
-/* The S90 definitions. */
-
-NAME PERL
-
-#include <eikon.rh>
-#include <eikon.rsg>
-
-#include "PerlUi.hrh"
-#include "PerlApp.hrh"
-
-RESOURCE RSS_SIGNATURE
-{
-}
-
-RESOURCE TBUF r_default_document_name
-{
-    buf = "";
-}
-
-RESOURCE EIK_APP_INFO
-{
-    menubar = r_perlui_menubar;
-    cba = r_perlui_cba;
-}
-
-RESOURCE CBA r_perlui_cba
-{
-    buttons = {
-        CBA_BUTTON { id = EPerlAppCommandRunFile;        txt = "Run"; },
-        CBA_BUTTON { id = EPerlAppCommandOneLiner;       txt = "Oneliner"; },
-        CBA_BUTTON { id = EPerlAppCommandAboutCopyright; txt = "About"; },
-        CBA_BUTTON { id = EEikCmdExit;                   txt = "Exit"; }
-    };
-}
-
-
-RESOURCE MENU_BAR r_perlui_menubar
-{
-    titles = {
-        MENU_TITLE
-            {
-            menu_pane = r_perlui_menu; txt = "Options";
-            }
-    };
-}
-
-
-RESOURCE MENU_PANE r_perlui_menu
-{
-    items = {
-        MENU_ITEM {
-            command = EPerlAppCommandAbout;
-            txt = "About";
-        },
-        MENU_ITEM {
-            command = EPerlAppCommandTime;
-            txt = "Time";
-        },
-        MENU_ITEM {
-            command = EPerlAppCommandRunFile;
-            txt = "Run";
-        },
-        MENU_ITEM {
-            command = EPerlAppCommandOneLiner;
-            txt = "Oneliner";
-        },
-        MENU_ITEM {
-            command = EPerlAppCommandCopyright;
-            txt = "Copyright";
-            }
-        };
-}
-
-RESOURCE DIALOG r_perlui_oneliner_dialog
-{
-    title = "Title";
-    buttons = R_EIK_BUTTONS_CANCEL_OK;
-    flags = EEikDialogFlagWait;
-    items = {
-        DLG_LINE {
-            type = EEikCtEdwin;
-           prompt = "Prompt";
-            id = EPerlUiTextQueryInputField;
-            control = EDWIN {
-                width = 10;
-                maxlength = 128;
-            };
-        }
-    };
-}
-
diff --git a/symbian/PerlUiUIQ.rss b/symbian/PerlUiUIQ.rss
deleted file mode 100644 (file)
index 55362a9..0000000
+++ /dev/null
@@ -1,124 +0,0 @@
-/* Copyright (c) 200-2005 Nokia. All rights reserved. */ 
-
-/* The PerlUi class is licensed under the same terms as Perl itself. */
-
-/* The UIQ definitions. */
-
-NAME PERL
-
-#include <eikon.rh>
-#include <eikcore.rsg>
-#include <qikon.rh>
-
-#include "PerlUi.hrh"
-#include "PerlApp.hrh"
-
-RESOURCE RSS_SIGNATURE
-{
-}
-
-RESOURCE TBUF r_default_document_name
-{
-    buf = "";
-}
-
-RESOURCE EIK_APP_INFO
-{
-    menubar = r_perlui_menubar;
-    toolbar = r_perlui_menubar;
-}
-
-
-RESOURCE MENU_BAR r_perlui_menubar
-{
-    titles = {
-        MENU_TITLE
-            {
-            menu_pane = r_perlui_menu; txt = "Options";
-            }
-    };
-}
-
-
-RESOURCE MENU_PANE r_perlui_menu
-{
-    items = {
-        MENU_ITEM {
-            command = EPerlAppCommandAbout;
-            txt = "About";
-        },
-        MENU_ITEM {
-            command = EPerlAppCommandTime;
-            txt = "Time";
-        },
-        MENU_ITEM {
-            command = EPerlAppCommandOneLiner;
-            txt = "Oneliner";
-        },
-        MENU_ITEM {
-            command = EPerlAppCommandCopyright;
-            txt = "Copyright";
-            }
-        };
-}
-
-RESOURCE DIALOG r_perlui_oneliner_dialog
-{
-    title = "Title";
-    buttons = R_EIK_BUTTONS_CANCEL_OK;
-    flags = EEikDialogFlagWait;
-    items = {
-        DLG_LINE {
-            type = EEikCtEdwin;
-           prompt = "Prompt";
-            id = EPerlUiTextQueryInputField;
-            control = EDWIN {
-                width = 10;
-                maxlength = 128;
-            };
-        }
-    };
-}
-
-RESOURCE DIALOG r_perlui_ok_cancel_dialog
-{
-    title = "OK / Cancel ?";
-    buttons = r_perlui_ok_cancel_buttons;
-}
-
-RESOURCE DLG_BUTTONS r_perlui_ok_cancel_buttons
-{
-    buttons = {
-        DLG_BUTTON {
-            id = EEikBidOk;
-            button = CMBUT { txt = "Ok"; };
-        },
-        DLG_BUTTON {
-            id = EEikBidCancel;
-            button = CMBUT { txt = "Cancel"; };
-        }
-    };
-}
-
-RESOURCE DIALOG r_perlui_yes_no_dialog
-{
-    title = "Yes / No ?";
-    buttons = r_perlui_yes_no_buttons;
-}
-
-RESOURCE DLG_BUTTONS r_perlui_yes_no_buttons
-{
-    buttons = {
-        DLG_BUTTON {
-            id = EEikBidOk;
-            button = CMBUT { txt = "Yes"; };
-        },
-        DLG_BUTTON {
-            id = EEikBidCancel;
-            button = CMBUT { txt = "No"; };
-        }
-    };
-}
-
-
-
diff --git a/symbian/PerlUtil.cpp b/symbian/PerlUtil.cpp
deleted file mode 100644 (file)
index b979072..0000000
+++ /dev/null
@@ -1,117 +0,0 @@
-/* Copyright (c) 2004-2005 Nokia. All rights reserved. */
-/* The PerlUtil class is licensed under the same terms as Perl itself. */
-
-/* See PerlUtil.pod for documentation. */
-
-#define PERLUTIL_CPP
-
-#include "PerlUtil.h"
-
-#include <utf.h>
-
-#undef Copy
-#undef New
-
-EXPORT_C SV* PerlUtil::newSvPVfromTDesC8(const TDesC8& aDesC8) {
-  dTHX;
-  return newSVpvn((const char *)aDesC8.Ptr(), aDesC8.Size());
-}
-
-EXPORT_C void PerlUtil::setSvPVfromTDesC8(SV* sv, const TDesC8& aDesC8) {
-  dTHX;
-  sv_setpvn(sv, (const char *)aDesC8.Ptr(), aDesC8.Size());
-}
-
-EXPORT_C HBufC8* PerlUtil::newHBufC8fromSvPV(SV* sv) {
-  dTHX;
-  return PerlUtil::newHBufC8fromPVn((const U8 *)SvPV_nolen(sv), SvLEN(sv));
-}
-
-EXPORT_C void PerlUtil::setTDes8fromSvPV(TDes8& aDes8, SV* sv) {
-  dTHX;
-  PerlUtil::setTDes8fromPVn(aDes8, (const U8 *)SvPV_nolen(sv), SvLEN(sv));
-}
-
-EXPORT_C SV* PerlUtil::newSvPVfromTDesC16(const TDesC16& aDesC16) {
-  dTHX;
-  SV* sv = NULL;
-  HBufC8* hBuf8 = HBufC8::New(aDesC16.Length() * 3);
-
-  if (hBuf8) {
-    TPtr8 aPtr8(hBuf8->Des());
-    CnvUtfConverter::ConvertFromUnicodeToUtf8(aPtr8, aDesC16);
-    sv = newSVpvn((const char *)(hBuf8->Ptr()), hBuf8->Size());
-    delete hBuf8;
-    hBuf8 = NULL;
-    SvUTF8_on(sv);
-  }
-
-  return sv;
-}
-
-EXPORT_C void PerlUtil::setSvPVfromTDesC16(SV* sv, const TDesC16& aDesC16) {
-  dTHX;
-  HBufC8* hBuf8 = HBufC8::New(aDesC16.Length() * 3);
-
-  if (hBuf8) {
-    TPtr8 aPtr8(hBuf8->Des());
-    CnvUtfConverter::ConvertFromUnicodeToUtf8(aPtr8, aDesC16);
-    sv_setpvn(sv, (const char *)(hBuf8->Ptr()), hBuf8->Size());
-    delete hBuf8;
-    hBuf8 = NULL;
-    SvUTF8_on(sv);
-  }
-}
-
-EXPORT_C HBufC16* PerlUtil::newHBufC16fromSvPV(SV* sv) {
-  dTHX;
-  return PerlUtil::newHBufC16fromPVn((const U8 *)SvPV_nolen(sv), SvLEN(sv), SvUTF8(sv));
-}
-
-void PerlUtil::setTDes16fromSvPV(TDes16& aDes16, SV* sv) {
-  dTHX;
-  PerlUtil::setTDes16fromPVn(aDes16, (const U8 *)SvPV_nolen(sv), SvLEN(sv), SvUTF8(sv));
-}
-
-EXPORT_C HBufC8* PerlUtil::newHBufC8fromPVn(const U8* s, STRLEN n) {
-  HBufC8* aBuf8 = HBufC8::New(n);
-  if (aBuf8) {
-    TPtr8 ptr8 = aBuf8->Des();
-    ptr8.Copy(s, n);
-  }
-  return aBuf8;
-}
-
-EXPORT_C void PerlUtil::setTDes8fromPVn(TDes8& aDes8, const U8* s, STRLEN n) {
-  // TODO: grow aDes8 if needed
-  aDes8.Copy(s, n);
-}
-
-EXPORT_C HBufC16* PerlUtil::newHBufC16fromPVn(const U8 *s, STRLEN n, bool utf8) {
-  HBufC16 *hBuf16 = HBufC16::New(n); // overallocate
-
-  if (hBuf16) {
-    if (utf8) {
-      TPtr16 aPtr16(hBuf16->Des());
-      TPtrC8 aPtrC8(s, n);
-      CnvUtfConverter::ConvertToUnicodeFromUtf8(aPtr16, aPtrC8);
-    } else {
-      TPtrC8 aPtrC8(s, n);
-      hBuf16->Des().Copy(aPtrC8);
-    }
-  }
-
-  return hBuf16;
-}
-
-EXPORT_C void PerlUtil::setTDes16fromPVn(TDes16& aDes16, const U8 *s, STRLEN n, bool utf8) {
-  // TODO: grow aDes16 if needed
-  if (utf8) {
-    TPtrC8 aPtrC8(s, n);
-    CnvUtfConverter::ConvertToUnicodeFromUtf8(aDes16, aPtrC8);
-  } else {
-    TPtrC8 aPtrC8(s, n);
-    aDes16.Copy(aPtrC8);
-  }
-}
diff --git a/symbian/PerlUtil.h b/symbian/PerlUtil.h
deleted file mode 100644 (file)
index 1e7d292..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-/* Copyright (c) 2004-2005 Nokia. All rights reserved. */
-
-/* The PerlUtil class is licensed under the same terms as Perl itself. */
-
-/* See PerlUtil.pod for documentation. */
-
-#ifndef __PerlUtil_h__
-#define __PerlUtil_h__
-
-#include <e32base.h>
-
-#include "EXTERN.h"
-#include "perl.h"
-
-class PerlUtil {
- public:
-
-  IMPORT_C static SV*       newSvPVfromTDesC8(const TDesC8& aDes);
-  IMPORT_C static void      setSvPVfromTDesC8(SV* sv, const TDesC8& aDes);
-  IMPORT_C static HBufC8*   newHBufC8fromSvPV(SV* sv);
-  IMPORT_C static void      setTDes8fromSvPV(TDes8& aDes8, SV* sv);
-
-  IMPORT_C static SV*       newSvPVfromTDesC16(const TDesC16& aDes);
-  IMPORT_C static void      setSvPVfromTDesC16(SV* sv, const TDesC16& aDes);
-  IMPORT_C static HBufC16*  newHBufC16fromSvPV(SV* sv);
-  IMPORT_C static void      setTDes16fromSvPV(TDes16& aDes16, SV* sv);
-
-  IMPORT_C static HBufC8*   newHBufC8fromPVn(const U8* s, STRLEN n);
-  IMPORT_C static void      setTDes8fromPVn(TDes8& aDes8, const U8* s, STRLEN n);
-  IMPORT_C static HBufC16*  newHBufC16fromPVn(const U8* s, STRLEN n, bool utf8);
-  IMPORT_C static void      setTDes16fromPVn(TDes16& aDes16, const U8* s, STRLEN n, bool utf8);
-};
-
-#endif /* #ifndef __PerlUtil_h__ */
-
-
diff --git a/symbian/PerlUtil.pod b/symbian/PerlUtil.pod
deleted file mode 100644 (file)
index 3215d19..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-=head1 NAME
-
-PerlUtil - a C++ utility class for Perl/Symbian
-
-=head1 SYNOPSIS
-
-   // in your App.mmp
-   USERINCLUDE \symbian\perl\x.y.z\include
-   LIBRARY     perlXYZ.lib
-
-   // in your App
-   #include "PerlUtil.h" // includes also EXTERN.h and perl.h
-
-   // Static methods for moving between Perl strings (SvPV)
-   // and Symbian strings (HBufC and TDes).
-
-   static SV*      newSvPVfromTDesC8(const TDesC8& aDes);
-   static void     setSvPVfromTDesC8(SV* sv, const TDesC8& aDes);
-   static HBufC8*  newHBufC8fromSvPV(SV* sv);
-   static void     setTDes8fromSvPV(TDes8* aDes8, SV* sv);
-
-   static SV*      newSvPVfromTDesC16(const TDesC16& aDes);
-   static void     setSvPVfromTDesC16(SV* sv, const TDesC16& aDes);
-   static HBufC16* newHBufC16fromSvPV(SV* sv);
-   static void     setTDes16fromSvPV(TDes16* aDes16, SV* sv);
-
-   static HBufC8*  newHBufC8fromPVn(const U8* s, STRLEN n);
-   static void     setTDes8fromPVn(TDes8* aDes8, const U8* s, STRLEN n);
-   static HBufC16* newHBufC16fromPVn(const U8* s, STRLEN n, bool utf8);
-   static void  setTDes16fromPVn(TDes16* aDes16, const U8* s, STRLEN n);
-
-   // An example
-
-   const U8* s = (const U8 *)"foo";
-   HBufC16* b = PerlUtil::newHBufC16fromPVn(s, 3, 0);
-   someCallWithConstTDesCRefArgument(*b);
-   delete b;
-
-=cut
-
-
-
diff --git a/symbian/README b/symbian/README
deleted file mode 100644 (file)
index 95ed303..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-The PerlApp* files are a demonstration application for the CPerlBase
-class, which is defined and implemented by the PerlBase* files. 
-The rest of the files are part of the Symbian base port.
-
-All files are Copyright (c) Nokia, 2004-2005, all rights reserved,
-and licensed under the same terms as Perl itself.
-
-Once the 'sdkinstall' make target has been run in the top level,
-the PerlApp can be built using the standard Symbian way:
-
-       bldmake bldfiles
-       abld build wins udeb
-       abld build thumb urel
-
-and then packaged into a SIS by:
-
-       makesis PerlApp.pkg
-
--- 
-
diff --git a/symbian/TODO b/symbian/TODO
deleted file mode 100644 (file)
index ac8ee3d..0000000
+++ /dev/null
@@ -1,198 +0,0 @@
-=encoding utf8
-
-=head1 BASE PORT
-
-=head2 Console
-
-- The Console only does "ASCII" input: e.g. pressing the "2"
-  key five times, "aaaaa", does not produce "ä" ("a diaeresis"),
-  but instead the "2" key rotates through "abc2abc2...".
-  This is a pity because the Console is actually capable of full
-  Unicode input and output (if you have the fonts, that is).  You
-  can verify this by entering e.g. the euro character, which is
-  U+20AC, well beyond U+00FF.  I don't know why the full repertoire
-  of the keyboard is not available.
-- Enhance the console? (line editing, full x-y movement, history)
-- The role of the console needs to be rethought: the best way
-  would be to have the console visible in the same screen as
-  the GUI elements (an "embedded console"?)
-
-=head2 Core Language
-
-- the $^E does not work
-- select() does not work (not our fault)
-- starting external application: what now (0.1.0) works is:
-  - system("app");
-  - system("app&");
-  - and those with arguments:
-    - system("app arg1 arg2")
-    - system("app arg1 arg2 &")
-    but remember that a Symbian process does get only argv[0]
-    and argv[1]: all the arguments of the application are passed
-    in as a single argument, the second one ("arg1 arg2" in the above)
-  What does not work:
-  - I/O redirection
-  - piped open, in either direction
-  - qx/backtick/`
-  - fork/wait (these unlikely to ever work as in POSIX)
-  - IO redirection or filename globbing in system()
-    (since there is no POSIX shell beneath)
-  What might work in future:
-  - some I/O redirection
-  - exec() might be made to work
-  - Symbian::spawn("cmd args") returning a process id (what does Win32 do?) 
-  - Symbian::waitpid($spawned_pid)
-
-=head2 Platform
-
-- in S60 1.2 (at least in 3650 Nokia 3650 v3.11) setjmp/longjmp is
-  fragile (see Symbian FAQ-0929), intensive debugging and fix needed
-
-=head2 Unicode
-
-- Symbian has Unicode filenames, and Unicode all over the place.
-- Encode and the use of Symbian Unicode in general
-  tie into the overall usefulness of PerlIO.
-
-=head2 Portability
-
-- Slash versus Backslash: where does one need to use "\\"?
-  writing Perl applications, where can one get away with using "/" ?
-
-=head2 Build
-
-- make xsbuild.pl much more robust (for building external extensions)
-  (see symbian\ext\README and symbian\ext\Moped\Msg\README)
-- now the .mmp functions both as input and as output - bad
-- MakeMaker?  Pure PM, PM + XS?
-- currently the PerlApp UID is in both config.pl (hardwired) and
-  in makesis.pl (computed), this is quite error prone
-- Enable building also under Cygwin? (could be really hard,
-  the Symbian SDKs pretty much assume cmd.exe)
-
-=head1 PACKAGING
-
-- subdivide perlext.sis?
-- pm-stripper: strip pod and comments, while inserting the appropriate
-  #line commands to keep linenumbers in sync.  Shaves off easily 50%
-  of the code, making install packages smaller.
-- Get MakeMaker to create SIS packages?  In non-Win32?
-- Symbian has APIs for opening .zip files
-- Investigate Autrijus Tang's PAR format
-  http://www.autrijus.org/par-intro/
-
-=head1 PerlBase
-
-- review for proper Symbian coding practices
-
-=head1 PerlApp
-
-- In "Run" see how one could show also the file extensions.
-- How to allow passing command line options to scripts being run?
-- Terminate/Pause menu entries (to be used while the script is running)?
-- review for proper Symbian coding practices
-
-=head2 All UIs
-
-- Make it possible to call UI elements (or any other Symbianic
-  asynchronous services) from Perl.
-
-  There is now a sample of enabling calling CPerlUi::TextQueryDialogL()
-  from Perl as PerlApp::TextQuery(), see symbian_utils.c.  This, however,
-  does not work: calling the dialog code blocks so that the screen is not
-  redrawn at all.  Perl should do both: "yield" so that the GUI framework
-  can redraw, but in the meanwhile Perl should wait for the completion
-  (OK or Cancel) of the dialog, but Perl must not exit the current PL_op.
-  Welcome to the wonderful world of cooperative multitasking.  The right
-  solution surely involves Active Objects.  The problem may require having
-  a different Perl op dispatch loop than the standard and debug ones in
-  run.c and dump.c.
-
-- menu/toolbar support
-- selection lists (single cf multi cf radio)
-- on/off (special case of two-item radio selection list)
-- forms (multicontrols)
-- "secret editor" (special case of text query)
-
-=head2 Series 60
-
-- in S60 2.6 (at least in Nokia 6630 v4.03.11) launching scripts via
-  FExplorer does not open up the console
-
-=head2 Series 80
-
-- On exit "PerlApp" gets Symbian USER Panic 44: "This panic is raised
-  by the Free() and FreeZ() member functions of an RHeap. It is caused
-  when the cell being freed overlaps the next cell on the free list
-  (i.e. the first cell on the free list with an address higher than the
-  one being freed)."  Reason unknown.
-- Hotkey Newline so that it functions as 'OK' in dialogs
-
-=head2 UIQ
-
-- UIQ 3.0? UIQ 2.0? (now only tried in UIQ 2.1)
-- UIQ, at least UIQ 2.1, does not have "file select dialogs" since
-  "files" are supposed to be hidden from the user.  Therefore, no
-  "Run" in PerlApp.  (For similar stylistic reasons there is no "Exit".)
-- Long notes (e.g. the EPerlAppCommandAbout) are shown badly truncated.
-
-=head1 CPAN LIBRARIES
-
-- Include/Package more modules (or work harder on getting CPAN.pm working?)
-  (but note that lib/**/*.pm is 3.5 megabytes, probably not worth including
-   all of it, even after pm-stripping):
-       - libnet
-       - Bundle::CPAN
-               - Archive::Tar (now included in 5.9.x)
-               - Term::ReadKey (useless?)
-               - Term::ReadLine (useless?)
-       - Bundle::LWP
-               - URI
-               - HTML::TagSet
-               - HTML::Parser
-                       - HTML::Entities
-               - HTML::HeadParser
-               - LWP
-       - Crypt::SSLeay? (ssl?)
-       - IMAP?
-       - Net::Telnet?
-       - Archive::Zip?
-       - Mail::Send?
-       - Date::Calc?
-       - XML? XML::Simple? (expat?) (there is builtin xml support)
-       - RSS?
-       - DBI (DBD::???)
-       - DBD::SQLite? (sqlite?)
-       - SOAP? XML-RPC?
-
-=head1 CORE LIBRARIES
-
-- Fix Devel::PPPort (worth it?) (Note that there is D::PPP 3.x out by now)
-- Fix Encode to not to have writeable data: seems to be tricky indeed
-  because of copious global non-const data.
-- Verify that the modified File::Spec::Win32 does work in Symbian.
-  (File::Spec::Epoc does not seem to be relevant?)
-- What does Cwd really do since the concept of cwd is a bit fuzzy in Symbian.
-- What should Sys::Hostname return?  GPRS? BT? WLAN?
-- ByteLoader problem: byterun.c does not see VERSION and XS_VERSION.
-- POSIX problem: STDLIB POSIX is not that POSIX.
-
-=head1 REGRESSION SUITE
-
-- how to run the standard test suite on a Symbian device?
-
-=head1 FUTURE POSSIBILITIES
-
-- GUI support (problematic that the MVC model enforces an "application")
-  (name suggestion: Moped::Gui)
-  (see above for the need of sorting out the Active Objectedness)
-- Messaging support (sms:, mms:, mailto:, irdaobex:, btobex:,
-  cell location, WLAN)
-  (name suggestion: Moped::Msg)
-- PDA support (address book)
-  (name suggestion: Moped::PDA)
-- Device support (memory, camera)
-  (name suggestion: Moped::Dev::Memory, Moped::Dev::Drives, Moped::Dev::Camera)
-- Phone APIs (e.g. how to catch an incoming call: BIO messaging)
-- Remote console (Bluetooth/IR/USB?)
-
diff --git a/symbian/bld.inf b/symbian/bld.inf
deleted file mode 100644 (file)
index c448967..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-PRJ_MMPFILES
-PerlApp.mmp
-PerlRecog.mmp
-
diff --git a/symbian/config.pl b/symbian/config.pl
deleted file mode 100644 (file)
index 2671df6..0000000
+++ /dev/null
@@ -1,994 +0,0 @@
-#!/usr/bin/perl -w
-
-# Copyright (c) 2004-2005 Nokia.  All rights reserved.
-# This utility is licensed under the same terms as Perl itself.
-
-use strict;
-use lib "symbian";
-
-print "Configuring...\n";
-print "Configuring with: Perl version $] ($^X)\n";
-
-do "sanity.pl" or die $@;
-
-my %VERSION = %{ do "version.pl" or die $@ };
-
-printf "Configuring for:  Perl version $VERSION{REVISION}.%03d%03d\n",
-  $VERSION{VERSION}, $VERSION{SUBVERSION};
-
-my $VERSION = "$VERSION{REVISION}$VERSION{VERSION}$VERSION{SUBVERSION}";
-my $R_V_SV  = "$VERSION{REVISION}.$VERSION{VERSION}.$VERSION{SUBVERSION}";
-
-my ($SYMBIAN_ROOT, $SYMBIAN_VERSION, $SDK_NAME, $SDK_VARIANT, $SDK_VERSION) =
-    @{ do "sdk.pl" or die $@ };
-my %PORT = %{ do "port.pl" or die $@ };
-
-if ($SYMBIAN_ROOT eq 'C:\Symbian\Series60_1_2_CW') {
-    ( $SYMBIAN_VERSION, $SDK_VERSION ) = qw(6.1 1.2);
-}
-
-my $WIN = $ENV{WIN} ; # 'wins', 'winscw' (from sdk.pl)
-my $ARM = 'thumb';    # 'thumb', 'armv5'
-my $S60SDK = $ENV{S60SDK}; # qw(1.2 2.0 2.1 2.6) (from sdk.pl)
-    if ($SDK_VARIANT eq 'S60' && $S60SDK =~ /^5\./) {
-        $ARM = 'armv5';    # 'thumb', 'armv5' # Configuration for S60 5th Edition SDK v1.0
-    }
-my $S80SDK = $ENV{S80SDK}; # qw(2.0) (from sdk.pl)
-my $S90SDK = $ENV{S90SDK}; # qw(1.1) (from sdk.pl)
-my $UIQSDK = $ENV{UIQSDK}; # qw(2.0 2.1) (from sdk.pl)
-
-my $UREL = $ENV{UREL}; # from sdk.pl
-$UREL =~ s/-ARM-/$ARM/;
-my $UARM = $ENV{UARM}; # from sdk.pl
-
-die "$0: SDK not recognized\n"
-  if !defined($SYMBIAN_VERSION) ||
-     !defined($SDK_VERSION) ||
-     (!defined($S60SDK) && !defined($S80SDK) && !defined($S90SDK) && !defined($UIQSDK));
-
-die "$0: does not know which Windows compiler to use\n"
-    unless defined $WIN;
-
-print "Symbian $SYMBIAN_VERSION SDK $SDK_VARIANT $SDK_VERSION ($WIN) installed at $SYMBIAN_ROOT\n";
-
-my $CWD = do "cwd.pl" or die $@;
-print "Build directory $CWD\n";
-
-die "$0: '+' in cwd does not work with Series 60 SDK 1.2\n"
-    if defined $S60SDK && $S60SDK eq '1.2' && $CWD =~ /\+/;
-
-my @unclean;
-my @mmp;
-
-sub create_mmp {
-    my ( $target, $type, @x ) = @_;
-    my $miniperl = $target eq 'miniperl';
-    my $perl     = $target eq 'perl';
-    my $mmp        = "$target.mmp";
-    my $targetpath = $miniperl
-      || $perl ? "TARGETPATH\t\\System\\Apps\\Perl" : "";
-    if ( open( my $fh, '>', $mmp ) ) {
-        print "\t$mmp\n";
-        push @mmp,     $mmp;
-        push @unclean, $mmp;
-        print $fh <<__EOF__;
-TARGET         $target.$type
-TARGETTYPE     $type
-__EOF__
-        if ($SDK_VARIANT eq 'S60' && $S60SDK =~ /^5\./) {
-            print $fh "UID\t0 0xEA3E9181\n" if $miniperl;
-            print $fh "UID\t0 0xED04DD86\n" if $perl;
-            print $fh "UID\t0x1000008d 0xE8667302\n" unless $miniperl || $perl; 
-            print $fh "CAPABILITY\tNONE\n";
-        } else {
-            print $targetpath; 
-            print $fh "EPOCHEAPSIZE\t1024 8388608"; 
-            print $fh "EPOCSTACKSIZE\t65536"; 
-        }
-        print $fh <<__EOF__;
-EXPORTUNFROZEN
-SRCDBG
-__EOF__
-        if ($SDK_VARIANT eq 'S60') {
-            print $fh "MACRO\t__SERIES60__\n";
-            print $fh "MACRO\t__SERIES60_1X__\n" if $S60SDK =~ /^1\./;
-            print $fh "MACRO\t__SERIES60_2X__\n" if $S60SDK =~ /^2\./;
-            print $fh "MACRO\t__SERIES60_3X__\n" if $S60SDK =~ /^5\./; 
-       }
-        if ($SDK_VARIANT eq 'S80') {
-           print $fh "MACRO\t__SERIES80__\n";
-           print $fh "MACRO\t__SERIES80_1X__\n" if $S80SDK =~ /^1\./;
-           print $fh "MACRO\t__SERIES80_2X__\n" if $S80SDK =~ /^2\./;
-       }
-        if ($SDK_VARIANT eq 'S90') {
-           print $fh "MACRO\t__SERIES90__\n";
-       }
-        if ($SDK_VARIANT eq 'UIQ') {
-           print $fh "MACRO\t__UIQ__\n";
-           print $fh "MACRO\t__UIQ_1X__\n" if $UIQSDK =~ /^1\./;
-           print $fh "MACRO\t__UIQ_2X__\n" if $UIQSDK =~ /^2\./;
-       }
-        my ( @c, %c );
-        @c = map  { glob } qw(*.c);       # Find the .c files.
-        @c = map  { lc } @c;              # Lowercase the names.
-        @c = grep { !/malloc\.c/ } @c;    # Use the system malloc.
-        @c = grep { !/main\.c/ } @c;      # main.c must be explicit.
-        push @c, map { lc } @x;
-        @c = map { s:^\.\./::; $_ } @c;    # Remove the leading ../
-        @c = map { $c{$_}++ } @c;          # Uniquefy.
-        @c = sort keys %c;                 # Beautify.
-
-        for (@c) {
-            print $fh "SOURCE\t\t$_\n";
-        }
-        print $fh <<__EOF__;
-SOURCEPATH     $CWD
-USERINCLUDE    $CWD
-USERINCLUDE    $CWD\\ext\\DynaLoader
-USERINCLUDE    $CWD\\symbian
-SYSTEMINCLUDE  \\epoc32\\include\\libc
-SYSTEMINCLUDE  \\epoc32\\include
-LIBRARY                euser.lib
-LIBRARY                estlib.lib
-LIBRARY                eikcore.lib
-LIBRARY                cone.lib
-LIBRARY                efsrv.lib
-__EOF__
-        if ( $miniperl || $perl || $type eq 'dll' ) {
-            print $fh <<__EOF__;
-LIBRARY                charconv.lib
-LIBRARY                hal.lib
-LIBRARY                estor.lib
-__EOF__
-        }
-       if ($SDK_VARIANT =~ /^S[689]0$/) {
-            print $fh <<__EOF__;
-LIBRARY                commonengine.lib
-__EOF__
-       }
-       if (defined $S60SDK) {
-           print $fh <<__EOF__;
-LIBRARY                avkon.lib
-LIBRARY                commondialogs.lib 
-__EOF__
-        }
-       if ((defined $S80SDK) or (defined $S90SDK)) {
-           print $fh <<__EOF__;
-LIBRARY                eikctl.lib
-LIBRARY                eikcoctl.lib
-LIBRARY                eikdlg.lib
-LIBRARY                ckndlg.lib
-__EOF__
-        }
-       if (defined $UIQSDK) {
-           print $fh <<__EOF__;
-LIBRARY                eikctl.lib
-LIBRARY                eikcoctl.lib
-LIBRARY                eikdlg.lib
-LIBRARY                qikctl.lib
-__EOF__
-        }
-        if ( $type eq 'exe' ) {
-            print $fh <<__EOF__;
-STATICLIBRARY  ecrt0.lib
-__EOF__
-        }
-        if ($miniperl) {
-            print $fh <<__EOF__;
-MACRO          PERL_MINIPERL
-__EOF__
-        }
-        if ($perl) {
-            print $fh <<__EOF__;
-MACRO          PERL_PERL
-__EOF__
-        }
-        print $fh <<__EOF__;
-MACRO          PERL_CORE
-MACRO          MULTIPLICITY
-MACRO          PERL_IMPLICIT_CONTEXT
-__EOF__
-        unless ( $miniperl || $perl ) {
-            print $fh <<__EOF__;
-MACRO          PERL_GLOBAL_STRUCT
-MACRO          PERL_GLOBAL_STRUCT_PRIVATE
-__EOF__
-    }
-        unless ($miniperl || $perl ) {
-            if ($SDK_VARIANT eq 'S60' && $S60SDK =~ /^5\./) {
-                print $fh "START RESOURCE\tsymbian\\PerlUi.rss\nEND\n";
-            } else {
-                print $fh "RESOURCE\tsymbian\\PerlUi.rss";
-            }
-       }
-        close $fh;
-    }
-    else {
-        warn "$0: failed to open $mmp for writing: $!\n";
-    }
-}
-
-sub create_bld_inf {
-    if ( open( BLD_INF, '>', 'bld.inf' ) ) {
-        print "\tbld.inf\n";
-        push @unclean, "bld.inf";
-        print BLD_INF <<__EOF__;
-PRJ_PLATFORMS
-${WIN} ${ARM}
-PRJ_MMPFILES
-__EOF__
-        for (@mmp) { print BLD_INF $_, "\n" }
-        close BLD_INF;
-    }
-    else {
-        warn "$0: failed to open bld.inf for writing: $!\n";
-    }
-}
-
-my %config;
-
-sub load_config_sh {
-    if ( open( CONFIG_SH, '<', 'symbian/config.sh' ) ) {
-        while (<CONFIG_SH>) {
-            if (/^(\w+)=['"]?(.*?)["']?$/) {
-                my ( $var, $val ) = ( $1, $2 );
-                $val =~ s/x.y.z/$R_V_SV/gi;
-                $val =~ s/thumb/$ARM/gi;
-               $val = "C:$val" if (defined($S90SDK) and ($val =~ /^(\/|\\\\)system[\/\\]/i));
-                $val = "'$SYMBIAN_VERSION'" if $var eq 'osvers';
-                $val = "'$SDK_VERSION'"     if $var eq 'sdkvers';
-                $config{$var} = $val;
-            }
-        }
-        close CONFIG_SH;
-    }
-    else {
-        warn "$0: failed to open symbian\\config.sh for reading: $!\n";
-    }
-}
-
-sub create_config_h {
-    load_config_sh();
-    if ( open( CONFIG_H, '>', 'config.h' ) ) {
-        print "\tconfig.h\n";
-        push @unclean, "config.h";
-        if ( open( CONFIG_H_SH, '<', 'config_h.SH' ) ) {
-            while (<CONFIG_H_SH>) {
-                last if /\#ifndef _config_h_/;
-            }
-            print CONFIG_H <<__EOF__;
-/*
- * Package name      : perl
- * Source directory  : .
- * Configuration time: 
- * Configured by     : 
- * Target system     : symbian
- */
-
-#ifndef _config_h_
-__EOF__
-            while (<CONFIG_H_SH>) {
-                last if /!GROK!THIS/;
-                s/\$(\w+)/exists $config{$1} ? $config{$1} : (warn "$0: config.sh missing '$1'\n", "")/eg;
-                s/^#undef\s+(\S+).+/#undef $1/g;
-                s:\Q/**/::;
-                print CONFIG_H;
-            }
-            close CONFIG_H_SH;
-        }
-        else {
-            warn "$0: failed to open ../config_h.SH for reading: $!\n";
-        }
-        close CONFIG_H;
-    }
-    else {
-        warn "$0: failed to open config.h for writing: $!\n";
-    }
-}
-
-sub create_DynaLoader_cpp {
-    print "\text\\DynaLoader\\DynaLoader.cpp\n";
-    system(
-q[xsubpp ext\DynaLoader\dl_symbian.xs >ext\DynaLoader\DynaLoader.cpp]
-      ) == 0
-      or die "$0: creating DynaLoader.cpp failed: $!\n";
-    push @unclean, 'ext\DynaLoader\DynaLoader.cpp';
-
-}
-
-sub create_symbian_port_h {
-    print "\tsymbian\\symbian_port.h\n";
-    if ( open( SYMBIAN_PORT_H, '>', 'symbian/symbian_port.h' ) ) {
-       my ($sdkmajor, $sdkminor);
-        if ($SDK_VARIANT eq 'S60') {
-           $S60SDK =~ /^(\d+)\.(\d+)$/;
-           ($sdkmajor, $sdkminor) = ($1, $2);
-       }
-        if ($SDK_VARIANT eq 'S80') {
-           $S80SDK =~ /^(\d+)\.(\d+)$/;
-           ($sdkmajor, $sdkminor) = ($1, $2);
-       }
-        if ($SDK_VARIANT eq 'S90') {
-           $S90SDK =~ /^(\d+)\.(\d+)$/;
-           ($sdkmajor, $sdkminor) = ($1, $2);
-       }
-        if ($SDK_VARIANT eq 'UIQ') {
-           $UIQSDK =~ /^(\d+)\.(\d+)$/;
-           ($sdkmajor, $sdkminor) = ($1, $2);
-       }
-        print SYMBIAN_PORT_H <<__EOF__;
-/* Copyright (c) 2004-2005, Nokia.  All rights reserved. */
-
-#ifndef __symbian_port_h__
-#define __symbian_port_h__
-
-#define PERL_SYMBIANPORT_MAJOR $PORT{dll}->{MAJOR}
-#define PERL_SYMBIANPORT_MINOR $PORT{dll}->{MINOR}
-#define PERL_SYMBIANPORT_PATCH $PORT{dll}->{PATCH}
-
-#define PERL_SYMBIANSDK_FLAVOR L"$SDK_VARIANT"
-#define PERL_SYMBIANSDK_MAJOR  $sdkmajor
-#define PERL_SYMBIANSDK_MINOR  $sdkminor
-
-#endif /* #ifndef __symbian_port_h__ */
-__EOF__
-        close(SYMBIAN_PORT_H);
-       push @unclean, 'symbian\symbian_port.h';
-    }
-    else {
-        warn "$0: failed to open symbian/symbian_port.h for writing: $!\n";
-    }
-}
-
-sub create_perlmain_c {
-    print "\tperlmain.c\n";
-    system(
-q[perl -ne "print qq[    char *file = __FILE__;\n] if /dXSUB_SYS/;print unless /PERL_UNUSED_CONTEXT/;print qq[    newXS(\"DynaLoader::boot_DynaLoader\", boot_DynaLoader, file);\n] if /dXSUB_SYS/;print qq[EXTERN_C void boot_DynaLoader (pTHX_ CV* cv);\n] if /Do not delete this line/" miniperlmain.c > perlmain.c]
-      ) == 0
-      or die "$0: Creating perlmain.c failed: $!\n";
-    push @unclean, 'perlmain.c';
-}
-
-sub create_PerlApp_pkg {
-    print "\tsymbian\\PerlApp.pkg\n";
-    if ( open( PERLAPP_PKG, '>', 'symbian\\PerlApp.pkg' ) ) {
-       my $ProductId =
-           defined $S60SDK ?
-qq[;Supports Series 60 v0.9\n(0x101F6F88), 0, 0, 0, {"Series60ProductID"}\n] :
-            defined $S80SDK ?
-qq[;Supports Series 80 v2.0\n(0x101F8ED2), 0, 0, 0, {"Series80ProductID"}\n] :
-            defined $S90SDK ?
-qq[;Supports Series 90 v1.1\n(0x101FBE05), 0, 0, 0, {"Series90ProductID"}\n] :
-            defined $UIQSDK && $SDK_VERSION =~  /^(\d)\.(\d)$/ ?
-qq[;Supports UIQ v2.1\n(0x101F617B), $1, $2, 0, {"UIQ21ProductID"}\n] :
-            ";Supports Series NN";
-       my $APPS = $UREL;
-       if (($SDK_VARIANT eq 'S60' && $SDK_VERSION ne '1.2' || $WIN eq 'winscw') || defined $S80SDK || defined $S90SDK) { # Do only if not in S60 1.2 VC.
-           $APPS =~ s!\\epoc32\\release\\(.+)\\$UARM$!\\epoc32\\data\\z\\system\\apps\\PerlApp!i;
-       }
-       # TODO: in S60 3.0 there will be no more recognizers.
-       my $mdl = qq["$UREL\\PerlRecog.mdl"-"!:\\system\\recogs\\PerlRecog.mdl";];
-       my $AIF = $SDK_VARIANT =~ /^S[689]0/ ? qq["$APPS\\PerlApp.aif"-"!:\\system\\apps\\PerlApp\\PerlApp.aif"] : "";
-        print PERLAPP_PKG <<__EOF__;
-; !!!!!!   DO NOT EDIT THIS FILE   !!!!!!
-; This file is built by symbian\\config.pl.
-; Any changes made here will be lost!
-;
-; PerlApp.pkg
-;
-; Note that the demo_pl needs to be run to create the demo .pl scripts.
-;
-; Languages
-&EN;
-
-; Standard SIS file header
-#{"PerlApp"},(0x102015F6),0,2,0
-
-$ProductId
-
-; Files
-"$UREL\\PerlApp.APP"-"!:\\system\\apps\\PerlApp\\PerlApp.app"
-$mdl
-"$APPS\\PerlApp.rsc"-"!:\\system\\apps\\PerlApp\\PerlApp.rsc"
-$AIF
-__EOF__
-        if ( open( DEMOS, '-|', "perl symbian\\demo_pl list" ) ) {
-            while (<DEMOS>) {
-                chomp;
-               if (defined $S90SDK) {
-                    print PERLAPP_PKG qq["$_"-"!:\\Mydocs\\Perl\\$_"\n];
-               } else {
-                    print PERLAPP_PKG qq["$_"-"!:\\Perl\\$_"\n];
-               }
-            }
-            close(DEMOS);
-        }
-        close(PERLAPP_PKG);
-    }
-    else {
-        die "$0: symbian\\PerlApp.pkg: $!\n";
-    }
-    push @unclean, 'symbian\PerlApp.pkg';
-}
-
-print "Creating...\n";
-create_mmp(
-    'miniperl',             'exe',
-    'miniperlmain.c',       'symbian\symbian_stubs.c',
-    'symbian\PerlBase.cpp',
-    'symbian\PerlUi.cpp',
-    'symbian\PerlUtil.cpp',
-    'symbian\symbian_utils.cpp',
-);
-create_mmp(
-    "perl",                      'exe',
-    'perlmain.c',                'symbian\symbian_stubs.c',
-    'symbian\symbian_utils.cpp',
-    'symbian\PerlBase.cpp',
-    'symbian\PerlUi.cpp',
-    'symbian\PerlUtil.cpp',
-    'ext\DynaLoader\DynaLoader.cpp',
-);
-
-create_mmp(
-    "perl$VERSION",              'dll',
-    'symbian\symbian_dll.cpp',   'symbian\symbian_stubs.c',
-    'symbian\symbian_utils.cpp',
-    'symbian\PerlBase.cpp',
-    'symbian\PerlUi.cpp',
-    'symbian\PerlUtil.cpp',
-    'ext\DynaLoader\DynaLoader.cpp',
-);
-
-create_bld_inf();
-create_config_h();
-create_perlmain_c();
-create_symbian_port_h();
-create_DynaLoader_cpp();
-create_PerlApp_pkg();
-
-if ( open( PERLAPP_MMP, '>', 'symbian/PerlApp.mmp' ) ) {
-    my @MACRO;
-    my @LIB;
-    push @MACRO, 'PERL_IMPLICIT_CONTEXT';
-    push @MACRO, 'MULTIPLICITY';
-    if (defined $S60SDK) {
-        push @MACRO, '__SERIES60__';
-        push @MACRO, '__SERIES60_1X__' if $S60SDK =~ /^1\./;
-        push @MACRO, '__SERIES60_2X__' if $S60SDK =~ /^2\./;
-       push @LIB, <<__EOF__;
-LIBRARY                avkon.lib
-LIBRARY                commondialogs.lib 
-__EOF__
-    }
-    if (defined $S80SDK) {
-        push @MACRO, '__SERIES80__';
-        push @MACRO, '__SERIES80_1X__' if $S80SDK =~ /^1\./;
-        push @MACRO, '__SERIES80_2X__' if $S80SDK =~ /^2\./;
-       push @LIB, <<__EOF__;
-LIBRARY                eikctl.lib
-LIBRARY                eikcoctl.lib
-LIBRARY                eikdlg.lib
-LIBRARY                ckndlg.lib
-__EOF__
-    }
-    if (defined $S90SDK) {
-        push @MACRO, '__SERIES90__';
-       push @LIB, <<__EOF__;
-LIBRARY                eikctl.lib
-LIBRARY                eikcoctl.lib
-LIBRARY                eikdlg.lib
-LIBRARY                ckndlg.lib
-__EOF__
-    }
-    if (defined $UIQSDK) {
-        push @MACRO, '__UIQ__';
-        push @MACRO, '__UIQ_1X__' if $UIQSDK =~ /^1\./;
-        push @MACRO, '__UIQ_2X__' if $UIQSDK =~ /^2\./;
-       push @LIB, <<__EOF__;
-LIBRARY                eikctl.lib
-LIBRARY                eikcoctl.lib
-LIBRARY                eikdlg.lib
-LIBRARY                qikctl.lib
-__EOF__
-    }
-    print PERLAPP_MMP <<__EOF__;
-// !!!!!!   DO NOT EDIT THIS FILE   !!!!!!
-// This file is built by symbian\\config.pl.
-// Any changes made here will be lost!
-TARGET            PerlApp.app
-TARGETTYPE        app
-UID               0x100039CE 0x102015F6
-TARGETPATH        \\system\\apps\\PerlApp
-SRCDBG
-EXPORTUNFROZEN
-SOURCEPATH        .
-SOURCE            PerlApp.cpp 
-
-USERINCLUDE       .
-USERINCLUDE       ..
-USERINCLUDE       \\symbian\\perl\\$R_V_SV\\include
-
-SYSTEMINCLUDE     \\epoc32\\include
-SYSTEMINCLUDE     \\epoc32\\include\\libc
-
-LIBRARY           apparc.lib
-LIBRARY           bafl.lib
-LIBRARY           charconv.lib 
-LIBRARY           cone.lib
-LIBRARY           efsrv.lib
-LIBRARY           eikcore.lib
-LIBRARY           estlib.lib 
-LIBRARY           euser.lib
-LIBRARY           perl$VERSION.lib
-@LIB
-RESOURCE          perlapp.rss
-__EOF__
-    if (@MACRO) {
-       for my $macro (@MACRO) {
-           print PERLAPP_MMP <<__EOF__;
-MACRO             $macro
-__EOF__
-        }
-    }
-    if ($SDK_VARIANT =~ /^S[689]0$/) {
-        print PERLAPP_MMP <<__EOF__;
-AIF               PerlApp.aif . PerlAppAif.rss 
-__EOF__
-    }
-    close(PERLAPP_MMP);
-    push @unclean, 'symbian\PerlApp.mmp';
-}
-else {
-    warn "$0: failed to create symbian\\PerlApp.mmp";
-}
-
-if ( open( MAKEFILE, '>', 'Makefile' ) ) {
-    my $perl = "perl$VERSION";
-    my $windef1 = "$SYMBIAN_ROOT\\Epoc32\\Build$CWD\\$perl\\$WIN\\$perl.def";
-    my $windef2 = "..\\BWINS\\${perl}u.def";
-    my $armdef1 = "$SYMBIAN_ROOT\\Epoc32\\Build$CWD\\$perl\\$ARM\\$perl.def";
-    my $armdef2 = "..\\BMARM\\${perl}u.def";
-    my $MF = $WIN eq 'wins' ? 'vc6' : $WIN eq 'winscw' ? 'cw_ide' : "UNKNOWN";
-    print "\tMakefile\n";
-    print MAKEFILE <<__EOF__;
-help:
-       \@echo === Perl for Symbian ===
-       \@echo Useful targets:
-       \@echo all win arm clean
-       \@echo perldll.sis perlext.sis perlsdk.zip
-
-WIN    = ${WIN}
-ARM    = ${ARM}
-
-all:   build
-
-build: rename_makedef build_${WIN} build_arm
-
-@unclean: symbian\\config.pl
-       perl symbian\\config.pl
-
-build_${WIN}:  abld.bat perldll_${WIN}
-
-build_vc6:     abld.bat perldll_wins
-
-build_vc7:     abld.bat perldll_wins
-
-build_cw:      abld.bat perldll_winscw
-
-build_arm:     abld.bat perl_arm miniperl_arm perldll_arm
-
-miniperl_win miniperl_${WIN}:  miniperl.mmp abld.bat rename_makedef
-       abld build ${WIN} udeb miniperl
-
-miniperl_arm:  miniperl.mmp abld.bat rename_makedef
-       abld build \$(ARM) $UARM miniperl
-
-miniperl:      miniperl_${WIN} miniperl_arm
-
-perl:  perl_${WIN} perl_arm
-
-perl_win perl_${WIN}:  perl.mmp abld.bat rename_makedef
-       abld build ${WIN} perl
-
-perl_arm:      perl.mmp abld.bat rename_makedef
-       abld build \$(ARM) $UARM perl
-
-perldll_win perldll_${WIN}: perl${VERSION}_${WIN} freeze_${WIN} perl${VERSION}_${WIN}
-
-perl${VERSION}_win perl${VERSION}_${WIN}:      perl$VERSION.mmp abld.bat rename_makedef
-       abld build ${WIN} perl$VERSION
-
-perldll_arm: perl${VERSION}_arm freeze_arm perl${VERSION}_arm
-
-perl${VERSION}_arm:    perl$VERSION.mmp abld.bat rename_makedef
-       abld build \$(ARM) $UARM perl$VERSION
-
-perldll perl$VERSION:  perldll_${WIN} perldll_arm
-
-win ${WIN}:    miniperl_${WIN} perl_${WIN} perldll_${WIN}
-
-thumb arm:     miniperl_arm perl_arm perldll_arm
-
-rename_makedef:
-       -ren makedef.pl nomakedef.pl
-
-# Symbian SDK has a makedef.pl of its own,
-# and we don't need Perl's.
-rerename_makedef:
-       -ren nomakedef.pl makedef.pl
-
-symbian\\PerlUi.rss: symbian\\PerlUi$SDK_VARIANT.rss
-       copy symbian\\PerlUi$SDK_VARIANT.rss symbian\\PerlUi.rss
-
-abld.bat abld: bld.inf symbian\\PerlUi.rss
-       bldmake bldfiles
-
-vc6:   win.mf vc6.mf build_vc6
-
-vc7:   win.mf vc7.mf build_vc7
-
-cw:    win.mf cw.mf build_cw
-
-${WIN}_miniperl.mf: abld.bat symbian\\config.pl
-       abld makefile ${MF} miniperl
-       echo > ${WIN}_miniperl.mf
-
-${WIN}_perl.mf: abld.bat symbian\\config.pl
-       abld makefile ${MF} perl
-       echo > ${WIN}_perl.mf
-
-${WIN}_${VERSION}.mf: abld.bat symbian\\config.pl
-       abld makefile ${MF} perl${VERSION}
-       echo > ${WIN}_${VERSION}.mf
-
-symbian\\${WIN}.mf:
-       cd symbian; make ${WIN}.mf
-
-${WIN}.mf: ${WIN}_miniperl.mf ${WIN}_perl.mf ${WIN}_${VERSION}.mf symbian\\${WIN}.mf
-
-arm_miniperl.mf: abld.bat symbian\\config.pl
-       echo > arm_miniperl.mf
-
-arm_perl.mf: abld.bat symbian\\config.pl
-       echo > arm_perl.mf
-
-arm_${VERSION}.mf: abld.bat symbian\\config.pl
-       echo > arm_${VERSION}.mf
-
-arm.mf: arm_miniperl.mf arm_perl.mf arm_${VERSION}.mf
-
-win.mf:  vc6.mf cw.mf
-       echo > win.mf
-
-vc6.mf: abld.bat symbian\\config.pl
-       abld makefile vc6
-       echo > vc6.mf
-
-vc7.mf: abld.bat symbian\\config.pl
-       abld makefile vc7
-       echo > vc7.mf
-
-cw.mf: abld.bat symbian\\config.pl
-       abld makefile cw_ide
-       echo > cw.mf
-
-PM  = lib\\Config.pm lib\\Cross.pm lib\\lib.pm ext\\DynaLoader\\DynaLoader.pm ext\\DynaLoader\\XSLoader.pm ext\\Errno\\Errno.pm
-POD = lib\\Config.pod
-
-pm:    \$(PM)
-
-XLIB   = -Ixlib\\symbian
-
-XSBOPT = --win=\$(WIN) --arm=\$(ARM)
-
-lib\\Config.pm:
-       copy symbian\\config.sh config.sh
-__EOF__
-    if (defined $S90SDK) {
-        print MAKEFILE <<__EOF__;
-       perl -pi.bak -e "s:x\\.y\\.z+:$R_V_SV:g; s!='(\\\\\\\\system)!='C:\\1!" config.sh
-__EOF__
-    } else {
-        print MAKEFILE <<__EOF__;
-       perl -pi.bak -e "s:x\\.y\\.z+:$R_V_SV:g" config.sh
-__EOF__
-    };
-    print MAKEFILE <<__EOF__;
-       perl \$(XLIB) configpm --cross=symbian
-       copy xlib\\symbian\\Config.pm lib\\Config.pm
-       perl -pi.bak -e "s:x\\.y\\.z:$R_V_SV:g" lib\\Config.pm
-       perl -pi.bak -e "s:5\\.\\d+\\.\\d+:$R_V_SV:g" lib\\Config.pm
-       -perl -pi.bak -e "s:x\\.y\\.z:$R_V_SV:g" xlib\\symbian\\Config_heavy.pl
-
-lib\\lib.pm:
-       perl lib\\lib_pm.PL
-
-ext\\DynaLoader\\DynaLoader.pm:
-       -del /f ext\\DynaLoader\\DynaLoader.pm
-       perl -Ixlib\\symbian ext\\DynaLoader\\DynaLoader_pm.PL
-       perl -pi.bak -e "s/__END__//" DynaLoader.pm
-       copy /y DynaLoader.pm ext\\DynaLoader\\DynaLoader.pm
-       -del /f DynaLoader.pm DynaLoader.pm.bak
-
-ext\\DynaLoader\\XSLoader.pm:
-       perl \$(XLIB) symbian\\xsbuild.pl \$(XSBOPT) XSLoader
-
-ext\\Errno\\Errno.pm:
-       perl \$(XLIB) symbian\\xsbuild.pl \$(XSBOPT) Errno
-
-miniperlexe.sis:       miniperl_arm symbian\\makesis.pl
-       perl \$(XLIB) symbian\\makesis.pl miniperl
-
-perlexe.sis:   perl_arm symbian\\makesis.pl
-       perl \$(XLIB) symbian\\makesis.pl perl
-
-
-allsis: all miniperlexe.sis perlexe.sis perldll.sis perllib.sis perlext.sis perlapp.sis
-
-perldll.sis perl$VERSION.sis:  perldll_arm pm symbian\\makesis.pl
-       perl \$(XLIB) symbian\\makesis.pl perl${VERSION}dll
-
-perl${VERSION}lib.sis perllib.sis:     \$(PM)
-       perl \$(XLIB) symbian\\makesis.pl perl${VERSION}lib
-
-perl${VERSION}ext.sis perlext.sis:     perldll_arm buildext_sis
-       perl symbian\\makesis.pl perl${VERSION}ext
-
-EXT =  Compress::Raw::Zlib Cwd Data::Dumper Devel::Peek Digest::MD5 Errno Fcntl File::Glob Filter::Util::Call IO List::Util MIME::Base64 PerlIO::scalar PerlIO::via SDBM_File Socket Storable Time::HiRes XSLoader attributes
-
-buildext: perldll symbian\\xsbuild.pl lib\\Config.pm
-       perl \$(XLIB) symbian\\xsbuild.pl \$(XSBOPT) \$(EXT)
-
-buildextcpp: perldll symbian\\xsbuild.pl lib\\Config.pm
-       perl \$(XLIB) symbian\\xsbuild.pl --csuffix .cpp \$(XSBOPT) \$(EXT)
-
-buildext_sis: perldll.sis symbian\\xsbuild.pl lib\\Config.pm
-       perl \$(XLIB) symbian\\xsbuild.pl \$(XSBOPT) --sis \$(EXT)
-
-buildextcpp_sis: perldll.sis symbian\\xsbuild.pl lib\\Config.pm
-       perl \$(XLIB) symbian\\xsbuild.pl --csuffix .cpp \$(XSBOPT) --sis \$(EXT)
-
-cleanext: symbian\\xsbuild.pl
-       perl \$(XLIB) symbian\\xsbuild.pl \$(XSBOPT) --clean \$(EXT)
-
-distcleanext: symbian\\xsbuild.pl
-       perl \$(XLIB) symbian\\xsbuild.pl \$(XSBOPT) --distclean \$(EXT)
-
-sis makesis:   miniperl perl perldll pm buildext perlapp.sis
-       perl \$(XLIB) symbian\\makesis.pl
-
-APIDIR = \\Symbian\\perl\\$R_V_SV
-
-sdkinstall:
-       -mkdir \\Symbian\\perl
-       -mkdir \\Symbian\\perl\\$R_V_SV
-       -mkdir \$(APIDIR)\\include
-       -mkdir \$(APIDIR)\\include\\symbian
-       -mkdir \$(APIDIR)\\lib
-       -mkdir \$(APIDIR)\\lib\\ExtUtils
-       -mkdir \$(APIDIR)\\pod
-       -mkdir \$(APIDIR)\\bin
-       -mkdir \$(BINDIR)
-       copy /y *.h   \$(APIDIR)\\include
-       -copy /y *.inc \$(APIDIR)\\include
-       copy /y lib\\ExtUtils\\xsubpp  \$(APIDIR)\\lib\\ExtUtils
-       copy /y lib\\ExtUtils\\typemap \$(APIDIR)\\lib\\ExtUtils
-       copy /y lib\\ExtUtils\\ParseXS.pm \$(APIDIR)\\lib\\ExtUtils
-       copy /y symbian\\xsbuild.pl    \$(APIDIR)\\bin
-       copy /y symbian\\sisify.pl     \$(APIDIR)\\bin
-       copy /y symbian\\PerlBase.h    \$(APIDIR)\\include
-       copy /y symbian\\PerlUi.h      \$(APIDIR)\\include
-       copy /y symbian\\PerlUtil.h    \$(APIDIR)\\include
-       copy /y symbian\\symbian*.h    \$(APIDIR)\\include\\symbian
-       copy /y symbian\\PerlBase.pod  \$(APIDIR)\\pod
-       copy /y symbian\\PerlUtil.pod  \$(APIDIR)\\pod
-
-RELDIR  = $SYMBIAN_ROOT\\epoc32\\release
-RELWIN = \$(RELDIR)\\\$(WIN)\\udeb
-RELARM = \$(RELDIR)\\\$(ARM)\\$UARM
-SDKZIP = perl${VERSION}sdk.zip
-
-
-\$(SDKZIP) perlsdk.zip: perldll sdkinstall
-       -del /f perl${VERSION}sdk.zip
-       zip -r perl${VERSION}sdk.zip \$(RELWIN)\\perl$VERSION.* \$(RELARM)\\perl$VERSION.* \$(APIDIR)
-       \@echo perl${VERSION}sdk.zip created.
-
-PERLSIS = perl${VERSION}.SIS perl${VERSION}lib.SIS perl${VERSION}ext.SIS
-ALLSIS  = \$(PERLSIS) perlapp.sis
-ETC     = README.symbian symbian\\PerlBase.pod symbian\\PerlUtil.pod symbian\\sisify.pl symbian\\TODO
-
-perl${VERSION}dist.zip perldist.zip: \$(ALLSIS) \$(SDKZIP) \$(ETC)
-       -del /f perl${VERSION}dist.zip
-       zip -r perl${VERSION}dist.zip \$(ALLSIS) \$(SDKZIP) \$(ETC)
-
-perlapp:       sdkinstall perlapp_${WIN} perlapp_arm
-
-perlapp_arm_minimal sisify_hex perlappmin.hex perlrscmin.hex:  sdkinstall config.h
-       cd symbian; make perlapp_arm USERDEFS=-DCreatePerlAppMinimal
-       perl symbian\\hexdump.pl
-
-perlapp_win perlapp_${WIN}: config.h
-       cd symbian; make perlapp_${WIN}
-
-perlapp_arm: config.h
-       cd symbian; make perlapp_arm
-
-perlapp_arm_clean:
-       cd symbian; make clean
-
-perlapp_demo_extract:
-       cd symbian; make perlapp_demo_extract
-
-perlapp.sis: perlapp_arm
-       cd symbian; make perlapp.sis
-
-perlapp.zip:
-       cd symbian; zip perlapp.zip PerlApp.* PerlRecog.* PerlBase.* PerlUtil.* demo_pl
-
-zip:   perlsdk.zip perlapp.zip
-
-freeze:        freeze_${WIN} freeze_arm
-
-freeze_${WIN}:
-       abld freeze ${WIN} perl$VERSION
-
-freeze_arm:
-       abld freeze \$(ARM) perl$VERSION
-
-defrost:       defrost_${WIN} defrost_arm
-
-defrost_${WIN}:
-       -del /f $windef1
-       -del /f $windef2
-
-defrost_arm:
-       -del /f $armdef1
-       -del /f $armdef2
-
-clean_${WIN}: abld.bat
-       abld clean ${WIN}
-
-clean_arm: abld.bat
-       abld clean \$(ARM)
-
-clean: clean_${WIN} clean_arm rerename_makedef
-       -del /f \$(PM)
-       -del /f \$(POD)
-       -del /f lib\\Config.pm.bak
-       -del /f xlib\\symbian\\Config_heavy.pl
-       -rmdir /s /q xlib
-       -del /f config.sh
-       -del /f DynaLoader.pm ext\\DynaLoader\\DynaLoader.pm
-       -del /f ext\\DynaLoader\\Makefile
-       -del /f ext\\SDBM_File\\sdbm\\Makefile
-       -del /f symbian\\*.lst
-       -del /f abld.bat @unclean *.pkg *.sis *.zip
-       -del /f symbian\\abld.bat symbian\\*.sis symbian\\*.zip
-       -del /f symbian\\perl5*.pkg symbian\\miniperl.pkg
-       -del arm_*.mf ${WIN}_*.mf vc*.mf cw*.mf
-       -del symbian\\Makefile
-       -del symbian\\PerlUi.rss symbian\\PerlApp.rss
-       -del perlappmin.hex perlrscmin.hex
-       -perl symbian\\xsbuild.pl \$(XSBOPT) --clean \$(EXT)
-       -rmdir /s /q perl${VERSION}_Data
-       -cd symbian; make clean
-
-reallyclean: abld.bat
-       abld reallyclean
-
-distclean: defrost reallyclean clean
-       -perl symbian\\xsbuild.pl \$(XSBOPT) --distclean \$(EXT)
-       -del /f config.h config.sh.bak symbian\\symbian_port.h
-       -del /f Makefile symbian\\PerlApp.mmp
-       -del /f BMARM\\*.def
-       -del /f *.cwlink *.resources *.pref
-       -del /f perl${VERSION}.xml perl${VERSION}.mcp uid.cpp
-       -rmdir /s /q BMARM
-       cd symbian; make distclean
-       -del /f symbian\\Makefile
-__EOF__
-    close MAKEFILE;
-}
-else {
-    warn "$0: failed to create Makefile: $!\n";
-}
-
-if ( open( MAKEFILE, '>', 'symbian/Makefile')) {
-    my $wrap = defined $S60SDK && $S60SDK eq '1.2' && $WIN ne '${WIN}cw';
-    my $ABLD = $wrap ? 'perl b.pl': 'abld';
-    print "\tsymbian/Makefile\n";
-    my $MF = $WIN eq 'wins' ? 'vc6' : $WIN eq 'winscw' ? 'cw_ide' : "UNKNOWN";
-    print MAKEFILE <<__EOF__;
-WIN = $WIN
-ARM = $ARM
-ABLD = $ABLD
-MF = $MF
-
-abld.bat:
-       bldmake bldfiles
-
-perlapp_${WIN}: abld.bat ..\\config.h PerlApp.h PerlApp.cpp
-       copy PerlUi$SDK_VARIANT.rss PerlApp.rss
-       bldmake bldfiles
-       \$(ABLD) build ${WIN} udeb
-
-perlapp_arm: ..\\config.h PerlApp.h PerlApp.cpp
-       copy PerlUi$SDK_VARIANT.rss PerlApp.rss
-       bldmake bldfiles
-       \$(ABLD) build ${ARM} $UARM
-
-$MF:
-       abld makefile $MF
-
-win.mf:
-       bldmake bldfiles
-       abld makefile $MF
-
-perlapp_demo_extract:
-       perl demo_pl extract
-
-perlapp.sis: perlapp_arm perlapp_demo_extract
-       -del /f perlapp.SIS
-       makesis perlapp.pkg
-       copy /y perlapp.SIS ..\\perlapp.SIS
-
-clean:
-       -perl demo_pl cleanup
-       -del /f perlapp.sis
-       -del /f b.pl
-       -del PerlApp.rss
-       abld clean $WIN
-       abld clean thumb
-       -del Makefile
-
-distclean: clean
-       -del /f *.cwlink *.resources *.pref
-       -del /f PerlApp.xml PerlApp.mcp uid.cpp
-       -rmdir /s /q PerlApp_Data
-       -del /f abld.bat
-__EOF__
-    close(MAKEFILE);
-    if ($wrap) {
-       if ( open( B_PL, '>', 'symbian/b.pl')) {
-           print B_PL <<'__EOF__';
-# abld.pl wrapper.
-
-# nmake doesn't like MFLAGS and MAKEFLAGS being set to -w and w.
-delete $ENV{MFLAGS};
-delete $ENV{MAKEFLAGS};
-
-system("abld @ARGV");
-__EOF__
-           close(B_PL);
-       } else {
-           warn "$0: failed to create symbian/b.pl: $!\n";
-       }
-    }
-} else {
-    warn "$0: failed to create symbian/Makefile: $!\n";
-}
-
-print "Deleting...\n";
-for my $config (
-               # Do not delete config.h here.
-               "config.sh",
-               "lib\\Config.pm",
-               "xlib\\symbian\\Config.pm",
-               "xlib\\symbian\\Config_heavy.pl",
-               "symbian\\PerlUi.rss",
-               "symbian\\PerlApp.rss",
-               ) {
-    print "\t$config\n";
-    unlink($config);
-}
-
-print <<__EOM__;
-Configuring done.
-Now you can run:
-    make all
-    make allsis
-__EOM__
-
-1;    # Happy End.
diff --git a/symbian/config.sh b/symbian/config.sh
deleted file mode 100644 (file)
index b5260d7..0000000
+++ /dev/null
@@ -1,961 +0,0 @@
-#!\\bin\\sh
-Author=''
-_a='.a'
-_o='.o'
-afs='false'
-afsroot='/afs'
-alignbytes='4'
-aphostname='localhost'
-apiversion='5.005'
-ar=':'
-archlib='\\system\\libs\\perl\\x.y.z\\thumb-symbian'
-archlibexp='\\system\\libs\\perl\\x.y.z\\thumb-symbian'
-archname='thumb-symbian'
-asctime_r_proto='0'
-bin='\\system\\apps\\perl'
-bincompat5005='n'
-binexp='\\system\\apps\\perl'
-bootstrap_charset='undef'
-byteorder='1234'
-castflags='0'
-cc='gcc'
-cccdlflags=''
-ccdlflags=''
-cf_by='root@localhost'
-cf_time='Thu Jan  1 00:00:00 GMT 1970'
-charbits='8'
-clocktype='clock_t'
-cpp_stuff='42'
-cpplast=''
-cppminus='-'
-cpprun='gcc -E'
-cppstdin='gcc -E'
-crypt_r_proto='0'
-ctermid_r_proto='0'
-ctime_r_proto='0'
-d_Gconvert='sprintf((b),"%.*g",(n),(x))'
-d_PRIEUldbl='undef'
-d_PRIFUldbl='undef'
-d_PRIGUldbl='undef'
-d_PRIXU64='undef'
-d_PRId64='undef'
-d_PRIeldbl='undef'
-d_PRIfldbl='undef'
-d_PRIgldbl='undef'
-d_PRIi64='undef'
-d_PRIo64='undef'
-d_PRIu64='undef'
-d_PRIx64='undef'
-d_SCNfldbl='undef'
-d__fwalk='undef'
-d_accept4='undef'
-d_access='undef'
-d_accessx='undef'
-d_acosh='undef'
-d_aintl='undef'
-d_alarm='undef'
-d_archlib='define'
-d_asctime64='undef'
-d_asctime_r='undef'
-d_asinh='undef'
-d_atanh='undef'
-d_atolf='undef'
-d_atoll='undef'
-d_attribute_always_inline='undef'
-d_attribute_deprecated='undef'
-d_attribute_format='undef'
-d_attribute_malloc='undef'
-d_attribute_nonnull='undef'
-d_attribute_noreturn='undef'
-d_attribute_pure='undef'
-d_attribute_unused='undef'
-d_attribute_warn_unused_result='undef'
-d_backtrace='undef'
-d_bsd='undef'
-d_bsdgetpgrp='undef'
-d_bsdsetpgrp='undef'
-d_builtin_add_overflow='undef'
-d_builtin_choose_expr='undef'
-d_builtin_expect='undef'
-d_builtin_mul_overflow='undef'
-d_builtin_sub_overflow='undef'
-d_c99_variadic_macros='undef'
-d_casti32='undef'
-d_castneg='undef'
-d_cbrt='undef'
-d_chown='undef'
-d_chroot='undef'
-d_chsize='undef'
-d_class='undef'
-d_clearenv='undef'
-d_closedir='undef'
-d_cmsghdr_s='undef'
-d_copysign='undef'
-d_copysignl='undef'
-d_cplusplus='undef'
-d_crypt='undef'
-d_crypt_r='undef'
-d_csh='undef'
-d_ctermid='undef'
-d_ctermid_r='undef'
-d_ctime64='undef'
-d_ctime_r='undef'
-d_cuserid='undef'
-d_dbl_dig='undef'
-d_dbminitproto='undef'
-d_difftime64='undef'
-d_difftime='undef'
-d_dir_dd_fd='undef'
-d_dirfd='undef'
-d_dirnamlen='define'
-d_dladdr='undef'
-d_dlerror='undef'
-d_dlopen='undef'
-d_dlsymun='undef'
-d_dosuid='undef'
-d_double_has_inf='define'
-d_double_has_nan='define'
-d_double_has_negative_zero='define'
-d_double_has_subnormals='define'
-d_double_style_cray='undef'
-d_double_style_ibm='undef'
-d_double_style_ieee='define'
-d_double_style_vax='undef'
-d_drand48_r='undef'
-d_drand48proto='undef'
-d_dup2='undef'
-d_dup3='undef'
-d_duplocale='undef'
-d_eaccess='undef'
-d_endgrent='undef'
-d_endgrent_r='undef'
-d_endhent='undef'
-d_endhostent_r='undef'
-d_endnent='undef'
-d_endnetent_r='undef'
-d_endpent='undef'
-d_endprotoent_r='undef'
-d_endpwent='undef'
-d_endpwent_r='undef'
-d_endsent='undef'
-d_endservent_r='undef'
-d_eofnblk='undef'
-d_erf='undef'
-d_erfc='undef'
-d_eunice='undef'
-d_exp2='undef'
-d_expm1='undef'
-d_faststdio='undef'
-d_fchdir='undef'
-d_fchmod='undef'
-d_fchmodat='undef'
-d_fchown='undef'
-d_fcntl='undef'
-d_fcntl_can_lock='undef'
-d_fd_macros='undef'
-d_fd_set='undef'
-d_fdclose='undef'
-d_fdim='undef'
-d_fds_bits='undef'
-d_fegetround='undef'
-d_fgetpos='undef'
-d_finite='undef'
-d_finitel='undef'
-d_flexfnam='define'
-d_flock='undef'
-d_flockproto='undef'
-d_fma='undef'
-d_fmax='undef'
-d_fmin='undef'
-d_fork='undef'
-d_fp_class='undef'
-d_fp_classify='undef'
-d_fp_classl='undef'
-d_fpathconf='undef'
-d_fpclass='undef'
-d_fpclassify='undef'
-d_fpclassl='undef'
-d_fpgetround='undef'
-d_fpos64_t='undef'
-d_freelocale='undef'
-d_frexpl='undef'
-d_fs_data_s='undef'
-d_fseeko='undef'
-d_fsetpos='define'
-d_fstatfs='undef'
-d_fstatvfs='undef'
-d_fsync='undef'
-d_ftello='undef'
-d_ftime='undef'
-d_futimes='undef'
-d_futimesat='undef'
-d_gai_strerror='undef'
-d_gdbm_ndbm_h_uses_prototypes='undef'
-d_gdbmndbm_h_uses_prototypes='undef'
-d_getaddrinfo='undef'
-d_getcwd='define'
-d_getespwnam='undef'
-d_getfsstat='undef'
-d_getgrent='undef'
-d_getgrent_r='undef'
-d_getgrgid_r='undef'
-d_getgrnam_r='undef'
-d_getgrps='undef'
-d_gethbyaddr='define'
-d_gethbyname='define'
-d_gethent='undef'
-d_gethname='define'
-d_gethostbyaddr_r='undef'
-d_gethostbyname_r='undef'
-d_gethostent_r='undef'
-d_gethostprotos='define'
-d_getitimer='undef'
-d_getlogin='undef'
-d_getlogin_r='undef'
-d_getmnt='undef'
-d_getmntent='undef'
-d_getnameinfo='undef'
-d_getnbyaddr='undef'
-d_getnbyname='undef'
-d_getnent='undef'
-d_getnetbyaddr_r='undef'
-d_getnetbyname_r='undef'
-d_getnetent_r='undef'
-d_getnetprotos='undef'
-d_getpagsz='undef'
-d_getpbyname='define'
-d_getpbynumber='define'
-d_getpent='undef'
-d_getpgid='undef'
-d_getpgrp2='undef'
-d_getpgrp='undef'
-d_getppid='undef'
-d_getprior='undef'
-d_getprotobyname_r='undef'
-d_getprotobynumber_r='undef'
-d_getprotoent_r='undef'
-d_getprotoprotos='define'
-d_getprpwnam='undef'
-d_getpwent='undef'
-d_getpwent_r='undef'
-d_getpwnam_r='undef'
-d_getpwuid_r='undef'
-d_getsbyname='define'
-d_getsbyport='define'
-d_getsent='undef'
-d_getservbyname_r='undef'
-d_getservbyport_r='undef'
-d_getservent_r='undef'
-d_getservprotos='define'
-d_getspent='undef'
-d_getspnam='undef'
-d_getspnam_r='undef'
-d_gettimeod='define'
-d_gmtime64='undef'
-d_gmtime_r='undef'
-d_gnulibc='undef'
-d_grpasswd='undef'
-d_hasmntopt='undef'
-d_htonl='define'
-d_hypot='undef'
-d_ilogb='undef'
-d_ilogbl='undef'
-d_inc_version_list='undef'
-d_index='undef'
-d_inetaton='undef'
-d_inetntop='undef'
-d_inetpton='undef'
-d_int64_t='undef'
-d_ip_mreq='undef'
-d_ip_mreq_source='undef'
-d_ipv6_mreq='undef'
-d_ipv6_mreq_source='undef'
-d_isascii='undef'
-d_isblank='undef'
-d_isfinite='undef'
-d_isfinitel='undef'
-d_isinf='undef'
-d_isinfl='undef'
-d_isless='undef'
-d_isnan='undef'
-d_isnanl='undef'
-d_isnormal='undef'
-d_j0='undef'
-d_j0l='undef'
-d_killpg='undef'
-d_lc_monetary_2008='undef'
-d_lchown='undef'
-d_ldbl_dig='undef'
-d_ldexpl='undef'
-d_lgamma='undef'
-d_lgamma_r='undef'
-d_libm_lib_version='undef'
-d_link='undef'
-d_linkat='undef'
-d_llrint='undef'
-d_llrintl='undef'
-d_llround='undef'
-d_llroundl='undef'
-d_localeconv_l='undef'
-d_localtime64='undef'
-d_localtime_r='undef'
-d_localtime_r_needs_tzset='undef'
-d_locconv='undef'
-d_lockf='undef'
-d_log1p='undef'
-d_log2='undef'
-d_logb='undef'
-d_long_double_style_ieee='undef'
-d_long_double_style_ieee_doubledouble='undef'
-d_long_double_style_ieee_extended='undef'
-d_long_double_style_ieee_std='undef'
-d_long_double_style_vax='undef'
-d_longdbl='undef'
-d_longlong='undef'
-d_lrint='undef'
-d_lrintl='undef'
-d_lround='undef'
-d_lroundl='undef'
-d_lseekproto='undef'
-d_lstat='undef'
-d_madvise='undef'
-d_malloc_good_size='undef'
-d_malloc_size='undef'
-d_mblen='undef'
-d_mbrlen='undef'
-d_mbrtowc='undef'
-d_mbstowcs='undef'
-d_mbtowc='undef'
-d_memmem='undef'
-d_memrchr='undef'
-d_mkdir='define'
-d_mkdtemp='undef'
-d_mkfifo='undef'
-d_mkostemp='undef'
-d_mkstemp='undef'
-d_mkstemps='undef'
-d_mktime64='undef'
-d_mktime='undef'
-d_mmap='undef'
-d_modfl='undef'
-d_modfl_pow32_bug='undef'
-d_modflproto='undef'
-d_mprotect='undef'
-d_msg='undef'
-d_msg_ctrunc='undef'
-d_msg_dontroute='undef'
-d_msg_oob='undef'
-d_msg_peek='undef'
-d_msg_proxy='undef'
-d_msgctl='undef'
-d_msgget='undef'
-d_msghdr_s='undef'
-d_msgrcv='undef'
-d_msgsnd='undef'
-d_msync='undef'
-d_munmap='undef'
-d_mymalloc='undef'
-d_nan='undef'
-d_nanosleep='undef'
-d_ndbm_h_uses_prototypes='undef'
-d_nearbyint='undef'
-d_newlocale='undef'
-d_nextafter='undef'
-d_nexttoward='undef'
-d_nice='undef'
-d_nl_langinfo='undef'
-d_nv_preserves_uv='undef'
-d_nv_zero_is_allbits_zero='define'
-d_off64_t='undef'
-d_old_pthread_create_joinable='undef'
-d_oldpthreads='undef'
-d_oldsock='undef'
-d_open3='undef'
-d_openat='undef'
-d_pathconf='undef'
-d_pause='undef'
-d_perl_otherlibdirs='undef'
-d_phostname='undef'
-d_pipe2='undef'
-d_pipe='undef'
-d_poll='undef'
-d_portable='undef'
-d_prctl='undef'
-d_prctl_set_name='undef'
-d_printf_format_null='undef'
-d_procselfexe='undef'
-d_pseudofork='undef'
-d_pthread_atfork='undef'
-d_pthread_attr_setscope='undef'
-d_pthread_yield='undef'
-d_ptrdiff_t='define'
-d_pwage='undef'
-d_pwchange='undef'
-d_pwclass='undef'
-d_pwcomment='undef'
-d_pwexpire='undef'
-d_pwgecos='undef'
-d_pwpasswd='undef'
-d_pwquota='undef'
-d_qgcvt='undef'
-d_quad='undef'
-d_querylocale='undef'
-d_random_r='undef'
-d_readdir64_r='undef'
-d_readdir='define'
-d_readdir_r='undef'
-d_readlink='undef'
-d_readv='undef'
-d_recvmsg='undef'
-d_regcomp='undef'
-d_remainder='undef'
-d_remquo='undef'
-d_rename='define'
-d_renameat='undef'
-d_rewinddir='define'
-d_rint='undef'
-d_rmdir='define'
-d_round='undef'
-d_sbrkproto='undef'
-d_scalbn='undef'
-d_scalbnl='undef'
-d_sched_yield='undef'
-d_scm_rights='undef'
-d_seekdir='define'
-d_select='undef'
-d_sem='undef'
-d_semctl='undef'
-d_semctl_semid_ds='undef'
-d_semctl_semun='undef'
-d_semget='undef'
-d_semop='undef'
-d_sendmsg='undef'
-d_setegid='undef'
-d_seteuid='undef'
-d_setgrent='undef'
-d_setgrent_r='undef'
-d_setgrps='undef'
-d_sethent='undef'
-d_sethostent_r='undef'
-d_setitimer='undef'
-d_setlinebuf='undef'
-d_setlocale='undef'
-d_setlocale_accepts_any_locale_name='undef'
-d_setlocale_r='undef'
-d_setnent='undef'
-d_setnetent_r='undef'
-d_setpent='undef'
-d_setpgid='undef'
-d_setpgrp2='undef'
-d_setpgrp='undef'
-d_setprior='undef'
-d_setproctitle='undef'
-d_setprotoent_r='undef'
-d_setpwent='undef'
-d_setpwent_r='undef'
-d_setregid='undef'
-d_setresgid='undef'
-d_setresuid='undef'
-d_setreuid='undef'
-d_setrgid='undef'
-d_setruid='undef'
-d_setsent='undef'
-d_setservent_r='undef'
-d_setsid='undef'
-d_setvbuf='define'
-d_shm='undef'
-d_shmat='undef'
-d_shmatprototype='undef'
-d_shmctl='undef'
-d_shmdt='undef'
-d_shmget='undef'
-d_sigaction='undef'
-d_siginfo_si_addr='undef'
-d_siginfo_si_band='undef'
-d_siginfo_si_errno='undef'
-d_siginfo_si_pid='undef'
-d_siginfo_si_status='undef'
-d_siginfo_si_uid='undef'
-d_siginfo_si_value='undef'
-d_signbit='undef'
-d_sigprocmask='undef'
-d_sigsetjmp='undef'
-d_sin6_scope_id='undef'
-d_sitearch='define'
-d_sitecustomize='undef'
-d_sitecustomize='undef'
-d_snprintf='undef'
-d_sockaddr_in6='undef'
-d_sockaddr_sa_len='undef'
-d_sockaddr_storage='undef'
-d_sockatmark='undef'
-d_sockatmarkproto='undef'
-d_socket='define'
-d_socklen_t='undef'
-d_sockpair='undef'
-d_socks5_init='undef'
-d_sqrtl='undef'
-d_srand48_r='undef'
-d_srandom_r='undef'
-d_sresgproto='undef'
-d_sresuproto='undef'
-d_stat='define'
-d_statblks='undef'
-d_statfs_f_flags='undef'
-d_statfs_s='undef'
-d_static_inline='undef'
-d_statvfs='undef'
-d_stdio_cnt_lval='undef'
-d_stdio_ptr_lval='undef'
-d_stdio_ptr_lval_nochange_cnt='undef'
-d_stdio_ptr_lval_sets_cnt='undef'
-d_stdio_stream_array='undef'
-d_stdiobase='undef'
-d_stdstdio='undef'
-d_strcoll='undef'
-d_strerror_l='undef'
-d_strerror_r='undef'
-d_strftime='undef'
-d_strlcat='undef'
-d_strlcpy='undef'
-d_strnlen='undef'
-d_strtod='define'
-d_strtod_l='undef'
-d_strtol='define'
-d_strtold='undef'
-d_strtold_l='undef'
-d_strtoll='undef'
-d_strtoq='undef'
-d_strtoul='define'
-d_strtoull='undef'
-d_strtouq='undef'
-d_strxfrm='undef'
-d_suidsafe='undef'
-d_symlink='undef'
-d_syscall='undef'
-d_syscallproto='undef'
-d_sysconf='undef'
-d_sysernlst=''
-d_syserrlst='undef'
-d_system='define'
-d_tcgetpgrp='undef'
-d_tcsetpgrp='undef'
-d_telldir='define'
-d_telldirproto='define'
-d_tgamma='undef'
-d_thread_safe_nl_langinfo_l='undef'
-d_time='define'
-d_timegm='undef'
-d_times='define'
-d_tm_tm_gmtoff='undef'
-d_tm_tm_zone='undef'
-d_tmpnam_r='undef'
-d_towlower='undef'
-d_towupper='undef'
-d_trunc='undef'
-d_truncate='undef'
-d_truncl='undef'
-d_ttyname_r='undef'
-d_tzname='undef'
-d_u32align='define'
-d_ualarm='undef'
-d_umask='undef'
-d_uname='undef'
-d_union_semun='undef'
-d_unlinkat='undef'
-d_unordered='undef'
-d_unsetenv='undef'
-d_uselocale='undef'
-d_usleep='define'
-d_usleepproto='undef'
-d_ustat='undef'
-d_vendorarch='undef'
-d_vendorbin='undef'
-d_vendorlib='undef'
-d_vfork='undef'
-d_void_closedir='undef'
-d_voidsig='undef'
-d_voidtty=''
-d_vsnprintf='undef'
-d_wait4='undef'
-d_waitpid='undef'
-d_wcrtomb='undef'
-d_wcscmp='undef'
-d_wcstombs='undef'
-d_wcsxfrm='undef'
-d_wctomb='undef'
-d_writev='undef'
-d_xenix='undef'
-db_hashtype='u_int32_t'
-db_prefixtype='size_t'
-db_version_major='0'
-db_version_minor='0'
-db_version_patch='0'
-default_inc_excludes_dot='undef'
-direntrytype='struct dirent'
-dlext='dll'
-dlsrc='dl_symbian.xs'
-doubleinfbytes='0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x7f'
-doublekind='4'
-doublemantbits='52'
-doublenanbytes='0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x7f'
-doublesize='8'
-drand01="((rand() & 0x7FFF) / (double) ((unsigned long)1 << 15))"
-drand48_r_proto='0'
-dtrace=''
-eagain='EAGAIN'
-ebcdic='undef'
-endgrent_r_proto='0'
-endhostent_r_proto='0'
-endnetent_r_proto='0'
-endprotoent_r_proto='0'
-endpwent_r_proto='0'
-endservent_r_proto='0'
-eunicefix=':'
-exe_ext='.exe'
-fflushNULL='undef'
-fflushall='undef'
-firstmakefile='makefile'
-fpossize='4'
-fpostype=fpos_t
-freetype=void
-full_ar=':'
-full_csh=':'
-full_sed=':'
-getgrent_r_proto='0'
-getgrgid_r_proto='0'
-getgrnam_r_proto='0'
-gethostbyaddr_r_proto='0'
-gethostbyname_r_proto='0'
-gethostent_r_proto='0'
-getlogin_r_proto='0'
-getnetbyaddr_r_proto='0'
-getnetbyname_r_proto='0'
-getnetent_r_proto='0'
-getprotobyname_r_proto='0'
-getprotobynumber_r_proto='0'
-getprotoent_r_proto='0'
-getpwent_r_proto='0'
-getpwnam_r_proto='0'
-getpwuid_r_proto='0'
-getservbyname_r_proto='0'
-getservbyport_r_proto='0'
-getservent_r_proto='0'
-getspnam_r_proto='0'
-gidformat='"lu"'
-gidsign='1'
-gidsize='4'
-gidtype=int
-gmtime_r_proto='0'
-groupstype=int
-h_fcntl='false'
-h_sysfile='true'
-i16size='2'
-i16type='short'
-i32size='4'
-i32type='long'
-i64size='8'
-i64type='int64_t'
-i8size='1'
-i8type='char'
-i_arpainet='undef'
-i_bfd='undef'
-i_bsdioctl=''
-i_crypt='undef'
-i_db='undef'
-i_dbm='undef'
-i_dirent='define'
-i_dlfcn='undef'
-i_execinfo='undef'
-i_fcntl='define'
-i_fenv='undef'
-i_fp='undef'
-i_fp_class='undef'
-i_gdbm='undef'
-i_gdbm_ndbm='undef'
-i_gdbmndbm='undef'
-i_grp='undef'
-i_ieeefp='undef'
-i_inttypes='undef'
-i_langinfo='undef'
-i_libutil='undef'
-i_locale='define'
-i_machcthr='undef'
-i_malloc='undef'
-i_mallocmalloc='undef'
-i_mntent='undef'
-i_ndbm='undef'
-i_netdb='define'
-i_neterrno='undef'
-i_netinettcp='undef'
-i_niin='define'
-i_poll='undef'
-i_prot='undef'
-i_pthread='undef'
-i_pwd='define'
-i_quadmath='undef'
-i_rpcsvcdbm='undef'
-i_sgtty='undef'
-i_shadow='undef'
-i_socks='undef'
-i_stdarg='define'
-i_stdbool='undef'
-i_stdint='undef'
-i_stdlib='define'
-i_sunmath='undef'
-i_sysaccess='undef'
-i_sysdir='undef'
-i_sysfile='undef'
-i_sysfilio='undef'
-i_sysin='undef'
-i_sysioctl='define'
-i_syslog='undef'
-i_sysmman='undef'
-i_sysmode='undef'
-i_sysmount='undef'
-i_sysndir='undef'
-i_sysparam='undef'
-i_syspoll='undef'
-i_sysresrc='undef'
-i_syssecrt='undef'
-i_sysselct='undef'
-i_syssockio='undef'
-i_sysstat='define'
-i_sysstatfs='undef'
-i_sysstatvfs='undef'
-i_systime='define'
-i_systimek='undef'
-i_systimes='define'
-i_systypes='define'
-i_sysuio='undef'
-i_sysun='undef'
-i_sysutsname='undef'
-i_sysvfs='undef'
-i_syswait='undef'
-i_termio='undef'
-i_termios='undef'
-i_time='define'
-i_unistd='define'
-i_ustat='undef'
-i_utime='undef'
-i_varargs='undef'
-i_varhdr='stdarg.h'
-i_vfork='undef'
-i_wchar='undef'
-i_wctype='undef'
-i_xlocale='undef'
-ignore_versioned_solibs='y'
-inc_version_list=''
-inc_version_list_init='0'
-installprefix='\\system'
-installprefixexp='\\system'
-installsitearch='\\system\\libs\\perl\\siteperl\\x.y.z\\thumb-symbian'
-installsitelib='\\system\\libs\\perl\\siteperl\\x.y.z'
-installstyle='lib\\perl5'
-installusrbinperl='undef'
-intsize='4'
-ivdformat='"ld"'
-ivsize='4'
-ivtype='long'
-ld=':'
-lddlflags=''
-ldflags=''
-lib_ext='.a'
-libc='stdlib'
-libm_lib_version='0'
-libperl='libperl.a'
-localtime_r_proto='0'
-longdblinfbytes='0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00'
-longdblkind=0
-longdblmantbits='64'
-longdblnanbytes='0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00'
-longdblsize=8
-longlongsize=8
-longsize='4'
-lseeksize=4
-lseektype=int
-mad='undef'
-make='make'
-malloctype='int*'
-malloctype='void *'
-mmaptype='void *'
-modetype='mode_t'
-modetype=int
-multiarch='undef'
-myarchname='thumb-symbian'
-myuname='symbian'
-need_va_copy='undef'
-netdb_hlen_type='int'
-netdb_host_type='const char *'
-netdb_name_type='const char *'
-netdb_net_type='unsigned long'
-nroff='nroff'
-nv_overflows_integers_at='256.0*256.0*256.0*256.0*256.0*256.0*2.0*2.0*2.0*2.0*2.0'
-nv_preserves_uv_bits='0'
-nveformat='"e"'
-nvfformat='"f"'
-nvgformat='"g"'
-nvmantbits='52'
-nvsize='8'
-nvtype='double'
-o_nonblock='O_NONBLOCK'
-obj_ext='.o'
-old_pthread_create_joinable=''
-optimize='-O2'
-orderlib='false'
-osname='symbian'
-osvers='7.0s'
-otherlibdirs=''
-package=''
-path_sep=';'
-perl_static_inline='static'
-phostname='hostname'
-pidtype='int'
-pm_apiversion='5.005'
-privlib='\\system\\libs\\perl\\x.y.z'
-privlibexp='\\system\\libs\\perl\\x.y.z'
-procselfexe=''
-prototype='define'
-ptrsize='4'
-quadkind='4'
-quadtype='int64_t'
-randbits='48'
-randfunc='drand48'
-random_r_proto='0'
-randseedtype='int'
-ranlib=':'
-rd_nodata='-1'
-readdir64_r_proto='0'
-readdir_r_proto='0'
-sGMTIME_max='2147483647'
-sGMTIME_min='0'
-sLOCALTIME_max='2147483647'
-sLOCALTIME_min='0'
-sPRIEUldbl='"llE"'
-sPRIFUldbl='"llF"'
-sPRIGUldbl='"llG"'
-sPRIXU64='"LX"'
-sPRId64='"Ld"'
-sPRIeldbl=''
-sPRIfldbl=''
-sPRIgldbl=''
-sPRIi64='"Li"'
-sPRIo64='"Lo"'
-sPRIu64='"Lu"'
-sPRIx64='"Lx"'
-sSCNfldbl=''
-sched_yield='sched_yield()'
-scriptdir='\\system\\apps\\perl'
-scriptdirexp='\\system\\apps\\perl'
-sdkvers=''
-seedfunc='srand'
-selectminbits='32'
-selecttype=int
-setgrent_r_proto='0'
-sethostent_r_proto='0'
-setlocale_r_proto='0'
-setnetent_r_proto='0'
-setprotoent_r_proto='0'
-setpwent_r_proto='0'
-setservent_r_proto='0'
-sh=':'
-shmattype='void *'
-shortsize=2
-sig_name_init='0'
-sig_num_init='0'
-sig_size='1'
-signal_t=void
-sitearch='\\system\\libs\\perl\\siteperl\\x.y.z\\thumb-symbian'
-sitearchexp='\\system\\libs\\perl\\siteperl\\x.y.z\\thumb-symbian'
-sitelib='\\system\\libs\\perl\\siteperl\\x.y.z'
-sitelib_stem='\\system\\libs\\perl'
-sitelibexp='\\system\\libs\\perl\\siteperl\\x.y.z'
-siteprefix='\\system'
-siteprefixexp='\\system'
-sizesize=4
-sizetype=size_t
-so='o'
-socksizetype='unsigned int'
-srand48_r_proto='0'
-srandom_r_proto='0'
-src=''
-ssizetype=int
-st_ino_sign='1'
-st_ino_size='4'
-startperl=''
-stdchar=char
-stdio_base='((fp)->_IO_read_base)'
-stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)'
-stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
-stdio_filbuf=''
-stdio_ptr='((fp)->_IO_read_ptr)'
-stdio_stream_array=''
-strerror_r_proto='0'
-targetarch='thumb-symbian'
-targetsh=':'
-timetype=time_t
-tmpnam_r_proto='0'
-touch='touch'
-ttyname_r_proto='0'
-u16size='2'
-u16type='unsigned short'
-u32size='4'
-u32type='unsigned long'
-u64size='8'
-u64type='uint64_t'
-u8size='1'
-u8type='unsigned char'
-uidformat='"lu"'
-uidsign='1'
-uidsize='4'
-uidtype=int
-uquadtype='uint64_t'
-use5005threads='undef'
-use64bitall='undef'
-use64bitint='undef'
-usecbacktrace='undef'
-usecrosscompile='undef'
-usedevel='undef'
-usedl='undef'
-usedtrace='undef'
-usefaststdio='undef'
-useithreads='undef'
-usekernprocpathname='undef'
-uselargefiles='undef'
-uselongdouble='undef'
-usemallocwrap='define'
-usemorebits='undef'
-usemultiplicity='undef'
-usemymalloc='n'
-usenm='false'
-usensgetexecutablepath='undef'
-useopcode='true'
-useperlio='define'
-useposix='true'
-usequadmath='undef'
-usereentrant='undef'
-userelocatableinc='undef'
-useshrplib='false'
-usesitecustomize='undef'
-usesocks='undef'
-usethreads='undef'
-usevendorprefix='n'
-usevfork='false'
-uvXUformat='"lX"'
-uvoformat='"lo"'
-uvsize='4'
-uvtype='unsigned long'
-uvuformat='"lu"'
-uvxformat='"lx"'
-vendorarch=''
-vendorarchexp=''
-vendorlib=''
-vendorlib_stem=''
-vendorlibexp=''
-vendorprefix=''
-vendorprefixexp=''
-version='x.y.z'
-versiononly='undef'
-xs_apiversion='5.008'
-zip=''
-PERL_CONFIG_SH='true'
diff --git a/symbian/cwd.pl b/symbian/cwd.pl
deleted file mode 100644 (file)
index 3ee402b..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-use strict;
-use Cwd;
-my $CWD = getcwd();
-$CWD =~ s!^[a-z]:!!i;
-$CWD =~ s!/!\\!g;
-$CWD;
diff --git a/symbian/demo_pl b/symbian/demo_pl
deleted file mode 100644 (file)
index 9759347..0000000
+++ /dev/null
@@ -1,128 +0,0 @@
-#!/usr/bin/perl -w
-
-#
-# demo_pl
-#
-# A "self-extracting archive" for some demo scripts.
-#
-# hello                - the classic
-# helloyou     - advanced classic
-# httpget1     - simple sockets
-# httpget2     - simple sockets done complex
-# md5          - core extension
-# time         - system call
-# times                - more system calls
-#
-
-use strict;
-
-unless (@ARGV && $ARGV[0] =~ /^(?:list|extract|cleanup)$/) {
-   die "$0: Usage: $0 [list|extract|cleanup]\n";
-}
-
-my $action = shift;
-my $list    = $action eq 'list';
-my $extract = $action eq 'extract';
-my $cleanup = $action eq 'cleanup';
-
-my $fh;
-while (<DATA>) {
-   if (/^-- (.+\.pl)$/) {
-      if ($cleanup) {
-         print "Deleting $1\n";
-         unlink $1 or warn "$0: $1: $!\n";
-      } elsif ($extract) {
-        defined $fh && close($fh);
-        open($fh, ">", $1) or die "$0: '$1': $!\n";
-        print "Extracting $1\n";
-      } elsif ($list) {
-        print "$1\n";
-      }
-   } else {
-      print $fh $_ if $extract;
-   }
-}
-defined $fh && close($fh);
-exit(0);
-__END__
--- hello.pl
-print "hello world!\n";
--- helloyou.pl
-print "What is your name?\n";
-chomp(my $name = <STDIN>);
-print "Hello, $name!\n";
-print "Amazing fact #1:\n";
-printf "Your name has\n%d character%s!\n",
-       length($name), length($name) == 1 ? "" : "s";
-print "Amazing fact #2:\n";
-printf "Your name is\n%s backwards!\n", scalar reverse $name;
--- httpget1.pl
-print "(Using plain sockets)\n";
-use Socket;
-print "Host? ";
-my $host = <STDIN>;
-chomp($host);
-$host = 'www.nokia.com' unless length $host;
-my $port    = 80;
-my $iaddr   = inet_aton($host)           || die "no host: $host";
-my $paddr   = sockaddr_in($port, $iaddr);
-my $proto   = getprotobyname("tcp");
-socket(S, PF_INET, SOCK_STREAM, $proto)  || die "socket: $!";
-connect(S, $paddr)                       || die "connect: $!";
-print "$host:$port:\nConnected.\n";
-select(S); $| = 1; select(STDOUT);
-print S "GET / HTTP/1.0\012\012"         || die "GET /: $!";
-my @line;
-print "Receiving...\n";
-while (my $line = <S>) {
-    push @line, $line; 
-}
-close(S)                                 || die "close: $!";
-printf "Got %d lines.\n", scalar @line;
--- httpget2.pl
-use IO::Socket;
-print "(Using IO::Socket)\n";
-print "Host? ";
-my $host = <STDIN>;
-chomp($host);
-$host = 'www.nokia.com' unless length $host;
-my $port = 80;
-my $remote =
-    IO::Socket::INET->new(Proto    => "tcp",
-                          PeerAddr => $host,
-                          PeerPort => $port);
-print "$host:$port:\nConnected.\n";
-select($remote); $| = 1; select(STDOUT);
-print $remote "GET / HTTP/1.0\012\012" || die "GET /: $!";
-my @line;
-print "Receiving...\n";
-while (my $line = <$remote>) {
-    push @line, $line; 
-}
-close($remote)                         || die "close: $!";
-printf "Got %d lines.\n", scalar @line;
--- md5.pl
-use Digest::MD5 'md5_hex';
-print "(Using Digest::MD5)\nMD5 of 'Perl' is:\n";
-print md5_hex('Perl'), "\n";
--- time.pl
-print "Running in $^O\n";
-print scalar localtime, "\n";
--- times.pl
-use Time::HiRes qw(time sleep);
-print CORE::time(), "\n";
-print "Hires\n";
-print time(), "\n";
-print "Sleep 1.5 s...\n";
-sleep(1.5);
-print time(), "\n";
-print "To one million...\n";
-my $t0 = time();
-print $t0, "\n";
-print "Cpu  ", scalar times(), "\n";
-for(my $i = 0; $i < 1e6; $i++) {}
-print "Cpu  ", scalar times(), "\n";
-my $t1 = time();
-print $t1, "\n";
-print "Wall ", $t1 - $t0, "\n";
-
diff --git a/symbian/ext/Moped/Msg/Msg.mmp b/symbian/ext/Moped/Msg/Msg.mmp
deleted file mode 100644 (file)
index 7736d2a..0000000
+++ /dev/null
@@ -1 +0,0 @@
-LIBRARY                etel.lib gsmbas.lib\r
diff --git a/symbian/ext/Moped/Msg/Msg.pkg b/symbian/ext/Moped/Msg/Msg.pkg
deleted file mode 100644 (file)
index eb7aed0..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-; MoDev::Msg installation script\r
-;\r
-; The supported languages\r
-&EN;\r
-;\r
-; The installation name and header data\r
-;\r
-#{"MoDev::Msg"},(0x0FFFFFFF),0,1,0\r
-;\r
-; Platform supported is Series 60\r
-;\r
-(0x101F6F88), 0, 0, 0, {"Series60ProductID"}\r
-; The files to install\r
-;\r
-"Msg.pm"-"!:\System\Libs\Perl\5.9.3\MoDev\Msg.pm"\r
-"\epoc32\release\thumb\urel\Msg.dll"-"!:\System\Libs\Perl\5.9.3\thumb-symbian\Msg.dll"\r
diff --git a/symbian/ext/Moped/Msg/Msg.pm b/symbian/ext/Moped/Msg/Msg.pm
deleted file mode 100644 (file)
index e1aaef8..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-package Moped::Msg;
-use strict;
-use vars qw(@ISA $VERSION);
-require DynaLoader;
-@ISA = qw(DynaLoader);
-$VERSION = '0.01';
-bootstrap Moped::Msg;
-1;
-
diff --git a/symbian/ext/Moped/Msg/Msg.xs b/symbian/ext/Moped/Msg/Msg.xs
deleted file mode 100644 (file)
index ae47e0a..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-#include <eikenv.h>
-#include <e32std.h>
-
-#include "etelbgsm.h" // From Symbian 6.1 SDK (the Communicator SDK)
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#include "PerlBase.h"
-#include "EXTERN.h"
-#include "perl.h"
-#include "XSUB.h"
-#ifdef __cplusplus
-}
-#endif
-
-_LIT(KTsyName, "phonetsy.tsy");
-
-#define XS_SYMBIAN_OR_EMPTY(e, c) errno = (e) = (c); if ((e) != KErrNone) XSRETURN_EMPTY
-
-MODULE = Moped::Msg    PACKAGE = Moped::Msg
-
-PROTOTYPES: ENABLE
-
-extern "C" void
-get_gsm_network_info()
-    PREINIT:
-       TInt                    error;
-       TInt                    enumphone;
-       RTelServer              server;
-       RBasicGsmPhone          phone;
-       RTelServer::TPhoneInfo  info;
-       MBasicGsmPhoneNetwork::TCurrentNetworkInfo networkinfo;
-    PPCODE:
-       if (GIMME != G_ARRAY)
-           XSRETURN_UNDEF;
-       XS_SYMBIAN_OR_EMPTY(error, server.Connect());
-       XS_SYMBIAN_OR_EMPTY(error, server.LoadPhoneModule(KTsyName));
-       XS_SYMBIAN_OR_EMPTY(error, server.EnumeratePhones(enumphone));
-       if (enumphone < 1)
-           XSRETURN_EMPTY;
-       XS_SYMBIAN_OR_EMPTY(error, server.GetPhoneInfo(0, info));
-       XS_SYMBIAN_OR_EMPTY(error, phone.Open(server, info.iName));
-       XS_SYMBIAN_OR_EMPTY(error, phone.GetCurrentNetworkInfo(networkinfo));
-       EXTEND(SP, 4);
-       PUSHs(sv_2mortal(newSViv(networkinfo.iNetworkInfo.iId.iMCC)));
-       PUSHs(sv_2mortal(newSViv(networkinfo.iNetworkInfo.iId.iMNC)));
-       PUSHs(sv_2mortal(newSViv(networkinfo.iLocationAreaCode)));
-       PUSHs(sv_2mortal(newSViv(networkinfo.iCellId)));
-
-
diff --git a/symbian/ext/Moped/Msg/README b/symbian/ext/Moped/Msg/README
deleted file mode 100644 (file)
index 2d31c29..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-NOTE: this is just a sample of how building Symbian specific
-extensions COULD work.  This is most probably far from the best
-or final way of doing things.
-
-The Moped::Msg currently defines just a single static method,
-get_gsm_network_info(), which returns the GSM network and cell id.
-
-The extension code is in Msg.xs (which gets translated by xsubpp into
-Msg.cpp), the Perl glue code is in Msg.pm.  To understand the .xs
-syntax studying perlxstut and perlxs is recommended.
-
-The prerequisites for compiling this extension are:
-
-(1) The Perl for Symbian SDK installed (either done "make sdkinstall",
-    or separately installed the perlXYZsdk.zip).
-
-(2) The etelbgsm.h header, which is available for example from
-    the Symbian 6.1 SDK (the Communicator SDK). This must be
-    copied to ...\epoc32\include.
-
-(3) The etel.lib and the gsmbas.lib, they should come both
-    with the 6.1 and 7.0s SDK.  The WINS udeb and THUMB urel
-    versions of these must be copied to the directories
-    ...\epoc32\release\wins\udeb and ...\epoc32\release\thumb\urel,
-    respectively.
-
-To compile (assuming Perl 5.9.3 and Series 60 SDK 2.6 for Visual C):
-
-  perl \symbian\perl\5.9.3\bin\xsbuild.pl --cpp --extversion=0.1 ext\symbian\Moped\Msg
-
-The --symbian indicates the Symbian and SDK version, the --cplusplus
-indicates that one should generate a .cpp file instead of a .c file.
-
-The xsbuild.pl both configures and builds the extension.
-To clean do "make clean" or "make distclean".
-
-The location.pl demonstrates using the extension.
-
-To create a SIS:
-
-  makesis -d%EPOCROOT% ext\Moped\Msg\Msg.pkg
-
-TODO: automate the determination of the EXTVERSION (from .pkg?)
-and of creation of .pkg (the location of the .dll in the build
-and in the target).
-
-
-
-
diff --git a/symbian/ext/Moped/Msg/bld.inf b/symbian/ext/Moped/Msg/bld.inf
deleted file mode 100644 (file)
index 121a66a..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-PRJ_MMPFILES\r
-Msg.mmp\r
-PRJ_PLATFORMS\r
-wins thumb\r
diff --git a/symbian/ext/Moped/Msg/location.pl b/symbian/ext/Moped/Msg/location.pl
deleted file mode 100644 (file)
index 50df335..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-use Moped::Msg;
-my ($MCC, $MNC, $LAC, $Cell) =
-  Moped::Msg::get_gsm_network_info();
-print "MCC  = $MCC\n";
-print "MNC  = $MNC\n";
-print "LAC  = $LAC\n";
-print "Cell = $Cell\n";
-
diff --git a/symbian/find_writeable_data.pl b/symbian/find_writeable_data.pl
deleted file mode 100644 (file)
index bdb5790..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-#!/usr/bin/perl -w
-
-#
-# find_writeable_data - find non-const data in Symbian object files
-#
-# Use this when PETRAN tells you "dll has (un)initialised data".
-# Expects to find the Symbian (GNU) nm in the executable path.
-#
-# Copyright (c) 2004-2005 Nokia.  All rights reserved.
-#
-# This utility is licensed under the same terms as Perl itself.
-#
-
-use strict;
-
-BEGIN {
-  unless (exists $ENV{EPOCROOT}) {
-    die "$0: EPOCROOT unset\n";
-  }
-  if (open(my $fh, "nm --version |")) {
-    unless (<$fh> =~ /^GNU nm .*-psion-.*/) {
-      die "$0: Cannot find the GNU nm from Symbian\n";
-    }
-    close($fh);
-  } else {
-      die "$0: Cannot find any nm in the executable path: $!\n";
-  }
-  unless (@ARGV && $ARGV[0] =~ /\.mmp$/i) {
-    die "$0: Must specify target mmp as the first argument\n";
-  }
-}
-
-use Cwd;
-use File::Basename;
-
-my $dir = lc(getcwd());
-my $tgt = basename(shift(@ARGV), ".mmp");
-
-$dir =~ s!/!\\!g;
-$dir =~ s!^c:!c:$ENV{EPOCROOT}epoc32\\build!;
-$dir .= "\\$tgt\\thumb\\urel";
-
-print $dir, "\n";
-
-unless (-d $dir) {
-  die "$0: No directory $dir\n";
-}
-
-my @o = glob("$dir\\*.o");
-
-unless (@o) {
-  die "$0: No objects in $dir\n";
-}
-
-for my $o (@o) {
-  if (open(my $fh, "nm $o |")) {
-    my @d;
-    while (<$fh>) {
-      next if / [TURtr] /;
-      push @d, $_;
-    }
-    close($fh);
-    if (@d) {
-      $o =~ s!^\Q$dir\E\\!!;
-      print "$o:\n";
-      print @d;
-    }
-  } else {
-    warn "$0: nm $o failed: $!\n";
-  }
-} 
-
-exit(0);
diff --git a/symbian/hexdump.pl b/symbian/hexdump.pl
deleted file mode 100644 (file)
index d1741f8..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-#!/usr/bin/perl -w
-
-use strict;
-
-die "$0: EPOCROOT unset\n" unless exists $ENV{EPOCROOT};
-die "$0: EPOCROOT directory does exists\n" unless -d $ENV{EPOCROOT};
-
-my $EPOC32 = "$ENV{EPOCROOT}epoc32";
-my $EXE = "$EPOC32\\release\\thumb\\urel\\perlapp.app";
-my $RSC = "$EPOC32\\data\\z\\system\\apps\\perlapp\\perlapp.rsc";
-
-use Fcntl qw(O_RDONLY);
-
-my %new = ($EXE => 'perlappmin.hex',
-          $RSC => 'perlrscmin.hex');
-
-for my $fn ($EXE, $RSC) {
-    if (sysopen(my $fh, $fn, O_RDONLY)) {
-       my $buffer;
-       my $size = -s $fn;
-       my $read;
-       my $newfn = $new{$fn};
-       unlink($newfn);
-       if (($read = sysread($fh, $buffer, $size)) == $size) {
-           if (open(my $newfh, '>', $newfn)) {
-               binmode($newfh);
-               print $newfh unpack("H*", $buffer);
-               close($newfh);
-               print "Created $newfn\n";
-           } else {
-               die qq[$0: open ">$newfn" failed: $!\n];
-           }
-       } else {
-           die qq[$0: sysread $size returned $read\n];
-       }
-       close($fh);
-    } else {
-       die qq[$0: sysopen "$fn": $!\n];
-    }
-}
-
diff --git a/symbian/install.cfg b/symbian/install.cfg
deleted file mode 100644 (file)
index 918d300..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-# install.cfg
-#
-# Copyright (c) 2004-2005 Nokia.  All Rights Reserved.
-#
-# This file details what library files to include in the perlXYZlib.sis,
-# and what extensions to build for the perlXYZext.sis.
-# The lines beginning with "lib" are # included as-is from the lib/.
-# The lines beginning with "ext" tell either how to build and package
-# the extensions - or not.
-
-#
-# Libraries.
-#
-lib    AnyDBM_File.pm
-lib    AutoLoader.pm
-lib    base.pm
-lib    Benchmark.pm
-lib    Carp.pm
-lib    Carp/Heavy.pm
-lib    Cwd.pm
-lib    constant.pm
-lib    DBM_Filter.pm
-lib    Digest/base.pm
-lib    DirHandle.pm
-lib    Exporter.pm
-lib    Exporter/Heavy.pm
-lib    File/Basename.pm
-lib    File/Compare.pm
-lib    File/Copy.pm
-lib    File/DosGlob.pm
-lib    File/Find.pm
-lib    File/Path.pm
-lib    File/Spec.pm
-lib    File/Spec/Unix.pm
-lib    File/Spec/Win32.pm
-lib    File/Temp.pm
-lib    FileHandle.pm
-lib    Filter/Simple.pm
-lib    if.pm
-lib    integer.pm
-lib    IO/Zlib.pm
-lib    lib.pm
-lib    Net/Cmd.pm
-lib    Net/Config.pm
-lib    Net/Domain.pm
-lib    Net/FTP.pm
-lib    Net/FTP/A.pm
-lib    Net/FTP/E.pm
-lib    Net/FTP/I.pm
-lib    Net/FTP/L.pm
-lib    Net/FTP/dataconn.pm
-lib    Net/NNTP.pm
-lib    Net/Netrc.pm
-lib    Net/Ping.pm
-lib    Net/POP3.pm
-lib    Net/SMTP.pm
-lib    Net/Time.pm
-lib    NEXT.pm
-lib    overload.pm
-lib    SelectSaver.pm
-lib    strict.pm
-lib    Symbol.pm
-lib    UNIVERSAL.pm
-# lib  utf8.pm
-# lib  utf8_heavy.pl
-lib    vars.pm
-lib    warnings.pm
-lib    warnings/register.pm
-# 
-# Extensions.
-#
-ext    attributes
-ext    Compress/Raw/Zlib       -zlib-src
-ext    Cwd
-ext    Data/Dumper
-ext    Devel/Peek
-ext    Digest/MD5
-ext    Digest/SHA
-ext    Errno
-ext    Fcntl                   CONST
-ext    File/Glob               CONST
-ext    Filter/Util/Call
-ext    Hash/Util
-ext    IO
-ext    List/Util
-ext    Math/BigInt/FastCalc
-ext    MIME/Base64
-ext    PerlIO/scalar
-ext    PerlIO/via
-ext    SDBM_File               -sdbm/db?.c -sdbm/util.c
-ext    Socket                  CONST
-ext    Storable
-ext    Text/Soundex
-ext    Time/HiRes              CONST
-ext    Time/Piece              
-ext    XSLoader
-# ext  B                       ERROR
-# ext  ByteLoader              byterun.c ERROR VERSION
-# ext  Devel/DProf             nonconst
-# ext  Devel/PPPort            PORT
-# ext  Encode                  nonconst Encode/encode.h def_t.c encengine.c
-ext    I18N/Langinfo           PORT
-# ext  IPC/SysV                PORT
-# ext  NDBM_File               PORT
-# ext  ODBM_File               PORT
-# ext  Opcode                  ERROR
-# ext  PerlIO/encoding         Encode
-# ext  POSIX                   CONST USELESS
-# ext  re                      ERROR
-# ext  Sys/Hostname            PORT
-# ext  Sys/Syslog              PORT
-# ext  threads                 PORT
-# ext  threads/shared          PORT
-# ext  Unicode/Normalize       nonconst
-# ext  Unicode/Collate nonconst
-# ext  Win32                   USELESS
-# ext  XS/APItest              USELESS
-# ext  XS/Typemap              nonconst USELESS
-
diff --git a/symbian/makesis.pl b/symbian/makesis.pl
deleted file mode 100644 (file)
index 58199ce..0000000
+++ /dev/null
@@ -1,203 +0,0 @@
-#!/usr/bin/perl -w
-
-# Copyright (c) 2004-2005 Nokia.  All rights reserved.
-
-use strict;
-use lib "symbian";
-
-do "sanity.pl" or die $@;
-
-my %VERSION = %{ do "version.pl" or die $@ };
-my $VERSION = "$VERSION{REVISION}$VERSION{VERSION}$VERSION{SUBVERSION}";
-my $R_V_SV  = "$VERSION{REVISION}.$VERSION{VERSION}.$VERSION{SUBVERSION}";
-
-my ($SYMBIAN_ROOT, $SYMBIAN_VERSION, $SDK_NAME, $SDK_VARIANT, $SDK_VERSION) =
-    @{ do "sdk.pl" or die $@ };
-my $UID  = do "uid.pl" or die $@;
-my %PORT = %{ do "port.pl" or die $@ };
-
-my $ARM = 'armv5';#'thumb'; # TODO
-my $S60SDK = $ENV{S60SDK}; # from sdk.pl
-my $S80SDK = $ENV{S80SDK}; # from sdk.pl
-my $S90SDK = $ENV{S90SDK}; # from sdk.pl
-
-my $UREL = $ENV{UREL}; # from sdk.pl
-$UREL =~ s/-ARM-/$ARM/;
-
-my $app = '!:\System\Apps\Perl';
-my $lib = '!:\System\Libs';
-
-my @target = @ARGV
-  ? @ARGV
-  : (
-    "miniperl",          "perl",
-    "perl${VERSION}dll", "perl${VERSION}lib",
-    "perl${VERSION}ext"
-  );
-
-my %suffix;
-@suffix{ "miniperl", "perl", "perl$VERSION" } = ( "exe", "exe", "dll", );
-
-for my $target (@target) {
-    $target = "perl${VERSION}" if $target eq "perl${VERSION}dll";
-
-    my %copy;
-    my $pkg = "$target.pkg";
-    print "\nCreating $pkg...\n";
-
-    my $suffix = $suffix{$target} || "";
-    my $dst = $suffix eq "dll" ? $lib : $app;
-
-    my $srctarget = "$UREL\\$target.$suffix";
-
-    if ( $target =~ /^(miniperl|perl|perl${VERSION}(?:dll)?)$/ ) {
-        $copy{$srctarget} = "$dst\\$target.$suffix";
-        print "\t$target.$suffix\n";
-    }
-    if ( $target eq "perl${VERSION}lib" ) {
-        print "Libraries...\n";
-
-        print "\tConfig.pm\n";
-        $copy{"lib\\Config.pm"} =
-          "$lib\\Perl\\$R_V_SV\\thumb-symbian\\Config.pm";
-
-        print "\tConfig_heavy.pl\n";
-        $copy{"xlib\\symbian\\Config_heavy.pl"} =
-          "$lib\\Perl\\$R_V_SV\\thumb-symbian\\Config_heavy.pl";
-
-        print "\tDynaLoader.pm\n";
-        $copy{"ext\\DynaLoader\\DynaLoader.pm"} =
-          "$lib\\Perl\\$R_V_SV\\DynaLoader.pm";
-
-        print "\tErrno.pm\n";
-        $copy{"ext\\Errno\\Errno.pm"} = "$lib\\Perl\\$R_V_SV\\Errno.pm";
-
-        open( my $cfg, '<', "symbian/install.cfg" )
-          or die "$!: symbian/install.cfg: $!\n";
-        while (<$cfg>) {
-            next unless /^lib\s+(.+)/;
-            chomp;
-            my $f = $1;
-           unless (-f "lib/$f") {
-               warn qq[$0: No "lib/$f", skipping...\n];
-               next;
-           }
-            $f =~ s:/:\\:g;
-            $copy{"lib\\$f"} = "$lib\\Perl\\$R_V_SV\\$f";
-            print "\t$f\n";
-        }
-        close($cfg);
-    }
-
-    if ( $target eq "perl${VERSION}ext" ) {
-        my @lst = glob("symbian/*.lst");
-        print "Extensions...\n";
-        print "\t(none found)\n" unless @lst;
-        for my $lst (@lst) {
-            $lst =~ m:^symbian/(.+)\.:;
-            my $ext = $1;
-            $ext =~ s!-!::!g;
-            print "\t$ext\n";
-            if ( open( my $pkg, '<', $lst ) ) {
-                while (<$pkg>) {
-                    if (m!^"(.+)"-"(.+)"$!) {
-                        my ( $src, $dst ) = ( $1, $2 );
-                        $copy{$src} = $dst;
-                    }
-                    else {
-                        warn "$0: $lst: $.: unknown syntax\n";
-                    }
-                }
-                close($pkg);
-            }
-            else {
-                warn "$0: $lst: $!\n";
-            }
-        }
-    }
-
-    for my $file ( keys %copy ) {
-        warn "$0: $file does not exist\n" unless -f $file;
-    }
-
-    my @copy = map { qq["$_"-"$copy{$_}"] } sort keys %copy;
-    my $copy = join( "\n", @copy );
-
-    my %UID = (
-        "miniperl"          => 0,
-        "perl"              => 0,
-        "perl${VERSION}"    => $UID + 0,
-        "perl${VERSION}dll" => $UID + 0,
-        "perl${VERSION}ext" => $UID + 1,
-        "perl${VERSION}lib" => $UID + 2,
-        "perlapp"           => $UID + 3,
-        "perlrecog"         => $UID + 4,
-        "perlappmin"        => $UID + 5,
-    );
-
-    die "$0: target has no UID\n" unless defined $UID{$target};
-
-    my $uid = sprintf( "0x%08X", $UID{$target} );
-
-    my ( $MAJOR, $MINOR, $PATCH ) = ( 0, 0, 0 );
-
-    if ( $target =~ m:^perl$VERSION(dll|ext|lib)?$: ) {
-        my $pkg = defined $1 ? $1 : "dll";
-        $MAJOR = $PORT{$pkg}->{MAJOR};
-        $MINOR = $PORT{$pkg}->{MINOR};
-        $PATCH = $PORT{$pkg}->{PATCH};
-    }
-
-    die "$0: Bad version for $target\n"
-      unless defined $MAJOR
-      && ( $MAJOR eq 0 || $MAJOR > 0 )
-      && defined $MINOR
-      && ( $MINOR eq 0 || $MINOR > 0 )
-      && defined $PATCH
-      && ( $PATCH eq 0 || $PATCH > 0 );
-
-     my $ProductId =
-         defined $S60SDK ?
-qq[;Supports Series 60 v0.9\n(0x101F6F88), 0, 0, 0, {"Series60ProductID"}\n] :
-         defined $S80SDK ?
-qq[;Supports Series 80 v2.0\n(0x101F8ED2), 0, 0, 0, {"Series80ProductID"}\n] :
-         defined $S90SDK ?
-qq[;Supports Series 90 v1.1\n(0x101FBE05), 0, 0, 0, {"Series90ProductID"}\n] :
-         ";Supports Series NN";
-
-    open PKG, '>', $pkg or die "$0: failed to create $pkg: $!\n";
-    print PKG <<__EOF__;
-; \u$target installation script
-;
-; The supported languages
-&EN;
-;
-; The installation name and header data
-;
-#{"\u$target"},($uid),$MAJOR,$MINOR,$PATCH
-;
-;Localised Vendor name
-%{"Vendor-EN"}
-;
-; Private key and certificate (unused)
-;
-;* "\u$target.key", "\u$target.cer"
-;
-$ProductId
-; The files to install
-;
-$copy
-__EOF__
-    close PKG;
-
-    print "Created $pkg\n";
-
-    print "Running makesis...\n";
-
-    unlink("$target.sis");
-
-    system("makesis $pkg") == 0
-      || die "$0: makesis $pkg failed: $!\n";
-}
-
-exit(0);
diff --git a/symbian/port.pl b/symbian/port.pl
deleted file mode 100644 (file)
index 599321d..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-{
-  dll => { MAJOR => 0, MINOR => 4, PATCH => 2 },
-  ext => { MAJOR => 0, MINOR => 4, PATCH => 2 }, 
-  lib => { MAJOR => 0, MINOR => 4, PATCH => 2 }, 
-}
-
diff --git a/symbian/sanity.pl b/symbian/sanity.pl
deleted file mode 100644 (file)
index 6487c57..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-use strict;
-
-if (exists $ENV{'!C:'}) {
-  print "You are running this under Cygwin, aren't you? (found '!C' in %ENV)\n";
-  print "Are you perhaps using Cygwin Perl? (\$^O is '$^O')\n" if $^O =~ /cygwin/;
-  print "I'm sorry but only cmd.exe with e.g. the ActivePerl will work.\n";
-  exit(1);
-}
-
-unless(# S60 2.x
-       $ENV{PATH} =~ m!\\program files\\common files\\symbian\\tools!i
-       ||
-       # S60 1.2
-       $ENV{PATH} =~ m!\\symbian\\6.1\\shared\\epoc32\\tools!i
-       ||
-       # S80
-       $ENV{PATH} =~ m!\\s80_.+?\\epoc32\\!i
-       ||
-       # UIQ
-       $ENV{PATH} =~ m!\\uiq_.+?\\epoc32\\!i
-       ) {
-    print "I do not think you have installed a Symbian SDK, your PATH is:\n$ENV{PATH}\n";
-    exit(1);
-}
-
-unless (-f "symbian/symbianish.h") {
-  print "You must run this in the top level directory.\n";
-  exit(1);
-}
-
-if ($] < 5.008) {
-  print "You must configure with Perl 5.8 or later.\n";
-  exit(1);
-}
-
-1;
diff --git a/symbian/sdk.pl b/symbian/sdk.pl
deleted file mode 100644 (file)
index c8845e8..0000000
+++ /dev/null
@@ -1,216 +0,0 @@
-use strict;
-
-my $SYMBIAN_VERSION;
-my $SYMBIAN_ROOT;
-my $SDK_NAME;
-my $SDK_VARIANT;
-my $SDK_VERSION;
-my $WIN;
-
-if ($ENV{PATH} =~ m!\\Symbian\\(.+?)\\(.+?)\\Epoc32\\gcc\\bin!i) {
-    $SYMBIAN_VERSION = $1;
-    $SDK_NAME = $2;
-    $WIN = ($SDK_NAME =~ m!_CW!i || $SDK_NAME eq '8.1a') ?
-       'winscw' : 'wins';
-    $ENV{WIN} = $WIN;
-    if ($SDK_NAME =~ m!Series60_v20!) {
-       $SDK_VARIANT = 'S60';
-       $SDK_VERSION = $ENV{S60SDK} = '2.0';
-    } elsif ($SDK_NAME =~ m!Series60_v21!) {
-       $SDK_VARIANT = 'S60';
-       $SDK_VERSION = $ENV{S60SDK} = '2.1';
-    } elsif ($SDK_NAME =~ m!S60_2nd_FP2!) {
-       $SDK_VARIANT = 'S60';
-       $SDK_VERSION = $ENV{S60SDK} = '2.6';
-    } elsif ($SDK_NAME =~ m!S60_2nd_FP3!) {
-       $SDK_VARIANT = 'S60';
-       $SDK_VERSION = $ENV{S60SDK} = '2.8';
-    } elsif ($SDK_NAME =~ m!S80_DP2_0_SDK!) {
-       $SDK_VARIANT = 'S80';
-       $SDK_VERSION = $ENV{S80SDK} = '2.0';
-    } elsif ($SDK_NAME =~ m!Nokia_7710_SDK!) {
-       $SDK_VARIANT = 'S90';
-       $SDK_VERSION = $ENV{S90SDK} = '1.1';
-    }
-} elsif ($ENV{PATH} =~ m!\\S60\\devices\\(.+?)\\epoc32\\gcc\\bin!i) {
-       $SDK_VARIANT = 'S60';
-       $SDK_NAME = $1;
-       $WIN = $ENV{WIN} = 'winscw';
-       $SYMBIAN_VERSION = '9.4';
-       $SDK_VERSION = $ENV{S60SDK} = '5.0';
-       $SYMBIAN_ROOT = $ENV{EPOCROOT};
-} elsif ($ENV{PATH} =~ m!\\Symbian\\UIQ_(\d)(\d)\\Epoc32\\gcc\\bin!i) {
-    $SDK_NAME    = 'UIQ';
-    $SDK_VARIANT = 'UIQ';
-    $SDK_VERSION = $ENV{UIQSDK} = "$1.$2";
-    if ($SDK_VERSION =~ /^2\./) {
-       $SYMBIAN_VERSION = '7.0s';
-    } else {
-       die "$0: Unknown UIQ version '$SDK_VERSION'\n";
-    }
-    $WIN = 'winscw'; # This is CodeWarrior, how about Borland?
-    $ENV{WIN} = $WIN;
-}
-
-if (open(GCC, "gcc -v 2>&1 |")) {
-   while (<GCC>) {
-     # print;
-     if (/Reading specs from (.+?)\\Epoc32\\/i) {
-       $SYMBIAN_ROOT = $1;
-       # The S60SDK tells the Series 60 SDK version.
-       if ($ENV{S60SDK}) {
-          if ($SYMBIAN_ROOT eq 'C:\Symbian\6.1\Shared') { # Visual C.
-              $SYMBIAN_ROOT = 'C:\Symbian\6.1\Series60';
-              $SDK_VERSION = $ENV{S60SDK} = '1.2';
-          } elsif ($SYMBIAN_ROOT eq 'C:\Symbian\Series60_1_2_CW') { # CodeWarrior.
-              $SDK_VERSION = $ENV{S60SDK} = '1.2';
-          }
-       }
-       last;
-     }
-   }
-   close GCC;
-} else {
-  die "$0: failed to run gcc: $!\n";
-}
-
-die "$0: failed to locate the Symbian SDK\n" unless defined $SYMBIAN_ROOT;
-
-my $UARM = $ENV{UARM} ? $ENV{UARM} : "urel";
-my $UREL = "$SYMBIAN_ROOT\\epoc32\\release\\-ARM-\\$UARM";
-if ($SYMBIAN_ROOT eq 'C:\Symbian\6.1\Series60' && $ENV{WIN} eq 'winscw') {
-    $UREL = "C:\\Symbian\\Series60_1_2_CW\\epoc32\\release\\-ARM-\\urel";
-}
-$ENV{UREL} = $UREL;
-$ENV{UARM} = $UARM;
-
-[ $SYMBIAN_ROOT, $SYMBIAN_VERSION, $SDK_NAME, $SDK_VARIANT, $SDK_VERSION ];
-
-# The following is a cheat sheet for the right S60/S80 SDK settings.
-#
-# symbiancommon.bat:
-# set EPOC_BIN=%EPOCROOT%Epoc32\gcc\bin;%EPOCROOT%Epoc32\Tools
-# set MWCW=C:\Program Files\Metrowerks\CodeWarrior for Symbian OEM v2.8
-# set MSVC=C:\Program Files\Microsoft Visual Studio
-# set MSVC_BIN=%MSVC%\VC98\Bin;%MSVC%\Aux\MSDev98\Bin
-# set MSVC_INC=%MSVC%\VC98\atl\include;%MSVC%\VC98\include;%MSVC%\mfc\include;%MSVC%\include
-# set MSVC_LIB=%MSVC%\mfc\lib;%MSVC%\lib
-#
-# Note that if you are using Microsoft Visual Studio 8
-# (for example because you are using the Microsoft Visual C++
-#  2005 Express Edition), the MSVC settings will be different:
-# set MSVC=C:\Program Files\Microsoft Visual Studio 8\VC
-# set MSVC_BIN=%MSVC%\bin
-# set MSVC_INC=%MSVC%\include
-# set MSVC_LIB=%MSVC%\lib
-#
-# s60-1.2-cw:
-#
-# set EPOCROOT=\Symbian\Series60_1_2_CW\
-# symbiancommon
-# set PATH=%EPOC_BIN%;%MSVC_BIN%;%MWCW%\Bin;%MWCW%\Symbian_Tools\Command_Line_Tools;%MSVC_BIN%;C:\perl\bin;C:\winnt\system32;%PATH%
-# set USERDEFS=%USERDEFS% -D__SERIES60_12__ -D__SERIES60_MAJOR__=1 -D__SERIES60_MINOR__=2 -D__SERIES60_1X__
-#
-# s60-1.2-vc:
-#
-# set EPOCROOT=\Symbian\6.1\Series60\
-# symbiancommon
-# set PATH=\Symbian\6.1\Shared\Epoc32\gcc\bin;\Symbian\6.1\Shared\Epoc32\Tools;%MSVC_BIN%;C:\perl\bin;C:\winnt\system32;%PATH%
-# set INCLUDE=%MSVC_INC%
-# set LIB=%MSVC_LIB%
-# set USERDEFS=%USERDEFS% -D__SERIES60_12__ -D__SERIES60_MAJOR__=1 -D__SERIES60_MINOR__=2 -D__SERIES60_1X__
-#
-# s60-2.0-cw:
-#
-# set EPOCROOT=\Symbian\7.0s\Series60_v20_CW\
-# set EPOCDEVICE=Series60_2_0_CW:com.Nokia.Series60_2_0_CW
-# symbiancommon
-# set PATH=%EPOC_BIN%;%MWCW%\Bin;%MWCW%\Symbian_Tools\Command_Line_Tools;%MSVC_BIN%;C:\perl\bin;C:\winnt\system32;%PATH%
-# set USERDEFS=%USERDEFS% -D__SERIES60_20__ -D__SERIES60_MAJOR__=2 -D__SERIES60_MINOR__=0 -D__SERIES60_2X__
-#
-# s60-2.0-vc:
-#
-# set EPOCROOT=\Symbian\7.0s\Series60_v20\
-# set EPOCDEVICE=Series60_v20:com.nokia.series60
-# symbiancommon
-# set PATH=%EPOC_BIN%;%MSVC_BIN%;C:\perl\bin;C:\winnt\system32;%PATH%
-# set INCLUDE=%MSVC_INC%
-# set LIB=%MSVC_LIB%
-# set USERDEFS=%USERDEFS% -D__SERIES60_20__ -D__SERIES60_MAJOR__=2 -D__SERIES60_MINOR__=0 -D__SERIES60_2X__
-#
-# s60-2.1-cw:
-#
-# set EPOCROOT=\Symbian\7.0s\Series60_v21_CW\
-# set EPOCDEVICE=Series60_v21_CW:com.Nokia.series60
-# symbiancommon
-# set PATH=%EPOC_BIN%;%MWCW%\Bin;%MWCW%\Symbian_Tools\Command_Line_Tools;%MSVC_BIN%;C:\perl\bin;C:\winnt\system32;%PATH%
-# set USERDEFS=%USERDEFS% -D__SERIES60_21__ -D__SERIES60_MAJOR__=2 -D__SERIES60_MINOR__=1 -D__SERIES60_2X__
-#
-# s60-2.6-cw:
-#
-# set EPOCROOT=\Symbian\8.0a\S60_2nd_FP2_CW\
-# set EPOCDEVICE=S60_2nd_FP2_CW:com.nokia.series60
-# symbiancommon
-# set PATH=%EPOC_BIN%;%MWCW%\Bin;%MWCW%\Symbian_Tools\Command_Line_Tools;%MSVC_BIN%;C:\perl\bin;C:\winnt\system32;%PATH%
-# set USERDEFS=%USERDEFS% -D__SERIES60_26__ -D__SERIES60_MAJOR__=2 -D__SERIES60_MINOR__=6 -D__SERIES60_2X__ -D__BLUETOOTH_API_V2__
-#
-# s60-2.6-vc:
-#
-# set EPOCROOT=\Symbian\8.0a\S60_2nd_FP2\
-# set EPOCDEVICE=S60_2nd_FP2:com.nokia.Series60
-# symbiancommon
-# set PATH=%EPOC_BIN%;%MSVC_BIN%;C:\perl\bin;C:\winnt\system32;%PATH%
-# set INCLUDE=%MSVC_INC%
-# set LIB=%MSVC_LIB%
-# set USERDEFS=%USERDEFS% -D__SERIES60_26__ -D__SERIES60_MAJOR__=2 -D__SERIES60_MINOR__=6 -D__SERIES60_2X__ -D__BLUETOOTH_API_V2__
-#
-# s60-2.8-cw:
-#
-# set EPOCROOT=\Symbian\8.1a\S60_2nd_FP3\
-# set EPOCDEVICE=S60_2nd_FP3:com.nokia.series60
-# symbiancommon
-# set PATH=%EPOC_BIN%;%MWCW%\Bin;%MWCW%\Symbian_Tools\Command_Line_Tools;%MSVC_BIN%;C:\perl\bin;C:\winnt\system32;%PATH%
-# set USERDEFS=%USERDEFS% -D__SERIES60_28__ -D__SERIES60_MAJOR__=2 -D__SERIES60_MINOR__=8 -D__SERIES60_2X__ -D__BLUETOOTH_API_V2__
-#
-# s60-2.8-vc:
-#
-# set EPOCROOT=\Symbian\8.1a\S60_2nd_FP3\
-# set EPOCDEVICE=S60_2nd_FP3:com.nokia.series60
-# symbiancommon
-# set PATH=%EPOC_BIN%;%MSVC_BIN%;C:\perl\bin;C:\winnt\system32;%PATH%
-# set USERDEFS=%USERDEFS% -D__SERIES60_28__ -D__SERIES60_MAJOR__=2 -D__SERIES60_MINOR__=8 -D__SERIES60_2X__ -D__BLUETOOTH_API_V2__
-#
-# s60-5.0  - S60 5th Edition SDK v1.0:
-#
-# set EPOCROOT=\S60\devices\S60_5th_Edition_SDK_v1.0\
-# set PATH=%EPOCROOT%Epoc32\gcc\bin;%EPOCROOT%Epoc32\tools;%PATH%
-#
-# s80-2.0-cw:
-#
-# set EPOCROOT=\Symbian\7.0s\S80_DP2_0_SDK_CW\
-# set EPOCDEVICE=Series80_DP2_0_SDK_CW:com.nokia.Series80
-# symbiancommon
-# set PATH=%EPOC_BIN%;%MWCW%\Bin;%MWCW%\Symbian_Tools\Command_Line_Tools;%MSVC_BIN%;C:\perl\bin;C:\winnt\system32;%PATH%
-# set USERDEFS=%USERDEFS% -D__SERIES80_20__ -D__SERIES80_MAJOR__=2 -D__SERIES80_MINOR__=0 -D__SERIES80_2X__
-#
-# s80-2.0-vc:
-#
-# set EPOCROOT=\Symbian\7.0s\S80_DP2_0_SDK\
-# set EPOCDEVICE=Series80_DP2_0_SDK:com.nokia.Series80
-# symbiancommon
-# set PATH=%EPOC_BIN%;%MWCW%\Bin;%MWCW%\Symbian_Tools\Command_Line_Tools;%MSVC_BIN%;C:\perl\bin;C:\winnt\system32;%PATH%
-# set USERDEFS=%USERDEFS% -D__SERIES80_20__ -D__SERIES80_MAJOR__=2 -D__SERIES80_MINOR__=0 -D__SERIES80_2X__
-#
-# UIQ-2.1-vc:
-# set EPOCROOT=\Symbian\UIQ_21\
-# set EPOCDEVICE=
-# set EPOC_BIN=%EPOCROOT%Epoc32\gcc\bin;%EPOCROOT%Epoc32\Tools
-# set MWCW=C:\APPS\codewarrior_3.0
-# set MSVC=C:\Program Files\Microsoft Visual Studio
-# set MSVC_BIN=%MSVC%;%MSVC%\Common\MSDev98\Bin
-# set MSVC_INC=%MSVC%\VC98\atl\include;%MSVC%\mfc\include;%MSVC%\include
-# set MSVC_LIB=%MSVC%\mfc\lib;%MSVC%\lib
-# set PATH=%EPOC_BIN%;%MWCW%\Bin;%MWCW%\Symbian_Tools\Command_Line_Tools;%MSVC_BIN%;C:\perl\bin;C:\winnt\system32;%PATH%
-# set USERDEFS=%USERDEFS% -D__UIQ_21__ -D__UIQ_MAJOR__=2 -D__UIQ_MINOR__=1 -D__UIQ_2X__
-#
-# EOF
diff --git a/symbian/sisify.pl b/symbian/sisify.pl
deleted file mode 100644 (file)
index 7b5506c..0000000
+++ /dev/null
@@ -1,410 +0,0 @@
-#!/usr/bin/perl -w
-
-#
-# sisify.pl - package Perl scripts or Perl libraries into SIS files
-#
-# Copyright (c) 2004-2005 Nokia. All rights reserved.
-# The sisify.pl utility is licensed under the same terms as Perl itself.
-#
-
-require 5.008;
-
-use strict;
-
-use vars qw($VERSION);
-
-$VERSION = '0.2';
-
-use Getopt::Long;
-use File::Temp qw/tempdir/;
-use File::Find;
-use File::Basename qw/basename dirname/;
-use Cwd qw/getcwd/;
-
-BEGIN {
-  # This utility has been developed in Windows under cmd.exe with
-  # the Series 60 2.6 SDK installed, but for the makesis utility
-  # in UNIX/Linux, try e.g. one of the following:
-  # http://gnupoc.sourceforge.net/
-  # http://symbianos.org/~andreh/ You
-  # will also need the 'uidcrc' utility.
-  die "$0: Looks like Cygwin, aborting.\n" if exists $ENV{'!C:'};
-}
-
-sub die_with_usage {
-  if (@_) {
-    warn "$0: $_\n" for @_;
-  }
-  die <<__USAGE__;
-$0: Usage:
-$0 [--variant=S60|S80|UIQ] [ --uid=hhhhhhhh ] [ --version=a.b.c ] [ --library=x.y.z ] [ some.pl | Some.pm | somefile | dir ... ]
-The uid is the Symbian app uid for the SIS.
-The version is the version of the SIS.
-The library is the version of Perl under which to install.  If using this,
-only specify directories for packaging.
-__USAGE__
-}
-
-my $SisUid;
-my $SisVersion;
-my $Library;
-my @SisPl;
-my @SisPm;
-my @SisDir;
-my @SisOther;
-my $AppName;
-my $Debug;
-my $ShowPkg;
-my $Variant;
-
-my $SisUidDefault     = 0x0acebabe;
-my $SisVersionDefault = '0.0.0';
-my $VariantDefault    = 'S60';
-
-my %Variant = qw(S60 1 S80 1 UIQ 1);
-
-die_with_usage()
-  unless GetOptions(
-                   'variant=s'         => \$Variant,
-                   'uid=s'             => \$SisUid,
-                   'version=s'         => \$SisVersion,
-                   'debug'             => \$Debug,
-                   'showpkg'           => \$ShowPkg,
-                   'library=s'         => \$Library,
-                   'appname=s'         => \$AppName,
-                  );
-die_with_usage("Need to specify what to sisify")
-  unless @ARGV;
-
-unless (defined $Variant) {
-  warn "$0: Defaulting to $VariantDefault\n";
-  $Variant = $VariantDefault;
-}
-
-unless (exists $Variant{$Variant}) {
-  die "$0: Unknown variant '$Variant'\n";
-}
-
-for my $i (@ARGV) {
-  if ($i =~ /\.pl$/i) {
-    push @SisPl, $i;
-  } elsif ($i =~ /\.pm$/i) {
-    push @SisPm, $i;
-  } elsif (-f $i) {
-    push @SisOther, $i;
-  } elsif (-d $i) {
-    push @SisDir, $i;
-  } else {
-    die_with_usage("Unknown sisifiable '$i'");
-  }
-}
-
-sub do_system {
-    my $cwd = getcwd();
-    print qq{\# system("@_") [cwd "$cwd"]\n};
-    return system("@_") == 0;
-}
-
-die_with_usage("Must specify something to sisify")
-  unless @SisPl || @SisPm || @SisOther || @SisDir;
-
-die_with_usage("With the lib option set, specify only directories")
-  if defined $Library && ((@SisPl || @SisPm || @SisOther) || @SisDir == 0);
-
-die_with_usage("Lib must define the Perl 5 version as 5.x.y")
-  if defined $Library && $Library !~ /^5.\d+\.\d+$/;
-
-die_with_usage("With the lib option unset, specify at least one .pl file")
-  if (! defined $Library && @SisPl == 0);
-
-if (!defined $AppName) {
-  if (defined $Library) {
-    $AppName = $SisDir[0];
-    $AppName =~ tr!/!-!;
-  } elsif (@SisPl > 0 && $SisPl[0] =~ /^(.+)\.pl$/i) {
-    $AppName = basename($1);
-  }
-}
-
-die_with_usage("Must either specify appname or at least one .pl file or the lib option")
-  unless defined $AppName || defined $Library;
-
-print "[app name '$AppName']\n" if $Debug;
-
-unless (defined $SisUid) {
-  $SisUid = $SisUidDefault;
-  printf "[default app uid '0x%08x']\n", $SisUid;
-} elsif ($SisUid =~ /^(?:0x)?([0-9a-f]{8})$/i) {
-  $SisUid = hex($1);
-} else {
-  die_with_usage("Bad uid '$SisUid'");
-}
-$SisUid = sprintf "0x%08x", $SisUid;
-
-die_with_usage("Bad uid '$SisUid'")
-  if $SisUid !~ /^0x[0-9a-f]{8}$/i;
-
-unless (defined $SisVersion) {
-  $SisVersion = $SisVersionDefault;
-  print "[default app version '$SisVersionDefault']\n";
-} elsif ($SisVersion !~ /^\d+\.\d+\.\d+$/) {
-  die_with_usage("Bad version '$SisVersion'")
-}
-
-my $tempdir = tempdir( CLEANUP => 1 );
-
-print "[temp directory '$tempdir']\n" if $Debug;
-
-for my $file (@SisPl, @SisPm, @SisOther) {
-  print "[copying file '$file']\n" if $Debug;
-  die_with_usage("$0: File '$file': $!") unless -f $file;
-  my $dir = dirname($file);
-  do_system("mkdir $tempdir\\$dir") unless $dir eq '.';
-  do_system("copy $file $tempdir");
-}
-if (@SisPl) {
-    do_system("copy $SisPl[0] $tempdir\\default.pl")
-       unless $SisPl[0] eq "default.pl";
-}
-for my $dir (@SisDir) {
-  print "[copying directory '$dir']\n" if $Debug;
-  do_system("copy $dir $tempdir");
-}
-
-my $SisVersionCommas = $SisVersion;
-
-$SisVersionCommas =~ s/\./\,/g;
-
-my @pkg;
-
-push @pkg, qq[&EN;];
-push @pkg, qq[#{"$AppName"},($SisUid),$SisVersionCommas];
-push @pkg, qq[(0x101F6F88), 0, 0, 0, {"Series60ProductID"}];
-
-my $OWD = getcwd();
-
-$OWD =~ s!/!\\!g;
-
-chdir($tempdir) or die "$0: chdir('$tempdir')\n";
-
-if (@SisPl) {
-  if (open(my $fi, "<", "default.pl")) {
-    my $fn = "default.pl.new";
-    if (open(my $fo, ">", $fn)) {
-      while (<$fi>) {
-       last unless /^\#/;
-       print $fo $_;
-      }
-      print $fo "use lib qw(\\system\\apps\\$AppName \\system\\apps\\$AppName\\lib);\n";
-      printf $fo qq[# %d "$SisPl[0]"\n], $.;
-      print $fo $_;
-      while (<$fi>) {
-       print $fo $_;
-      }
-      close($fo);
-    } else {
-      die "$0: open '>$fn': $!\n";
-    }
-    close($fi);
-    rename($fn, "default.pl") or die "$0: rename $fn default.pl: $!\n";
-    # system("cat -nvet default.pl");
-  } else {
-    die "$0: open 'default.pl': $!\n";
-  }
-}
-
-
-my @c;
-find(
-     sub {
-       if (-f $_) {
-        $File::Find::name =~ s!^\./!!;
-        push @c, $File::Find::name;
-       }
-     }
-     ,
-     ".");
-
-for my $i (sort @c) {
-  my $j = $i;
-  $j =~ s!/!\\!g;
-  push @pkg, defined $Library ? qq["$j"-"!:\\System\\Libs\\Perl\\siteperl\\$Library\\$j"] : qq["$j"-"!:\\system\\apps\\$AppName\\$j"];
-}
-
-sub hex2data {
-  pack("H*", shift); # symbian\hexdump.pl to create the hexdumps.
-}
-
-my $APPHEX;
-my $RSCHEX;
-
-unless ($Library) {
-  # If we package an application we will need both a launching native
-  # Symbian application and a resource file for it.  The resource file
-  # we can get easily from a stub but for the native app we need to
-  # patch in the right Symbian app uids and executable checksums.
-
-  &init_hex; # Initialized $APPHEX and $RSCHEX.
-
-  die "$0: No app template found\n" unless defined $APPHEX && defined $RSCHEX;
-
-  my $app = hex2data($APPHEX);
-  my $uidcrc;
-  my $uids = "0x10000079 0x100039CE $SisUid";
-
-  my $cmd = "uidcrc $uids |";
-
-  if (open(my $fh, '<', $cmd)) {
-    my $line = <$fh>;
-    close($fh);
-    # 0x10000079 0x100039ce 0x0acebabe 0xc82b1900
-    $line =~ s/\r?\n$//;
-    if ($line =~ /^$uids (0x[0-9a-f]{8})$/i) {
-      $uidcrc = hex($1);
-    } else {
-      die "$0: uidcrc returned '$line'\n";
-    }
-  } else {
-    die qq[$0: open '$cmd' failed: $!\n];
-  }
-
-  my $uid    = hex($SisUid);
-
-  my $oldchk = unpack('V', substr($app, 24, 4));
-  my $newchk = ($uid + $oldchk) & 0xFFFFFFFF;
-
-  # printf "# uid    = 0x%08x\n", $uid;
-  # printf "# uidcrc = 0x%08x\n", $uidcrc;
-  # printf "# oldchk = 0x%08x\n", $oldchk;
-  # printf "# newchk = 0x%08x\n", $newchk;
-
-  substr($app,  8, 4) = pack('V', $uid);
-  substr($app, 12, 4) = pack('V', $uidcrc);
-  substr($app, 24, 4) = pack('V', $newchk);
-  
-  my $UID_OFFSET = 0x0C7C; # This is where the uid is in the $app.
-  substr($app, $UID_OFFSET, 4) = substr($app, 8, 4); # Copy the uid also here.
-
-  if (open(my $fh, '>', "$AppName.app")) {
-    binmode($fh);
-    print $fh $app;
-    close($fh);
-  } else {
-    die qq[$0: open '>$AppName.app' failed: $!\n];
-  }
-
-  push @pkg, qq["$AppName.app"-"!:\\system\\apps\\$AppName\\$AppName.app"];
-
-  if (open(my $fh, '>', "$AppName.rsc")) {
-    binmode($fh);
-    print $fh hex2data($RSCHEX);
-    close($fh);
-  } else {
-    die qq[$0: open '>$AppName.rsc' failed: $!\n];
-  }
-  push @pkg, qq["$AppName.rsc"-"!:\\system\\apps\\$AppName\\$AppName.rsc"];
-}
-
-if ($ShowPkg) {
-  for my $l (@pkg) {
-    print $l, "\r\n";
-  }
-} else {
-  my $fn = "$AppName.pkg";
-  if (open(my $fh, '>', $fn)) {
-    for my $l (@pkg) {
-      print $fh "$l\r\n"; # Note CRLF!
-    }
-    close($fh);
-  } else {
-    die qq[$0: Failed to open "$fn" for writing: $!\n];
-  }
-  my $sis = "$AppName.SIS";
-  unlink($sis);
-  do_system("dir");
-  do_system("makesis $fn");
-  unless (-f $sis) {
-    die qq[$0: failed to create "$sis"\n];
-  }
-  do_system("copy $AppName.sis $OWD");
-  chdir($OWD);
-  system("dir $sis");
-  print "\n=== Now transfer $sis to your device ===\n";
-}
-
-exit(0);
-
-# To create the hex: print unpack("H*", $data);
-
-sub init_hex {
-  # This is Symbian application executable skeleton.
-  # You can create the ...\epoc32\release\thumb\urel\foo.app
-  # by compiling the PerlApp.cpp with PerlMinSample defined in PerlApp.h.
-  # The following executable has been compiled using the Series 60 SDK 2.6
-  # for Visual C.
-  # 'make sisify_hex' to create the perlappmin.hex for this hexdump.
-  if ($Variant eq 'S60') {
-      $APPHEX = <<__APP__;
-79000010ce390010f61520108581107645504f4300200000b6b005db000000000100bf00c025ed22d7e2e000030000019828000000000000001000000000100000200000000000000100000000000010000000000a0000001029000001000000402600007c0000000000000014290000802c0000000000005e01000000b501f0bbfa02bc0847000001480068704700004421001000b5011c024801f0f5fc01bc004700006421001084b030b50390049105920693204903a801f0ecfc041c0025002c06d103a8002101f0eafc00885c282bd0022c2ad103a8002101f0e1fc0088402806d903a8002101f0dafc00885a280dd903a8002101f0d3fc0088602815d903a8002101f0ccfc00887a280ed803a8012101f0c5fc00883a2807d103a8022101f0befc00885c2800d10125281c30bc08bc04b018470000cc22001084b030b50390049105920693204903a801f0a2fc041c0025002c06d103a8002101f0a0fc00885c282bd0022c2ad103a8002101f097fc0088402806d903a8002101f090fc00885a280dd903a8002101f089fc0088602815d903a8002101f082fc00887a280ed803a8012101f07bfc00883a2807d103a8022101f074fc00885c2800d10125281c30bc08bc04b018470000ac22001030b584b001f096fa009001916d4602ac0849201c01f062fc281c211c01f064fc0021002800d10121081c04b030bc02bc08470000d81d001030b584b001f07afa009001916d4602ac0849201c01f046fc281c211c01f048fc0021002800d10121081c04b030bc02bc08470000e41d0010f0b52c4ca54486ab18600f1c151c012668468021490001f035fc82ac2649201c01f024fc6846211c2a1c01f031fc684601f0d4fc002855d084ac2049201c01f015fc6846211c2a1c01f022fc684601f0c5fc002846d086a8291c01f0e3f900280fd087ac1649201c01f000fc6846211c2a1c01f00dfc684601f0b0fc002800d10026002e2ed086a8391c2a1c012301f0cff9061c002e17d189ac0a49201c01f0e5fb6846211c2a1c01f0f2fb684601f09bfc17e0ccfdfffff01d00105c1e00107c1e00109c1e00108bac0949201c01f0cdfb6846211c321c2b1c01f0d9fb684601f088fc8d239b009d44f0bc01bc0047b81e001084b0f0b557464e464546e0b484b00c900d910e920f934ea800684e904fa80068814601f0c3fb4c466468a0460c980001070900264e9c0294484601f0b7fbbc4200dbc1e10ca8029901f0b6fb007820281cd00ca8029901f0affb0078092815d00ca8029901f0a8fb00780a280ed00ca8029901f0a1fb00780d2807d00ca8029901f09afb00780c2800d09de1029cbc4200db99e10ca8211c01f08efb007820281bd00ca8029901f087fb0078092814d00ca8029901f080fb00780a280dd00ca8029901f079fb00780d2806d00ca8029901f072fb00780c2803d1029c01340294d4e7029cbc4200db6ee10ca8211c01f063fb0078402806d90ca8029901f05cfb00785a280fd90ca8029901f055fb0078602800d858e10ca8029901f04dfb00787a2800d950e1029cbc4200db04e10ca8211c01f041fb0078402806d90ca8029901f03afb00785a2823d90ca8029901f033fb0078602806d90ca8029901f02cfb00787a2815d90ca8029901f025fb00782f2806d90ca8029901f01efb0078392807d90ca8029901f017fb00785f2800d0d2e0029cbc4243da0ca8211c01f00cfb0078402806d90ca8029901f005fb00785a2822d90ca8029901f0fefa0078602806d90ca8029901f0f7fa00787a2814d90ca8029901f0f0fa00782f2806d90ca8029901f0e9fa0078392806d90ca8029901f0e2fa00785f2812d1464510da311c0136484601f0b2fa039002990c1c013402940ca801f0d0fa0078039c2080b8e7029c0134a246ba4500db7ce70ca8029901f0c2fa00783a2800d074e70ca8514601f0bafa00783a2800d06ce7464500db69e7311c0136484601f088fa5c210180029c02340294bc4266da0ca8211c01f0a3fa0078402806d90ca8029901f09cfa00785a280fd90ca8029901f095fa0078602800d847e70ca8029901f08dfa00787a2800d93fe7029cbc4245da0ca8211c01f082fa0078402806d90ca8029901f07bfa00785a2823d90ca8029901f074fa0078602806d90ca8029901f06dfa00787a2815d90ca8029901f066fa00782f2806d90ca8029901f05ffa0078392807d90ca8029901f058fa00785f2800d00ae7464500db07e7311c0136484601f026fa039002990c1c013402940ca801f044fa0078039c2080b6e7029cbc4244da0ca8211c01f039fa007820281bd00ca8029901f032fa0078092814d00ca8029901f02bfa00780a280dd00ca8029901f024fa00780d2806d00ca8029901f01dfa00780c2803d1029c01340294d5e7029cbc421ada0ca8211c01f00ffa00783b2813d1f01c404510da4846311c01f00bfa6c460449201c01f0e0f94846211c01f008fa012002e0d81d0010002004b038bc9846a146aa46f0bc08bc04b0184783b0f0b54f464646c0b44d4ca544071c8824e4006c4421604a4c6c4422608924e4006c442360a920c000684406688225ed006d448424e4006c4425604249206801f0def98820c00068448424e4006c44216801f0dbf9814601204c46c44200d1a1e040a88021490001f0a4f9c224a4006c44a0468422520040468821c900694401f0caf9484607303e9040ac3f94c6a96846f82201f0c0f944462068c3a90968c4aa1268c5ab1b68fff7bcfd00287ad040468021490001f0b5f9301c00f0a0ff8322d2006a44106051608321c9006944404601f0adf91d49404601f0aff9381c01f076f9216809010909409800010009013009187868814251da0026b146c224a4006c44a046444620680001000981451eda311c0136381c01f03af98424e4006c442060c2a8494601f058f900788424e4006c44256828800124a144e3e70000dcfbffff44040000041f0010e0220010311c0136381c01f01bf95c2101800024a146409800010009814515da311c0136381c01f00df98424e4006c44206040a8494601f005f900888424e4006c44256828800124a144e4e7381c311c01e0381c002101f021f9044b9d4418bc9846a146f0bc08bc03b018472404000084b070b586b00a900b910c920d9300260aa8022101f03af9009001916d4602ac0e49201c01f00ef9281c211c01f034f900280cd104ac0a49201c01f003f90aa8211c01f005f90121c84200d00126301c06b070bc08bc04b018470000141f0010181f001081b0f0b54f464646c0b4644ca54480460e1ccd24e4006c442260d124e4006c442360f220c0006844076840a88021490001f0b0f8301c00f0d3fecb22d2006a4410605160cd24e4006c44206800f0cefecc22d2006a4410605160ca25ed006d44cd24e4006c4425604d49206801f086f84c4bcd24e4006c442568cb22d2006a44cc20c0006844009040a8216801f088f80024a146c225ad006d44cd24e4006c442560206840a900f0a7fecd24e4006c442068fff711fc00281ad1caac84225200201cd121c900694401f096f8cea96846f82201f091f82068cba90968ccaa1268cdab1b68fff75aff002801d10124a1464c46200600284ad040a8002101f064f8c2ac201c40a900f077fe201cfff7c8fb00283cd08623db006b4423485861321c01ca1860214c6c44a446032101246442a14601ca64460434a446043c206001394945f6d11a485861311c18318920c00068448222920001f04ff8c2ac84225200201cd121c900694401f046f88620c00068443f90c5a96846fc2201f03df82168c3a80268c4a8036840a8fff729fe4098000100280ed1002012e0000094f9ffff281f0010cc220010082300103404000040250010381c414640aafff7a9fb0120044b9d4418bc9846a146f0bc08bc01b0184700006c06000083b0f0b5474680b4354ca544051ceb24e4006c442160334c6c442260ec24e4006c44236000260027822292007ea8291c00f0f6ff82a96846fc22520000f0f0ff7e987f99809a819bfff7aafa002838d08024e4006c44a0464046291c00f0e0fd4046fff74dfb00282ad14046291c00f0d7fd4046fff728fb061c002e20d18424e4006c4484225200201ceb21c900694400f0c6ff8621c90069446846f82200f0bfff20681049694409688522d2006a4412680e4b6b441b68fff784fe002800d00127380600284dd07ea88021490000f075ff002e0ed0e624e4006c4404490de0c0f8ffff5c070000240400002c040000481f0010e724e4006c441749201c00f051ff7ea8211c2a1c00f05eff7ea801f013f800281dd0a524e4006c4482229200201c291c00f07cffa721c90069446846fc22520000f074ff2068084969440968a622d2006a441268054b6b441b6800f01ffa012007e00000741f00102c050000340500000020e823db009d4408bc9846f0bc08bc03b01847f0b5474680b4244ca54480460f1c7ea800f050fd8320c000684400f04bfdc720c00068448021490000f00cff7ea8391c0022002300f044fd381c002100f0f0fe0088402806d9381c002100f0e9fe00885a280dd9381c002100f0e2fe008860281cd9381c002100f0dbfe00887a2815d8381c012100f0d4fe00883a280ed1381c022100f0cdfe00885c2807d18320c0006844391c14e0000048eeffff842424016c4400f0b3fc806900f04afd011c0a68201c126a00f066fc8320c0006844211c0022002300f0fcfcb6256d0045442868002803d100f09afc1c302860574d6d4400215648684401606960b620400040440168281c3a1c002300f0eafc061c002e00d0fde08420000168448021490000f0d1fe842109016944281c00f0e1fc061c281c00f0e3fc002e00d0dde0444c6c4482229200201c391c00f0b6fe414969446846fc22520000f0affe20683e4969440968a52212016a4412683c4b6b441b68fff7acf9002800d184e0c52212016a448320c00068443649516100681060354e6e440321344b6b4401256d4201cb01c60139a942fad131485061314868448621c90069448222920000f07efee7231b016b447ea9264858617e981860294d6d440322fe2464006c44a4460126764264460434a446043c206801c5013ab242f6d11e4858611831204868448222920000f05bfec5252d016d44e72636016e44842109016944194c6c4484225200201c00f04bfeb620400040440068006841901449694468468222520000f03efe2368381c291c321cfff73cfd37e0000098110000480a0000580a00004c0a0000540a000008230010540c00001c04000040250010680c0000740e0000880e00009010000094100000842109016944c52424016c4484225200201c00f00ffe134969446846fc2200f009fe2168104868440268104868440368381cfff7effd0021002800d101210806002835d0c724e4006c448d256d016d440749281c00f0b0fd201c291c3a1c00f0bdfd22e05c0c0000540c0000580c00008c1f0010c724e4006c44024d6d4402490ae00000a8110000b41f0010c724e4006c440f4d6d440f49281c00f08dfd201c291c321c3b1c00f099fd201c00f048fe4446a06a00280fd000f06efb816900290dd008688268081c032100f021fb06e0b0110000dc1f0010404600f0fdfb034b9d4408bc9846f0bc01bc0047b8110000f0b5071c0e1c244878612448b8612448f8612448b8642448f86424483860b42464003d192968002910d0786800f0e2fb2968002905d008688268081c032100f0effab4246400391900200860b62464003d192868002803d000f098fd00202860b96a002905d008688268081c032100f0d7fa094878610948b8610948f8610948b8640948f8640a483860381c311c00f01bfef0bc01bc0047c82500102c2600101c260010fc25001008260010942300101823001084b030b51d4ca5449c909d919e929f9301200021002200f0cdfd041c96a901a800f060fd002808d10090201c9ca90222002300f0c5fd00f05bfd96a80068002813d014a88021490000f0f0fc14ad97ac0b49201c00f0defc96a80268281c211c00f0eafc281c00f09ffd00f047fd99239b009d4430bc08bc04b018479cfdffff3420001010b5094ca544041c68468022520000f039fd201c6946fff7a5fd82239b009d4410bc01bc00470000f8fdfffff0b5474680b4324ca544071c8846022952d100f031fb011c0a687ea8126a00f04dfa8026f6006e44301c00f0dffa2949301c7eaa002300f0dffac425ed006d44281c00f0f5fa244c6c440021224868440160201c042100f0f1fa301c00f0f4fa011c201c2a1c00f0f5fa002824d1301c00f0eafa011c8420000168448022520000f0eafc8521090169446846fc22520000f0a6fc84200001684400680f49694409680f4a6a4412680e4b6b441b68fff74fff381c00f0e6fa00204446002c00d10120094b9d4408bc9846f0bc02bc0847b4f5ffff48210010480a000044080000480800004c0800004c0a000010b5b62464000019016010bc01bc0047f0b50b4ca5440b4c6c4421607ea88021490000f035fc074c6c442468064d6019052800d92ce180000449401800688746c8f7ffff3408000000fcffff0812001020120010501200107c12001000130010b8130010cc13001009490a4b0320009000220192042002900392049302200590062006907ea80522092300f007fcbbe0842100107821001001200021002200f0bbfc8022d2006a44131c054970c970c30321002300f0befc00f052fcebe00000882000101a4868448021490000f0e0fb174f6f44174c6c441749201c00f0ccfb381c211c00f048fc381c00f0abfc002800d1d0e0114c6c4482229200201c391c00f0f8fb0e4969446846fc22520000f0f1fb2068c321c90069440968094a6a441268c423db006b441b68fff79bfeb2e00c0400001c0800009420001014060000240600001c06000000f086f98569254c6c442549201c00f08ffb24492f1c6037201c3a1c802300f073fc002800d192e08020c0006844c021490000f0c1fb8025ed006d44281c391c00f060f901200021002200f041fc061c0c2000f055fb041c00f0f0fb124a6a44124911486844016054600f4868444168006800f0e9fb0e4820600e486060281c00f0eafba060301c0321221c002300f02dfc022000f0e6fb59e0000024080000b42000109c2000102c080000f5190010181f00105020001003497ea800f04afb7ea800f0f3fb42e0042200108020c00068448021490000f037fbc120c00068448021490000f030fb1349144b8024e4006c44032000900022019204200290039204930220059006200690201c0522092300f020fb201c00f0c9fb094800f0a8fbc124e4006c440749201c00f013fb201c00f0bcfb0be00000842100107821001040420f00042200100120fef7e5fd024b9d44f0bc01bc00473808000030b5051c242000f08bfb041c002c04d0291c00f0e5fb03482060201c30bc02bc084700004c240010f0b54f464646c0b4b820400000f074fb071c002f2ad000f065f91848b8641848f864184ca1467c61174ca046bc61174efe61174dbd64174cfc64174838604c467c614446bc61134cfc6414483860381c6030802100f0b6fa4c467c614446bc61fe61bd640b4cfc640d483860381c18bc9846a146f0bc02bc08470000202500102c250010c82500102c2600101c260010fc25001008260010502500101823001094230010f0b50d1c171c1c1c00f06ef88669301c211cfff73dfe002d05d03068426d301c391c00f01df80020f0bc02bc0847000010b58b20800000f013fb041c002c03d000f004f902482060201c10bc02bc0847e4240010002070470047704708477047104770471847704720477047284770473047704738477047404770474847704750477047584770476047704770477047014b1b681847c04640260010014b1b681847c04648260010014b1b681847c0464c260010014b1b681847c04644260010014b1b681847c0468c26001040b4024e3668b44640bc604788260010014b1b681847c04690260010014b1b681847c046a8260010014b1b681847c046a0260010014b1b681847c04694260010014b1b681847c04698260010014b1b681847c046a4260010014b1b681847c0469c260010014b1b681847c046b4260010014b1b681847c046b8260010014b1b681847c046ac260010014b1b681847c046b0260010014b1b681847c046cc260010014b1b681847c046c4260010014b1b681847c046d4260010014b1b681847c046ec260010014b1b681847c046f426001040b4024e3668b44640bc6047e826001040b4024e3668b44640bc6047e0260010014b1b681847c046e4260010014b1b681847c046bc260010014b1b681847c046f0260010014b1b681847c046c0260010014b1b681847c046d0260010014b1b681847c046c8260010014b1b681847c046dc260010014b1b681847c046d8260010014b1b681847c046f8260010014b1b681847c04628270010014b1b681847c04674270010014b1b681847c046c0270010014b1b681847c046bc270010014b1b681847c046d4270010014b1b681847c04684270010014b1b681847c04634270010014b1b681847c04644270010014b1b681847c046a4270010014b1b681847c04670270010014b1b681847c04614270010014b1b681847c04648270010014b1b681847c046b0270010014b1b681847c04688270010014b1b681847c0468c270010014b1b681847c04610270010014b1b681847c04660270010014b1b681847c04600270010014b1b681847c0467c270010014b1b681847c04630270010014b1b681847c046fc260010014b1b681847c04690270010014b1b681847c04658270010014b1b681847c04618270010014b1b681847c04624270010014b1b681847c04668270010014b1b681847c0469c270010014b1b681847c046a8270010014b1b681847c04694270010014b1b681847c0462c270010014b1b681847c04654270010014b1b681847c04650270010014b1b681847c04678270010014b1b681847c04680270010014b1b681847c046ac270010014b1b681847c046c827001040b4024e3668b44640bc60476c270010014b1b681847c0466427001040b4024e3668b44640bc60474c270010014b1b681847c046a0270010014b1b681847c0460c270010014b1b681847c04638270010014b1b681847c0460427001040b4024e3668b44640bc604798270010014b1b681847c04620270010014b1b681847c0461c270010014b1b681847c0465c270010014b1b681847c046c4270010014b1b681847c04608270010014b1b681847c0463c270010014b1b681847c046cc270010014b1b681847c046d027001040b4024e3668b44640bc604740270010014b1b681847c046b8270010014b1b681847c046b4270010014b1b681847c046dc270010014b1b681847c046d8270010014b1b681847c04620280010014b1b681847c0460c280010014b1b681847c046f8270010014b1b681847c04650280010014b1b681847c046fc270010014b1b681847c0464828001040b4024e3668b44640bc604714280010014b1b681847c04638280010014b1b681847c046f4270010014b1b681847c04634280010014b1b681847c046f0270010014b1b681847c0464c280010014b1b681847c04610280010014b1b681847c046e0270010014b1b681847c04654280010014b1b681847c04604280010014b1b681847c046ec270010014b1b681847c0461c280010014b1b681847c04600280010014b1b681847c04658280010014b1b681847c0463c280010014b1b681847c04640280010014b1b681847c04624280010014b1b681847c04644280010014b1b681847c04608280010014b1b681847c0461828001040b4024e3668b44640bc604730280010014b1b681847c0462c280010014b1b681847c04628280010014b1b681847c046e8270010014b1b681847c046e4270010014b1b681847c0465c280010014b1b681847c04660280010014b1b681847c04674280010014b1b681847c0466c280010014b1b681847c04684280010014b1b681847c04688280010014b1b681847c0467028001040b4024e3668b44640bc60477c28001040b4024e3668b44640bc604778280010014b1b681847c0466428001040b4024e3668b44640bc604780280010014b1b681847c0468c280010014b1b681847c04668280010014b1b681847c04680260010014b1b681847c04684260010014b1b681847c04664260010014b1b681847c04670260010014b1b681847c04654260010014b1b681847c0465c26001040b4024e3668b44640bc604750260010014b1b681847c0467c260010014b1b681847c04678260010014b1b681847c0466c260010014b1b681847c04668260010014b1b681847c04658260010014b1b681847c04660260010014b1b681847c046742600107047000000b5084a4261084a8261084ac261084a8264084ac264084a0260fff799ff01bc00470000c82500102c2600101c260010fc250010082600101823001000b5fff75dfe01bc0047000000b5fff75dfe01bc0047000000b5fff751fe01bc0047000000b5fff74bfe01bc0047000010b581b0039c14380094fff7e1fd01b010bc01bc0047000000b51438fff7b2ff01bc004700b51438fff7dafd01bc004700b51838fff724fe02bc084700b51c38fff718fe02bc084700b51c38fff70cfe02bc084700b54838fff788ff01bc004700b54c38fff788ff01bc0047ffffffff00000000ffffffff000000004421001064210010cc220010ac2200102e0070006d000000d81d00102e0070006c000000e41d001025005300200069007300200075006e0074007200750073007400650064002e00200049006e007300740061006c006c0020006f006e006c007900200069006600200079006f0075002000740072007500730074002000700072006f00760069006400650072002e000000000049006e007300740061006c006c002000610073002000250053003f00000000005200650070006c0061006300650020006f006c0064002000250053003f00000049006e007300740061006c006c0065006400200025005300000000004600610069006c00750072006500200025006400200069006e007300740061006c006c0069006e00670020002500530000000000f01d00105c1e00107c1e00109c1e0010b81e0010d81d00107061636b61676500041f0010e0220010232100007065726c00000000141f0010181f001025005300250053002500530000000000281f0010cc22001008230010402500105200650061006c006c0079002000720075006e0020006d006f00640075006c0065002000250053003f000000520075006e002000250053003f000000481f0010741f00104600610069006c0065006400200066006f0072002000660069006c006500200025005300000000004500720072006f0072002000250064002000720065006100640069006e00670020002500530000004500720072006f00720020002500640020006f00700065006e0069006e006700200025005300000008230010402500108c1f0010b41f0010dc1f0010c82500102c2600101c260010fc2500100826001018230010942300104500720072006f0072002000250064000000000034200010482100102d6c65007072696e74202752756e6e696e6720696e20272c20245e4f2c20225c6e222c207363616c6172206c6f63616c74696d6500000000181f0010502000105420001043003a005c000000090000004f006e0065006c0069006e00650072003a0000004f006e0065006c0069006e00650072000000000084210010782100108820001094200010b42000109c200010f5190010181f00105020001004220010081200104c240010202500102c250010c82500102c2600101c260010fc2500100826001050250010182300109423001010240010a8240010e4240010c82500102c2600101c260010fc2500100826001018230010f61520100a000000640065006600610075006c0074002e0070006c0000000000070000005000650072006c0041007000700000000300000053003600300000003c0000005000650072006c002000250064002e00250064002e00250064002c002000530079006d006200690061006e00200070006f00720074002000250064002e00250064002e00250064002c0020006200750069006c007400200066006f0072002000250053002000530044004b002000250064002e0025006400000000005100000043006f007000790072006900670068007400200031003900380037002d00320030003000350020004c0061007200720079002000570061006c006c00200061006e00640020006f00740068006500720073002c002000530079006d006200690061006e00200070006f0072007400200043006f00700079007200690067006800740020004e006f006b0069006100200032003000300034002d00320030003000350000000d0000005c00530079007300740065006d005c004d00610069006c005c000000060000005c005000650072006c005c0000000000200000005c73797374656d5c6c6962735c7065726c5c736974657065726c5c352e392e33000000000000000000000000951b0010951b00100000000000000000e11c0010491c0010551c0010811700108d1700101d16001029160010611c0010351600106d1c001099170010411600104d160010191c0010a517001001190010b1170010251c0010bd17001011190010c9170010791c0010d5170010e1170010ed170010f9170010891c0010951c0010951b00100000000000000000690f0010491c0010551c0010811700108d1700101d16001029160010611c0010351600106d1c001099170010411600104d160010191c0010a5170010cd100010b1170010251c0010bd170010a1100010c9170010791c0010d5170010e1170010ed170010f9170010891c0010951c0010c911001000000000000000001d1d0010a11c001005180010951b0010ad1c001011180010b91500101d1800102918001035180010411800104d180010951b00100000000000000000291d00105918001065180010c5150010711800107d1800108918001095180010a1180010dd1c0010ad180010b9180010d1150010dd150010c5180010d1180010dd1800108514001029150010e9180010f51800100000000000000000351d0010a11c001005180010951b0010ad1c001011180010b91500101d1800102918001035180010411800104d180010951b00100000000000000000411d0010a11c0010051800100d000010ad1c001011180010b91500101d1800102918001035180010411800104d1800105d1400100000000000000000951b00100000000000000000951b0010591600106516001000000000000000002d170010391700100000000000000000311c0010491c0010551c0010811700108d1700101d16001029160010611c0010351600106d1c001099170010411600104d1600109d190010a517001001190010b1170010a9190010bd17001011190010c9170010791c0010d5170010e1170010ed170010f9170010891c0010951c0010ecffffff00000000651d00103919001045190010511900105d1900106d190010791900104d1d001085190010711d001091190010b8ffffff00000000a11d0010b4ffffff00000000ad1d00105916001065160010e4ffffff00000000951d0010891d0010e8ffffff000000007d1d0010711600107d16001003000000060000001b00000047000000ee020000f502000022030000230300002503000028030000b6040000d2040000e6040000f304000044050000480500000008000005080000110000002900000004000000520000005a0000006000000065000000bb000000df000000ff0000000001000024010000250100000f00000012000000250000002700000029000000330000005c0000005e000000610000007900000088000000b7000000d2000000e3000000e600000011000000140000001e0000001f00000028000000300000003100000033000000340000004000000041000000420000004300000044000000470000004a0000004b0000004c00000050000000510000005200000054000000560000006400000074000000790000007a0000007c0000008200000085000000860000008c0000008e0000008f00000092000000930000009500000096000000970000009b0000009d000000a1000000b3000000c6000000c8000000cc000000ce000000d5000000d6000000de000000e0000000e2000000fd0000000801000022010000280100000300000006000000020000000300000015000000570000005b0000006200000063000000c9000000cd000000f7000000fb000000ae010000c1010000d301000074020000770200002903000038030000390300005303000059030000e7030000ea0300007c0400008c0400000205000003050000690500007f05000097050000e00500002e0600004b060000040000000600000007000000080000000a0000004b0000007f0500008205000083050000af050000d005000000000000591500006c030000a40200000400000003000000060000001b00000047000000b90200000e000000ee020000f502000022030000230300002503000028030000b6040000d2040000e6040000f304000044050000480500000008000005080000cd020000020000001100000029000000e00200000100000004000000f70200000a000000520000005a0000006000000065000000bb000000df000000ff0000000001000024010000250100000a0300000f0000000f00000012000000250000002700000029000000330000005c0000005e000000610000007900000088000000b7000000d2000000e3000000e60000001e0300003800000011000000140000001e0000001f00000028000000300000003100000033000000340000004000000041000000420000004300000044000000470000004a0000004b0000004c00000050000000510000005200000054000000560000006400000074000000790000007a0000007c0000008200000085000000860000008c0000008e0000008f00000092000000930000009500000096000000970000009b0000009d000000a1000000b3000000c6000000c8000000cc000000ce000000d5000000d6000000de000000e0000000e2000000fd000000080100002201000028010000340300000200000003000000060000004903000021000000020000000300000015000000570000005b0000006200000063000000c9000000cd000000f7000000fb000000ae010000c1010000d301000074020000770200002903000038030000390300005303000059030000e7030000ea0300007c0400008c0400000205000003050000690500007f05000097050000e00500002e0600004b0600005d0300000b000000040000000600000007000000080000000a0000004b0000007f0500008205000083050000af050000d00500004150504152435b31303030336133645d2e444c4c0041564b4f4e5b31303030353663365d2e444c4c004241464c5b31303030336130665d2e444c4c0043484152434f4e565b31303030336231315d2e444c4c00434f4e455b31303030336134315d2e444c4c0045465352565b31303030333965345d2e444c4c0045494b434f52455b31303030343839325d2e444c4c004553544c49425b31303030336230625d2e444c4c0045555345525b31303030333965355d2e444c4c005045524c3539332e444c4c00000000c0030000d2010000000000004000000014302830bc3050318831c0317c32803284328832b4327c36dc37e037ac38b038543a583a5c3a643a7c3be43b543e603ee83e003f4c3f000000100000bc0100000030043008300c301030143018309c30a031043208320c321032143218321c3248324c327832f032a033a433ac33b033b433c83338343c34443480340035043508350c351035143518351c35203524357835c035cc35d835e435f03500360c361836243630363c364836543660366c367836843690369c36a836b436c036d036e036ec36f836043710371c372837343740374c375837643770377c3788379437a037ac37b837c437d037dc37e837f43700380c381838243830383c384838543860386c387838843890389c38a838b438c038cc38d838e438f038fc380c3918392839343940394c3958396839743980398c399839a439b039bc39c839d839e439f039fc39083a143a203a2c3a383a443a503a603a6c3a783a843a903a9c3aa83ab43ac03acc3ad83ae43af03afc3a083b143b203b2c3b383b443b543b603b6c3b783b843b903b9c3ba83bb43bc03bcc3bd83be83bf83b043c143c203c2c3c383c443c503c5c3c683c743c843c903c9c3ca83cb43cc03ccc3cd83c043d083d0c3d103d143d183dc83dcc3dd03dd43de03dec3dec3ef03ef43ef83efc3e003f0c3f103f203f243f383f3c3f403f443f843f883f000000200000c4010000043008300c301030143018301c302030243028302c30303048304c3088308c309030c830cc30d030d430d830dc30e030e430e830ec30f030f430f830fc300031043108310c311031143118311c312031243128312c313031343138313c314031103314332033243328332c333033343338333c334033443348334c335033543358335c336033643368336c337033743378337c338033843388338c3390339c33a033a433a833ac33b033b433b833bc33c033c433c833cc33d033d433d833dc33e033e433e833ec33f033f433f833fc330034043408340c3418341c342034243428342c343034343438343c34403444344834543458345c346034643468346c347034743478347c348034843488348c349034943498349c34a034a434b034b434b834bc34c034c434c834cc34d034d434d834dc34e034ec34f034f434f834fc340035043508350c351035143518351c352835343538353c3548354c3558355c356035643568356c357035743578357c358035843588358c359035943598359c35a035a435a835ac35b035b435b835bc35c035c435d035d435d835dc35e035e435e835ec35f035f435f835043610361436183624362836343638363c36
-__APP__
-  }
-
-  # This is Symbian application resource skeleton.
-  # You can create the ...\epoc32\data\z\system\apps\PerlApp\PerlApp.rsc
-  # by compiling the PerlApp.cpp.
-  # The following resource has been compiled using the Series 60 SDK 2.6
-  # for Visual C.
-  # 'make sisify_hex' to create the perlrscmin.hex for this hexdump.
-  if ($Variant eq 'S60') {
-    $RSCHEX = <<__RSC__;
-6b4a1f10000000005fde04001ca360de01b80010000400000001f0e54d0000000004f0e54d00000000000000001a00cc0800000000010005f0e54d000000000000ffffffff0000000000000000000f0500000400000000000000000000050541626f7574170000ffffffff00000000010400000000000000000000040454696d65170000ffffffff00000000020400000000000000000000030352756e170000ffffffff0000000003040000000000000000000008084f6e656c696e6572170000ffffffff000000000404000000000000000000000909436f707972696768740e0000ffffffff00000000000000000120000000000000001400cc0801006816000100000000000100000000ffffffff00ffffffff0000000000000000ffff000000000000000120000000000000002400cc0801006816000100000000000100000000ffffffff00ffffffff0000000000000000ffff000000000000004122000000000000001400cc08010069160000050000000001000000000000000001000000040007000800ff020100ffffffff00000000000000000000ffff000000000000004122000000000000001400cc08010074160007000000000054160000ffffffff000000000000ffff00000000000000000000000015001d001d0035004d00ef0026015d01a301d201d701
-__RSC__
-  }
-
-  # This is Symbian application executable skeleton.
-  # You can create the ...\epoc32\release\thumb\urel\foo.app
-  # by compiling the PerlApp.cpp with PerlMinSample defined in PerlApp.h.
-  # The following executable has been compiled using the Series 80 SDK 2.0
-  # for Visual C.
-  # 'make sisify_hex' to create the perlappmin.hex for this hexdump.
-  if ($Variant eq 'S80') {
-      $APPHEX = <<__APP__;
-79000010ce390010f61520108581107645504f4300200000b088df82000000000100bb00806c8dc7d6e2e00003000001bc2500000000000000100000000010000020000000000000010000000000001000000000090000003426000001000000902300007c00000000000000382600005c290000000000005e01000000b501f07bfa02bc084700000148006870470000b01f001000b5011c024801f0c9fc01bc00470000d01f001084b030b50390049105920693204903a801f0c0fc041c0025002c06d103a8002101f0befc00885c282bd0022c2ad103a8002101f0b5fc0088402806d903a8002101f0aefc00885a280dd903a8002101f0a7fc0088602815d903a8002101f0a0fc00887a280ed803a8012101f099fc00883a2807d103a8022101f092fc00885c2800d10125281c30bc08bc04b0184700003821001084b030b50390049105920693204903a801f076fc041c0025002c06d103a8002101f074fc00885c282bd0022c2ad103a8002101f06bfc0088402806d903a8002101f064fc00885a280dd903a8002101f05dfc0088602815d903a8002101f056fc00887a280ed803a8012101f04ffc00883a2807d103a8022101f048fc00885c2800d10125281c30bc08bc04b0184700001821001030b584b001f04afa009001916d4602ac0849201c01f036fc281c211c01f038fc0021002800d10121081c04b030bc02bc08470000801c001030b584b001f02efa009001916d4602ac0849201c01f01afc281c211c01f01cfc0021002800d10121081c04b030bc02bc084700008c1c0010f0b52c4ca54486ab18600f1c151c012668468021490001f009fc82ac2649201c01f0f8fb6846211c2a1c01f005fc684601f0a8fc002855d084ac2049201c01f0e9fb6846211c2a1c01f0f6fb684601f099fc002846d086a8291c01f0a3f900280fd087ac1649201c01f0d4fb6846211c2a1c01f0e1fb684601f084fc002800d10026002e2ed086a8391c2a1c012301f08ff9061c002e17d189ac0a49201c01f0b9fb6846211c2a1c01f0c6fb684601f06ffc17e0ccfdffff981c0010041d0010241d0010441d00108bac0949201c01f0a1fb6846211c321c2b1c01f0adfb684601f05cfc8d239b009d44f0bc01bc0047601d001084b0f0b557464e464546e0b484b00c900d910e920f934ea800684e904fa80068814601f097fb4c466468a0460c980001070900264e9c0294484601f08bfbbc4200dbc1e10ca8029901f08afb007820281cd00ca8029901f083fb0078092815d00ca8029901f07cfb00780a280ed00ca8029901f075fb00780d2807d00ca8029901f06efb00780c2800d09de1029cbc4200db99e10ca8211c01f062fb007820281bd00ca8029901f05bfb0078092814d00ca8029901f054fb00780a280dd00ca8029901f04dfb00780d2806d00ca8029901f046fb00780c2803d1029c01340294d4e7029cbc4200db6ee10ca8211c01f037fb0078402806d90ca8029901f030fb00785a280fd90ca8029901f029fb0078602800d858e10ca8029901f021fb00787a2800d950e1029cbc4200db04e10ca8211c01f015fb0078402806d90ca8029901f00efb00785a2823d90ca8029901f007fb0078602806d90ca8029901f000fb00787a2815d90ca8029901f0f9fa00782f2806d90ca8029901f0f2fa0078392807d90ca8029901f0ebfa00785f2800d0d2e0029cbc4243da0ca8211c01f0e0fa0078402806d90ca8029901f0d9fa00785a2822d90ca8029901f0d2fa0078602806d90ca8029901f0cbfa00787a2814d90ca8029901f0c4fa00782f2806d90ca8029901f0bdfa0078392806d90ca8029901f0b6fa00785f2812d1464510da311c0136484601f086fa039002990c1c013402940ca801f0a4fa0078039c2080b8e7029c0134a246ba4500db7ce70ca8029901f096fa00783a2800d074e70ca8514601f08efa00783a2800d06ce7464500db69e7311c0136484601f05cfa5c210180029c02340294bc4266da0ca8211c01f077fa0078402806d90ca8029901f070fa00785a280fd90ca8029901f069fa0078602800d847e70ca8029901f061fa00787a2800d93fe7029cbc4245da0ca8211c01f056fa0078402806d90ca8029901f04ffa00785a2823d90ca8029901f048fa0078602806d90ca8029901f041fa00787a2815d90ca8029901f03afa00782f2806d90ca8029901f033fa0078392807d90ca8029901f02cfa00785f2800d00ae7464500db07e7311c0136484601f0faf9039002990c1c013402940ca801f018fa0078039c2080b6e7029cbc4244da0ca8211c01f00dfa007820281bd00ca8029901f006fa0078092814d00ca8029901f0fff900780a280dd00ca8029901f0f8f900780d2806d00ca8029901f0f1f900780c2803d1029c01340294d5e7029cbc421ada0ca8211c01f0e3f900783b2813d1f01c404510da4846311c01f0dff96c460449201c01f0b4f94846211c01f0dcf9012002e0801c0010002004b038bc9846a146aa46f0bc08bc04b0184783b0f0b54f464646c0b44d4ca544071c8824e4006c4421604a4c6c4422608924e4006c442360a920c000684406688225ed006d448424e4006c4425604249206801f0b2f98820c00068448424e4006c44216801f0aff9814601204c46c44200d1a1e040a88021490001f078f9c224a4006c44a0468422520040468821c900694401f09ef9484607303e9040ac3f94c6a96846f82201f094f944462068c3a90968c4aa1268c5ab1b68fff7bcfd00287ad040468021490001f089f9301c00f054ff8322d2006a44106051608321c9006944404601f081f91d49404601f083f9381c01f04af9216809010909409800010009013009187868814251da0026b146c224a4006c44a046444620680001000981451eda311c0136381c01f00ef98424e4006c442060c2a8494601f02cf900788424e4006c44256828800124a144e3e70000dcfbffff44040000ac1d00104c210010311c0136381c01f0eff85c2101800024a146409800010009814515da311c0136381c01f0e1f88424e4006c44206040a8494601f0d9f800888424e4006c44256828800124a144e4e7381c311c01e0381c002101f0f5f8044b9d4418bc9846a146f0bc08bc03b018472404000084b070b586b00a900b910c920d9300260aa8022101f00ef9009001916d4602ac0e49201c01f0e2f8281c211c01f008f900280cd104ac0a49201c01f0d7f80aa8211c01f0d9f80121c84200d00126301c06b070bc08bc04b018470000bc1d0010c01d001081b0f0b54f464646c0b4644ca54480460e1ccd24e4006c442260d124e4006c442360f220c0006844076840a88021490001f084f8301c00f087fecb22d2006a4410605160cd24e4006c44206800f082fecc22d2006a4410605160ca25ed006d44cd24e4006c4425604d49206801f05af84c4bcd24e4006c442568cb22d2006a44cc20c0006844009040a8216801f05cf80024a146c225ad006d44cd24e4006c442560206840a900f05bfecd24e4006c442068fff711fc00281ad1caac84225200201cd121c900694401f06af8cea96846f82201f065f82068cba90968ccaa1268cdab1b68fff75aff002801d10124a1464c46200600284ad040a8002101f038f8c2ac201c40a900f02bfe201cfff7c8fb00283cd08623db006b4423485861321c01ca1860214c6c44a446032101246442a14601ca64460434a446043c206001394945f6d11a485861311c18318920c00068448222920001f023f8c2ac84225200201cd121c900694401f01af88620c00068443f90c5a96846fc2201f011f82168c3a80268c4a8036840a8fff729fe4098000100280ed1002012e0000094f9ffffd01d001038210010742100103404000038230010381c414640aafff7a9fb0120044b9d4418bc9846a146f0bc08bc01b0184700006c06000083b0f0b5474680b4354ca544051ceb24e4006c442160334c6c442260ec24e4006c44236000260027822292007ea8291c00f0caff82a96846fc22520000f0c4ff7e987f99809a819bfff7aafa002838d08024e4006c44a0464046291c00f094fd4046fff74dfb00282ad14046291c00f08bfd4046fff728fb061c002e20d18424e4006c4484225200201ceb21c900694400f09aff8621c90069446846f82200f093ff20681049694409688522d2006a4412680e4b6b441b68fff784fe002800d00127380600284dd07ea88021490000f049ff002e0ed0e624e4006c4404490de0c0f8ffff5c070000240400002c040000f01d0010e724e4006c441749201c00f025ff7ea8211c2a1c00f032ff7ea800f0e7ff00281dd0a524e4006c4482229200201c291c00f050ffa721c90069446846fc22520000f048ff2068084969440968a622d2006a441268054b6b441b6800f00dfa012007e000001c1e00102c050000340500000020e823db009d4408bc9846f0bc08bc03b01847f0b5474680b4244ca54480460f1c7ea800f004fd8320c000684400f0fffcc720c00068448021490000f0e0fe7ea8391c0022002300f0f8fc381c002100f0c4fe0088402806d9381c002100f0bdfe00885a280dd9381c002100f0b6fe008860281cd9381c002100f0affe00887a2815d8381c012100f0a8fe00883a280ed1381c022100f0a1fe00885c2807d18320c0006844391c14e0000048eeffff842424016c4400f073fc806900f0fefc011c0a68201c126a00f026fc8320c0006844211c0022002300f0b0fca0256d0045442868002803d100f05afc1c302860574d6d4400215648684401606960a020400040440168281c3a1c002300f09efc061c002e00d0fde08420000168448021490000f0a5fe842109016944281c00f095fc061c281c00f097fc002e00d0dde0444c6c4482229200201c391c00f08afe414969446846fc22520000f083fe20683e4969440968a52212016a4412683c4b6b441b68fff7acf9002800d184e0c52212016a448320c00068443649516100681060354e6e440321344b6b4401256d4201cb01c60139a942fad131485061314868448621c90069448222920000f052fee7231b016b447ea9264858617e981860294d6d440322fe2464006c44a4460126764264460434a446043c206801c5013ab242f6d11e4858611831204868448222920000f02ffec5252d016d44e72636016e44842109016944194c6c4484225200201c00f01ffea020400040440068006841901449694468468222520000f012fe2368381c291c321cfff73cfd37e0000098110000480a0000580a00004c0a0000540a000074210010540c00001c04000038230010680c0000740e0000880e00009010000094100000842109016944c52424016c4484225200201c00f0e3fd134969446846fc2200f0ddfd2168104868440268104868440368381cfff7effd0021002800d101210806002835d0c724e4006c448d256d016d440749281c00f084fd201c291c3a1c00f091fd22e05c0c0000540c0000580c0000341e0010c724e4006c44024d6d4402490ae00000a81100005c1e0010c724e4006c440f4d6d440f49281c00f061fd201c291c321c3b1c00f06dfd201c00f01cfe4446606a00280fd000f02efb816900290dd008688268081c032100f0e1fa06e0b0110000841e0010404600f0b1fb034b9d4408bc9846f0bc01bc0047b8110000f0b5071c0e1c1e4878611e48b8611e4838609e2464003d192968002910d0786800f09cfb2968002905d008688268081c032100f0b5fa9e246400391900200860a02464003d192868002803d000f072fd00202860796a002905d008688268081c032100f09dfa064878610648b86107483860381c311c00f077fbf0bc01bc0047482300107c230010f42100108421001084b030b51d4ca5449c909d919e929f9301200021002200f0b3fd041c96a901a800f046fd002808d10090201c9ca90222002300f0abfd00f041fd96a80068002813d014a88021490000f0d6fc14ad97ac0b49201c00f0c4fc96a80268281c211c00f0d0fc281c00f085fd00f02dfd99239b009d4430bc08bc04b018479cfdffffd01e001010b5094ca544041c68468022520000f01ffd201c6946fff7b7fd82239b009d4410bc01bc00470000f8fdfffff0b5474680b4324ca544071c8846022952d100f0f7fa011c0a687ea8126a00f01ffa8026f6006e44301c00f0a5fa2949301c7eaa002300f0a5fac425ed006d44281c00f0bbfa244c6c440021224868440160201c042100f0b7fa301c00f0bafa011c201c2a1c00f0bbfa002824d1301c00f0b0fa011c8420000168448022520000f0d0fc8521090169446846fc22520000f08cfc84200001684400680f49694409680f4a6a4412680e4b6b441b68fff74fff381c00f0acfa00204446002c00d10120094b9d4408bc9846f0bc02bc0847b4f5ffffb41f0010480a000044080000480800004c0800004c0a000010b5a02464000019016010bc01bc0047f0b50b4ca5440b4c6c4421607ea88021490000f01bfc074c6c442468064d6019052800d92ae180000449401800688746c8f7ffff3408000000fcffffe4110010fc1100102c12001058120010dc12001094130010a813001009490a4b032000900022019204200290039204930220059006927ea80522092300f0eefbbce00000f01f0010e41f001001200021002200f0a1fc8022d2006a44131c054970c970c30321002300f0a4fc00f038fce9e00000241f00101a4868448021490000f0c6fb174f6f44174c6c441749201c00f0b2fb381c211c00f02efc381c00f091fc002800d1cee0114c6c4482229200201c391c00f0defb0e4969446846fc22520000f0d7fb2068c321c90069440968094a6a441268c423db006b441b68fff79bfeb0e00c0400001c080000301f001014060000240600001c06000000f058f98569254c6c442549201c00f075fb24492f1c3437201c3a1c802300f059fc002800d190e08020c0006844c021490000f0a7fb8025ed006d44281c391c00f032f901200021002200f027fc061c0c2000f03bfb041c00f0d6fb124a6a44124911486844016054600f4868444168006800f0cffb0e4820600e486060281c00f0d0fba060301c0321221c002300f013fc022000f0ccfb57e0000024080000481f0010381f00102c0800009d190010c01d0010ec1e001003497ea800f030fb7ea800f0d9fb40e0702000108020c00068448021490000f01dfbc120c00068448021490000f016fb1249134b8024e4006c4403200090002201920420029003920493022005900692201c0522092300f007fb201c00f0b0fb084800f08ffbc124e4006c440649201c00f0fafa201c00f0a3fb0ae0f01f0010e41f001040420f00702000100120fef7f9fd024b9d44f0bc01bc00473808000030b5051c242000f073fb041c002c04d0291c00f049f903482060201c30bc02bc084700006422001070b5a220400000f05ffb061c002e10d000f03cf9094d7561094cb46109483060301c3430802100f0b5fa7561b46106483060301c70bc02bc08470000482300107c23001084210010f4210010f0b50d1c171c1c1c00f06ef88669301c211cfff76bfe002d05d03068026d301c391c00f01df80020f0bc02bc0847000010b58b20800000f027fb041c002c03d000f004f902482060201c10bc02bc0847fc220010002070470047704708477047104770471847704720477047284770473047704738477047404770474847704750477047584770476047704770477047014b1b681847c04690230010014b1b681847c04698230010014b1b681847c0469c230010014b1b681847c04694230010014b1b681847c046a423001040b4024e3668b44640bc6047a0230010014b1b681847c046a8230010014b1b681847c046c0230010014b1b681847c046b8230010014b1b681847c046ac230010014b1b681847c046b0230010014b1b681847c046bc230010014b1b681847c046b4230010014b1b681847c046c4230010014b1b681847c046c8230010014b1b681847c046dc230010014b1b681847c046d4230010014b1b681847c046e4230010014b1b681847c046fc230010014b1b681847c0460424001040b4024e3668b44640bc6047f823001040b4024e3668b44640bc6047f0230010014b1b681847c046f4230010014b1b681847c046cc230010014b1b681847c04600240010014b1b681847c046d0230010014b1b681847c046e0230010014b1b681847c046d8230010014b1b681847c046ec230010014b1b681847c046e8230010014b1b681847c04608240010014b1b681847c04634240010014b1b681847c04690240010014b1b681847c046d8240010014b1b681847c046dc240010014b1b681847c046e4240010014b1b681847c046e0240010014b1b681847c046f0240010014b1b681847c046f8240010014b1b681847c0469c240010014b1b681847c046a4240010014b1b681847c046ec240010014b1b681847c0465c240010014b1b681847c04640240010014b1b681847c04650240010014b1b681847c0468c240010014b1b681847c0462024001040b4024e3668b44640bc604748240010014b1b681847c04654240010014b1b681847c046cc240010014b1b681847c046a8240010014b1b681847c046ac240010014b1b681847c0467c240010014b1b681847c0461c240010014b1b681847c04678240010014b1b681847c04670240010014b1b681847c04610240010014b1b681847c04698240010014b1b681847c0463c240010014b1b681847c0460c240010014b1b681847c046b0240010014b1b681847c04668240010014b1b681847c04624240010014b1b681847c04630240010014b1b681847c04680240010014b1b681847c046bc240010014b1b681847c046c4240010014b1b681847c046b4240010014b1b681847c04638240010014b1b681847c04664240010014b1b681847c04660240010014b1b681847c04694240010014b1b681847c046a0240010014b1b681847c046c8240010014b1b681847c046f424001040b4024e3668b44640bc604788240010014b1b681847c0467424001040b4024e3668b44640bc60474c240010014b1b681847c0468424001040b4024e3668b44640bc604758240010014b1b681847c046c0240010014b1b681847c04618240010014b1b681847c04644240010014b1b681847c0461424001040b4024e3668b44640bc6047b8240010014b1b681847c0462c240010014b1b681847c04628240010014b1b681847c0466c240010014b1b681847c046e8240010014b1b681847c046d4240010014b1b681847c046d0240010014b1b681847c04600250010014b1b681847c046fc240010014b1b681847c04644250010014b1b681847c04630250010014b1b681847c0461c250010014b1b681847c04674250010014b1b681847c04620250010014b1b681847c0466c25001040b4024e3668b44640bc604738250010014b1b681847c0465c250010014b1b681847c04618250010014b1b681847c04658250010014b1b681847c04614250010014b1b681847c04670250010014b1b681847c04634250010014b1b681847c04604250010014b1b681847c04678250010014b1b681847c04628250010014b1b681847c04610250010014b1b681847c04640250010014b1b681847c04624250010014b1b681847c0467c250010014b1b681847c04660250010014b1b681847c04664250010014b1b681847c04648250010014b1b681847c04668250010014b1b681847c0462c250010014b1b681847c0463c25001040b4024e3668b44640bc604754250010014b1b681847c04650250010014b1b681847c0464c250010014b1b681847c0460c250010014b1b681847c04608250010014b1b681847c04680250010014b1b681847c04684250010014b1b681847c04698250010014b1b681847c04690250010014b1b681847c046a8250010014b1b681847c046ac250010014b1b681847c0469425001040b4024e3668b44640bc6047a025001040b4024e3668b44640bc60479c250010014b1b681847c0468825001040b4024e3668b44640bc6047a4250010014b1b681847c046b0250010014b1b681847c0468c2500107047000000b5054a4261054a8261054a0260fff771fd01bc00470000482300107c2300108421001000b5fff7c5fe01bc0047000000b5fff7b9fe01bc0047000000b5fff7b3fe01bc0047000010b581b0039c14380094fff769fe01b010bc01bc0047000000b51438fff75afe01bc004700b51438fff762fe01bc004700b51838fff746fe02bc0847ffffffff00000000ffffffff00000000b01f0010d01f001038210010182100102e0070006d000000801c00102e0070006c0000008c1c001025005300200069007300200075006e0074007200750073007400650064002e00200049006e007300740061006c006c0020006f006e006c007900200069006600200079006f0075002000740072007500730074002000700072006f00760069006400650072002e000000000049006e007300740061006c006c002000610073002000250053003f00000000005200650070006c0061006300650020006f006c0064002000250053003f00000049006e007300740061006c006c0065006400200025005300000000004600610069006c00750072006500200025006400200069006e007300740061006c006c0069006e00670020002500530000000000981c0010041d0010241d0010441d0010601d0010801c00107061636b61676500ac1d00104c210010232100007065726c00000000bc1d0010c01d001025005300250053002500530000000000d01d00103821001074210010382300105200650061006c006c0079002000720075006e0020006d006f00640075006c0065002000250053003f000000520075006e002000250053003f000000f01d00101c1e00104600610069006c0065006400200066006f0072002000660069006c006500200025005300000000004500720072006f0072002000250064002000720065006100640069006e00670020002500530000004500720072006f00720020002500640020006f00700065006e0069006e00670020002500530000007421001038230010341e00105c1e0010841e0010482300107c23001084210010f42100104500720072006f00720020002500640000000000d01e0010b41f00102d6c65007072696e74202752756e6e696e6720696e20272c20245e4f2c20225c6e222c207363616c6172206c6f63616c74696d6500000000c01d0010ec1e0010f01e001043003a005c0000000500000043006f00640065003a0000004f006e0065006c0069006e006500720000000000f01f0010e41f0010241f0010301f0010481f0010381f00109d190010c01d0010ec1e001070200010e411001064220010482300107c23001084210010f4210010c0220010fc220010482300107c23001084210010f61520100a000000640065006600610075006c0074002e0070006c0000000000070000005000650072006c0041007000700000000300000053003800300000003c0000005000650072006c002000250064002e00250064002e00250064002c002000530079006d006200690061006e00200070006f00720074002000250064002e00250064002e00250064002c0020006200750069006c007400200066006f0072002000250053002000530044004b002000250064002e0025006400000000005100000043006f007000790072006900670068007400200031003900380037002d00320030003000350020004c0061007200720079002000570061006c006c00200061006e00640020006f00740068006500720073002c002000530079006d006200690061006e00200070006f0072007400200043006f00700079007200690067006800740020004e006f006b0069006100200032003000300034002d00320030003000350000000d0000005c00530079007300740065006d005c004d00610069006c005c000000060000005c005000650072006c005c0000000000200000005c73797374656d5c6c6962735c7065726c5c736974657065726c5c352e392e330000000000000000000000003d1b00103d1b00100000000000000000dd1b0010011700100d17001019170010251700109d150010a915001031170010b51500103d17001049170010c1150010cd150010c11b001055170010cd180010cd1b001061170010dd1800106d170010791700108917001095170010a1170010ad1700103d1b00100000000000000000690f0010011700100d17001019170010251700109d150010a915001031170010b51500103d17001049170010c1150010cd150010c11b001055170010a9100010cd1b0010611700107d1000106d170010791700108917001095170010a1170010ad170010a51100100000000000000000011c00102518001031180010451500103d1800104918001055180010611800106d180010d91b00107918001085180010511500105d150010911800109d180010a91800105d140010a9140010b5180010c118001000000000000000000d1c0010b9170010c51700103d1b0010d1170010dd17001039150010e9170010f5170010011800100d180010191800103d1b00100000000000000000191c0010b9170010c51700100d000010d1170010dd17001039150010e9170010f5170010011800100d1800101918001035140010000000000000000095160010a1160010ecffffff000000003d1c0010211900102d19001039190010451900105519001061190010251c00106d190010491c001079190010e8ffffff00000000551c0010d9150010e515001003000000060000001b00000047000000110000002900000004000000520000005a0000006000000065000000bb000000df000000ff000000000100000f00000012000000250000002700000029000000330000005c0000005e000000610000007900000088000000b7000000d2000000e3000000e600000011000000140000001e0000001f000000300000003100000033000000340000004000000041000000420000004300000044000000470000004a0000004b0000004e0000005000000051000000520000005400000055000000560000006400000074000000790000007a0000007c0000007d0000007f000000820000008300000085000000860000008c0000008e0000008f0000009000000092000000930000009500000096000000970000009b0000009d000000a1000000b3000000c8000000cc000000ce000000d5000000d6000000d9000000db000000de000000e0000000e2000000e5000000fb000000fd000000fe0000000300000006000000020000000300000015000000570000005b0000006200000063000000c9000000cd000000f7000000fb000000ae010000c1010000d301000074020000770200002903000038030000390300005303000059030000e7030000ea0300007c0400008c0400000205000003050000690500007f05000097050000e00500002e0600004b060000040000000600000008000000090000000b0000004c000000800500008305000084050000b0050000d105000000000000d914000024030000700200000400000003000000060000001b0000004700000085020000020000001100000029000000980200000100000004000000af02000008000000520000005a0000006000000065000000bb000000df000000ff00000000010000c20200000f0000000f00000012000000250000002700000029000000330000005c0000005e000000610000007900000088000000b7000000d2000000e3000000e6000000d60200003d00000011000000140000001e0000001f000000300000003100000033000000340000004000000041000000420000004300000044000000470000004a0000004b0000004e0000005000000051000000520000005400000055000000560000006400000074000000790000007a0000007c0000007d0000007f000000820000008300000085000000860000008c0000008e0000008f0000009000000092000000930000009500000096000000970000009b0000009d000000a1000000b3000000c8000000cc000000ce000000d5000000d6000000d9000000db000000de000000e0000000e2000000e5000000fb000000fd000000fe000000ec0200000200000003000000060000000103000021000000020000000300000015000000570000005b0000006200000063000000c9000000cd000000f7000000fb000000ae010000c1010000d301000074020000770200002903000038030000390300005303000059030000e7030000ea0300007c0400008c0400000205000003050000690500007f05000097050000e00500002e0600004b060000150300000b000000040000000600000008000000090000000b0000004c000000800500008305000084050000b0050000d10500004150504152435b31303030336133645d2e444c4c004241464c5b31303030336130665d2e444c4c0043484152434f4e565b31303030336231315d2e444c4c00434f4e455b31303030336134315d2e444c4c0045465352565b31303030333965345d2e444c4c0045494b434f52455b31303030343839325d2e444c4c004553544c49425b31303030336230625d2e444c4c0045555345525b31303030333965355d2e444c4c005045524c3539332e444c4c000000000803000075010000000000004800000014302830bc3050318831c0317c32803284328832b4327c36dc37e037ac38b038543a583a5c3a643a7c3be43b543e603ee83e003f4c3fe83fec3ff03ff43f000000100000cc01000078307c31e031e431e831ec31f031f431f831243228325432cc327c33803388338c339033a433103414341c34583498349c34a034a434f83440354c3558356435703580358c359835a435b035bc35c835d435e035ec35f835043610361c36283638364836543660366c367836843690369c36a836b436c036cc36d836e436f036fc360837143720372c373837443750375c3768377437843790379c37a837b437c037cc37d837e437f037fc370838143820382c383838443850385c386838743880388c389838a438b038bc38c838d838e438f438003910391c3928393439403950395c396839743980398c399839a439b039bc39c839d439e039ec39f839083a143a203a2c3a383a443a503a5c3a683a743a803a8c3a983aa43ab03abc3ac83ad43ae03aec3afc3a083b143b203b2c3b383b443b503b5c3b683b743b803b903ba03bac3bbc3bc83bd43bf43bf83bfc3b703c743c783c7c3c883c943c943d983d9c3da03da43da83db43db83dc83dcc3de03de43de83dec3d2c3e303eac3eb03eb43eb83ebc3ec03ec43ec83ecc3ee43ee83e243f283f2c3f5c3f603f643f683f6c3f703f743f783f7c3f803f843f883f8c3f903f943f983f9c3fa03fa43fa83fac3f000000200000f40000007c3180318c319031943198319c31a031a431a831ac31b031b431b831bc31c031c431c831cc31d031d431d831dc31e031e431e831ec31f031fc310032043208320c321032143218321c322032243228322c323032343238323c324032443248324c325032543258325c3260326c327032743278327c328032843288328c329032943298329c32a032a432a832ac32b032b432b832bc32c832cc32d032d432d832dc32e032e432e832ec32f032f432f832043308330c331033143318331c332033243328332c3330333433403344335033543358335c336033643368336c33703374337833843388338c330000__APP__
-  }
-
-  # This is Symbian application resource skeleton.
-  # You can create the ...\epoc32\data\z\system\apps\PerlApp\PerlApp.rsc
-  # by compiling the PerlApp.cpp.
-  # The following resource has been compiled using the Series 80 SDK 2.0
-  # for Visual C.
-  # 'make sisify_hex' to create the perlrscmin.hex for this hexdump.
-  if ($Variant eq 'S80') {
-    $RSCHEX = <<__RSC__;
-6b4a1f10000000005fde04001ca360de01b800780400000001f0e54d0000000005f0e54d000000000000000004f0e54d000000000010010000005000000000000400000204030352756e0900ffffffff00030408084f6e656c696e65720900ffffffff000504050541626f75740900ffffffff0000010404457869740500ffffffff0007010006f0e54d07074f7074696f6e73110000000000ffffffff0000000000000000000f0500000400000000000000000000050541626f7574170000ffffffff00000000010400000000000000000000040454696d65170000ffffffff00000000020400000000000000000000030352756e170000ffffffff0000000003040000000000000000000008084f6e656c696e6572170000ffffffff000000000404000000000000000000000909436f707972696768740e0000ffffffff00000000000000000003010005055469746c65110000000064b0f3000000000001000200060650726f6d70740f00080000000000000a00010080000014001c001c0034008200a50047017b01
-__RSC__
-  }
-
-  # This is Symbian application executable skeleton.
-  # You can create the ...\epoc32\release\thumb\urel\foo.app
-  # by compiling the PerlApp.cpp with PerlMinSample defined in PerlApp.h.
-  # The following executable has been compiled using the UIQ SDK 2.1
-  # for CodeWarrior.
-  # 'make sisify_hex' to create the perlappmin.hex for this hexdump.
-  if ($Variant eq 'UIQ') {
-      $APPHEX = <<__APP__;
-79000010ce390010f61520108581107645504f4300200000cb7c2694000000000100af004044957dd6e2e000030000008c25000000000000001000000000100000200000000000000100000000000010000000000a0000000426000001000000502300007c000000000000000826000058290000000000005e01000000b501f031fa02bc084700000148006870470000401f001000b5011c024801f0c7fb01bc00470000601f001084b030b50390049105920693204903a801f0befb041c0025002c06d103a8002101f0bcfb00885c282bd0022c2ad103a8002101f0b3fb0088402806d903a8002101f0acfb00885a280dd903a8002101f0a5fb0088602815d903a8002101f09efb00887a280ed803a8012101f097fb00883a2807d103a8022101f090fb00885c2800d10125281c30bc08bc04b018470000c820001084b030b50390049105920693204903a801f074fb041c0025002c06d103a8002101f072fb00885c282bd0022c2ad103a8002101f069fb0088402806d903a8002101f062fb00885a280dd903a8002101f05bfb0088602815d903a8002101f054fb00887a280ed803a8012101f04dfb00883a2807d103a8022101f046fb00885c2800d10125281c30bc08bc04b018470000a820001030b584b001f0eef9009001916d4602ac0849201c01f034fb281c211c01f036fb0021002800d10121081c04b030bc02bc084700001c1c001030b584b001f0d2f9009001916d4602ac0849201c01f018fb281c211c01f01afb0021002800d10121081c04b030bc02bc08470000281c0010f0b52c4ca54486ab18600f1c151c012668468021490001f007fb82ac2649201c01f0f6fa6846211c2a1c01f003fb684601f0a0fb002855d084ac2049201c01f0e7fa6846211c2a1c01f0f4fa684601f091fb002846d086a8291c01f053f900280fd087ac1649201c01f0d2fa6846211c2a1c01f0dffa684601f07cfb002800d10026002e2ed086a8391c2a1c012301f03ff9061c002e17d189ac0a49201c01f0b7fa6846211c2a1c01f0c4fa684601f067fb17e0ccfdffff341c0010a01c0010c01c0010e01c00108bac0949201c01f09ffa6846211c321c2b1c01f0abfa684601f054fb8d239b009d44f0bc01bc0047fc1c001084b0f0b557464e464546e0b484b00c900d910e920f934ea800684e904fa80068814601f095fa4c466468a0460c980001070900264e9c0294484601f089fabc4200dbc1e10ca8029901f088fa007820281cd00ca8029901f081fa0078092815d00ca8029901f07afa00780a280ed00ca8029901f073fa00780d2807d00ca8029901f06cfa00780c2800d09de1029cbc4200db99e10ca8211c01f060fa007820281bd00ca8029901f059fa0078092814d00ca8029901f052fa00780a280dd00ca8029901f04bfa00780d2806d00ca8029901f044fa00780c2803d1029c01340294d4e7029cbc4200db6ee10ca8211c01f035fa0078402806d90ca8029901f02efa00785a280fd90ca8029901f027fa0078602800d858e10ca8029901f01ffa00787a2800d950e1029cbc4200db04e10ca8211c01f013fa0078402806d90ca8029901f00cfa00785a2823d90ca8029901f005fa0078602806d90ca8029901f0fef900787a2815d90ca8029901f0f7f900782f2806d90ca8029901f0f0f90078392807d90ca8029901f0e9f900785f2800d0d2e0029cbc4243da0ca8211c01f0def90078402806d90ca8029901f0d7f900785a2822d90ca8029901f0d0f90078602806d90ca8029901f0c9f900787a2814d90ca8029901f0c2f900782f2806d90ca8029901f0bbf90078392806d90ca8029901f0b4f900785f2812d1464510da311c0136484601f084f9039002990c1c013402940ca801f0a2f90078039c2080b8e7029c0134a246ba4500db7ce70ca8029901f094f900783a2800d074e70ca8514601f08cf900783a2800d06ce7464500db69e7311c0136484601f05af95c210180029c02340294bc4266da0ca8211c01f075f90078402806d90ca8029901f06ef900785a280fd90ca8029901f067f90078602800d847e70ca8029901f05ff900787a2800d93fe7029cbc4245da0ca8211c01f054f90078402806d90ca8029901f04df900785a2823d90ca8029901f046f90078602806d90ca8029901f03ff900787a2815d90ca8029901f038f900782f2806d90ca8029901f031f90078392807d90ca8029901f02af900785f2800d00ae7464500db07e7311c0136484601f0f8f8039002990c1c013402940ca801f016f90078039c2080b6e7029cbc4244da0ca8211c01f00bf9007820281bd00ca8029901f004f90078092814d00ca8029901f0fdf800780a280dd00ca8029901f0f6f800780d2806d00ca8029901f0eff800780c2803d1029c01340294d5e7029cbc421ada0ca8211c01f0e1f800783b2813d1f01c404510da4846311c01f0ddf86c460449201c01f0b2f84846211c01f0daf8012002e01c1c0010002004b038bc9846a146aa46f0bc08bc04b0184783b0f0b54f464646c0b44d4ca544071c8824e4006c4421604a4c6c4422608924e4006c442360a920c000684406688225ed006d448424e4006c4425604249206801f0b0f88820c00068448424e4006c44216801f0adf8814601204c46c44200d1a1e040a88021490001f076f8c224a4006c44a0468422520040468821c900694401f09cf8484607303e9040ac3f94c6a96846f82201f092f844462068c3a90968c4aa1268c5ab1b68fff7bcfd00287ad040468021490001f087f8301c00f0f8fe8322d2006a44106051608321c9006944404601f07ff81d49404601f081f8381c01f048f8216809010909409800010009013009187868814251da0026b146c224a4006c44a046444620680001000981451eda311c0136381c01f00cf88424e4006c442060c2a8494601f02af800788424e4006c44256828800124a144e3e70000dcfbffff44040000481d0010dc200010311c0136381c00f0edff5c2101800024a146409800010009814515da311c0136381c00f0dfff8424e4006c44206040a8494600f0d7ff00888424e4006c44256828800124a144e4e7381c311c01e0381c002100f0f3ff044b9d4418bc9846a146f0bc08bc03b018472404000084b070b586b00a900b910c920d9300260aa8022101f00cf8009001916d4602ac0e49201c00f0e0ff281c211c01f006f800280cd104ac0a49201c00f0d5ff0aa8211c00f0d7ff0121c84200d00126301c06b070bc08bc04b018470000581d00105c1d001081b0f0b54f464646c0b4644ca54480460e1ccd24e4006c442260d124e4006c442360f220c0006844076840a88021490000f082ff301c00f02bfecb22d2006a4410605160cd24e4006c44206800f026fecc22d2006a4410605160ca25ed006d44cd24e4006c4425604d49206800f058ff4c4bcd24e4006c442568cb22d2006a44cc20c0006844009040a8216800f05aff0024a146c225ad006d44cd24e4006c442560206840a900f0fffdcd24e4006c442068fff711fc00281ad1caac84225200201cd121c900694400f068ffcea96846f82200f063ff2068cba90968ccaa1268cdab1b68fff75aff002801d10124a1464c46200600284ad040a8002100f036ffc2ac201c40a900f0cffd201cfff7c8fb00283cd08623db006b4423485861321c01ca1860214c6c44a446032101246442a14601ca64460434a446043c206001394945f6d11a485861311c18318920c00068448222920000f021ffc2ac84225200201cd121c900694400f018ff8620c00068443f90c5a96846fc2200f00fff2168c3a80268c4a8036840a8fff729fe4098000100280ed1002012e0000094f9ffff6c1d0010c82000100421001034040000f8220010381c414640aafff7a9fb0120044b9d4418bc9846a146f0bc08bc01b0184700006c06000083b0f0b5474680b4354ca544051ceb24e4006c442160334c6c442260ec24e4006c44236000260027822292007ea8291c00f0c8fe82a96846fc22520000f0c2fe7e987f99809a819bfff7aafa002838d08024e4006c44a0464046291c00f038fd4046fff74dfb00282ad14046291c00f02ffd4046fff728fb061c002e20d18424e4006c4484225200201ceb21c900694400f098fe8621c90069446846f82200f091fe20681049694409688522d2006a4412680e4b6b441b68fff784fe002800d00127380600284dd07ea88021490000f047fe002e0ed0e624e4006c4404490de0c0f8ffff5c070000240400002c0400008c1d0010e724e4006c441749201c00f023fe7ea8211c2a1c00f030fe7ea800f0dffe00281dd0a524e4006c4482229200201c291c00f04efea721c90069446846fc22520000f046fe2068084969440968a622d2006a441268054b6b441b6800f00dfa012007e00000b81d00102c050000340500000020e823db009d4408bc9846f0bc08bc03b01847f0b5474680b4244ca54480460f1c7ea800f0a8fc8320c000684400f0a3fcc720c00068448021490000f0defd7ea8391c0022002300f09cfc381c002100f0c2fd0088402806d9381c002100f0bbfd00885a280dd9381c002100f0b4fd008860281cd9381c002100f0adfd00887a2815d8381c012100f0a6fd00883a280ed1381c022100f09ffd00885c2807d18320c0006844391c14e0000048eeffff842424016c4400f023fc806900f0a2fc011c0a68201c126a00f0dcfb8320c0006844211c0022002300f054fca6256d0045442868002803d100f00afc1c302860574d6d4400215648684401606960a620400040440168281c3a1c002300f042fc061c002e00d0fde08420000168448021490000f0a3fd842109016944281c00f039fc061c281c00f03bfc002e00d0dde0444c6c4482229200201c391c00f088fd414969446846fc22520000f081fd20683e4969440968a52212016a4412683c4b6b441b68fff7acf9002800d184e0c52212016a448320c00068443649516100681060354e6e440321344b6b4401256d4201cb01c60139a942fad131485061314868448621c90069448222920000f050fde7231b016b447ea9264858617e981860294d6d440322fe2464006c44a4460126764264460434a446043c206801c5013ab242f6d11e4858611831204868448222920000f02dfdc5252d016d44e72636016e44842109016944194c6c4484225200201c00f01dfda620400040440068006841901449694468468222520000f010fd2368381c291c321cfff73cfd37e0000098110000480a0000580a00004c0a0000540a000004210010540c00001c040000f8220010680c0000740e0000880e00009010000094100000842109016944c52424016c4484225200201c00f0e1fc134969446846fc2200f0dbfc2168104868440268104868440368381cfff7effd0021002800d101210806002835d0c724e4006c448d256d016d440749281c00f082fc201c291c3a1c00f08ffc22e05c0c0000540c0000580c0000d01d0010c724e4006c44024d6d4402490ae00000a8110000f81d0010c724e4006c440f4d6d440f49281c00f05ffc201c291c321c3b1c00f06bfc201c00f014fd4446606a00280fd000f0defa816900290dd008688268081c032100f097fa06e0b0110000201e0010404600f055fb034b9d4408bc9846f0bc01bc0047b8110000f0b5071c0e1c1e4878611e48b8611e483860a42464003d192968002910d0786800f040fb2968002905d008688268081c032100f06bfaa4246400391900200860a62464003d192868002803d000f070fc00202860796a002905d008688268081c032100f053fa064878610648b86107483860381c311c00f0edfcf0bc01bc0047082300103c230010942100101421001084b030b51d4ca5449c909d919e929f9301200021002200f0abfc041c96a901a800f044fc002808d10090201c9ca90222002300f0a3fc00f03ffc96a80068002813d014a88021490000f0d4fb14ad97ac0b49201c00f0c2fb96a80268281c211c00f0cefb281c00f07dfc00f02bfc99239b009d4430bc08bc04b018479cfdffff6c1e001010b5094ca544041c68468022520000f01dfc201c6946fff7b7fd82239b009d4410bc01bc00470000f8fdfffff0b5474680b4324ca544071c8846022952d100f09bfa011c0a687ea8126a00f0d5f98026f6006e44301c00f049fa2949301c7eaa002300f049fac425ed006d44281c00f05ffa244c6c440021224868440160201c042100f05bfa301c00f05efa011c201c2a1c00f05ffa002824d1301c00f054fa011c8420000168448022520000f0cefb8521090169446846fc22520000f08afb84200001684400680f49694409680f4a6a4412680e4b6b441b68fff74fff381c00f050fa00204446002c00d10120094b9d4408bc9846f0bc02bc0847b4f5ffff441f0010480a000044080000480800004c0800004c0a000010b5a62464000019016010bc01bc0047f0b50c4ca544fb24e4006c44216007a88021490000f018fbfb24e4006c442468054d6019052800d9dee08000034940180068874624f8ffff00fcffffe4110010fc1100102c1200108c13001054120010041300101813001009490a4b03200090002201920420029003920493022005900120069007a80522092300f0ebfa73e0801f0010741f001001200021002200f099fb89aa131c054970c970c30321002300f09efb00f038fba1e00000c01e001000f04cf98569f924e4006c442349201c00f0b6fa22492f1c4037201c3a1c802300f08efb002800d189e08ca8c021490000f0eafa8cad281c391c00f029f901200021002200f066fb061c0c2000f080fa041c00f015fbfa22d2006a441149fa20c000684401605460fa20c00068444168006800f00bfb0c4820600c486060281c00f00cfba060301c0321221c002300f04ffb022000f008fb51e00000dc1e0010cc1e0010991700105c1d0010881e0010034907a800f076fa07a800f019fb3ee000200010eea88021490000f065fab820c00068448021490000f05efa1249134beeac032000900022019204200290039204930220059001200690201c0522092300f050fa201c00f0f3fa094800f0d2fab824e4006c440749201c00f043fa201c00f0e6fa0be00000801f0010741f001040420f00002000100120fef743fe024b9d44f0bc01bc0047dc07000030b5051c242000f0b5fa041c002c04d0291c00f031f903482060201c30bc02bc084700001422001070b5a820400000f0a1fa061c002e10d000f0f6fa094d7561094cb46109483060301c4030802100f0fdf97561b46106483060301c70bc02bc08470000082300103c2300101421001094210010f0b50d1c171c1c1c00f068f88669301c211cfff7b5fe002d05d03068026d301c391c00f01df80020f0bc02bc0847000010b58c20800000f069fa041c002c03d000f0befa02482060201c10bc02bc0847b4220010002070470047704708477047104770471847704720477047284770473047704738477047404770474847704750477047584770476047704770477047014b1b681847c04654230010014b1b681847c04658230010014b1b681847c04650230010014b1b681847c0466023001040b4024e3668b44640bc60475c230010014b1b681847c04664230010014b1b681847c04674230010014b1b681847c04670230010014b1b681847c04668230010014b1b681847c0466c230010014b1b681847c04678230010014b1b681847c0467c230010014b1b681847c04690230010014b1b681847c04688230010014b1b681847c04698230010014b1b681847c046b0230010014b1b681847c046b823001040b4024e3668b44640bc6047ac23001040b4024e3668b44640bc6047a4230010014b1b681847c046a8230010014b1b681847c04680230010014b1b681847c046b4230010014b1b681847c04684230010014b1b681847c04694230010014b1b681847c0468c230010014b1b681847c046a0230010014b1b681847c0469c230010014b1b681847c046bc230010014b1b681847c046dc230010014b1b681847c0460c240010014b1b681847c04638240010014b1b681847c046e8230010014b1b681847c046c8230010014b1b681847c04630240010014b1b681847c046f8230010014b1b681847c046cc230010014b1b681847c046d8230010014b1b681847c04604240010014b1b681847c04620240010014b1b681847c04628240010014b1b681847c04618240010014b1b681847c046e0230010014b1b681847c046f4230010014b1b681847c046f0230010014b1b681847c04610240010014b1b681847c04614240010014b1b681847c0462c240010014b1b681847c0464024001040b4024e3668b44640bc604708240010014b1b681847c0460024001040b4024e3668b44640bc6047ec230010014b1b681847c04624240010014b1b681847c046c4230010014b1b681847c046e4230010014b1b681847c046c023001040b4024e3668b44640bc60471c240010014b1b681847c046d4230010014b1b681847c046d0230010014b1b681847c046fc230010014b1b681847c0463c240010014b1b681847c04634240010014b1b681847c04648240010014b1b681847c04644240010014b1b681847c04688240010014b1b681847c04674240010014b1b681847c04664240010014b1b681847c046b8240010014b1b681847c04668240010014b1b681847c046b024001040b4024e3668b44640bc60477c240010014b1b681847c046a0240010014b1b681847c04660240010014b1b681847c0469c240010014b1b681847c0465c240010014b1b681847c046b4240010014b1b681847c04678240010014b1b681847c0464c240010014b1b681847c046bc240010014b1b681847c04670240010014b1b681847c04658240010014b1b681847c04684240010014b1b681847c0466c240010014b1b681847c046c0240010014b1b681847c046a4240010014b1b681847c046a8240010014b1b681847c0468c240010014b1b681847c046ac240010014b1b681847c0468024001040b4024e3668b44640bc604798240010014b1b681847c04694240010014b1b681847c04690240010014b1b681847c04654240010014b1b681847c04650240010014b1b681847c046c4240010014b1b681847c046c8240010014b1b681847c046d8240010014b1b681847c046d0240010014b1b681847c046e8240010014b1b681847c046ec240010014b1b681847c046d424001040b4024e3668b44640bc6047e024001040b4024e3668b44640bc6047dc24001040b4024e3668b44640bc6047e4240010014b1b681847c046f0240010014b1b681847c046cc240010014b1b681847c0464c250010014b1b681847c046f4240010014b1b681847c04604250010014b1b681847c04628250010014b1b681847c04634250010014b1b681847c0463c250010014b1b681847c04640250010014b1b681847c04618250010014b1b681847c04608250010014b1b681847c04624250010014b1b681847c04610250010014b1b681847c04630250010014b1b681847c0462c25001040b4024e3668b44640bc604720250010014b1b681847c0461c250010014b1b681847c04644250010014b1b681847c04648250010014b1b681847c04614250010014b1b681847c046f8240010014b1b681847c046fc240010014b1b681847c04600250010014b1b681847c04674250010014b1b681847c04664250010014b1b681847c04670250010014b1b681847c0466c250010014b1b681847c04650250010014b1b681847c04660250010014b1b681847c04678250010014b1b681847c04668250010014b1b681847c04654250010014b1b681847c0467c250010014b1b681847c04658250010014b1b681847c0465c250010014b1b681847c0463825001040b4024e3668b44640bc60470c250010014b1b681847c046802500107047000000b5054a4261054a8261054a0260fff719ff01bc00470000082300103c2300101421001000b5fff7f5fd01bc0047000000b5fff7ddff01bc0047000000b5fff7d7ff01bc0047000010b581b0039c14380094fff79ffd01b010bc01bc0047000000b51438fff7b6ff01bc004700b51438fff798fd01bc004700b51838fff7b0ff02bc0847ffffffff00000000ffffffff00000000401f0010601f0010c8200010a82000102e0070006d0000001c1c00102e0070006c000000281c001025005300200069007300200075006e0074007200750073007400650064002e00200049006e007300740061006c006c0020006f006e006c007900200069006600200079006f0075002000740072007500730074002000700072006f00760069006400650072002e000000000049006e007300740061006c006c002000610073002000250053003f00000000005200650070006c0061006300650020006f006c0064002000250053003f00000049006e007300740061006c006c0065006400200025005300000000004600610069006c00750072006500200025006400200069006e007300740061006c006c0069006e00670020002500530000000000341c0010a01c0010c01c0010e01c0010fc1c00101c1c00107061636b61676500481d0010dc200010232100007065726c00000000581d00105c1d0010250053002500530025005300000000006c1d0010c820001004210010f82200105200650061006c006c0079002000720075006e0020006d006f00640075006c0065002000250053003f000000520075006e002000250053003f0000008c1d0010b81d00104600610069006c0065006400200066006f0072002000660069006c006500200025005300000000004500720072006f0072002000250064002000720065006100640069006e00670020002500530000004500720072006f00720020002500640020006f00700065006e0069006e006700200025005300000004210010f8220010d01d0010f81d0010201e0010082300103c23001014210010942100104500720072006f007200200025006400000000006c1e0010441f00102d6c65007072696e74202752756e6e696e6720696e20272c20245e4f2c20225c6e222c207363616c6172206c6f63616c74696d65000000005c1d0010881e00108c1e00100500000043006f00640065003a0000004f006e0065006c0069006e006500720000000000801f0010741f0010c01e0010dc1e0010cc1e0010991700105c1d0010881e001000200010e411001014220010082300103c230010142100109421001070220010b4220010082300103c23001014210010f61520100a000000640065006600610075006c0074002e0070006c0000000000070000005000650072006c0041007000700000000300000055004900510000003c0000005000650072006c002000250064002e00250064002e00250064002c002000530079006d006200690061006e00200070006f00720074002000250064002e00250064002e00250064002c0020006200750069006c007400200066006f0072002000250053002000530044004b002000250064002e0025006400000000005100000043006f007000790072006900670068007400200031003900380037002d00320030003000350020004c0061007200720079002000570061006c006c00200061006e00640020006f00740068006500720073002c002000530079006d006200690061006e00200070006f0072007400200043006f00700079007200690067006800740020004e006f006b0069006100200032003000300034002d00320030003000350000000d0000005c00530079007300740065006d005c004d00610069006c005c000000060000005c005000650072006c005c0000000000200000005c73797374656d5c6c6962735c7065726c5c736974657065726c5c352e392e330000000000000000000000002d1900102d1900100000000000000000791b0010e1190010ed190010f9190010051a0010fd14001009150010111a00101d1a0010291a0010351a0010411a001015150010a519001025160010f1160010b11900104d1a00100117001031160010591a0010691a00103d160010751a0010811a00108d1a0010991a0010a51a0010b11a00102d1900100000000000000000690f0010e1190010ed190010f9190010051a0010fd14001009150010111a00101d1a0010291a0010351a0010411a001015150010a519001025160010a9100010b11900104d1a00107d10001031160010591a0010691a00103d160010751a0010811a00108d1a0010991a0010a51a0010b11a0010a511001000000000000000009d1b00104916001055160010a5140010611600106d160010791600108516001091160010751b00109d160010a9160010b1140010bd140010b5160010c1160010cd160010c913001015140010d9160010e51600100000000000000000a91b0010bd1a0010c91a00102d190010d51a0010e11a0010ed1a0010f91a0010051b0010111b00101d1b0010291b00102d190010351b0010411b00100000000000000000b51b0010bd1a0010c91a00100d000010d51a0010e11a0010ed1a0010f91a0010051b0010111b00101d1b0010291b0010a1130010351b0010411b00100000000000000000dd150010e9150010ecffffff00000000d91b00102917001035170010411700104d1700105d17001069170010c11b001075170010e51b001081170010e8ffffff00000000f11b0010211500102d150010060000001b00000047000000110000002900000004000000520000006000000065000000df000000ff000000000100000f00000012000000250000002700000029000000330000005c0000005e000000610000007900000088000000b7000000d2000000e3000000e6000000110000001f00000030000000330000003400000040000000410000004200000043000000440000004b0000005100000054000000560000006400000074000000790000007c00000082000000850000008c0000008e000000920000009b0000009d000000a1000000b3000000c8000000cc000000ce000000d5000000db000000e2000000fd0000000300000006000000020000000300000015000000570000005b0000006200000063000000c9000000cd000000f7000000ae010000c1010000d301000074020000770200002903000038030000390300005303000059030000e7030000ea0300007c0400008c0400000205000003050000690500007f05000097050000e00500002e0600004b0600000600000008000000090000000b0000004c000000800500008305000084050000b0050000d1050000010000000d0000000e0000000f00000010000000750000007a0000008600000087000000900000009d000000a6000000b2000000b3000000bd000000d4000000e3000000e4000000020100001701000021010000220100008d0100009c0100009d0100009e0100009f010000a0010000a1010000a2010000a3010000a4010000a5010000a6010000a7010000a80100000000000045140000500300008802000003000000060000001b000000470000009d020000020000001100000029000000b00200000100000004000000c702000006000000520000006000000065000000df000000ff00000000010000da0200000f0000000f00000012000000250000002700000029000000330000005c0000005e000000610000007900000088000000b7000000d2000000e3000000e6000000ee02000022000000110000001f00000030000000330000003400000040000000410000004200000043000000440000004b0000005100000054000000560000006400000074000000790000007c00000082000000850000008c0000008e000000920000009b0000009d000000a1000000b3000000c8000000cc000000ce000000d5000000db000000e2000000fd000000040300000200000003000000060000001903000020000000020000000300000015000000570000005b0000006200000063000000c9000000cd000000f7000000ae010000c1010000d301000074020000770200002903000038030000390300005303000059030000e7030000ea0300007c0400008c0400000205000003050000690500007f05000097050000e00500002e0600004b0600002d0300000a0000000600000008000000090000000b0000004c000000800500008305000084050000b0050000d10500003903000024000000010000000d0000000e0000000f00000010000000750000007a0000008600000087000000900000009d000000a6000000b2000000b3000000bd000000d4000000e3000000e4000000020100001701000021010000220100008d0100009c0100009d0100009e0100009f010000a0010000a1010000a2010000a3010000a4010000a5010000a6010000a7010000a80100004150504152435b31303030336133645d2e444c4c004241464c5b31303030336130665d2e444c4c0043484152434f4e565b31303030336231315d2e444c4c00434f4e455b31303030336134315d2e444c4c0045465352565b31303030333965345d2e444c4c0045494b434f52455b31303030343839325d2e444c4c004553544c49425b31303030336230625d2e444c4c0045555345525b31303030333965355d2e444c4c005045524c3539332e444c4c0051494b43544c5b31303030356663395d2e444c4c0000002403000083010000000000004800000014302830bc3050318831c0317c32803284328832b4327c36dc37e037ac38b038543a583a5c3a643a7c3be43b543e603ee83e003f4c3fe83fec3ff03ff43f000000100000d001000078307c31e031e431e831ec31f031f431f831243228325032f032f432f832fc32003314337c3380338833c433043408340c3410346434ac34b834c434d034e034ec34f834043510351c352835343540354c35583564357035803590359c35a835b435c035cc35d835e435f035fc350836143620362c363836443650365c366836743680368c369836a436b036bc36c836d436e036ec36fc3608371837243730373c3748375837643770377c3788379437a037ac37b837c437d037dc37e837f437043810381c382838343840384c385838643870387c3888389438a038ac38b838c438d038dc38ec38f838043910391c392839343940394c3958396439703980399039a039ac39b839c439d039dc39e839f439003a0c3a183a243a303a3c3a483a543a643a703a7c3a883a943aa03aac3ab83ac43ad03adc3ae83af43a003b0c3b183b243b303b3c3b483b543b643b703b903b943b983b0c3c103c143c183c243c303c303d343d383d3c3d403d443d503d543d643d683d7c3d803d843d883dc83dcc3d483e4c3e503e543e583e5c3e603e643e683e803e843ec03ec43ec83ef03ef43ef83efc3e003f043f083f0c3f103f143f183f1c3f203f243f283f2c3f303f343f383f3c3f0000002000000c0100000c3110311c312031243128312c313031343138313c314031443148314c315031543158315c316031643168316c317031743178317c318031843188318c3190319c31a031a431a831ac31b031b431b831bc31c031c431c831cc31d031d431d831dc31e031e431e831ec31f031f431f831fc310032043208320c3210321c322032243228322c323032343238323c324032443248324c325032543258325c326032643268326c3278327c328032843288328c329032943298329c32a032a432a832ac32b032bc32c032c432c832cc32d032d432d832dc32e032e432e832ec32f032f432003304331033143318331c332033243328332c33303334333833443348334c330000
-__APP__
-  }
-
-  # This is Symbian application resource skeleton.
-  # You can create the ...\epoc32\data\z\system\apps\PerlApp\PerlApp.rsc
-  # by compiling the PerlApp.cpp.
-  # The following resource has been compiled using the UIQ 2.1 SDK
-  # for CodeWarrior.
-  # 'make sisify_hex' to create the perlrscmin.hex for this hexdump.
-  if ($Variant eq 'UIQ') {
-    $RSCHEX = <<__RSC__;
-6b4a1f10000000005fde04001ca360de019a00f8030400000001f0e54d0000000004f0e54d04f0e54d0000000000000000000000000007010005f0e54d07074f7074696f6e73110000000000ffffffff0000000000000000000f0400000400000000000000000000050541626f7574170000ffffffff00000000010400000000000000000000040454696d65170000ffffffff0000000003040000000000000000000008084f6e656c696e6572170000ffffffff000000000404000000000000000000000909436f707972696768740e0000ffffffff000000000000000000050100000005055469746c6511460014000000000064b0f30001000200060650726f6d707411000800000000000000000a0001008000000005000000000d0d4f4b202f2043616e63656c203f0e460014000000000008f0e54d00000015010000000200feff00000000000000000000000002024f6b1a00ffffffff000000000101ffff000000000000000000000000060643616e63656c0b00ffffffff0000000001010005000000000a0a596573202f204e6f203f0e46001400000000000af0e54d00000015010000000200feff00000000000000000000000003035965732900ffffffff000000000101ffff000000000000000000000000024e006f0000ffffffff00000000010115001d001d0035005800de0016013a018201a301e801
-__RSC__
-  }
-}
diff --git a/symbian/symbian_dll.cpp b/symbian/symbian_dll.cpp
deleted file mode 100644 (file)
index a1e61a4..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- *     symbian_dll.cpp
- *
- *     Copyright (c) Nokia 2004-2005.  All rights reserved.
- *      This code is licensed under the same terms as Perl itself.
- *
- */
-
-#define SYMBIAN_DLL_CPP
-#include <e32base.h>
-#include "PerlBase.h"
-
-#ifdef __SERIES60_3X__ 
-EXPORT_C GLDEF_C TInt E32Dll(/*TDllReason aReason*/) { return KErrNone; }
-#else
-EXPORT_C GLDEF_C TInt E32Dll(TDllReason /*aReason*/) { return KErrNone; }
-#endif
-
-extern "C" {
-    EXPORT_C void* symbian_get_vars(void)         { return Dll::Tls(); }
-    EXPORT_C void  symbian_set_vars(const void *p) { Dll::SetTls((TAny*)p); }
-    EXPORT_C void  symbian_unset_vars(void)       { Dll::SetTls(0); }
-}
-
diff --git a/symbian/symbian_proto.h b/symbian/symbian_proto.h
deleted file mode 100644 (file)
index 7226663..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- *     symbian_proto.h
- *
- *     Copyright (c) Nokia 2004-2005.  All rights reserved.
- *      This code is licensed under the same terms as Perl itself.
- *
- */
-
-#ifndef SYMBIAN_PROTO_H
-#define SYMBIAN_PROTO_H
-
-#include <sys/types.h>
-#include <sys/times.h>
-
-#if defined(PERL_CORE) || defined(PERL_EXT)
-
-/* We can't include the <string.h> unconditionally
- * since it has prototypes conflicting with the gcc builtins. */
-extern void  *memchr(const void *s, int c, size_t n);
-#ifndef PERL_IN_DL_SYMBIAN_XS
-/* dl_symbian.xs needs to see the C++ prototype of memset() instead */
-extern void  *memset(void *s, int c, size_t n);
-extern size_t strlen(const char *s);
-#endif
-extern void  *memmove(void *dst, const void *src, size_t n);
-extern char  *strcat(char *dst, const char *src);
-extern char  *strchr(const char *s, int c);
-extern char  *strerror(int errnum);
-extern int    strncmp(const char *s1, const char *s2, size_t n);
-extern char  *strrchr(const char *s, int c);
-
-extern int setmode(int fd, long flags);
-
-#ifndef __GNUC__
-#define memcpy _e32memcpy /* GCC intrinsic */
-extern void  *memcpy(const void *s1, const void *s2, size_t n);
-extern int    strcmp(const char *s1, const char *s2);
-extern char*  strcpy(char *dst, const char *src);
-extern char*  strncpy(char *dst, const char *src, size_t n);
-#endif
-
-#endif /* PERL_CORE || PERL_EXT */
-
-#if defined(SYMBIAN_DLL_CPP) || defined(SYMBIAN_UTILS_CPP) || defined(PERLBASE_CPP) || defined(PERLUTIL_CPP)
-#  define PERL_SYMBIAN_START_EXTERN_C extern "C" {
-#  define PERL_SYMBIAN_IMPORT_C       IMPORT_C /* Declarations have IMPORT_C, definitions have EXPORT_C. */
-#  define PERL_SYMBIAN_END_EXTERN_C   }
-#else
-#  define PERL_SYMBIAN_START_EXTERN_C
-#  define PERL_SYMBIAN_IMPORT_C
-#  define PERL_SYMBIAN_END_EXTERN_C
-#endif
-
-PERL_SYMBIAN_START_EXTERN_C
-PERL_SYMBIAN_IMPORT_C int   symbian_sys_init(int *argcp, char ***argvp);
-PERL_SYMBIAN_IMPORT_C void  init_os_extras(void);
-PERL_SYMBIAN_IMPORT_C void* symbian_get_vars(void);
-PERL_SYMBIAN_IMPORT_C void  symbian_set_vars(const void *);
-PERL_SYMBIAN_IMPORT_C void  symbian_unset_vars(void);
-PERL_SYMBIAN_IMPORT_C SSize_t symbian_read_stdin(const int fd, char *b, int n);
-PERL_SYMBIAN_IMPORT_C SSize_t symbian_write_stdout(const int fd, const char *b, int n);
-PERL_SYMBIAN_IMPORT_C char* symbian_get_error_string(const int error);
-PERL_SYMBIAN_IMPORT_C void symbian_sleep_usec(const long usec);
-PERL_SYMBIAN_IMPORT_C int symbian_get_cpu_time(long* sec, long* usec);
-PERL_SYMBIAN_IMPORT_C clock_t symbian_times(struct tms* buf);
-PERL_SYMBIAN_IMPORT_C int symbian_usleep(unsigned int usec);
-PERL_SYMBIAN_IMPORT_C int symbian_do_aspawn(void* vreally, void *vmark, void* sp);
-PERL_SYMBIAN_IMPORT_C int symbian_do_spawn(const char* command);
-PERL_SYMBIAN_IMPORT_C int symbian_do_spawn_nowait(const char* command);
-PERL_SYMBIAN_END_EXTERN_C
-
-#endif /* !SYMBIAN_PROTO_H */
-
diff --git a/symbian/symbian_stubs.c b/symbian/symbian_stubs.c
deleted file mode 100644 (file)
index 314bd57..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- *     symbian_stubs.c
- *
- *     Copyright (c) Nokia 2004-2005.  All rights reserved.
- *      This code is licensed under the same terms as Perl itself.
- *
- */
-
-#include "EXTERN.h"
-#include "perl.h"
-#include "symbian_stubs.h"
-
-static int   setENOSYS(void)     { errno = ENOSYS; return -1; }
-
-uid_t getuid(void)       { return setENOSYS(); }
-gid_t getgid(void)       { return setENOSYS(); }
-uid_t geteuid(void)      { return setENOSYS(); }
-gid_t getegid(void)      { return setENOSYS(); }
-
-int setuid(uid_t uid)  { return setENOSYS(); }
-int setgid(gid_t gid)  { return setENOSYS(); }
-int seteuid(uid_t uid) { return setENOSYS(); }
-int setegid(gid_t gid) { return setENOSYS(); }
-
-int execv(const char* path, char* const argv [])  { return setENOSYS(); }
-int execvp(const char* path, char* const argv []) { return setENOSYS(); }
-
-#ifndef USE_PERLIO
-FILE *popen(const char *command, const char *mode) { return 0; }
-int   pclose(FILE *stream) { return setENOSYS(); }
-#endif
-int   pipe(int fd[2]) { return setENOSYS(); }
-
-int setmode(int fd, long flags) { return -1; }
-
-_sig_func_ptr signal(int signum, _sig_func_ptr handler) { return (_sig_func_ptr)setENOSYS(); }
-int   kill(pid_t pid, int signum) { return setENOSYS(); }
-pid_t wait(int *status) { return setENOSYS(); }
-
-#if PERL_VERSION <= 8
-void Perl_my_setenv(pTHX_ char *var, char *val) { }
-#else
-void Perl_my_setenv(pTHX_ const char *var, const char *val) { }
-#endif
-
-bool Perl_do_exec(pTHX_ const char *cmd) { return FALSE; }
-bool Perl_do_exec3(pTHX_ const char *cmd, int fd, int flag) { return FALSE; }
-
-int Perl_do_spawn(pTHX_ char *cmd) { return symbian_do_spawn(cmd); }
-int Perl_do_aspawn(pTHX_ SV *really, SV** mark, SV **sp) { return symbian_do_aspawn(really, mark, sp); }
-
-static const struct protoent protocols[] = {
-    { "tcp",   0,       6 },
-    { "udp",   0,      17 }
-};
-
-/* The protocol field (the last) is left empty to save both space
- * and time because practically all services have both tcp and udp
- * allocations in IANA. */
-static const struct servent services[] = {
-    { "http",          0,        80,   0 }, /* Optimization. */
-    { "https",         0,       443,   0 },
-    { "imap",          0,       143,   0 },
-    { "imaps",         0,       993,   0 },
-    { "smtp",          0,        25,   0 },
-    { "irc",           0,       194,   0 },
-
-    { "ftp",           0,        21,   0 },
-    { "ssh",           0,        22,   0 },
-    { "tftp",          0,        69,   0 },
-    { "pop3",          0,       110,   0 },
-    { "sftp",          0,       115,   0 },
-    { "nntp",          0,       119,   0 },
-    { "ntp",           0,       123,   0 },
-    { "snmp",          0,       161,   0 },
-    { "ldap",          0,       389,   0 },
-    { "rsync",         0,       873,   0 },
-    { "socks",         0,      1080,   0 }
-};
-
-struct protoent* getprotobynumber(int number) {
-    int i;
-    for (i = 0; i < sizeof(protocols)/sizeof(struct protoent); i++)
-        if (protocols[i].p_proto == number)
-            return (struct protoent*)(&(protocols[i]));
-    return 0;
-}
-
-struct protoent* getprotobyname(const char* name) {
-    int i;
-    for (i = 0; i < sizeof(protocols)/sizeof(struct protoent); i++)
-        if (strEQ(name, protocols[i].p_name))
-            return (struct protoent*)(&(protocols[i]));
-    return 0;
-}
-    
-struct servent* getservbyname(const char* name, const char* proto) {
-    int i;
-    for (i = 0; i < sizeof(services)/sizeof(struct servent); i++)
-        if (strEQ(name, services[i].s_name))
-            return (struct servent*)(&(services[i]));
-    return 0;
-}
-
-struct servent* getservbyport(int port, const char* proto) {
-    int i;
-    for (i = 0; i < sizeof(services)/sizeof(struct servent); i++)
-        if (services[i].s_port == port)
-            return (struct servent*)(&(services[i]));
-    return 0;
-}
-
diff --git a/symbian/symbian_stubs.h b/symbian/symbian_stubs.h
deleted file mode 100644 (file)
index ab6b961..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- *     symbian_stubs.h
- *
- *     Copyright (c) Nokia 2004-2005.  All rights reserved.
- *      This code is licensed under the same terms as Perl itself.
- *
- */
-
-#ifndef PERL_SYMBIAN_STUBS_H
-#define PERL_SYMBIAN_STUBS_H
-
-int execv(const char* path, char* const argv []);
-int execvp(const char* path, char* const argv []);
-
-#ifndef USE_PERLIO
-FILE *popen(const char *command, const char *mode);
-int   pclose(FILE *stream);
-#endif
-int   pipe(int fd[2]);
-
-#endif /* PERL_SYMBIAN_STUBS_H */
-
diff --git a/symbian/symbian_utils.cpp b/symbian/symbian_utils.cpp
deleted file mode 100644 (file)
index 9749361..0000000
+++ /dev/null
@@ -1,422 +0,0 @@
-/*
- *      symbian_utils.cpp
- *
- *      Copyright (c) Nokia 2004-2005.  All rights reserved.
- *      This code is licensed under the same terms as Perl itself.
- *
- */
-
-#define SYMBIAN_UTILS_CPP
-#include <e32base.h>
-#include <e32std.h>
-#include <utf.h>
-#include <hal.h>
-
-#include <eikenv.h>
-
-#include <string.h>
-#include <ctype.h>
-
-#include "PerlUi.h"
-#include "PerlBase.h"
-#include "PerlUtil.h"
-
-#include "EXTERN.h"
-#include "perl.h"
-#include "XSUB.h"
-
-extern "C" {
-    EXPORT_C int symbian_sys_init(int *argcp, char ***argvp)
-    {
-#ifdef PERL_GLOBAL_STRUCT /* Avoid unused variable warning. */
-        dVAR;
-#endif
-        (void)times(&PL_timesbase);
-        return 0;
-    }
-    XS(XS_PerlApp_TextQuery) // Can't be made static because of XS().
-    {
-        dXSARGS;
-       if (items != 0)
-           Perl_croak(aTHX_ "PerlApp::TextQuery: no arguments, please");
-       SP -= items;
-       // TODO: parse arguments for title, prompt, and maxsize.
-       // Suggested syntax:
-       // TextQuery(title => ..., prompt => ..., maxsize => ...)
-       // For an example see e.g. universal.c:XS_PerlIO_get_layers().
-       _LIT(KTitle,  "Title");
-       _LIT(KPrompt, "Prompt");
-        HBufC* cData = HBufC::New(KPerlUiOneLinerSize);
-       TBool cSuccess = EFalse;
-       if (cData) {
-           TPtr cPtr(cData->Des());
-           if (CPerlUi::TextQueryDialogL(KTitle,
-                                         KPrompt,
-                                         cPtr,
-                                         KPerlUiOneLinerSize)) {
-               ST(0) = sv_2mortal(PerlUtil::newSvPVfromTDesC16(*cData));
-               cSuccess = ETrue;
-           }
-           delete cData;
-       }
-       if (cSuccess)
-           XSRETURN(1);
-       else
-           XSRETURN_UNDEF;
-    }
-    EXPORT_C void init_os_extras(void)
-    {
-        dTHX;
-       char *file = __FILE__;
-       dXSUB_SYS;
-       newXS("PerlApp::TextQuery", XS_PerlApp_TextQuery, file);
-    }
-    EXPORT_C SSize_t symbian_read_stdin(const int fd, char *b, int n)
-    {
-#ifdef PERL_GLOBAL_STRUCT /* Avoid unused variable warning. */
-        dVAR;
-#endif
-        if(!PL_appctx)
-               ((CPerlBase*)PL_appctx) = CPerlBase::NewInterpreter();
-        return ((CPerlBase*)PL_appctx)->ConsoleRead(fd, b, n);
-    }
-    EXPORT_C SSize_t symbian_write_stdout(const int fd, const char *b, int n)
-    {
-#ifdef PERL_GLOBAL_STRUCT /* Avoid unused variable warning. */
-        dVAR;
-#endif
-        if(!PL_appctx)
-               ((CPerlBase*)PL_appctx) = CPerlBase::NewInterpreter();
-        return ((CPerlBase*)PL_appctx)->ConsoleWrite(fd, b, n);
-    }
-    static const char NullErr[] = "";
-    EXPORT_C char* symbian_get_error_string(TInt error)
-    {
-       // CTextResolver seems to be unreliable, so we roll our own
-        // at least for the basic Symbian errors (this does not cover
-        // the various subsystems).
-        dTHX;
-        if (error >= 0)
-            return strerror(error);
-       error = -error; // flip
-       const TInt KErrStringMax = 256;
-       typedef struct {
-         const char* kerr;
-         const char* desc;
-       } kerritem;
-       static const kerritem kerrtable[] = {
-         { "None",           /*    0 */ "No error"},
-         { "NotFound",       /*   -1 */ "Unable to find the specified object"},
-         { "General",        /*   -2 */ "General (unspecified) error"},
-         { "Cancel",         /*   -3 */ "The operation was cancelled"},
-         { "NoMemory",       /*   -4 */ "Not enough memory"},
-         { "NotSupported",   /*   -5 */ "The operation requested is not supported"},
-         { "Argument",       /*   -6 */ "Bad request"},
-         { "TotalLossOfPrecision",
-                             /*   -7 */ "Total loss of precision"},
-         { "BadHandle",      /*   -8 */ "Bad object"},
-         { "Overflow",       /*   -9 */ "Overflow"},
-         { "Underflow",      /*  -10 */ "Underflow"},
-         { "AlreadyExists",  /*  -11 */ "Already exists"},
-         { "PathNotFound",   /*  -12 */ "Unable to find the specified folder"},
-         { "Died",           /*  -13 */ "Closed"},
-         { "InUse",          /*  -14 */
-           "The specified object is currently in use by another program"},
-         { "ServerTerminated",       /*  -15 */ "Server has closed"},
-         { "ServerBusy",     /*  -16 */ "Server busy"},
-         { "Completion",     /*  -17 */ "Completion error"},
-         { "NotReady",       /*  -18 */ "Not ready"},
-         { "Unknown",        /*  -19 */ "Unknown error"},
-         { "Corrupt",        /*  -20 */ "Corrupt"},
-         { "AccessDenied",   /*  -21 */ "Access denied"},
-         { "Locked",         /*  -22 */ "Locked"},
-         { "Write",          /*  -23 */ "Failed to write"},
-         { "DisMounted",     /*  -24 */ "Wrong disk present"},
-         { "Eof",            /*  -25 */ "Unexpected end of file"},
-         { "DiskFull",       /*  -26 */ "Disk full"},
-         { "BadDriver",      /*  -27 */ "Bad device driver"},
-         { "BadName",        /*  -28 */ "Bad name"},
-         { "CommsLineFail",  /*  -29 */ "Comms line failed"},
-         { "CommsFrame",     /*  -30 */ "Comms frame error"},
-         { "CommsOverrun",   /*  -31 */ "Comms overrun error"},
-         { "CommsParity",    /*  -32 */ "Comms parity error"},
-         { "TimedOut",       /*  -33 */ "Timed out"},
-         { "CouldNotConnect",/*  -34 */ "Failed to connect"},
-         { "CouldNotDisconnect",
-                             /* -35 */ "Failed to disconnect"},
-         { "Disconnected",   /* -36 */ "Disconnected"},
-         { "BadLibraryEntryPoint",
-                             /*  -37 */ "Bad library entry point"},
-         { "BadDescriptor",  /*  -38 */ "Bad descriptor"},
-         { "Abort",          /*  -39 */ "Interrupted"},
-         { "TooBig",         /*  -40 */ "Too big"},
-         { "DivideByZero",   /*  -41 */ "Divide by zero"},
-         { "BadPower",       /*  -42 */ "Batteries too low"},
-         { "DirFull",        /*  -43 */ "Folder full"},
-         { "KErrHardwareNotAvailable",
-                             /*  -44 */ "Hardware is not available"},
-         { "SessionClosed",  /*  -45 */ "Session was closed"},
-         { "PermissionDenied",
-                             /*  -46 */ "Permission denied"}
-       };
-       const TInt n = sizeof(kerrtable) / sizeof(kerritem *);
-       TBuf8<KErrStringMax> buf8;
-       if (error >= 0 && error < n) {
-         const char *kerr = kerrtable[error].kerr;
-         const char *desc = kerrtable[error].desc;
-         const TPtrC8 kerrp((const unsigned char *)kerr, strlen(kerr));
-         const TPtrC8 descp((const unsigned char *)desc, strlen(desc));
-         TBuf8<KErrStringMax> ckerr;
-         TBuf8<KErrStringMax> cdesc;
-         ckerr.Copy(kerrp);
-         cdesc.Copy(descp);
-         buf8.Format(_L8("K%S (%d) %S"), &ckerr, error, &cdesc);
-                    
-       } else {
-         buf8.Format(_L8("Symbian error %d"), error);
-       }
-        SV* sv = Perl_get_sv(aTHX_ "\005", TRUE); /* $^E or ${^OS_ERROR} */
-        if (!sv)
-            return (char*)NullErr;
-        sv_setpv(sv, (const char *)buf8.PtrZ());
-        return SvPV_nolen(sv);
-    }
-    EXPORT_C void symbian_sleep_usec(const long usec)
-    {
-        User::After((TTimeIntervalMicroSeconds32) usec);
-    }
-#define PERL_SYMBIAN_CLK_TCK 100
-    EXPORT_C int symbian_get_cpu_time(long* sec, long* usec)
-    {
-        // The RThread().GetCpuTime() does not seem to work?
-        // (it always returns KErrNotSupported)
-        // TTimeIntervalMicroSeconds ti;
-        // TInt err = me.GetCpuTime(ti);
-        dTHX;
-        TInt periodus; /* tick period in microseconds */
-        if (HAL::Get(HALData::ESystemTickPeriod, periodus) != KErrNone)
-            return -1;
-        TUint  tick   = User::TickCount();
-        if (PL_timesbase.tms_utime == 0) {
-            PL_timesbase.tms_utime = tick;
-            PL_clocktick = PERL_SYMBIAN_CLK_TCK;
-        }
-        tick -= PL_timesbase.tms_utime;
-        TInt64 tickus = TInt64(tick) * TInt64(periodus);
-        TInt64 tmps   = tickus / 1000000;
-#ifdef __SERIES60_3X__
-        if (sec)  *sec  = I64LOW(tmps);
-        if (usec) *usec = I64LOW(tickus) - I64LOW(tmps) * 1000000;
-#else
-        if (sec)  *sec  = tmps.Low();
-        if (usec) *usec = tickus.Low() - tmps.Low() * 1000000;
-#endif //__SERIES60_3X__
-        return 0;
-    }
-    EXPORT_C int symbian_usleep(unsigned int usec)
-    {
-        if (usec >= 1000000) {
-            errno = EINVAL;
-            return -1;
-        }
-        symbian_sleep_usec((const long) usec);
-        return 0;
-    }
-#define SEC_USEC_TO_CLK_TCK(s, u) \
-        (((s) * PERL_SYMBIAN_CLK_TCK) + (u / (1000000 / PERL_SYMBIAN_CLK_TCK)))
-    EXPORT_C clock_t symbian_times(struct tms *tmsbuf) 
-    {
-        long s, u;
-        if (symbian_get_cpu_time(&s, &u) == -1) {
-            errno = EINVAL;
-            return -1;
-        } else {
-            tmsbuf->tms_utime  = SEC_USEC_TO_CLK_TCK(s, u);
-            tmsbuf->tms_stime  = 0;
-            tmsbuf->tms_cutime = 0;
-            tmsbuf->tms_cstime = 0;
-            return tmsbuf->tms_utime;
-        }
-    }
-    class CProcessWait : public CActive
-    {
-    public:
-        CProcessWait() : CActive(EPriorityStandard) {
-          CActiveScheduler::Add(this);
-        }
-#ifdef __WINS__
-        TInt Wait(RThread& aProcess)
-#else
-        TInt Wait(RProcess& aProcess)
-#endif
-        {
-            aProcess.Logon(iStatus);
-            aProcess.Resume();
-            SetActive();
-            CActiveScheduler::Start();
-            return iStatus.Int();
-        }
-    private:
-      void DoCancel() {;}
-      void RunL() {
-          CActiveScheduler::Stop();
-      }
-    };
-    class CSpawnIoRedirect : public CBase
-    {
-    public:
-        CSpawnIoRedirect();
-        // NOTE: there is no real implementation of I/O redirection yet.
-    protected:
-    private:
-    };
-    CSpawnIoRedirect::CSpawnIoRedirect()
-    {
-    }
-    typedef enum {
-        ESpawnNone = 0x00000000,
-        ESpawnWait = 0x00000001
-    } TSpawnFlag;
-    static int symbian_spawn(const TDesC& aFilename,
-                             const TDesC& aCommand,
-                             const TSpawnFlag aFlag,
-                             const CSpawnIoRedirect& aIoRedirect) {
-        TInt error = KErrNone;
-#ifdef __WINS__
-        const TInt KStackSize = 0x1000;
-        const TInt KHeapMin   = 0x1000;
-        const TInt KHeapMax   = 0x100000;
-        RThread proc;
-        RLibrary lib;
-        HBufC* command = aCommand.Alloc();
-        error = lib.Load(aFilename);
-        if (error == KErrNone) {
-            TThreadFunction func = (TThreadFunction)(lib.Lookup(1));
-            if (func)
-                error = proc.Create(aFilename,
-                                    func,
-                                    KStackSize,
-#ifdef __SERIES60_3X__                                    
-                                    KHeapMin,
-                                    KHeapMax,
-                                    (TAny*)command,
-#else
-                                    (TAny*)command,
-                                    &lib,
-                                    RThread().Heap(),
-                                    KHeapMin,
-                                    KHeapMax,
-#endif                                    
-                                    EOwnerProcess);
-            else
-                error = KErrNotFound;
-            lib.Close();
-        }
-        else
-            delete command;
-#else
-        RProcess proc;
-        error = proc.Create(aFilename, aCommand);
-#endif
-        if (error == KErrNone) {
-            if ((TInt)aFlag & (TInt)ESpawnWait) {
-              CProcessWait* w = new CProcessWait();
-              if (w) {
-                  error = w->Wait(proc);
-                  delete w;
-              } else
-                  error = KErrNoMemory;
-            } else
-                proc.Resume();
-            proc.Close();
-        }
-        return error;
-    }
-    static int symbian_spawner(const char *command, TSpawnFlag aFlags)
-     {
-        TBuf<KMaxFileName> aFilename;
-        TBuf<KMaxFileName> aCommand;
-        TSpawnFlag aSpawnFlags = ESpawnWait;
-        CSpawnIoRedirect iord;
-        char *p = (char*)command;
-
-        // The recognized syntax is: "cmd [args] [&]".  Since one
-        // cannot pass more than (an argv[0] and) an argv[1] to a
-        // Symbian process anyway, not much is done to the cmd or
-        // the args, only backslash quoting.
-
-        // Strip leading whitespace.
-        while (*p && isspace(*p)) p++;
-        if (*p) {
-            // Build argv[0].
-            while (*p && !isspace(*p) && *p != '&') {
-                if (*p == '\\') {
-                    if (p[1]) {
-                        aFilename.Append(p[1]);
-                        p++;
-                    }
-                    
-                }
-                else
-                    aFilename.Append(*p);
-                p++;
-            }
-
-            if (*p) {
-                // Skip whitespace between argv[0] and argv[1].
-                while(*p && isspace(*p)) p++;
-                // Build argv[1].
-                if (*p) {
-                    char *a = p;
-                    char *b = p + 1;
-
-                    while (*b) b++;
-                    if (isspace(b[-1])) {
-                        b--;
-                        while (b > a && isspace(*b)) b--;
-                        b++;
-                    }
-                    if (b > a && b[-1] == '&') {
-                        // Parse backgrounding in any case,
-                        // but turn it off only if wanted.
-                        if ((aFlags & ESpawnWait))
-                          aSpawnFlags =
-                            (TSpawnFlag) (aSpawnFlags & ~ESpawnWait);
-                        b--;
-                        if (isspace(b[-1])) {
-                            b--;
-                            while (b > a && isspace(*b)) b--;
-                            b++;
-                        }
-                    }
-                    for (p = a; p < b; p++) {
-                        if (*p == '\\') {
-                            if (p[1])
-                                aCommand.Append(p[1]);
-                            p++;
-                        }
-                        else
-                            aCommand.Append(*p);
-                    }
-                }
-                // NOTE: I/O redirection is not yet done.
-                // Implementing that may require a separate server.
-            }
-        }
-        int spawned = symbian_spawn(aFilename, aCommand, aSpawnFlags, iord);
-        return spawned == KErrNone ? 0 : -1;
-    }
-    EXPORT_C int symbian_do_spawn(const char *command)
-    {
-        return symbian_spawner(command, ESpawnWait);
-    }
-    EXPORT_C int symbian_do_spawn_nowait(const char *command)
-    {
-        return symbian_spawner(command, ESpawnNone);
-    }
-    EXPORT_C int symbian_do_aspawn(void* vreally, void* vmark, void* sp)
-    {
-        return -1;
-    }
-}
-
diff --git a/symbian/symbianish.h b/symbian/symbianish.h
deleted file mode 100644 (file)
index 3b0ddb3..0000000
+++ /dev/null
@@ -1,218 +0,0 @@
-/*
- *     symbianish.h
- *
- *     Copyright (c) Nokia 2004-2005.  All rights reserved.
- *      This code is licensed under the same terms as Perl itself.
- *
- */
-
-#include "symbian/symbian_port.h"
-
-/*
- * The following symbols are defined if your operating system supports
- * functions by that name.  All Unixes I know of support them, thus they
- * are not checked by the configuration script, but are directly defined
- * here.
- */
-
-#ifndef PERL_MICRO
-
-/* HAS_IOCTL:
- *     This symbol, if defined, indicates that the ioctl() routine is
- *     available to set I/O characteristics
- */
-#define        HAS_IOCTL               / **/
-
-/* HAS_UTIME:
- *     This symbol, if defined, indicates that the routine utime() is
- *     available to update the access and modification times of files.
- */
-/* #define HAS_UTIME           / **/
-
-/* HAS_GROUP
- *     This symbol, if defined, indicates that the getgrnam() and
- *     getgrgid() routines are available to get group entries.
- *     The getgrent() has a separate definition, HAS_GETGRENT.
- */
-#undef HAS_GROUP               /**/
-
-/* HAS_PASSWD
- *     This symbol, if defined, indicates that the getpwnam() and
- *     getpwuid() routines are available to get password entries.
- *     The getpwent() has a separate definition, HAS_GETPWENT.
- */
-#undef HAS_PASSWD              /**/
-
-#undef HAS_KILL
-#undef HAS_WAIT
-
-#endif /* !PERL_MICRO */
-
-/* USEMYBINMODE
- *     This symbol, if defined, indicates that the program should
- *     use the routine my_binmode(FILE *fp, char iotype) to insure
- *     that a file is in "binary" mode -- that is, that no translation
- *     of bytes occurs on read or write operations.
- */
-#undef USEMYBINMODE
-
-/* Stat_t:
- *     This symbol holds the type used to declare buffers for information
- *     returned by stat().  It's usually just struct stat.  It may be necessary
- *     to include <sys/stat.h> and <sys/types.h> to get any typedef'ed
- *     information.
- */
-#define Stat_t struct stat
-
-/* USE_STAT_RDEV:
- *     This symbol is defined if this system has a stat structure declaring
- *     st_rdev
- */
-#define USE_STAT_RDEV  /**/
-
-/* ACME_MESS:
- *     This symbol, if defined, indicates that error messages should be
- *     should be generated in a format that allows the use of the Acme
- *     GUI/editor's autofind feature.
- */
-#undef ACME_MESS       /**/
-
-/* UNLINK_ALL_VERSIONS:
- *     This symbol, if defined, indicates that the program should arrange
- *     to remove all versions of a file if unlink() is called.  This is
- *     probably only relevant for VMS.
- */
-/* #define UNLINK_ALL_VERSIONS         / **/
-
-/* VMS:
- *     This symbol, if defined, indicates that the program is running under
- *     VMS.  It is currently automatically set by cpps running under VMS,
- *     and is included here for completeness only.
- */
-/* #define VMS         / **/
-
-/* ALTERNATE_SHEBANG:
- *     This symbol, if defined, contains a "magic" string which may be used
- *     as the first line of a Perl program designed to be executed directly
- *     by name, instead of the standard Unix #!.  If ALTERNATE_SHEBANG
- *     begins with a character other then #, then Perl will only treat
- *     it as a command line if it finds the string "perl" in the first
- *     word; otherwise it's treated as the first line of code in the script.
- *     (IOW, Perl won't hand off to another interpreter via an alternate
- *     shebang sequence that might be legal Perl code.)
- */
-/* #define ALTERNATE_SHEBANG "#!" / **/
-
-#include <signal.h>
-#define ABORT() abort()
-
-/*
- * fwrite1() should be a routine with the same calling sequence as fwrite(),
- * but which outputs all of the bytes requested as a single stream (unlike
- * fwrite() itself, which on some systems outputs several distinct records
- * if the number_of_items parameter is >1).
- */
-#define fwrite1 fwrite
-
-#define Stat(fname,bufptr) stat((fname),(bufptr))
-#define Fstat(fd,bufptr)   fstat((fd),(bufptr))
-#define Fflush(fp)         fflush(fp)
-#define Mkdir(path,mode)   mkdir((path),(mode))
-
-#ifndef PERL_SYS_TERM_BODY
-#define PERL_SYS_TERM_BODY()   HINTS_REFCNT_TERM; OP_REFCNT_TERM;          \
-                               PERLIO_TERM; MALLOC_TERM; CloseSTDLIB();    \
-                                LOCALE_TERM; ENV_TERM;
-
-#endif
-
-#define BIT_BUCKET "NUL:"
-
-#define dXSUB_SYS dNOOP
-
-#define NO_ENVIRON_ARRAY
-
-int kill(pid_t pid, int signo);
-pid_t wait(int *status);
-
-#ifdef PERL_GLOBAL_STRUCT_PRIVATE
-#  undef PERL_GET_VARS
-#  undef PERL_SET_VARS
-#  undef PERL_UNSET_VARS
-#  define PERL_GET_VARS()    symbian_get_vars()
-#  define PERL_SET_VARS(v)   symbian_set_vars(v)
-#  define PERL_UNSET_VARS(v) symbian_unset_vars()
-#endif /* #ifdef PERL_GLOBAL_STRUCT_PRIVATE */
-
-#define PERL_CALLCONV EXPORT_C /* for proto.h */
-
-#ifndef PERL_CORE
-#define PERL_CORE /* for WINS builds under VC */
-#endif
-
-#ifdef USE_PERLIO
-#define PERL_NEED_APPCTX /* need storing the PerlBase* */
-#define PERLIO_STD_SPECIAL
-#define PERLIO_STD_IN(f, b, n)  symbian_read_stdin(f, b, n)
-#define PERLIO_STD_OUT(f, b, n) symbian_write_stdout(f, b, n)
-/* The console (the STD*) streams are seen by Perl in UTF-8. */
-#define PERL_SYMBIAN_CONSOLE_UTF8
-
-#endif
-
-#undef Strerror
-#undef strerror
-#define Strerror(eno) ((eno) < 0 ? symbian_get_error_string(eno) : strerror(eno))
-
-#define PERL_NEED_TIMESBASE
-
-#define times(b)  symbian_times(b)
-#define usleep(u) symbian_usleep(u)
-
-#define PERL_SYS_INIT_BODY(c, v) symbian_sys_init(c, v)
-
-#ifdef __SERIES60_1X__
-#  error "Unfortunately Perl does not work in S60 1.2 (see FAQ-0929)"
-#endif
-
-#ifdef _MSC_VER
-
-/* The Symbian SDK insists on the /W4 flag for Visual C.
- * The Perl sources are not _that_ clean (Perl builds for Win32 use
- * the /W3 flag, and gcc builds always use -Wall, so the sources are
- * quite clean).  To avoid a flood of warnings let's shut up most
- * (for VC 6.0 SP 5). */
-
-#pragma warning(disable: 4054) /* function pointer to data pointer */
-#pragma warning(disable: 4055) /* data pointer to function pointer */
-#pragma warning(disable: 4100) /* unreferenced formal parameter */
-#pragma warning(disable: 4101) /* unreferenced local variable */
-#pragma warning(disable: 4102) /* unreferenced label */
-#pragma warning(disable: 4113) /* prototype difference */
-#pragma warning(disable: 4127) /* conditional expression is constant */
-#pragma warning(disable: 4132) /* const object should be initialized */
-#pragma warning(disable: 4133) /* incompatible types */
-#pragma warning(disable: 4189) /* initialized but not referenced */
-#pragma warning(disable: 4244) /* conversion from ... possible loss ... */
-#pragma warning(disable: 4245) /* signed/unsigned char */
-#pragma warning(disable: 4310) /* cast truncates constant value */
-#pragma warning(disable: 4505) /* function has been removed */
-#pragma warning(disable: 4510) /* default constructor could not ... */
-#pragma warning(disable: 4610) /* struct ... can never be instantiated */
-#pragma warning(disable: 4701) /* used without having been initialized */
-#pragma warning(disable: 4702) /* unreachable code */
-#pragma warning(disable: 4706) /* assignment within conditional */
-#pragma warning(disable: 4761) /* integral size mismatch */
-
-#endif /* _MSC_VER */
-
-#ifdef __MWERKS__
-/* No good way of using the CodeWarrior #pragma unused(varname) with Perl
- * source code (e.g. PERL_UNUSED_DECL doesn't work with the pragma syntax).
- * Therefore we brutally  turn off these particular warnings since there
- * is a lot of this in Perl code (pTHX, for example).  TOther compilers
- * will have to detect these naughty bits. */
-#pragma warn_unusedarg off
-#pragma warn_unusedvar off
-#pragma warn_emptydecl off
-#endif
diff --git a/symbian/uid.pl b/symbian/uid.pl
deleted file mode 100644 (file)
index 6eae8a9..0000000
+++ /dev/null
@@ -1 +0,0 @@
-0x102015F3
diff --git a/symbian/version.pl b/symbian/version.pl
deleted file mode 100644 (file)
index f4208f8..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-use strict;
-
-my %VERSION;
-
-if (open(PATCHLEVEL_H, "<", "patchlevel.h")) {
-  while (<PATCHLEVEL_H>) {
-     if (/#define\s+PERL_(REVISION|VERSION|SUBVERSION)\s+(\d+)/) {
-         $VERSION{$1} = $2;
-     }
-  }
-  close PATCHLEVEL_H;
-} else {
-  die "$0: patchlevel.h: $!\n";
-}
-
-die "$0: Perl release looks funny.\n"
-  unless (defined $VERSION{REVISION} && $VERSION{REVISION} == 5 &&
-          defined $VERSION{VERSION}  && $VERSION{VERSION}  >= 8 &&
-          defined $VERSION{SUBVERSION});
-
-
-\%VERSION;
diff --git a/symbian/xsbuild.pl b/symbian/xsbuild.pl
deleted file mode 100644 (file)
index 5ccd7c3..0000000
+++ /dev/null
@@ -1,976 +0,0 @@
-#!/usr/bin/perl -w
-
-use strict;
-
-use Getopt::Long;
-use File::Basename;
-use Cwd;
-
-unshift @INC, dirname $0 || '.';
-do "sanity.pl" or die $@;
-
-my $CoreBuild = -d "ext" && -f "perl.h" && -d "symbian" && -f "perl.c";
-
-my $SymbianVersion;
-
-if (exists $ENV{EPOCROOT}) {
-    if ($ENV{EPOCROOT} =~ m!\\Symbian\\UIQ_21\\$!i) {
-       $SymbianVersion = '7.0s'; # TODO: other UIQ versions
-    } elsif ($ENV{EPOCROOT} =~ m!\\Symbian\\(.+?)\\!i) {
-       $SymbianVersion = $1;
-    }
-}
-
-$SymbianVersion = $ENV{XSBUILD_SYMBIAN_VERSION}
-  if exists $ENV{XSBUILD_SYMBIAN_VERSION};
-
-my $PerlVersion    = $ENV{XSBUILD_PERL_VERSION};
-my $CSuffix        = '.c';
-my $CPlusPlus;
-my $Config;
-my $Build;
-my $Clean;
-my $DistClean;
-my $Sis;
-
-sub usage {
-    die <<__EOF__;
-$0: Usage: $0 [--symbian=version] [--perl=version]
-              [--extversion=x.y]
-              [--csuffix=csuffix] [--cplusplus|--cpp]
-              [--win=win] [--arm=arm]
-              [--config|--build|--clean|--distclean|--sis] ext
-__EOF__
-}
-
-my $CWD;
-my $SDK;
-my $VERSION;
-my $R_V_SV;
-my $PERLSDK;
-my $WIN = 'wins';
-my $ARM = 'thumb';
-my $BUILDROOT = getcwd();
-
-if ( !defined $PerlVersion && $0 =~ m:\\symbian\\perl\\(.+)\\bin\\xsbuild.pl:i )
-{
-    $PerlVersion = $1;
-}
-
-if ( !defined $SymbianVersion) {
-    ($SymbianVersion) = ($ENV{PATH} =~ m!\\Symbian\\(.+?)\\!i);
-}
-
-my ($SYMBIAN_ROOT, $SYMBIAN_VERSION, $SDK_NAME, $SDK_VARIANT, $SDK_VERSION);
-
-if ($CoreBuild) {
-    do "sanity.pl" or die $@;
-    my %VERSION = %{ do "version.pl" or die $@ };
-    ($SYMBIAN_ROOT, $SYMBIAN_VERSION, $SDK_NAME, $SDK_VARIANT, $SDK_VERSION) =
-      @{ do "sdk.pl" or die $@ };
-    $VERSION = "$VERSION{REVISION}$VERSION{VERSION}$VERSION{SUBVERSION}";
-    $R_V_SV  = "$VERSION{REVISION}.$VERSION{VERSION}.$VERSION{SUBVERSION}";
-    $BUILDROOT    = do "cwd.pl" or die $@;
-    $PerlVersion    = $R_V_SV;
-}
-
-my %CONF;
-
-usage()
-  unless GetOptions(
-    'symbian=s'     => \$SymbianVersion,
-    'perl=s'        => \$PerlVersion,
-    'extversion=s'  => \$CONF{EXTVERSION},
-    'csuffix=s'     => \$CSuffix,
-    'cplusplus|cpp' => \$CPlusPlus,
-    'win=s'         => \$WIN,
-    'arm=s'         => \$ARM,
-    'config'        => \$Config,
-    'build'         => \$Build,
-    'clean'         => \$Clean,
-    'distclean'     => \$DistClean,
-    'sis'           => \$Sis
-  );
-
-usage() unless @ARGV;
-
-$CSuffix = '.cpp' if $CPlusPlus;
-$Build = !( $Config || $Clean || $DistClean ) || $Sis unless defined $Build;
-
-die "$0: Symbian version undefined\n" unless defined $SymbianVersion;
-
-$SymbianVersion =~ s:/:\\:g;
-
-#die "$0: Symbian version '$SymbianVersion' not found\n"
-#  unless -d "\\Symbian\\$SymbianVersion";
-
-die "$0: Perl version undefined\n" unless defined $PerlVersion;
-
-$PERLSDK = "$SYMBIAN_ROOT\\Perl\\$PerlVersion";
-
-die "$0: Perl version '$PerlVersion' not found\n"
-  if !$CoreBuild && !-d $PERLSDK;
-
-print "Configuring with Symbian $SymbianVersion and Perl $PerlVersion...\n";
-
-$R_V_SV = $PerlVersion;
-
-$VERSION = $PerlVersion unless defined $VERSION;
-
-$VERSION =~ tr/.//d if defined $VERSION;
-
-$ENV{SDK}   = $SYMBIAN_ROOT;    # For the Errno extension
-$ENV{CROSS} = 1;                # For the Encode extension (unbuilt now)
-
-my $UARM = 'urel';
-my $UREL = "$SYMBIAN_ROOT\\epoc32\\release\\-ARM-\\$UARM";
-my $SRCDBG;
-if (exists $ENV{UREL}) {
-    $UREL = $ENV{UREL}; # from sdk.pl
-    $UREL =~ s/-ARM-/$ARM/;
-    $UARM = $ENV{UARM}; # from sdk.pl
-    $SRCDBG = $UARM eq 'udeb' ? "SRCDBG" : "";
-}
-
-my %EXTCFG;
-
-sub write_bld_inf {
-    my ($base) = @_;
-    print "\tbld.inf\n";
-    open( BLD_INF, '>', 'bld.inf' ) or die "$0: bld.inf: $!\n";
-    print BLD_INF <<__EOF__;
-PRJ_MMPFILES
-$base.mmp
-PRJ_PLATFORMS
-$WIN $ARM
-__EOF__
-    close(BLD_INF);
-}
-
-sub system_echo {
-    my $cmd = shift;
-    print "xsbuild: ", $cmd, "\n";
-    return system($cmd);
-}
-
-sub run_PL {
-    my ( $PL, $dir, $file ) = @_;
-    if ( defined $file ) {
-        print "\t(Running $dir\\$PL to create $file)\n";
-        unlink($file);
-    }
-    else {
-        print "\t(Running $dir\\$PL)\n";
-    }
-    my $cmd;
-    $ENV{PERL_CORE} = 1 if $CoreBuild;
-    system_echo("perl -I$BUILDROOT\\lib -I$BUILDROOT\\xlib\\symbian -I$BUILDROOT\\t\\lib $PL") == 0
-      or warn "$0: $PL failed.\n";
-    if ( defined $file ) { -s $file or die "$0: No $file created.\n" }
-}
-
-sub read_old_multi {
-    my ( $conf, $k ) = @_;
-    push @{ $conf->{$k} }, split( ' ', $1 ) if /^$k\s(.+)$/;
-}
-
-sub uniquefy_filenames {
-    my $b = [];
-    my %c = ();
-    for my $i (@{$_[0]}) {
-        $i =~ s!/!\\!g;
-        $i = lc $i if $i =~ m!\\!;
-        $i =~ s!^c:!!;
-        push @$b, $i unless $c{$i}++;
-    }
-    return $b;
-}
-
-sub read_mmp {
-    my ( $conf, $mmp ) = @_;
-    if ( -r $mmp && open( MMP, '<', $mmp ) ) {
-        print "\tReading $mmp...\n";
-        while (<MMP>) {
-            chomp;
-            $conf->{TARGET}     = $1 if /^TARGET\s+(.+)$/;
-            $conf->{TARGETPATH} = $1 if /^TARGETPATH\s+(.+)$/;
-            $conf->{EXTVERSION} = $1 if /^EXTVERSION\s+(.+)$/;
-            read_old_multi( $conf, "SOURCE" );
-            read_old_multi( $conf, "SOURCEPATH" );
-            read_old_multi( $conf, "USERINCLUDE" );
-            read_old_multi( $conf, "SYSTEMINCLUDE" );
-            read_old_multi( $conf, "LIBRARY" );
-            read_old_multi( $conf, "MACRO" );
-        }
-        close(MMP);
-    }
-}
-
-sub write_mmp {
-    my ( $ext, $base, $userinclude, @src ) = @_;
-
-    my $extdash = $ext; $extdash =~ s!\\!-!g;
-
-    print "\t$base.mmp\n";
-    $CONF{TARGET}        = "perl$VERSION-$extdash.dll";
-    $CONF{TARGETPATH}    = "\\System\\Libs\\Perl\\$R_V_SV";
-    $CONF{SOURCE}        = [@src];
-    $CONF{SOURCEPATH}    = [ $CWD, $BUILDROOT ];
-    $CONF{USERINCLUDE}   = [ $CWD, $BUILDROOT ];
-    $CONF{SYSTEMINCLUDE} = ["$PERLSDK\\include"] unless $CoreBuild;
-    $CONF{SYSTEMINCLUDE} = [ $BUILDROOT, "$BUILDROOT\\symbian" ] if $CoreBuild;
-    $CONF{LIBRARY}       = [];
-    $CONF{MACRO}         = [];
-    read_mmp( \%CONF, "_init.mmp" );
-    read_mmp( \%CONF, "$base.mmp" );
-
-    if ($base eq 'Zlib') {
-       push @{$CONF{USERINCLUDE}}, "$CWD\\zlib-src";
-    }
-
-    for my $ui ( @{$userinclude} ) {
-        $ui =~ s!/!\\!g;
-        if ( $ui =~ m!^(?:[CD]:)?\\! ) {
-            push @{ $CONF{USERINCLUDE} }, $ui;
-        }
-        else {
-            push @{ $CONF{USERINCLUDE} }, "$BUILDROOT\\$ui";
-        }
-    }
-    push @{ $CONF{SYSTEMINCLUDE} }, "\\epoc32\\include";
-    push @{ $CONF{SYSTEMINCLUDE} }, "\\epoc32\\include\\libc";
-    push @{ $CONF{LIBRARY} },       "euser.lib";
-    push @{ $CONF{LIBRARY} },       "estlib.lib";
-    push @{ $CONF{LIBRARY} },       "perl$VERSION.lib";
-    push @{ $CONF{MACRO} },         "SYMBIAN" unless $CoreBuild;
-    push @{ $CONF{MACRO} },         "PERL_EXT" if $CoreBuild;
-    push @{ $CONF{MACRO} },         "MULTIPLICITY";
-    push @{ $CONF{MACRO} },         "PERL_IMPLICIT_CONTEXT";
-    push @{ $CONF{MACRO} },         "PERL_GLOBAL_STRUCT";
-    push @{ $CONF{MACRO} },         "PERL_GLOBAL_STRUCT_PRIVATE";
-
-    if ($SDK_VARIANT eq 'S60') {
-      push @{ $CONF{MACRO} }, '__SERIES60__'
-       unless grep { $_ eq '__SERIES60__' } @{ $CONF{MACRO} };
-    }
-    if ($SDK_VARIANT eq 'S80') {
-      push @{ $CONF{MACRO} }, '__SERIES80__'
-       unless grep { $_ eq '__SERIES80__' } @{ $CONF{MACRO} };
-    }
-    if ($SDK_VARIANT eq 'S90') {
-      push @{ $CONF{MACRO} }, '__SERIES90__'
-       unless grep { $_ eq '__SERIES90__' } @{ $CONF{MACRO} };
-    }
-    if ($SDK_VARIANT eq 'UIQ') {
-      push @{ $CONF{MACRO} }, '__UIQ__'
-       unless grep { $_ eq '__UIQ__' } @{ $CONF{MACRO} };
-    }
-
-    for my $u (qw(SOURCE SOURCEPATH SYSTEMINCLUDE USERINCLUDE LIBRARY MACRO)) {
-        $CONF{$u} = uniquefy_filenames( $CONF{$u} );
-    }
-    open( BASE_MMP, '>', "$base.mmp" ) or die "$0: $base.mmp: $!\n";
-
-    print BASE_MMP <<__EOF__;
-TARGET         $CONF{TARGET}
-TARGETTYPE     dll
-TARGETPATH     $CONF{TARGETPATH}
-SOURCE         @{$CONF{SOURCE}}
-$SRCDBG
-__EOF__
-    for my $u (qw(SOURCEPATH SYSTEMINCLUDE USERINCLUDE)) {
-        for my $v ( @{ $CONF{$u} } ) {
-            print BASE_MMP "$u\t$v\n";
-        }
-    }
-    # OPTION does not work in MMPs for pre-2.0 SDKs?
-    print BASE_MMP <<__EOF__;
-LIBRARY                @{$CONF{LIBRARY}}
-MACRO          @{$CONF{MACRO}}
-// OPTION      MSVC /P // Uncomment for creating .i (cpp'ed .cpp)
-// OPTION      GCC -E  // Uncomment for creating .i (cpp'ed .cpp)
-__EOF__
-#    if (-f "$base.rss") {
-#        print BASE_MMP "RESOURCE\t$base.rss\n";
-#    }
-    close(BASE_MMP);
-
-}
-
-sub write_makefile {
-    my ( $base, $build ) = @_;
-
-    print "\tMakefile\n";
-
-    my $windef1 = "$SYMBIAN_ROOT\\Epoc32\\Build$CWD\\$base\\$WIN\\$base.def";
-    my $windef2 = "..\\BWINS\\${base}u.def";
-    my $armdef1 = "$SYMBIAN_ROOT\\Epoc32\\Build$CWD\\$base\\$ARM\\$base.def";
-    my $armdef2 = "..\\BMARM\\${base}u.def";
-
-    my $wrap = $SYMBIAN_ROOT && defined $SDK_VARIANT eq 'S60' && $SDK_VERSION eq '1.2' && $SYMBIAN_ROOT !~ /_CW$/;
-    my $ABLD = $wrap ? 'perl b.pl' : 'abld';
-
-    open( MAKEFILE, '>', 'Makefile' ) or die "$0: Makefile: $!\n";
-    print MAKEFILE <<__EOF__;
-WIN = $WIN
-ARM = $ARM
-ABLD = $ABLD
-
-all:   build freeze
-
-sis:   build_arm freeze_arm
-
-build: abld.bat build_win build_arm
-
-abld.bat:
-       bldmake bldfiles
-
-build_win: abld.bat
-       bldmake bldfiles
-       \$(ABLD) build \$(WIN) udeb
-
-build_arm: abld.bat
-       bldmake bldfiles
-       \$(ABLD) build \$(ARM) $UARM
-
-win:   build_win freeze_win
-
-arm:   build_arm freeze_arm
-
-freeze:        freeze_win freeze_arm
-
-freeze_win:
-       bldmake bldfiles
-       \$(ABLD) freeze \$(WIN) $base
-
-freeze_arm:
-       bldmake bldfiles
-       \$(ABLD) freeze \$(ARM) $base
-
-defrost:       defrost_win defrost_arm
-
-defrost_win:
-       -del /f $windef1
-       -del /f $windef2
-
-defrost_arm:
-       -del /f $armdef1
-       -del /f $armdef2
-
-clean: clean_win clean_arm
-
-clean_win:
-       \$(ABLD) clean \$(WIN)
-
-clean_arm:
-       \$(ABLD) clean \$(ARM)
-
-realclean:     clean realclean_win realclean_arm
-       -del /f _init.c b.pl
-       -del /f $base.c $base.mmp
-
-realclean_win:
-       \$(ABLD) reallyclean \$(WIN)
-
-realclean_arm:
-       \$(ABLD) reallyclean \$(ARM)
-
-distclean:     defrost realclean
-       -rmdir ..\\BWINS ..\\BMARM
-       -del /f const-c.inc const-xs.inc
-       -del /f Makefile abld.bat bld.inf
-__EOF__
-    close(MAKEFILE);
-    if ($wrap) {
-       if(open(B, '>', 'b.pl')) {
-           print B <<'__EOF__';
-# abld.pl wrapper.
-
-# nmake doesn't like MFLAGS and MAKEFLAGS being set to -w and w.
-delete $ENV{MFLAGS};
-delete $ENV{MAKEFLAGS};
-
-print "abld @ARGV\n";
-system_echo("abld @ARGV");
-__EOF__
-            close(B);
-       } else {
-           warn "$0: failed to create b.pl: $!\n";
-       }
-    }
-}
-
-sub update_dir {
-    print "[chdir from ", getcwd(), " to ";
-    chdir(shift) or return;
-    update_cwd();
-    print getcwd(), "]\n";
-}
-
-sub patch_config {
-    # Problem: the Config.pm we have in $BUILDROOT\\lib carries the
-    # version number of the Perl we are building, while the Perl
-    # we are running might have some other version.  Solution:
-    # temporarily replace the Config.pm with a patched version.
-    #
-    # Reverse patch will be done with this special script
-    my $config_restore_script = "$BUILDROOT\\lib\\symbian_config_restore.pl";
-    # make sure the patch script was not left from previous run
-    unlink $config_restore_script;
-    return unless $CoreBuild;
-    my $V = sprintf "%vd", $^V;
-    # create reverse patch script
-    if (open(RSCRIPT, '>', $config_restore_script)) {
-        print RSCRIPT <<__EOF__;
-#!perl -pi.bak
-s:\\Q$V:$R_V_SV:
-__EOF__
-        close RSCRIPT;
-    } else {
-        die "$0: Cannot create $config_restore_script: $!";
-    }
-    # patch the config
-    unlink("$BUILDROOT\\lib\\Config.pm.bak");
-    print "(patching $BUILDROOT\\lib\\Config.pm)\n";
-    system_echo("perl -pi.bak -e \"s:\\Q$R_V_SV:$V:\" $BUILDROOT\\lib\\Config.pm");
-}
-
-sub restore_config {
-    my $config_restore_script = "$BUILDROOT\\lib\\symbian_config_restore.pl";
-    # this function should always return True
-    # because it's commonly used in error handling blocks as
-    #   &restore_config and die
-    return 1 unless -f $config_restore_script;
-    unlink("$BUILDROOT\\lib\\Config.pm.bak");
-    print "(restoring $BUILDROOT\\lib\\Config.pm)\n";
-    system_echo("perl -pi.bak $config_restore_script $BUILDROOT\\lib\\Config.pm");
-    unlink "$BUILDROOT\\lib\\Config.pm.bak", $config_restore_script;
-    # above command should always return 2 already,
-    # but i want to be absolutely sure that return value is True
-    return 1;
-}
-
-sub xsconfig {
-    my ( $ext, $dir ) = @_;
-    print "Configuring for $ext, directory '$dir'...\n";
-    my $extu = $CoreBuild ? "$BUILDROOT\\lib\\ExtUtils" : "$PERLSDK\\lib\\ExtUtils";
-    update_dir($dir) or die "$0: chdir '$dir': $!\n";
-    &patch_config;
-
-    my $build  = dirname($ext);
-    my $base   = basename($ext);
-    my $basexs = "$base.xs";
-    my $basepm = "$base.pm";
-    my $basec  = "$base$CSuffix";
-    my $extdir = ".";
-    if ( $dir =~ m:^ext\\(.+): ) {
-        $extdir = $1;
-    }
-    elsif ( $dir ne "." ) {
-        $extdir = $dir;
-    }
-    my $extdirdir  = dirname($extdir);
-    my $targetroot = "\\System\\Libs\\Perl\\$R_V_SV";
-    write_bld_inf($base) if -f $basexs;
-
-    my %src;
-    $src{$basec}++;
-
-    $extdirdir = $extdirdir eq "." ? "" : "$extdirdir\\";
-
-    my $extdash = $ext; $extdash =~ s!\\!-!g;
-
-    my %lst;
-    $lst{"$UREL\\perl$VERSION-$extdash.dll"} =
-      "$targetroot\\$ARM-symbian\\$base.dll"
-      if -f $basexs;
-    $lst{"$dir\\$base.pm"} = "$targetroot\\$extdirdir$base.pm"
-      if -f $basepm && $base ne 'XSLoader';
-
-    my %incdir;
-    my $ran_PL;
-    if ( -d 'lib' ) {
-        use File::Find;
-        my @found;
-        find( sub { push @found, $File::Find::name if -f $_ }, 'lib' );
-        for my $found (@found) {
-           next if $found =~ /\.bak$/i; # Zlib
-            my ($short) = ( $found =~ m/^lib.(.+)/ );
-            $short =~ s!/!\\!g;
-            $found =~ s!/!\\!g;
-            $lst{"$dir\\$found"} = "$targetroot\\$short";
-        }
-    }
-    if ( my @pm = glob("*.pm */*.pm") ) {
-        for my $pm (@pm) {
-            next if $pm =~ m:^t/:;
-            $pm =~ s:/:\\:g;
-            $lst{"$dir\\$pm"} = "$targetroot\\$extdirdir$pm";
-        }
-    }
-    if ( my @c = glob("*.c *.cpp */*.c */*.cpp") ) {
-       map { s:^zlib-src/:: } @c if $ext eq 'ext\Compress\Raw\Zlib';
-        for my $c (@c) {
-            $c =~ s:/:\\:g;
-            $src{$c}++;
-        }
-    }
-    if ( my @h = glob("*.h */*.h") ) {
-        map { s:^zlib-src/:: } @h if $ext eq 'ext\Compress\Raw\Zlib';
-        for my $h (@h) {
-            $h =~ s:/:\\:g;
-            $h = dirname($h);
-            $incdir{"$dir\\$h"}++ unless $h eq ".";
-        }
-    }
-    if ( exists $EXTCFG{$ext} ) {
-        for my $cfg ( @{ $EXTCFG{$ext} } ) {
-            if ( $cfg =~ /^([-+])?(.+\.(c|cpp|h))$/ ) {
-                my $o = defined $1 ? $1 : '+';
-                my $f = $2;
-                $f =~ s:/:\\:g;
-                for my $f ( glob($f) ) {
-                    if ( $o eq '+' ) {
-                        warn "$0: no source file $dir\\$f\n" unless -f $f;
-                        $src{$f}++ unless $cfg =~ /\.h$/;
-                        if ( $f =~ m:^(.+)\\[^\\]+$: ) {
-                            $incdir{$1}++;
-                        }
-                    }
-                    elsif ( $o eq '-' ) {
-                        delete $src{$f};
-                    }
-                }
-            }
-            if ( $cfg =~ /^([-+])?(.+\.(pm|pl|inc))$/ ) {
-                my $o = defined $1 ? $1 : '+';
-                my $f = $2;
-                $f =~ s:/:\\:g;
-                for my $f ( glob($f) ) {
-                    if ( $o eq '+' ) {
-                        warn "$0: no Perl file $dir\\$f\n" unless -f $f;
-                        $lst{"$dir\\$f"} = "$targetroot\\$extdir\\$f";
-                    }
-                    elsif ( $o eq '-' ) {
-                        delete $lst{"$dir\\$f"};
-                    }
-                }
-            }
-            if ( $cfg eq 'CONST' && !$ran_PL++ ) {
-                run_PL( "Makefile.PL", $dir, "const-xs.inc" );
-            }
-        }
-    }
-    unless ( $ran_PL++ ) {
-        run_PL( "Makefile.PL", $dir ) if -f "Makefile.PL";
-    }
-    if ( $dir eq "ext\\Errno" ) {
-        run_PL( "Errno_pm.PL", $dir, "Errno.pm" );
-        $lst{"$dir\\Errno.pm"} = "$targetroot\\Errno.pm";
-    }
-    elsif ( $dir eq "ext\\Devel\\PPPort" ) {
-        run_PL( "ppport_h.PL", $dir, "ppport.h" );
-    }
-    elsif ( $dir eq "ext\\DynaLoader" ) {
-        run_PL( "XSLoader_pm.PL", $dir, "XSLoader.pm" );
-        $lst{"ext\\DynaLoader\\XSLoader.pm"} = "$targetroot\\XSLoader.pm";
-    }
-    elsif ( $dir eq "ext\\Encode" ) {
-        system_echo("perl bin\\enc2xs -Q -O -o def_t.c -f def_t.fnm") == 0
-          or &restore_config and die "$0: running enc2xs failed: $!\n";
-    }
-
-    my @lst = sort keys %lst;
-
-    read_mmp( \%CONF, "_init.mmp" );
-    read_mmp( \%CONF, "$base.mmp" );
-
-    if ( -f $basexs ) {
-        my %MM;    # MakeMaker results
-        my @MM = qw(VERSION XS_VERSION);
-        if ( -f "Makefile" ) {
-            print "\tReading MakeMaker Makefile...\n";
-            if ( open( MAKEFILE, '<', 'Makefile' ) ) {
-                while (<MAKEFILE>) {
-                    for my $m (@MM) {
-                        if (m!^$m = (.+)!) {
-                            $MM{$m} = $1;
-                            print "\t$m = $1\n";
-                        }
-                    }
-                }
-                close(MAKEFILE);
-            }
-            else {
-                warn "$0: Makefile: $!";
-            }
-            print "\tDeleting MakeMaker Makefile.\n";
-            unlink("Makefile");
-        }
-
-        unlink($basec);
-        print "\t$basec\n";
-        if ( defined $CONF{EXTVERSION} ) {
-            my $EXTVERSION = $CONF{EXTVERSION};
-            print "\tUsing $EXTVERSION for version...\n";
-            $MM{VERSION} = $MM{XS_VERSION} = $EXTVERSION;
-        }
-        (&restore_config and die "$0: VERSION or XS_VERSION undefined\n")
-          unless defined $MM{VERSION} && defined $MM{XS_VERSION};
-        if ( open( BASE_C, '>', $basec ) ) {
-            print BASE_C <<__EOF__;
-#ifndef VERSION
-#define VERSION "$MM{VERSION}"
-#endif
-#ifndef XS_VERSION
-#define XS_VERSION "$MM{XS_VERSION}"
-#endif
-__EOF__
-            close(BASE_C);
-        }
-        else {
-            warn "$0: $basec: $!";
-        }
-        unless (
-            system_echo(
-"perl -I$BUILDROOT\\lib -I$PERLSDK\\lib $extu\\xsubpp -csuffix .cpp -typemap $extu\\typemap -noprototypes $basexs >> $basec"
-            ) == 0
-            && -s $basec
-          )
-        {
-            &restore_config;
-            die "$0: perl xsubpp failed: $!\n";
-        }
-
-        print "\t_init.c\n";
-        open( _INIT_C, '>', '_init.c' )
-            or &restore_config and die "$!: _init.c: $!\n";
-        print _INIT_C <<__EOF__;
-    #include "EXTERN.h"
-    #include "perl.h"
-    EXPORT_C void _init(void *handle) {
-    }
-__EOF__
-        close(_INIT_C);
-
-        my @src = ( "_init.c", sort keys %src );
-
-        if ( $base eq "Encode" ) {    # Currently unused.
-            for my $submf ( glob("*/Makefile") ) {
-                my $d = dirname($submf);
-                print "Configuring Encode::$d...\n";
-                if ( open( SUBMF, '<', $submf ) ) {
-                    if ( update_dir($d) ) {
-                        my @subsrc;
-                        while (<SUBMF>) {
-                            next if 1 .. /postamble/;
-                            if (m!^(\w+_t)\.c : !) {
-                                system_echo(
-                                    "perl ..\\bin\\enc2xs -Q -o $1.c -f $1.fnm")
-                                  == 0
-                                  or warn "$0: enc2xs: $!\n";
-                                push @subsrc, "$1.c";
-                            }
-                        }
-                        close(SUBMF);
-                        unlink($submf);
-                        my $subbase = $d;
-                        $subbase =~ s!/!::!g;
-                        write_mmp( $ext, $subbase, ["..\\Encode"], "$subbase.c",
-                            @subsrc );
-                        write_makefile( $subbase, $build );
-                        write_bld_inf($subbase);
-
-                        unless (
-                            system_echo(
-"perl -I$BUILDROOT\\lib ..\\$extu\\xsubpp -csuffix .cpp -typemap ..\\$extu\\typemap -noprototypes $subbase.xs > $subbase.c"
-                            ) == 0
-                            && -s "$subbase.c"
-                          )
-                        {
-                            &restore_config;
-                            die "$0: perl xsubpp failed: $!\n";
-                        }
-                        update_dir("..");
-                    }
-                    else {
-                        warn "$0: chdir $d: $!\n";
-                    }
-                }
-                else {
-                    warn "$0: $submf: $!";
-                }
-            }
-            print "Configuring Encode...\n";
-        }
-
-        write_mmp( $ext, $base, [ keys %incdir ], @src );
-        write_makefile( $base, $build );
-    }
-    &restore_config;
-
-    my $lstname = $ext;
-    $lstname =~ s:^ext\\::;
-    $lstname =~ s:\\:-:g;
-    print "\t$lstname.lst\n";
-    my $lstout =
-      $CoreBuild ? "$BUILDROOT/symbian/$lstname.lst" : "$BUILDROOT/$lstname.lst";
-    if ( open( my $lst, '>', $lstout ) ) {
-        for my $f (@lst) { print $lst qq["$f"-"!:$lst{$f}"\n] }
-        close($lst);
-    }
-    else {
-        die "$0: $lstout: $!\n";
-    }
-    update_dir($BUILDROOT);
-}
-
-sub update_cwd {
-    $CWD = getcwd();
-    $CWD =~ s!^[A-Z]:!!i;
-    $CWD =~ s!/!\\!g;
-}
-
-if (grep /^(Compress::Raw::Zlib|Cwd|Data::Dumper|Digest::SHA|Sys::Syslog|Time::HiRes)$/, @ARGV) {
-    &patch_config;
-    system_echo("perl -I$BUILDROOT\\lib -I$PERLSDK\\lib $BUILDROOT\\mkppport");
-    &restore_config;
-}
-
-for my $ext (@ARGV) {
-
-    $ext =~ s!::!\\!g;
-    my $extdash = $ext =~ /ext\\/ ? $ext : "ext\\$ext"; $extdash =~ s!\\!-!g;
-    $ext =~ s!/!\\!g;
-
-    my $cfg;
-
-    $cfg = $2 if $ext =~ s/(.+?),(.+)/$1/;
-
-    my $dir;
-
-    unless ( -e $ext ) {
-        if ( $ext =~ /\.xs$/ && !-f $ext ) {
-            if ( -f "ext\\$ext" ) {
-                $ext = "ext\\$ext";
-                $dir = dirname($ext);
-            }
-        }
-        elsif ( !-d $ext ) {
-            if ( -d "ext\\$ext" ) {
-                $ext = "ext\\$ext";
-                $dir = $ext;
-            }
-        }
-        $dir = "." unless defined $dir;
-    }
-    else {
-        if ( $ext =~ /\.xs$/ && -f $ext ) {
-            $ext = dirname($ext);
-            $dir = $ext;
-        }
-        elsif ( -d $ext ) {
-            $dir = $ext;
-        }
-    }
-
-    if ( $ext eq "XSLoader" ) {
-        $ext = "ext\\XSLoader";
-    }
-    if ( $ext eq "ext\\XSLoader" ) {
-        $dir = "ext\\DynaLoader";
-    }
-
-    $EXTCFG{$ext} = [ split( /,/, $cfg ) ] if defined $cfg;
-
-    die "$0: no lib\\Config.pm\n"
-      if $CoreBuild && $Build && !-f "lib\\Config.pm";
-
-    if ($CoreBuild) {
-        open( my $cfg, '<', 'symbian/install.cfg' )
-          or die "$0: symbian/install.cfg: $!\n";
-        my $extdir = $dir;
-        $extdir =~ s:^ext\\::;
-        while (<$cfg>) {
-            next unless /^ext\s+(.+)/;
-            chomp;
-            my $ext = $1;
-            my @ext = split( ' ', $ext );
-            $EXTCFG{"ext\\$ext[0]"} = [@ext];
-        }
-        close($cfg);
-    }
-
-    if ( $Config || $Build ) {
-        xsconfig( $ext, $dir ) or die "$0: xsconfig '$ext' failed\n";
-        next if $Config;
-    }
-
-    if ($dir eq ".") {
-       warn "$0: No directory for $ext, skipping...\n";
-       next;
-    }
-
-    my $chdir = $ext eq "ext\\XSLoader" ? "ext\\DynaLoader" : $dir;
-    die "$0: no directory '$chdir'\n" unless -d $chdir;
-    update_dir($chdir) or die "$0: chdir '$chdir' failed: $!\n";
-
-    my %CONF;
-
-    my @ext   = split( /\\/, $ext );
-    my $base  = $ext[-1];
-
-    if ( $Clean || $DistClean ) {
-        print "Cleaning $ext...\n";
-        unlink("bld.inf");
-        unlink("$base.mmp");
-        unlink("_init.c");
-        unlink("const-c.inc");
-        unlink("const-xs.inc");
-        rmdir("..\\bmarm");
-    }
-
-    if ( $Build && $ext ne "ext\\XSLoader" && $ext ne "ext\\Errno" ) {
-
-     # We compile the extension three (3) times.
-     # (1) Only the _init.c to get _init() as the ordinal 1 function in the DLL.
-     # (2) With the rest and the _init.c to get ordinals for the rest.
-     # (3) With an updated _init.c that carries the symbols from step (2).
-
-        system_echo("make clean");
-        system_echo("make defrost") == 0 or warn "$0: make defrost failed\n";
-
-        my @TARGET;
-
-        push @TARGET, 'sis' if $Sis;
-
-        # Compile #1.
-        # Hide all but the _init.c.
-        print "\n*** $ext - Compile 1 of 3.\n\n";
-       print "(patching $base.mmp)\n";
-        system(
-"perl -pi.bak -e \"s:^SOURCE\\s+_init.c:SOURCE\\t_init.c // :\" $base.mmp"
-        );
-       system_echo("bldmake bldfiles");
-        system_echo("make @TARGET") == 0 or die "$0: make #1 failed\n";
-
-        # Compile #2.
-        # Reveal the rest again.
-        print "\n*** $ext - Compile 2 of 3.\n\n";
-       print "(patching $base.mmp)\n";
-        system(
-"perl -pi.bak -e \"s:^SOURCE\\t_init.c // :SOURCE\\t_init.c :\" $base.mmp"
-        );
-        system_echo("make @TARGET") == 0 or die "$0: make #2 failed\n";
-        unlink("$base.mmp.bak");
-
-        open( _INIT_C, '>', '_init.c' ) or die "$0: _init.c: $!\n";
-        print _INIT_C <<'__EOF__';
-#include "EXTERN.h"
-#include "perl.h"
-
-/* This is a different but matching definition from in dl_symbian.xs. */
-typedef struct {
-    void*      handle;
-    int                error;
-    HV*                symbols;
-} PerlSymbianLibHandle;
-
-EXPORT_C void _init(void* handle) {
-__EOF__
-
-        my %symbol;
-       my $def;
-       my $basef;
-        for my $f ("$SYMBIAN_ROOT\\Epoc32\\Build$CWD\\$base\\WINS\\perl$VERSION-$extdash.def",
-                  "..\\BMARM\\perl$VERSION-${extdash}u.def") {
-           print "\t($f - ";
-           if ( open( $def, '<', $f ) ) {
-               print "OK)\n";
-               $basef = $f;
-               last;
-           } else {
-               print "no)\n";
-           }
-       }
-       unless (defined $basef) {
-           die "$0: failed to find .def for $base\n";
-       }
-        while (<$def>) {
-            next while 1 .. /^EXPORTS/;
-            if (/^\s*(\w+) \@ (\d+) /) {
-                $symbol{$1} = $2;
-            }
-        }
-        close($def);
-        my @symbol = sort keys %symbol;
-        if (@symbol) {
-            print _INIT_C <<'__EOF__';
-    dTHX;
-    PerlSymbianLibHandle* h = (PerlSymbianLibHandle*)handle;
-    if (!h->symbols)
-        h->symbols = newHV();
-    if (h->symbols) {
-__EOF__
-            for my $sym (@symbol) {
-                my $len = length($sym);
-                print _INIT_C <<__EOF__;
-        hv_store(h->symbols, "$sym", $len, newSViv($symbol{$sym}), 0);
-__EOF__
-            }
-        }
-        else {
-            die "$0: $basef: no exports found\n";
-        }
-
-        print _INIT_C <<'__EOF__';
-    }
-}
-__EOF__
-        close(_INIT_C);
-
-        # Compile #3.  This is for real.
-        print "\n*** $ext - Compile 3 of 3.\n\n";
-        system_echo("make @TARGET") == 0 or die "$0: make #3 failed\n";
-
-    }
-    elsif ( $Clean || $DistClean ) {
-        if ( $ext eq "ext\\Errno" ) {
-            unlink( "Errno.pm", "Makefile" );
-        }
-        else {
-            if ( -f "Makefile" ) {
-                if ($Clean) {
-                    system_echo("make clean") == 0 or die "$0: make clean failed\n";
-                }
-                elsif ($DistClean) {
-                    system_echo("make distclean") == 0
-                      or die "$0: make distclean failed\n";
-                }
-            }
-           if ( $ext eq "ext\\Compress\\Raw\\Zlib" ) {
-               my @bak;
-               find( sub { push @bak, $File::Find::name if /\.bak$/ }, "." );
-               unlink(@bak) if @bak;
-               my @src;
-               find( sub { push @src, $_ if -f $_ }, "zlib-src" );
-               unlink(@src) if @src;
-               unlink("constants.xs");
-           }
-            if ( $ext eq "ext\\Devel\\PPPort" ) {
-                unlink("ppport.h");
-            }
-        }
-       my @D = glob("../BMARM/*.def ../BWINS/*.def");
-       unlink(@D) if @D;
-        my @B = glob("ext/BWINS ext/BMARM ext/*/BWINS ext/*/BMARM Makefile");
-        rmdir(@B) if @B;
-    }
-
-    update_dir($BUILDROOT);
-
-}    # for my $ext
-
-exit(0);
-
diff --git a/t/TEST b/t/TEST
index b534c49..810b92a 100755 (executable)
--- a/t/TEST
+++ b/t/TEST
@@ -90,7 +90,7 @@ my %temp_needs_dot  = map { $_ => 1 } qw(
 # but allow override via *_TEST env var if wanted
 # (e.g. PERL5OPT_TEST=-d:NYTProf)
 my @bad_env_vars = qw(
-    PERL5LIB PERLLIB PERL5OPT
+    PERL5LIB PERLLIB PERL5OPT PERL_UNICODE
     PERL_YAML_BACKEND PERL_JSON_BACKEND
 );
 
index c4889bb..0db47d1 100644 (file)
@@ -80,7 +80,7 @@ print "# $@\nnot " if $@;
 print "ok ",$i++," - require v5 ignores sub named v5\n";
 
 eval { require 10.0.2; };
-print "# $@\nnot " unless $@ =~ /^Perl v10\.0\.2 required/;
+print "# $@\nnot " unless $@ =~ /^\QPerl v10.0.2 required\E/;
 print "ok ",$i++," - require 10.0.2\n";
 
 my $ver = 5.005_63;
@@ -91,12 +91,12 @@ print "ok ",$i++," - require 5.005_63\n";
 # check inaccurate fp
 $ver = 10.2;
 eval { require $ver; };
-print "# $@\nnot " unless $@ =~ /^Perl v10\.200.0 required/;
+print "# $@\nnot " unless $@ =~ /^\QPerl v10.200.0 required\E/;
 print "ok ",$i++," - require 10.2\n";
 
 $ver = 10.000_02;
 eval { require $ver; };
-print "# $@\nnot " unless $@ =~ /^Perl v10\.0\.20 required/;
+print "# $@\nnot " unless $@ =~ /^\QPerl v10.0.20 required\E/;
 print "ok ",$i++," - require 10.000_02\n";
 
 print "not " unless 5.5.1 gt v5.5;
@@ -155,7 +155,7 @@ for my $expected_compile (1,0) {
 do_require "1)\n";
 # bison says 'parse error' instead of 'syntax error',
 # various yaccs may or may not capitalize 'syntax'.
-print "# $@\nnot " unless $@ =~ /(syntax|parse) error/mi;
+print "# $@\nnot " unless $@ =~ /(?:syntax|parse) error/mi;
 print "ok ",$i++," - syntax error\n";
 
 # previous failure cached in %INC
index 12409cf..a8c3ed0 100644 (file)
@@ -87,7 +87,7 @@ eval q{ use v5.5.630; };
 is ($@, '');
 
 eval q{ use 10.0.2; };
-like ($@, qr/^Perl v10\.0\.2 required/);
+like ($@, qr/^\QPerl v10.0.2 required\E/);
 
 eval "use 5.000";      # implicit semicolon
 is ($@, '');
@@ -96,28 +96,28 @@ eval "use 5.000;";
 is ($@, '');
 
 eval "use 6.000;";
-like ($@, qr/Perl v6\.0\.0 required--this is only \Q$^V\E, stopped/);
+like ($@, qr/\QPerl v6.0.0 required--this is only $^V, stopped\E/);
 
 eval "no 6.000;";
 is ($@, '');
 
 eval "no 5.000;";
-like ($@, qr/Perls since v5\.0\.0 too modern--this is \Q$^V\E, stopped/);
+like ($@, qr/\QPerls since v5.0.0 too modern--this is $^V, stopped\E/);
 
 eval "use 5.6;";
-like ($@, qr/Perl v5\.600\.0 required \(did you mean v5\.6\.0\?\)--this is only \Q$^V\E, stopped/);
+like ($@, qr/\QPerl v5.600.0 required (did you mean v5.6.0?)--this is only $^V, stopped\E/);
 
 eval "use 5.8;";
-like ($@, qr/Perl v5\.800\.0 required \(did you mean v5\.8\.0\?\)--this is only \Q$^V\E, stopped/);
+like ($@, qr/\QPerl v5.800.0 required (did you mean v5.8.0?)--this is only $^V, stopped\E/);
 
 eval "use 5.9;";
-like ($@, qr/Perl v5\.900\.0 required \(did you mean v5\.9\.0\?\)--this is only \Q$^V\E, stopped/);
+like ($@, qr/\QPerl v5.900.0 required (did you mean v5.9.0?)--this is only $^V, stopped\E/);
 
 eval "use 5.10;";
-like ($@, qr/Perl v5\.100\.0 required \(did you mean v5\.10\.0\?\)--this is only \Q$^V\E, stopped/);
+like ($@, qr/\QPerl v5.100.0 required (did you mean v5.10.0?)--this is only $^V, stopped\E/);
 
 eval "use 5.11;";
-like ($@, qr/Perl v5\.110\.0 required \(did you mean v5\.11\.0\?\)--this is only \Q$^V\E, stopped/);
+like ($@, qr/\QPerl v5.110.0 required (did you mean v5.11.0?)--this is only $^V, stopped\E/);
 
 eval sprintf "use %.6f;", $];
 is ($@, '');
@@ -127,14 +127,14 @@ eval sprintf "use %.6f;", $] - 0.000001;
 is ($@, '');
 
 eval sprintf("use %.6f;", $] + 1);
-like ($@, qr/Perl v6.\d+.\d+ required--this is only \Q$^V\E, stopped/);
+like ($@, qr/Perl v6\.\d+\.\d+ required--this is only \Q$^V\E, stopped/a);
 
 eval sprintf "use %.6f;", $] + 0.00001;
-like ($@, qr/Perl v5.\d+.\d+ required--this is only \Q$^V\E, stopped/);
+like ($@, qr/Perl v5\.\d+\.\d+ required--this is only \Q$^V\E, stopped/a);
 
 # check that "use 5.11.0" (and higher) loads strictures
 eval 'use 5.11.0; ${"foo"} = "bar";';
-like ($@, qr/Can't use string \("foo"\) as a SCALAR ref while "strict refs" in use/);
+like ($@, qr/\QCan't use string ("foo") as a SCALAR ref while "strict refs" in use\E/);
 # but that they can be disabled
 eval 'use 5.11.0; no strict "refs"; ${"foo"} = "bar";';
 is ($@, "");
@@ -202,39 +202,39 @@ is("@test_use::got", "joe");
     is ($@, '');
 
     eval "use test_use v100.105";
-    like ($@, qr/test_use version v100.105.0 required--this is only version v35\.360\.0/);
+    like ($@, qr/\Qtest_use version v100.105.0 required--this is only version v35.360.0\E/);
 
     eval "use test_use 33.55";
     is ($@, '');
 
     eval "use test_use 100.105";
-    like ($@, qr/test_use version 100.105 required--this is only version 35.36/);
+    like ($@, qr/\Qtest_use version 100.105 required--this is only version 35.36\E/);
 
     local $test_use::VERSION = '35.36';
     eval "use test_use v33.55";
     like ($@, '');
 
     eval "use test_use v100.105";
-    like ($@, qr/test_use version v100.105.0 required--this is only version v35\.360\.0/);
+    like ($@, qr/\Qtest_use version v100.105.0 required--this is only version v35.360.0\E/);
 
     eval "use test_use 33.55";
     is ($@, '');
 
     eval "use test_use 100.105";
-    like ($@, qr/test_use version 100.105 required--this is only version 35.36/);
+    like ($@, qr/\Qtest_use version 100.105 required--this is only version 35.36\E/);
 
     local $test_use::VERSION = v35.36;
     eval "use test_use v33.55";
     is ($@, '');
 
     eval "use test_use v100.105";
-    like ($@, qr/test_use version v100.105.0 required--this is only version v35\.36\.0/);
+    like ($@, qr/\Qtest_use version v100.105.0 required--this is only version v35.36.0\E/);
 
     eval "use test_use 33.55";
     is ($@, '');
 
     eval "use test_use 100.105";
-    like ($@, qr/test_use version 100.105 required--this is only version v35.36/);
+    like ($@, qr/\Qtest_use version 100.105 required--this is only version v35.36\E/);
 }
 
 
@@ -243,7 +243,7 @@ is("@test_use::got", "joe");
     #   Check that a .pm file with no package or VERSION doesn't core.
     # (git commit 2658f4d9934aba5f8b23afcc078dc12b3a40223)
     eval "use test_use_14937 3";
-    like ($@, qr/^test_use_14937 defines neither package nor VERSION--version check failed at/);
+    like ($@, qr/^\Qtest_use_14937 defines neither package nor VERSION--version check failed at\E/);
 }
 
 my @ver = split /\./, sprintf "%vd", $^V;
@@ -277,7 +277,7 @@ foreach my $index (-3..+3) {
        if ($index > 0) {
            # The future
            like ($@,
-                 qr/Perl $v_version required--this is only \Q$^V\E, stopped/,
+                 qr/\QPerl $v_version required--this is only $^V, stopped\E/,
                  "use $version");
        } else {
            # The present or past
@@ -288,7 +288,7 @@ foreach my $index (-3..+3) {
        if ($index <= 0) {
            # The present or past
            like ($@,
-                 qr/Perls since $v_version too modern--this is \Q$^V\E, stopped/,
+                 qr/\QPerls since $v_version too modern--this is $^V, stopped\E/,
                  "no $version");
        } else {
            # future
diff --git a/t/lib/feature/multidimensional b/t/lib/feature/multidimensional
new file mode 100644 (file)
index 0000000..a39baae
--- /dev/null
@@ -0,0 +1,22 @@
+Test no feature multidimensional
+
+__END__
+# NAME simple
+my $x = "a";
+my $y = "b";
+my %foo;
+$foo{$x, $y} = "c";
+$foo{$y} = "d";
+print $foo{$x, $y}, "\n";
+no feature "multidimensional";
+print $foo{$x, $y}, "\n";
+$foo{$x, $y} = "e";
+print $foo{$y}, "\n";
+use feature "multidimensional";
+print $foo{$x, $y}, "\n";
+$foo{$x, $y} = "e";
+EXPECT
+OPTIONS fatal
+Multidimensional hash lookup is disabled at - line 8, near "$y}"
+Multidimensional hash lookup is disabled at - line 9, near "$y}"
+BEGIN not safe after errors--compilation aborted at - line 11.
index 64f624c..be04b84 100644 (file)
@@ -108,7 +108,7 @@ no warnings 'uninitialized' ;
 my $Y = 1 ; 
 $x = 1 | $b[$Y] ;
 EXPECT
-Use of uninitialized value within @a in bitwise or (|) at - line 4.
+Use of uninitialized value $a[1] in bitwise or (|) at - line 4.
 ########
 # sv.c
 use warnings 'uninitialized' ;
@@ -118,7 +118,7 @@ no warnings 'uninitialized' ;
 my $Y = 1 ; 
 $x = 1 & $b[$Y] ;
 EXPECT
-Use of uninitialized value within @a in bitwise and (&) at - line 4.
+Use of uninitialized value $a[1] in bitwise and (&) at - line 4.
 ########
 # sv.c
 use warnings 'uninitialized' ;
@@ -128,7 +128,7 @@ no warnings 'uninitialized' ;
 my $Y = 1 ; 
 $x = ~$b[$Y] ;
 EXPECT
-Use of uninitialized value within @a in 1's complement (~) at - line 4.
+Use of uninitialized value $a[1] in 1's complement (~) at - line 4.
 ########
 # sv.c
 use warnings 'uninitialized' ;
index 9ec085a..1f8a8df 100644 (file)
@@ -18,7 +18,8 @@ my $has_locale_h = ! $@;
 
 my @known_categories = ( qw(LC_ALL LC_COLLATE LC_CTYPE LC_MESSAGES LC_MONETARY
                             LC_NUMERIC LC_TIME LC_ADDRESS LC_IDENTIFICATION
-                            LC_MEASUREMENT LC_PAPER LC_TELEPHONE));
+                            LC_MEASUREMENT LC_PAPER LC_TELEPHONE LC_SYNTAX
+                            LC_TOD));
 my @platform_categories;
 
 # LC_ALL can be -1 on some platforms.  And, in fact the implementors could
@@ -214,6 +215,10 @@ sub locales_enabled(;$) {
     # normally would be available
     return 0 if ! defined &DynaLoader::boot_DynaLoader;
 
+    # Don't test locales where they aren't safe.
+    return 0 unless  ${^SAFE_LOCALES};
+
+    # If no setlocale, we need the POSIX 2008 alternatives
     if (! $Config{d_setlocale}) {
         return 0 if $Config{ccflags} =~ /\bD?NO_POSIX_2008_LOCALE\b/;
         return 0 unless $Config{d_newlocale};
index ed904ad..aa1f2c7 100644 (file)
@@ -594,4 +594,22 @@ SKIP: {
     is ($fill, 2, "RT #130132 array 2");
 }
 
+{
+    # GH #16685
+    # don't use the "1-arg on LHS can't be common" optimisation
+    # when there are undef's there
+    my $x = 1;
+    my @a = (($x, undef) = (2 => $x));
+    is("@a", "2 1", "GH #17816");
+}
+
+{
+    # GH #17816
+    # honour trailing undef's in list context
+    my $x = 1;
+    my @a = (($x, undef, undef) = (1));
+    is(scalar @a, 3, "GH #17816");
+}
+
+
 done_testing();
index 7cf5cbd..8325673 100644 (file)
@@ -76,9 +76,6 @@ sub local2 { local $_[0]; last L }
 L: { local2 }
 pass("last to label");
 
-# the following test for local(@_) used to be in t/op/nothr5005.t (because it
-# failed with 5005threads)
-
 $|=1;
 
 sub foo { local(@_) = ('p', 'q', 'r'); }
index eecd903..07f057d 100644 (file)
@@ -18,7 +18,7 @@ BEGIN {
 # If you find tests are failing, please try adding names to tests to track
 # down where the failure is, and supply your new names as a patch.
 # (Just-in-time test naming)
-plan tests => 501;
+plan tests => 502;
 
 # numerics
 ok ((0xdead & 0xbeef) == 0x9ead);
@@ -669,3 +669,12 @@ foreach my $op_info ([and => "&"], [or => "|"], [xor => "^"]) {
         like $@, $expected, $description;
     }
 }
+
+{
+    # perl #17844 - only visible with valgrind/ASAN
+    fresh_perl_is(<<'EOS',
+formline X000n^\\0,\\0^\\0for\0,0..10
+EOS
+                  '',
+                  {}, "[perl #17844] access beyond end of block");
+}
index 83d4882..8ffb8ad 100644 (file)
@@ -136,7 +136,7 @@ sub Test {
         endgrent;
         skip "No group found we could add as a supplementary group", 1
             if (!@sup_group);
-        $) = "$) @sup_group[2]";
+        $) = "$) $sup_group[2]";
         my $ok = grep { $_ == $sup_group[2] } split ' ', $);
         ok $ok, "Group `$sup_group[0]' added as supplementary group";
     }
index 70c75f3..7a2de7d 100644 (file)
@@ -243,7 +243,7 @@ TODO: {
     local $::TODO;
     my $here = "$^O $Config{osvers}";
     $::TODO = "$here: pow (9**9**9) doesn't give Inf"
-        if $here =~ /^(?:hpux 10|os390)/;
+        if $here =~ /^(?:hpux 10)/;
     is(9**9**9, $PInf, "9**9**9 is Inf");
 }
 
@@ -394,7 +394,7 @@ TODO: {
     local $::TODO;
     my $here = "$^O $Config{osvers}";
     $::TODO = "$here: pow (9**9**9) doesn't give Inf"
-        if $here =~ /^(?:hpux 10|os390)/;
+        if $here =~ /^(?:hpux 10)/;
     is(sin(9**9**9), $NaN, "sin(9**9**9) is NaN");
 }
 
index e1abde3..6635d88 100644 (file)
@@ -47,7 +47,7 @@ is($dc, 0, 'No destruction yet');
 
 $b = $a+5;
 
-is($dc, 1, 'object descruction via reassignment to variable');
+is($dc, 1, 'object destruction via reassignment to variable');
 
 my $xxx = 'b';
 $xxx = 'c' . ($xxx || 'e');
index 32142e3..00dd31a 100644 (file)
@@ -9,7 +9,7 @@ plan tests => 319;
 
 my $list_assignment_supported = 1;
 
-#mg.c says list assignment not supported on VMS and SYMBIAN.
+#mg.c says list assignment not supported on VMS
 $list_assignment_supported = 0 if ($^O eq 'VMS');
 
 
index e0dfcf9..6283df5 100644 (file)
@@ -541,7 +541,7 @@ is "@+", "10 1 6 10";
 }
 
 # Test for bug [perl #36434]
-# Can not do this test on VMS, and SYMBIAN according to comments
+# Can not do this test on VMS according to comments
 # in mg.c/Perl_magic_clear_all_env()
 SKIP: {
     skip('Can\'t make assignment to \%ENV on this system', 3) if $Is_VMS;
index 4543cde..e46efbb 100644 (file)
@@ -2048,6 +2048,7 @@ SKIP:
 {
     # [perl #129149] the code below would write one past the end of the output
     # buffer, only detected by ASAN, not by valgrind
+    skip "ASCII-centric test",1 if $::IS_EBCDIC;
     $Config{ivsize} >= 8
       or skip "[perl #129149] need 64-bit for this test", 1;
     fresh_perl_is(<<'EOS', "ok\n", { stderr => 1 }, "pack W overflow");
index 433cf82..93f39bd 100644 (file)
@@ -170,6 +170,33 @@ SKIP: {
     ok (eval { "x" =~ $x }, "REGEXP with mother_re still matches");
 }
 
+# test dereferencing errors
+{
+    format STDERR =
+.
+    my $ref;
+    foreach $ref (*STDOUT{IO}, *STDERR{FORMAT}) {
+       eval q/ $$ref /;
+       like($@, qr/Not a SCALAR reference/, "Scalar dereference");
+       eval q/ @$ref /;
+       like($@, qr/Not an ARRAY reference/, "Array dereference");
+       eval q/ %$ref /;
+       like($@, qr/Not a HASH reference/, "Hash dereference");
+       eval q/ &$ref /;
+       like($@, qr/Not a CODE reference/, "Code dereference");
+    }
+
+    $ref = *STDERR{FORMAT};
+    eval q/ *$ref /;
+    like($@, qr/Not a GLOB reference/, "Glob dereference");
+
+    $ref = *STDOUT{IO};
+    eval q/ *$ref /;
+    is($@, '', "Glob dereference of PVIO is acceptable");
+
+    is($ref, *{$ref}{IO}, "IO slot of the temporary glob is set correctly");
+}
+
 # Test the ref operator.
 
 sub PVBM () { 'foo' }
@@ -631,33 +658,6 @@ is ( (sub {"bar"})[0]->(), "bar", 'code deref from list slice w/ ->' );
            "deref of undef from list slice fails" );
 }
 
-# test dereferencing errors
-{
-    format STDERR =
-.
-    my $ref;
-    foreach $ref (*STDOUT{IO}, *STDERR{FORMAT}) {
-       eval q/ $$ref /;
-       like($@, qr/Not a SCALAR reference/, "Scalar dereference");
-       eval q/ @$ref /;
-       like($@, qr/Not an ARRAY reference/, "Array dereference");
-       eval q/ %$ref /;
-       like($@, qr/Not a HASH reference/, "Hash dereference");
-       eval q/ &$ref /;
-       like($@, qr/Not a CODE reference/, "Code dereference");
-    }
-
-    $ref = *STDERR{FORMAT};
-    eval q/ *$ref /;
-    like($@, qr/Not a GLOB reference/, "Glob dereference");
-
-    $ref = *STDOUT{IO};
-    eval q/ *$ref /;
-    is($@, '', "Glob dereference of PVIO is acceptable");
-
-    is($ref, *{$ref}{IO}, "IO slot of the temporary glob is set correctly");
-}
-
 # these will segfault if they fail
 
 my $pvbm = PVBM;
index a7b11bc..81a17d4 100644 (file)
@@ -15,9 +15,10 @@ BEGIN {
 }
 
 use strict;
+use warnings;
 use Config;
 
-plan tests => 1052;
+plan tests => 1054;
 
 $| = 1;
 
@@ -94,14 +95,14 @@ my $TAINT0;
 
 # This taints each argument passed. All must be lvalues.
 # Side effect: It also stringifies them. :-(
-sub taint_these (@) {
+sub taint_these :prototype(@) {
     for (@_) { $_ .= $TAINT }
 }
 
 # How to identify taint when you see it
-sub tainted ($) {
+sub tainted :prototype($) {
     local $@;   # Don't pollute caller's value.
-    not eval { join("",@_), kill 0; 1 };
+    not eval { no warnings; join("", @_), kill 0; 1 };
 }
 
 sub is_tainted {
@@ -1183,7 +1184,7 @@ SKIP: {
     my $arg = tempfile();
     open $fh, '>', $arg or die "Can't create $arg: $!";
     print $fh q{
-       eval { join('', @ARGV), kill 0 };
+       eval { my $x = join('', @ARGV), kill 0 };
        exit 0 if $@ =~ /^Insecure dependency/;
        print "# Oops: \$@ was [$@]\n";
        exit 1;
@@ -1506,6 +1507,7 @@ violates_taint(sub { link $TAINT, '' }, 'link');
 
 # test bitwise ops (regression bug)
 {
+    no warnings 'numeric';
     my $why = "y";
     my $j = "x" | $why;
     isnt_tainted($j);
@@ -1655,7 +1657,7 @@ SKIP: {
 
     our $has_fcntl;
     BEGIN {
-       eval { require Fcntl; import Fcntl; };
+       eval { require Fcntl; Fcntl->import; };
        unless ($@) {
            $has_fcntl = 1;
        }
@@ -1751,11 +1753,11 @@ SKIP: {
     while (my ($k, $v) = each %ENV) {
        if (!tainted($v) &&
            # These we have explicitly untainted or set earlier.
-           $k !~ /^(BASH_ENV|CDPATH|ENV|IFS|PATH|PERL_CORE|TEMP|TERM|TMP)$/) {
+           $k !~ /^(BASH_ENV|CDPATH|ENV|IFS|PATH|PERL_CORE|TEMP|TERM|TMP|PERL5LIB)$/) {
            push @untainted, "# '$k' = '$v'\n";
        }
     }
-    is("@untainted", "");
+    is("@untainted", "", "untainted");
 }
 
 
@@ -2072,14 +2074,15 @@ SKIP:
                   q/sprintf doesn't like tainted formats/);
     violates_taint(sub { sprintf($TAINT . "# %s\n", "foo") }, 'sprintf',
                   q/sprintf doesn't like tainted format expressions/);
-    eval { sprintf("# %s\n", $TAINT . "foo") };
+    eval { my $str = sprintf("# %s\n", $TAINT . "foo") };
     is($@, '', q/sprintf accepts other tainted args/);
 }
 
 {
     # 40708
     my $n  = 7e9;
-    8e9 - $n;
+    my $sub = 8e9 - $n;
+    is ( $sub, 1000000000, '8e9 - 7e9' );
 
     my $val = $n;
     is ($val, '7000000000', 'Assignment to untainted variable');
@@ -2100,6 +2103,7 @@ SKIP:
     seek $fh, 0, 2 or die $!;
     $tainted = <$fh>;
 
+    no warnings 'uninitialized';
     eval 'eval $tainted';
     like ($@, qr/^Insecure dependency in eval/);
 }
@@ -2137,7 +2141,7 @@ foreach my $ord (78, 163, 256) {
           my $x = crypt($_[0], $alg . $_[1]);
           $x
       }
-      sub co { my $x = ~$_[0]; $x }
+      sub co { no warnings 'numeric'; my $x = ~$_[0]; $x }
       my ($a, $b);
       $a = cr('hello', 'foo' . $TAINT);
       $b = cr('hello', 'foo');
@@ -2167,7 +2171,7 @@ foreach my $ord (78, 163, 256) {
 
     is_tainted($string, "still tainted data");
 
-    my @got = split /[!,]/, $string;
+    @got = split /[!,]/, $string;
 
     # each @got would be useful here, but I want the test for earlier perls
     for my $i (0 .. $#data) {
@@ -2177,7 +2181,7 @@ foreach my $ord (78, 163, 256) {
 
     is_tainted($string, "still tainted data");
 
-    my @got = split /!/, $string;
+    @got = split /!/, $string;
 
     # each @got would be useful here, but I want the test for earlier perls
     for my $i (0 .. $#data) {
@@ -2249,6 +2253,7 @@ foreach my $ord (78, 163, 256) {
 {
     for my $var1 ($TAINT, "123") {
        for my $var2 ($TAINT0, "456") {
+        no warnings q(redundant);
            is( tainted(sprintf '%s', $var1, $var2), tainted($var1),
                "sprintf '%s', '$var1', '$var2'" );
            is( tainted(sprintf ' %s', $var1, $var2), tainted($var1),
@@ -2266,7 +2271,7 @@ foreach my $ord (78, 163, 256) {
 
 {
     use re 'taint';
-    "abc".$TAINT =~ /(.*)/; # make $1 tainted
+    my $x = "abc".$TAINT =~ /(.*)/; # make $1 tainted
     is_tainted($1, '$1 should be tainted');
 
     my $untainted = "abcdef";
@@ -2300,17 +2305,17 @@ end
     is_tainted($^A, "tainted formline argument makes a tainted accumulator");
     $^A = "";
     isnt_tainted($^A, "accumulator can be explicitly untainted");
-    formline('@' .('<'*5) . ' | @*', 'hallo', 'welt');
+    formline('@' .('<'x5) . ' | @*', 'hallo', 'welt');
     isnt_tainted($^A, "accumulator still untainted");
     $^A = "" . $TAINT;
     is_tainted($^A, "accumulator can be explicitly tainted");
-    formline('@' .('<'*5) . ' | @*', 'hallo', 'welt');
+    formline('@' .('<'x5) . ' | @*', 'hallo', 'welt');
     is_tainted($^A, "accumulator still tainted");
     $^A = "";
     isnt_tainted($^A, "accumulator untainted again");
-    formline('@' .('<'*5) . ' | @*', 'hallo', 'welt');
+    formline('@' .('<'x5) . ' | @*', 'hallo', 'welt');
     isnt_tainted($^A, "accumulator still untainted");
-    formline('@' .('<'*(5+$TAINT0)) . ' | @*', 'hallo', 'welt');
+    formline('@' .('<'x(5+$TAINT0)) . ' | @*', 'hallo', 'welt');
     is_tainted($^A, "the accumulator should be tainted already");
     is_tainted($^A, "tainted formline picture makes a tainted accumulator");
 }
@@ -2448,7 +2453,9 @@ EOF
     BEGIN { no strict 'refs'; my $v = $old_env_path; *{"::C"} = sub () { $v }; }
     ok(tainted C, "constant is tainted properly");
     ok(!tainted "", "tainting not broken yet");
-    index(undef, C);
+    no warnings 'uninitialized';
+    my $ix = index(undef, C);
+    is( $ix, -1, q[index(undef, C)] );
     ok(!tainted "", "tainting still works after index() of the constant");
 }
 
@@ -2509,7 +2516,7 @@ SKIP: {
 # reset() and tainted undef (?!)
 $::x = "foo";
 $_ = "$TAINT".reset "x";
-is eval { eval $::x.1 }, 1, 'reset does not taint undef';
+is eval { no warnings; eval $::x.1 }, 1, 'reset does not taint undef';
 
 # [perl #122669]
 {
index 3f27ac0..09358f7 100644 (file)
@@ -123,7 +123,7 @@ is($` . $& . $', "abc");
 # check that scope cleanup happens right when there's a continue block
 {
     my $var = 16;
-    my (@got_var, @got_i);
+    my ($got_var, $got_i);
     while (my $i = ++$var) {
        next if $i == 17;
        last if $i > 17;
index 371a416..1254303 100644 (file)
@@ -7,20 +7,26 @@ Digest::MD5 cpan/Digest-MD5/Makefile.PL 3bf781444ee671da63f1c6360e0a31f11d9ba520
 Digest::MD5 cpan/Digest-MD5/MD5.pm df5f0663f0f755be7eda6e3d2f008f2629246b19
 Digest::MD5 cpan/Digest-MD5/MD5.xs 249bed648232192ce018f7f894ad127c3a639831
 Digest::MD5 cpan/Digest-MD5/t/files.t e987329d2411ff60ad9a2bdf93fdf5f6943467e8
+ExtUtils::Constant cpan/ExtUtils-Constant/t/Constant.t d5c75c41d6736a0c5897130f534af0896a7d6f4d
 Filter::Util::Call pod/perlfilter.pod e9833bf4ebc51087dfee5c553e0f8a5eef67212d
 Locale::Maketext::Simple cpan/Locale-Maketext-Simple/lib/Locale/Maketext/Simple.pm 57ed38905791a17c150210cd6f42ead22a7707b6
-Math::Complex cpan/Math-Complex/lib/Math/Complex.pm 198ea6c6c584f5ea79a0fd7e9d411d0878f3b2af
-Math::Complex cpan/Math-Complex/t/Complex.t 4f307ed6fc59f1e5fb0e6b11103fc631b6bdb335
-Math::Complex cpan/Math-Complex/t/Trig.t 2682526e23a161d54732c2a66393fe4a234d1865
+Math::Complex cpan/Math-Complex/lib/Math/Complex.pm 66f28a17647e2de166909ca66e4ced26f8a0a62e
+Math::Complex cpan/Math-Complex/t/Complex.t 17039e03ee798539e770ea9a0d19a99364278306
+Math::Complex cpan/Math-Complex/t/Trig.t 508f8e27373c08228be13ca5d42b28812ab0e020
 Memoize cpan/Memoize/Memoize.pm 902092ff91cdec9c7b4bd06202eb179e1ce26ca2
 NEXT cpan/NEXT/lib/NEXT.pm 2c83d03ee361816e53ccb931137d314ab878d19f
 NEXT cpan/NEXT/t/next.t 66fd60eb0f75b6f3eea95d1dee745f9a7a348146
+Net::Ping dist/Net-Ping/t/000_load.t deff5dc2ca54dae28cb19d3631427db127279ac2
+Net::Ping dist/Net-Ping/t/001_new.t 7b24e05672e22edfe3e6b5cc0277f815efe557e5
+Net::Ping dist/Net-Ping/t/010_pingecho.t 218d7a9ee5b6d03ba2544210acaf6585f8dc5503
+Net::Ping dist/Net-Ping/t/450_service.t f6578680f2872d7fc9f24dd75388d55654761875
+Net::Ping dist/Net-Ping/t/500_ping_icmp.t 3eeb60181c01b85f876bd6658644548fdf2e24d4
+Net::Ping dist/Net-Ping/t/501_ping_icmpv6.t 54373de5858f8fb7e078e4998a4b3b8dbca91783
 Pod::Checker cpan/Pod-Checker/t/pod/contains_bad_pod.xr 73538fd80dfe6e19ad561fe034009b44460208f6
 Pod::Checker cpan/Pod-Checker/t/pod/selfcheck.t 8ce3cfd38e4b9bcf5bc7fe7f2a14195e49aed7d8
 Pod::Checker cpan/Pod-Checker/t/pod/testcmp.pl a0cd5c8eca775c7753f4464eee96fa916e3d8a16
 Pod::Checker cpan/Pod-Checker/t/pod/testpchk.pl b2072c7f4379fd050e15424175d7cac5facf5b3b
 Pod::Perldoc cpan/Pod-Perldoc/lib/Pod/Perldoc.pm 582be34c077c9ff44d99914724a0cc2140bcd48c
-Pod::Usage cpan/Pod-Usage/t/pod/testp2pt.pl d43ea8391bd95aefdb710ab2947771155a88d424
 Win32API::File cpan/Win32API-File/File.pm 8fd212857f821cb26648878b96e57f13bf21b99e
 Win32API::File cpan/Win32API-File/File.xs beb870fed4490d2faa547b4a8576b8d64d1d27c5
 experimental cpan/experimental/t/basic.t cb9da8dd05b854375809872a05dd32637508d5da
index 1db0ae7..f7e0858 100644 (file)
@@ -13,7 +13,7 @@ skip_all("Code to read symbols not ported to $^O")
 # received any bug reports about it causing problems:
 my %skip = map { ("PL_$_", 1) }
     qw(
-         DBcv bitcount cshname force_link_funcs generation lastgotoprobe
+         DBcv bitcount cshname generation lastgotoprobe
          mod_latin1_uc modcount no_symref_sv uudmap
          watchaddr watchok warn_uninit_sv hash_chars
      );
index c1c2720..21b6091 100644 (file)
@@ -221,6 +221,7 @@ Moose
 MRO::Compat
 msgctl(2)
 msgget(2)
+multidimensional
 ndbm(3)
 NgxQueue
 nl_langinfo(3)
index 72b4220..9effa9a 100644 (file)
@@ -9,11 +9,6 @@
 # - freebsd
 # and on other platforms, and if things seem odd, just give up (skip_all).
 #
-# Also, if the rarely-used builds options -DPERL_GLOBAL_STRUCT or
-# -DPERL_GLOBAL_STRUCT_PRIVATE are used, verify that they did what
-# they were meant to do, hide the global variables (see perlguts for
-# the details).
-#
 # Debugging tip: nm output (this script's input) can be faked by
 # giving one command line argument for this script: it should be
 # either the filename to read, or "-" for STDIN.  You can also append
@@ -328,12 +323,8 @@ ok($symbols{text}{'Perl_pp_uc'}{'pp.o'}, "has text Perl_pp_uc in pp.o");
 ok(exists $symbols{data}{const}, "has data const symbols");
 ok($symbols{data}{const}{PL_no_mem}{'globals.o'}, "has PL_no_mem");
 
-my $GS  = $Config{ccflags} =~ /-DPERL_GLOBAL_STRUCT\b/ ? 1 : 0;
-my $GSP = $Config{ccflags} =~ /-DPERL_GLOBAL_STRUCT_PRIVATE/ ? 1 : 0;
 my $nocommon = $Config{ccflags} =~ /-fno-common/ ? 1 : 0;
 
-print "# GS  = $GS\n";
-print "# GSP = $GSP\n";
 print "# nocommon = $nocommon\n";
 
 my %data_symbols;
@@ -344,115 +335,15 @@ for my $dtype (sort keys %{$symbols{data}}) {
     }
 }
 
-# The following tests differ between vanilla vs $GSP or $GS.
-
-if ($GSP) {
-    print "# -DPERL_GLOBAL_STRUCT_PRIVATE\n";
-    ok(!exists $data_symbols{PL_hash_seed}, "has no PL_hash_seed");
-    ok(!exists $data_symbols{PL_ppaddr}, "has no PL_ppaddr");
-
-    ok(! exists $symbols{data}{bss}, "has no data bss symbols")
-        or do {
-            my $bad = "BSS entries (there are supposed to be none):\n";
-            $bad .= "  bss sym: $_\n" for sort keys %{$symbols{data}{bss}};
-            diag($bad);
-        };
-
-    ok(! exists $symbols{data}{data} ||
-            # clang with ASAN seems to add this symbol to every object file:
-            !grep($_ ne '__unnamed_1', keys %{$symbols{data}{data}}),
-        "has no data data symbols")
-        or do {
-            my $bad = "DATA entries (there are supposed to be none):\n";
-            $bad .= "  data sym: $_\n" for sort keys %{$symbols{data}{data}};
-            diag($bad);
-        };
-
-    ok(! exists $symbols{data}{common}, "has no data common symbols")
-        or do {
-            my $bad = "COMMON entries (there are supposed to be none):\n";
-            $bad .= "  common sym: $_\n" for sort keys %{$symbols{data}{common}};
-            diag($bad);
-        };
-
-    # -DPERL_GLOBAL_STRUCT_PRIVATE should NOT have
-    # the extra text symbol for accessing the vars
-    # (as opposed to "just" -DPERL_GLOBAL_STRUCT)
-    ok(! exists $symbols{text}{Perl_GetVars}, "has no Perl_GetVars");
-} elsif ($GS) {
-    print "# -DPERL_GLOBAL_STRUCT\n";
-    ok(!exists $data_symbols{PL_hash_seed}, "has no PL_hash_seed");
-    ok(!exists $data_symbols{PL_ppaddr}, "has no PL_ppaddr");
-
-    if ($nocommon) {
-        $symbols{data}{common} = $symbols{data}{bss};
-        delete $symbols{data}{bss};
-    }
-
-    ok(! exists $symbols{data}{bss}, "has no data bss symbols")
-        or do {
-            my $bad = "BSS entries (there are supposed to be none):\n";
-            $bad .= "  bss sym: $_\n" for sort keys %{$symbols{data}{bss}};
-            diag($bad);
-        };
-
-
-    # These PerlIO data symbols are left visible with
-    # -DPERL_GLOBAL_STRUCT (as opposed to -DPERL_GLOBAL_STRUCT_PRIVATE)
-    my @PerlIO =
-        qw(
-           PerlIO_byte
-           PerlIO_crlf
-           PerlIO_pending
-           PerlIO_perlio
-           PerlIO_raw
-           PerlIO_remove
-           PerlIO_stdio
-           PerlIO_unix
-           PerlIO_utf8
-          );
-
-    # PL_magic_vtables is const with -DPERL_GLOBAL_STRUCT_PRIVATE but
-    # otherwise not const -- because of SWIG which wants to modify
-    # the table.  Evil SWIG, eeevil.
-
-    # my_cxt_index is used with PERL_IMPLICIT_CONTEXT, which
-    # -DPERL_GLOBAL_STRUCT has turned on.
-    eq_array([sort keys %{$symbols{data}{data}}],
-             [sort('PL_VarsPtr',
-                   @PerlIO,
-                   'PL_magic_vtables',
-                   'my_cxt_index')],
-             "data data symbols");
-
-    # Only one data common symbol, our "supervariable".
-    eq_array([sort keys %{$symbols{data}{common}}],
-             ['PL_Vars'],
-             "data common symbols");
-
-    ok($symbols{data}{data}{PL_VarsPtr}{'globals.o'}, "has PL_VarsPtr");
-    ok($symbols{data}{common}{PL_Vars}{'globals.o'}, "has PL_Vars");
-
-    # -DPERL_GLOBAL_STRUCT has extra text symbol for accessing the vars.
-    ok($symbols{text}{Perl_GetVars}{'util.o'}, "has Perl_GetVars");
-} else {
-    print "# neither -DPERL_GLOBAL_STRUCT nor -DPERL_GLOBAL_STRUCT_PRIVATE\n";
-
-    if ( !$symbols{data}{common} ) {
-        # This is likely because Perl was compiled with
-        # -Accflags="-fno-common"
-        $symbols{data}{common} = $symbols{data}{bss};
-    }
-
-    ok($symbols{data}{common}{PL_hash_seed}{'globals.o'}, "has PL_hash_seed");
-    ok($symbols{data}{data}{PL_ppaddr}{'globals.o'}, "has PL_ppaddr");
-
-    # None of the GLOBAL_STRUCT* business here.
-    ok(! exists $symbols{data}{data}{PL_VarsPtr}, "has no PL_VarsPtr");
-    ok(! exists $symbols{data}{common}{PL_Vars}, "has no PL_Vars");
-    ok(! exists $symbols{text}{Perl_GetVars}, "has no Perl_GetVars");
+if ( !$symbols{data}{common} ) {
+    # This is likely because Perl was compiled with
+    # -Accflags="-fno-common"
+    $symbols{data}{common} = $symbols{data}{bss};
 }
 
+ok($symbols{data}{common}{PL_hash_seed}{'globals.o'}, "has PL_hash_seed");
+ok($symbols{data}{data}{PL_ppaddr}{'globals.o'}, "has PL_ppaddr");
+
 # See the comments in the beginning for what "undefined symbols"
 # really means.  We *should* have many of those, that is a good thing.
 ok(keys %{$symbols{undef}}, "has undefined symbols");
index 894b153..d3b36ba 100644 (file)
@@ -17,7 +17,8 @@
 # If MANIFEST fails the 'up to date' test, it will probably also fail
 # t/porting/manifest.t as well.  Follow instructions in that file for
 # correcting the MANIFEST.  When that file passes, the MANIFEST check in this
-# file will probably pass as well.
+# file will probably pass as well.  If not, it may be that the entry in
+# MANIFEST is no longer in sync with the entry in perl.pod.
 
 BEGIN {
     # We need to be at the top level dir.
index 232a45f..1d79d2c 100644 (file)
@@ -52,8 +52,6 @@ eval {
 };
 
 if(@sorted_order) {
-    local $::TODO;
-    $::TODO = "Unicode::Collate not working on EBCDIC" if $::IS_EBCDIC || $::IS_EBCDIC;
     ok(eq_array(\@current_order, \@sorted_order), "Files are referenced in order") or
         print_right_order();
 }
index b4d438f..30d7c0f 100644 (file)
@@ -26,7 +26,7 @@ if ( $Config{usecrosscompile} ) {
   skip_all( "Not all files are available during cross-compilation" );
 }
 
-my $tests = 27; # I can't see a clean way to calculate this automatically.
+my $tests = 25; # I can't see a clean way to calculate this automatically.
 
 my %skip = ("regen_perly.pl"    => [qw(perly.act perly.h perly.tab)],
             "regen/keywords.pl" => [qw(keywords.c keywords.h)],
@@ -105,7 +105,12 @@ OUTER: foreach my $file (@files) {
 }
 
 foreach (@progs) {
-    my $command = "$^X -I. $_ --tap";
+    my $args = qq[-Ilib $_ --tap];
+    note("./perl $args");
+    my $command = "$^X $args";
     system $command
-        and die "Failed to run $command: $?";
+        and die <<~"HINT";
+    Hint:  A failure in this file can often be corrected by running:
+     ./perl -Ilib $_
+HINT
 }
index 9304bd7..554a700 100644 (file)
@@ -1838,7 +1838,7 @@ ab[c\\\](??{"x"})]{3}d    ab\\](d y       -       -
 # [ perl #114272]
 \Vn    \xFFn/  y       $&      \xFFn
 
-# These mostly exercize various paths in the optimizer
+# These mostly exercise various paths in the optimizer
 /(?l:a?\w)/    b       y       $&      b
 /(?l:a?\D)/    b       y       $&      b
 ^_?[^\S_0-9]\w*\z      \t      y       $&      \t
index 9f1c417..145a91a 100644 (file)
@@ -263,6 +263,7 @@ my @death =
  'm/(?[[^\N{LATIN CAPITAL LETTER A WITH MACRON AND GRAVE}]])/' => '\N{} here is restricted to one character {#} m/(?[[^\N{U+100.300{#}}]])/',
  'm/(?[ \p{Digit} & (?^(?[ \p{Thai} | \p{Lao} ]))])/' => 'Sequence (?^(...) not recognized {#} m/(?[ \p{Digit} & (?^({#}?[ \p{Thai} | \p{Lao} ]))])/',
  'm/(?[ \p{Digit} & (?(?[ \p{Thai} | \p{Lao} ]))])/' => 'Unexpected character {#} m/(?[ \p{Digit} & (?{#}(?[ \p{Thai} | \p{Lao} ]))])/',
+ 'm/\p{Is_Is_Any}/' => 'Unknown user-defined property name \p{main::Is_Is_Any}',
  'm/\o{/' => 'Missing right brace on \o{} {#} m/\o{{#}/',
  'm/\o/' => 'Missing braces on \o{} {#} m/\o{#}/',
  'm/\o{}/' => 'Empty \o{} {#} m/\o{}{#}/',
index c754090..eeba808 100644 (file)
--- a/t/test.pl
+++ b/t/test.pl
@@ -304,7 +304,7 @@ eval 'sub re::is_regexp { ref($_[0]) eq "Regexp" }'
 
 # keys are the codes \n etc map to, values are 2 char strings such as \n
 my %backslash_escape;
-foreach my $x (split //, 'nrtfa\\\'"') {
+foreach my $x (split //, 'enrtfa\\\'"') {
     $backslash_escape{ord eval "\"\\$x\""} = "\\$x";
 }
 # A way to display scalars containing control characters and Unicode.
index 2603d54..e695889 100644 (file)
--- a/thread.h
+++ b/thread.h
        *c = 0;                                                 \
     } STMT_END
 
-#define THREAD_CREATE(thr, f)  (thr->self = cthread_fork(f, thr), 0)
-#define THREAD_POST_CREATE(thr)        NOOP
-
 #define THREAD_RET_TYPE                any_t
-#define THREAD_RET_CAST(x)     ((any_t) x)
 
 #define DETACH(t)              cthread_detach(t->self)
 #define JOIN(t, avp)           (*(avp) = MUTABLE_AV(cthread_join(t->self)))
 
 #ifndef THREAD_RET_TYPE
 #  define THREAD_RET_TYPE      void *
-#  define THREAD_RET_CAST(p)   ((void *)(p))
 #endif /* THREAD_RET */
 
 #  define LOCK_DOLLARZERO_MUTEX                MUTEX_LOCK(&PL_dollarzero_mutex)
index bbcef8e..7fc50af 100644 (file)
--- a/time64.c
+++ b/time64.c
@@ -374,7 +374,7 @@ struct TM *Perl_gmtime64_r (const Time64_T *in_time, struct TM *p)
     p->tm_isdst  = 0;
 
 #ifdef HAS_TM_TM_ZONE
-    p->tm_zone   = (char *)"UTC";
+    p->tm_zone   = "UTC";
 #endif
 
     v_tm_sec  = (int)Perl_fmod(time, 60.0);
index b86e771..8064ae7 100644 (file)
--- a/time64.h
+++ b/time64.h
@@ -28,15 +28,7 @@ struct TM64 {
 #endif
 
 #ifdef HAS_TM_TM_ZONE
-/* If glibc is defined or we are on QNX, use const.
- * Otherwise, if we are on android, use const but
- * not with g++.
- */
-#  if defined(__GLIBC__) || (defined(__ANDROID__) && !defined(__cplusplus)) \
-    || defined(__QNX__) || defined(__CYGWIN__)
-        const
-#  endif
-        char    *tm_zone;
+        const char *tm_zone;
 #endif
 };
 
diff --git a/toke.c b/toke.c
index a13a915..64550fa 100644 (file)
--- a/toke.c
+++ b/toke.c
@@ -1025,7 +1025,6 @@ function is more convenient.
 void
 Perl_lex_stuff_pvn(pTHX_ const char *pv, STRLEN len, U32 flags)
 {
-    dVAR;
     char *bufptr;
     PERL_ARGS_ASSERT_LEX_STUFF_PVN;
     if (flags & ~(LEX_STUFF_UTF8))
@@ -1457,7 +1456,6 @@ is encountered, an exception is generated.
 I32
 Perl_lex_peek_unichar(pTHX_ U32 flags)
 {
-    dVAR;
     char *s, *bufend;
     if (flags & ~(LEX_KEEP_PREVIOUS))
        Perl_croak(aTHX_ "Lexing code internal error (%s)", "lex_peek_unichar");
@@ -2709,7 +2707,6 @@ Perl_get_and_check_backslash_N_name(pTHX_ const char* s,
     const char* context = s - 3;
     STRLEN context_len = e - context + 1; /* include all of \N{...} */
 
-    dVAR;
 
     PERL_ARGS_ASSERT_GET_AND_CHECK_BACKSLASH_N_NAME;
 
@@ -7124,7 +7121,6 @@ yyl_fake_eof(pTHX_ U32 fake_eof, bool bof, char *s)
                 && !instr(s,"indir")
                 && instr(PL_origargv[0],"perl"))
             {
-                dVAR;
                 char **newargv;
 
                 *ipathend = '\0';
@@ -7679,12 +7675,7 @@ yyl_word_or_keyword(pTHX_ char *s, STRLEN len, I32 key, I32 orig_keyword, struct
         UNI(OP_CALLER);
 
     case KEY_crypt:
-#ifdef FCRYPT
-        if (!PL_cryptseen) {
-            PL_cryptseen = TRUE;
-            init_des();
-        }
-#endif
+
         LOP(OP_CRYPT,XTERM);
 
     case KEY_chmod:
@@ -8515,7 +8506,6 @@ yyl_key_core(pTHX_ char *s, STRLEN len, struct code c)
 static int
 yyl_keylookup(pTHX_ char *s, GV *gv)
 {
-    dVAR;
     STRLEN len;
     bool anydelim;
     I32 key;
@@ -8723,7 +8713,7 @@ yyl_try(pTHX_ char *s)
            }
            if (PL_minus_E)
                sv_catpvs(PL_linestr,
-                         "use feature ':5." STRINGIFY(PERL_VERSION) "';");
+                         "use feature ':" STRINGIFY(PERL_REVISION) "." STRINGIFY(PERL_VERSION) "';");
            if (PL_minus_n || PL_minus_p) {
                sv_catpvs(PL_linestr, "LINE: while (<>) {"/*}*/);
                if (PL_minus_l)
@@ -9186,7 +9176,6 @@ yyl_try(pTHX_ char *s)
 int
 Perl_yylex(pTHX)
 {
-    dVAR;
     char *s = PL_bufptr;
 
     if (UNLIKELY(PL_parser->recheck_utf8_validity)) {
@@ -12790,7 +12779,6 @@ void
 Perl_wrap_keyword_plugin(pTHX_
     Perl_keyword_plugin_t new_plugin, Perl_keyword_plugin_t *old_plugin_p)
 {
-    dVAR;
 
     PERL_UNUSED_CONTEXT;
     PERL_ARGS_ASSERT_WRAP_KEYWORD_PLUGIN;
index 67795ac..6797b9f 100644 (file)
@@ -789,7 +789,7 @@ XS(XS_PerlIO_get_layers)
             AV* const av = PerlIO_get_layers(aTHX_ input ?
                                        IoIFP(io) : IoOFP(io));
             SSize_t i;
-            const SSize_t last = av_tindex(av);
+            const SSize_t last = av_top_index(av);
             SSize_t nitem = 0;
             
             for (i = last; i >= 0; i -= 3) {
@@ -956,10 +956,10 @@ XS(XS_re_regnames)
         XSRETURN_UNDEF;
 
     av = MUTABLE_AV(SvRV(ret));
-    length = av_tindex(av);
+    length = av_count(av);
 
-    EXTEND(SP, length+1); /* better extend stack just once */
-    for (i = 0; i <= length; i++) {
+    EXTEND(SP, length); /* better extend stack just once */
+    for (i = 0; i < length; i++) {
         entry = av_fetch(av, i, FALSE);
         
         if (!entry)
@@ -1117,7 +1117,7 @@ XS(XS_NamedCapture_tie_it)
 
 XS(XS_NamedCapture_TIEHASH)
 {
-    dVAR; dXSARGS;
+    dXSARGS;
     if (items < 1)
        croak_xs_usage(cv,  "package, ...");
     {
@@ -1152,7 +1152,7 @@ XS(XS_NamedCapture_TIEHASH)
 
 XS(XS_NamedCapture_FETCH)
 {
-    dVAR; dXSARGS;
+    dXSARGS;
     dXSI32;
     PERL_UNUSED_VAR(cv); /* -W */
     PERL_UNUSED_VAR(ax); /* -Wall */
@@ -1197,7 +1197,7 @@ XS(XS_NamedCapture_FETCH)
 
 XS(XS_NamedCapture_FIRSTKEY)
 {
-    dVAR; dXSARGS;
+    dXSARGS;
     dXSI32;
     PERL_UNUSED_VAR(cv); /* -W */
     PERL_UNUSED_VAR(ax); /* -Wall */
@@ -1231,7 +1231,7 @@ XS(XS_NamedCapture_FIRSTKEY)
 /* is this still needed? */
 XS(XS_NamedCapture_flags)
 {
-    dVAR; dXSARGS;
+    dXSARGS;
     PERL_UNUSED_VAR(cv); /* -W */
     PERL_UNUSED_VAR(ax); /* -Wall */
     SP -= items;
diff --git a/utf8.c b/utf8.c
index 7a45ca9..88233e8 100644 (file)
--- a/utf8.c
+++ b/utf8.c
@@ -2811,21 +2811,18 @@ Perl_utf16_to_utf8_reversed(pTHX_ U8* p, U8* d, Size_t bytelen, Size_t *newlen)
 bool
 Perl__is_uni_FOO(pTHX_ const U8 classnum, const UV c)
 {
-    dVAR;
     return _invlist_contains_cp(PL_XPosix_ptrs[classnum], c);
 }
 
 bool
 Perl__is_uni_perl_idcont(pTHX_ UV c)
 {
-    dVAR;
     return _invlist_contains_cp(PL_utf8_perl_idcont, c);
 }
 
 bool
 Perl__is_uni_perl_idstart(pTHX_ UV c)
 {
-    dVAR;
     return _invlist_contains_cp(PL_utf8_perl_idstart, c);
 }
 
@@ -2965,7 +2962,6 @@ Perl_to_uni_upper(pTHX_ UV c, U8* p, STRLEN *lenp)
      * The ordinal of the first character of the changed version is returned
      * (but note, as explained above, that there may be more.) */
 
-    dVAR;
     PERL_ARGS_ASSERT_TO_UNI_UPPER;
 
     if (c < 256) {
@@ -2978,7 +2974,6 @@ Perl_to_uni_upper(pTHX_ UV c, U8* p, STRLEN *lenp)
 UV
 Perl_to_uni_title(pTHX_ UV c, U8* p, STRLEN *lenp)
 {
-    dVAR;
     PERL_ARGS_ASSERT_TO_UNI_TITLE;
 
     if (c < 256) {
@@ -3018,7 +3013,6 @@ S_to_lower_latin1(const U8 c, U8* p, STRLEN *lenp, const char dummy)
 UV
 Perl_to_uni_lower(pTHX_ UV c, U8* p, STRLEN *lenp)
 {
-    dVAR;
     PERL_ARGS_ASSERT_TO_UNI_LOWER;
 
     if (c < 256) {
@@ -3100,7 +3094,6 @@ Perl__to_uni_fold_flags(pTHX_ UV c, U8* p, STRLEN *lenp, U8 flags)
      *     FOLD_FLAGS_NOMIX_ASCII iff non-ASCII to ASCII folds are prohibited
      */
 
-    dVAR;
     PERL_ARGS_ASSERT__TO_UNI_FOLD_FLAGS;
 
     if (flags & FOLD_FLAGS_LOCALE) {
@@ -3205,7 +3198,6 @@ S_warn_on_first_deprecated_use(pTHX_ const char * const name,
 bool
 Perl__is_utf8_FOO(pTHX_ const U8 classnum, const U8 *p, const U8 * const e)
 {
-    dVAR;
     PERL_ARGS_ASSERT__IS_UTF8_FOO;
 
     return is_utf8_common(p, e, PL_XPosix_ptrs[classnum]);
@@ -3214,7 +3206,6 @@ Perl__is_utf8_FOO(pTHX_ const U8 classnum, const U8 *p, const U8 * const e)
 bool
 Perl__is_utf8_perl_idstart(pTHX_ const U8 *p, const U8 * const e)
 {
-    dVAR;
     PERL_ARGS_ASSERT__IS_UTF8_PERL_IDSTART;
 
     return is_utf8_common(p, e, PL_utf8_perl_idstart);
@@ -3223,7 +3214,6 @@ Perl__is_utf8_perl_idstart(pTHX_ const U8 *p, const U8 * const e)
 bool
 Perl__is_utf8_perl_idcont(pTHX_ const U8 *p, const U8 * const e)
 {
-    dVAR;
     PERL_ARGS_ASSERT__IS_UTF8_PERL_IDCONT;
 
     return is_utf8_common(p, e, PL_utf8_perl_idcont);
@@ -3429,7 +3419,6 @@ Perl__inverse_folds(pTHX_ const UV cp, U32 * first_folds_to,
      * constructed with this size (to save space and memory), and we return
      * pointers, so they must be this size */
 
-    dVAR;
     /* 'index' is guaranteed to be non-negative, as this is an inversion map
      * that covers all possible inputs.  See [perl #133365] */
     SSize_t index = _invlist_search(PL_utf8_foldclosures, cp);
@@ -3575,7 +3564,6 @@ S_turkic_lc(pTHX_ const U8 * const p0, const U8 * const e,
      * sequence, and the entire sequence will be stored in *ustrp.  ustrp will
      * contain *lenp bytes */
 
-    dVAR;
     PERL_ARGS_ASSERT_TURKIC_LC;
     assert(e > p0);
 
@@ -3749,7 +3737,6 @@ Perl__to_utf8_upper_flags(pTHX_ const U8 *p,
                                 STRLEN *lenp,
                                 bool flags)
 {
-    dVAR;
     UV result;
 
     PERL_ARGS_ASSERT__TO_UTF8_UPPER_FLAGS;
@@ -3774,7 +3761,6 @@ Perl__to_utf8_title_flags(pTHX_ const U8 *p,
                                 STRLEN *lenp,
                                 bool flags)
 {
-    dVAR;
     UV result;
 
     PERL_ARGS_ASSERT__TO_UTF8_TITLE_FLAGS;
@@ -3797,7 +3783,6 @@ Perl__to_utf8_lower_flags(pTHX_ const U8 *p,
                                 STRLEN *lenp,
                                 bool flags)
 {
-    dVAR;
     UV result;
 
     PERL_ARGS_ASSERT__TO_UTF8_LOWER_FLAGS;
@@ -3824,7 +3809,6 @@ Perl__to_utf8_fold_flags(pTHX_ const U8 *p,
                                STRLEN *lenp,
                                U8 flags)
 {
-    dVAR;
     UV result;
 
     PERL_ARGS_ASSERT__TO_UTF8_FOLD_FLAGS;
diff --git a/utf8.h b/utf8.h
index 01bf447..f0396aa 100644 (file)
--- a/utf8.h
+++ b/utf8.h
@@ -283,7 +283,7 @@ are in the character. */
 /* 2**UTF_ACCUMULATION_SHIFT - 1.  This masks out all but the bits that carry
  * real information in a continuation byte.  This turns out to be 0x3F in
  * UTF-8, 0x1F in UTF-EBCDIC. */
-#define UTF_CONTINUATION_MASK  ((U8) ((1U << UTF_ACCUMULATION_SHIFT) - 1))
+#define UTF_CONTINUATION_MASK  ((U8) (nBIT_MASK(UTF_ACCUMULATION_SHIFT)))
 
 /* For use in UTF8_IS_CONTINUATION().  This turns out to be 0xC0 in UTF-8,
  * E0 in UTF-EBCDIC */
@@ -353,7 +353,9 @@ C<cp> is Unicode if above 255; otherwise is platform-native.
  * ASCII platforms, everything is representable by 7 bytes */
 #if defined(UV_IS_QUAD) || defined(EBCDIC)
 #   define __BASE_UNI_SKIP(uv) (__COMMON_UNI_SKIP(uv)                       \
-     (UV) (uv) < ((UV) 1U << (6 * UTF_ACCUMULATION_SHIFT)) ? 7 : UTF8_MAXBYTES)
+     LIKELY((UV) (uv) < ((UV) 1U << (6 * UTF_ACCUMULATION_SHIFT)))          \
+     ? 7                                                                    \
+     : UTF8_MAXBYTES)
 #else
 #   define __BASE_UNI_SKIP(uv) (__COMMON_UNI_SKIP(uv) 7)
 #endif
@@ -417,7 +419,7 @@ encoded as UTF-8.  C<cp> is a native (ASCII or EBCDIC) code point if less than
 /* The largest code point representable by two UTF-8 bytes on any platform that
  * Perl runs on.  This value is constrained by EBCDIC which has 5 bits per
  * continuation byte */
-#define MAX_PORTABLE_UTF8_TWO_BYTE (32 * (1U << 5) - 1)
+#define MAX_PORTABLE_UTF8_TWO_BYTE (32 * nBIT_UMAX(5))
 
 /*
 
@@ -461,12 +463,14 @@ uppercase/lowercase/titlecase/fold into.
  * UTF-8 encoded character that mark it as a start byte and give the number of
  * bytes that comprise the character. 'len' is the number of bytes in the
  * multi-byte sequence. */
-#define UTF_START_MARK(len) (((len) >  7) ? 0xFF : ((U8) (0xFE << (7-(len)))))
+#define UTF_START_MARK(len) (UNLIKELY((len) >  7)           \
+                            ? 0xFF                          \
+                            : ((U8) (0xFE << (7-(len)))))
 
 /* Masks out the initial one bits in a start byte, leaving the real data ones.
  * Doesn't work on an invariant byte.  'len' is the number of bytes in the
  * multi-byte sequence that comprises the character. */
-#define UTF_START_MASK(len) (((len) >= 7) ? 0x00 : (0x1F >> ((len)-2)))
+#define UTF_START_MASK(len) (UNLIKELY((len) >= 7) ? 0x00 : (0x1F >> ((len)-2)))
 
 /* Adds a UTF8 continuation byte 'new' of information to a running total code
  * point 'old' of all the continuation bytes so far.  This is designed to be
@@ -584,7 +588,7 @@ L</C<UTF8_SAFE_SKIP>>, for example when interfacing with a C library.
 */
 
 #define UTF8_CHK_SKIP(s)                                                       \
-            (s[0] == '\0' ? 1 : MIN(UTF8SKIP(s),                               \
+            (UNLIKELY(s[0] == '\0') ? 1 : MIN(UTF8SKIP(s),                     \
                                     my_strnlen((char *) (s), UTF8SKIP(s))))
 /*
 
@@ -596,7 +600,7 @@ returns beyond C<e>.  On DEBUGGING builds, it asserts that S<C<s E<lt>= e>>.
 =cut
  */
 #define UTF8_SAFE_SKIP(s, e)  (__ASSERT_((e) >= (s))                \
-                              ((e) - (s)) <= 0                      \
+                              UNLIKELY(((e) - (s)) <= 0)            \
                                ? 0                                  \
                                : MIN(((e) - (s)), UTF8_SKIP(s)))
 
@@ -875,17 +879,18 @@ fit in an IV on the current machine.
  */
 #ifdef EBCDIC
 #   define UTF8_IS_SUPER(s, e)                                              \
-                  ((    LIKELY((e) > (s) + 4)                               \
-                    &&      NATIVE_UTF8_TO_I8(*(s)) >= 0xF9                 \
-                    && (    NATIVE_UTF8_TO_I8(*(s)) >  0xF9                 \
-                        || (NATIVE_UTF8_TO_I8(*((s) + 1)) >= 0xA2))         \
-                    &&  LIKELY((s) + UTF8SKIP(s) <= (e)))                   \
-                    ?  is_utf8_char_helper(s, s + UTF8SKIP(s), 0) : 0)
+                 ((    ((e) > (s) + 4)                                      \
+                   &&          (NATIVE_UTF8_TO_I8(*(s)) >= 0xF9)            \
+                   &&  UNLIKELY(    NATIVE_UTF8_TO_I8(*(s)) >  0xF9         \
+                                || (NATIVE_UTF8_TO_I8(*((s) + 1)) >= 0xA2)) \
+                   &&  LIKELY((s) + UTF8SKIP(s) <= (e)))                    \
+                 ?  is_utf8_char_helper(s, s + UTF8SKIP(s), 0) : 0
 #else
 #   define UTF8_IS_SUPER(s, e)                                              \
-                   ((    LIKELY((e) > (s) + 3)                              \
+                   ((    ((e) > (s) + 3)                                    \
                      &&  (*(U8*) (s)) >= 0xF4                               \
-                     && ((*(U8*) (s)) >  0xF4 || (*((U8*) (s) + 1) >= 0x90))\
+                     && (UNLIKELY(   ((*(U8*) (s)) >  0xF4)                 \
+                                  || (*((U8*) (s) + 1) >= 0x90)))           \
                      &&  LIKELY((s) + UTF8SKIP(s) <= (e)))                  \
                     ?  is_utf8_char_helper(s, s + UTF8SKIP(s), 0) : 0)
 #endif
@@ -958,28 +963,29 @@ Evaluates to 0xFFFD, the code point of the Unicode REPLACEMENT CHARACTER
 
 /* This matches the 2048 code points between UNICODE_SURROGATE_FIRST (0xD800) and
  * UNICODE_SURROGATE_LAST (0xDFFF) */
-#define UNICODE_IS_SURROGATE(uv)        (((UV) (uv) & (~0xFFFF | 0xF800))       \
+#define UNICODE_IS_SURROGATE(uv)  UNLIKELY(((UV) (uv) & (~0xFFFF | 0xF800))     \
                                                                     == 0xD800)
 
-#define UNICODE_IS_REPLACEMENT(uv)     ((UV) (uv) == UNICODE_REPLACEMENT)
-#define UNICODE_IS_BYTE_ORDER_MARK(uv) ((UV) (uv) == UNICODE_BYTE_ORDER_MARK)
+#define UNICODE_IS_REPLACEMENT(uv)  UNLIKELY((UV) (uv) == UNICODE_REPLACEMENT)
+#define UNICODE_IS_BYTE_ORDER_MARK(uv) UNLIKELY((UV) (uv)                      \
+                                                    == UNICODE_BYTE_ORDER_MARK)
 
 /* Is 'uv' one of the 32 contiguous-range noncharacters? */
-#define UNICODE_IS_32_CONTIGUOUS_NONCHARS(uv)      ((UV) (uv) >= 0xFDD0         \
-                                                 && (UV) (uv) <= 0xFDEF)
+#define UNICODE_IS_32_CONTIGUOUS_NONCHARS(uv)   UNLIKELY((UV) (uv) >= 0xFDD0    \
+                                                      && (UV) (uv) <= 0xFDEF)
 
 /* Is 'uv' one of the 34 plane-ending noncharacters 0xFFFE, 0xFFFF, 0x1FFFE,
  * 0x1FFFF, ... 0x10FFFE, 0x10FFFF, given that we know that 'uv' is not above
  * the Unicode legal max */
 #define UNICODE_IS_END_PLANE_NONCHAR_GIVEN_NOT_SUPER(uv)                        \
-                                              (((UV) (uv) & 0xFFFE) == 0xFFFE)
+                                      UNLIKELY(((UV) (uv) & 0xFFFE) == 0xFFFE)
 
 #define UNICODE_IS_NONCHAR(uv)                                                  \
     (   UNICODE_IS_32_CONTIGUOUS_NONCHARS(uv)                                   \
      || (   LIKELY( ! UNICODE_IS_SUPER(uv))                                     \
          && UNICODE_IS_END_PLANE_NONCHAR_GIVEN_NOT_SUPER(uv)))
 
-#define UNICODE_IS_SUPER(uv)    ((UV) (uv) > PERL_UNICODE_MAX)
+#define UNICODE_IS_SUPER(uv)    UNLIKELY((UV) (uv) > PERL_UNICODE_MAX)
 
 #define LATIN_SMALL_LETTER_SHARP_S      LATIN_SMALL_LETTER_SHARP_S_NATIVE
 #define LATIN_SMALL_LETTER_Y_WITH_DIAERESIS                                  \
@@ -1018,13 +1024,7 @@ Evaluates to 0xFFFD, the code point of the Unicode REPLACEMENT CHARACTER
 /* Character classes could also allow \b, but not patterns in general */
 #define UNI_DISPLAY_REGEX      (UNI_DISPLAY_ISPRINT|UNI_DISPLAY_BACKSLASH)
 
-#define ANYOF_FOLD_SHARP_S(node, input, end)   \
-       (ANYOF_BITMAP_TEST(node, LATIN_SMALL_LETTER_SHARP_S) && \
-        (ANYOF_NONBITMAP(node)) && \
-        (ANYOF_FLAGS(node) & ANYOF_LOC_NONBITMAP_FOLD) && \
-        ((end) > (input) + 1) && \
-        isALPHA_FOLD_EQ((input)[0], 's'))
-
+/* Should be removed; maybe deprecated, but not used in CPAN */
 #define SHARP_S_SKIP 2
 
 #define is_utf8_char_buf(buf, buf_end) isUTF8_CHAR(buf, buf_end)
diff --git a/util.c b/util.c
index 9aa8f55..9adbe7a 100644 (file)
--- a/util.c
+++ b/util.c
@@ -571,21 +571,67 @@ S_delimcpy_intern(char *to, const char *toend, const char *from,
     return (char *)from;
 }
 
-char *
-Perl_delimcpy(char *to, const char *toend, const char *from, const char *fromend, int delim, I32 *retlen)
-{
-    PERL_ARGS_ASSERT_DELIMCPY;
 
-    return S_delimcpy_intern(to, toend, from, fromend, delim, retlen, 1);
-}
+/*
+=for apidoc delimcpy_no_escape
 
+Copy a source buffer to a destination buffer, stopping at (but not including)
+the first occurrence of the delimiter byte C<delim>, in the source.  The source
+is the bytes between C<from> and C<fromend> inclusive.  The dest is C<to>
+through C<toend>.
+
+Nothing is copied beyond what fits between C<to> through C<toend>.  If C<delim>
+doesn't occur in the source buffer, as much of the source as will fit is copied
+to the destination.
+
+The actual number of bytes copied is written to C<*retlen>.
+
+If there is room in the destination available after the copy, an extra
+terminating safety NUL byte is written (not included in the returned length).
+
+=cut
+*/
 char *
 Perl_delimcpy_no_escape(char *to, const char *toend, const char *from,
                        const char *fromend, int delim, I32 *retlen)
 {
+    const char * delim_pos;
+    Ptrdiff_t to_len = toend - to;
+
+    /* Only use the minimum of the available source/dest */
+    Ptrdiff_t copy_len = MIN(fromend - from, to_len);
+
     PERL_ARGS_ASSERT_DELIMCPY_NO_ESCAPE;
 
-    return S_delimcpy_intern(to, toend, from, fromend, delim, retlen, 0);
+    assert(copy_len >= 0);
+
+    /* Look for the first delimiter in the portion of the source we are allowed
+     * to look at (determined by the input bounds). */
+    delim_pos = (const char *) memchr(from, delim, copy_len);
+    if (delim_pos) {
+        copy_len = delim_pos - from;
+    } /* else didn't find it: copy all of the source permitted */
+
+    Copy(from, to, copy_len, char);
+
+    if (retlen) {
+        *retlen = copy_len;
+    }
+
+    /* If there is extra space available, add a trailing NUL */
+    if (copy_len < to_len) {
+        to[copy_len] = '\0';
+    }
+
+    return (char *) from + copy_len;
+}
+
+char *
+Perl_delimcpy(char *to, const char *toend, const char *from, const char *fromend, int delim, I32 *retlen)
+{
+    PERL_ARGS_ASSERT_DELIMCPY;
+
+    return S_delimcpy_intern(to, toend, from, fromend, delim, retlen, 1);
 }
 
 /*
@@ -626,23 +672,32 @@ Perl_ninstr(const char *big, const char *bigend, const char *little, const char
     return ninstr(big, bigend, little, lend);
 #else
 
-    if (little >= lend)
-        return (char*)big;
-    {
-        const char first = *little;
-        bigend -= lend - little++;
-    OUTER:
+    if (little >= lend) {
+        return (char*) big;
+    }
+    else {
+        const U8 first = *little;
+        Size_t lsize;
+
+        /* No match can start closer to the end of the haystack than the length
+         * of the needle. */
+        bigend -= lend - little;
+        little++;       /* Look for 'first', then the remainder is in here */
+        lsize = lend - little;
+
         while (big <= bigend) {
-            if (*big++ == first) {
-                const char *s, *x;
-                for (x=big,s=little; s < lend; x++,s++) {
-                    if (*s != *x)
-                        goto OUTER;
-                }
-                return (char*)(big-1);
+            big = (char *) memchr((U8 *) big, first, bigend - big + 1);
+            if (big == NULL || big > bigend) {
+                return NULL;
             }
+
+            if (memEQ(big + 1, little, lsize)) {
+                return (char*) big;
+            }
+            big++;
         }
     }
+
     return NULL;
 
 #endif
@@ -716,9 +771,7 @@ Perl_fbm_compile(pTHX_ SV *sv, U32 flags)
     const U8 *s;
     STRLEN i;
     STRLEN len;
-    U32 frequency = 256;
     MAGIC *mg;
-    PERL_DEB( STRLEN rarest = 0 );
 
     PERL_ARGS_ASSERT_FBM_COMPILE;
 
@@ -770,17 +823,8 @@ Perl_fbm_compile(pTHX_ SV *sv, U32 flags)
        }
     }
 
-    s = (const unsigned char*)(SvPVX_const(sv));       /* deeper magic */
-    for (i = 0; i < len; i++) {
-       if (PL_freq[s[i]] < frequency) {
-           PERL_DEB( rarest = i );
-           frequency = PL_freq[s[i]];
-       }
-    }
     BmUSEFUL(sv) = 100;                        /* Initial value */
     ((XPVNV*)SvANY(sv))->xnv_u.xnv_bm_tail = cBOOL(flags & FBMcf_TAIL);
-    DEBUG_r(PerlIO_printf(Perl_debug_log, "rarest char %c at %" UVuf "\n",
-                         s[rarest], (UV)rarest));
 }
 
 
@@ -1561,7 +1605,6 @@ S_with_queued_errors(pTHX_ SV *ex)
 STATIC bool
 S_invoke_exception_hook(pTHX_ SV *ex, bool warn)
 {
-    dVAR;
     HV *stash;
     GV *gv;
     CV *cv;
@@ -1979,7 +2022,6 @@ Perl_warner(pTHX_ U32  err, const char* pat,...)
 void
 Perl_vwarner(pTHX_ U32  err, const char* pat, va_list* args)
 {
-    dVAR;
     PERL_ARGS_ASSERT_VWARNER;
     if (
         (PL_warnhook == PERL_WARNHOOK_FATAL || ckDEAD(err)) &&
@@ -2094,7 +2136,7 @@ Perl_new_warnings_bitfield(pTHX_ STRLEN *buffer, const char *const bits,
  * For Solaris, setenv() and unsetenv() were introduced in Solaris 9, so
  * testing for HAS UNSETENV is sufficient.
  */
-#  if defined(__CYGWIN__)|| defined(__SYMBIAN32__) || defined(__riscos__) || (defined(__sun) && defined(HAS_UNSETENV)) || defined(PERL_DARWIN)
+#  if defined(__CYGWIN__)|| defined(__riscos__) || (defined(__sun) && defined(HAS_UNSETENV)) || defined(PERL_DARWIN)
 #    define MY_HAS_SETENV
 #  endif
 
@@ -2144,7 +2186,6 @@ version has desirable safeguards
 void
 Perl_my_setenv(pTHX_ const char *nam, const char *val)
 {
-  dVAR;
 #    ifdef __amigaos4__
   amigaos4_obtain_environ(__FUNCTION__);
 #    endif
@@ -2275,7 +2316,6 @@ my_setenv_out:
 void
 Perl_my_setenv(pTHX_ const char *nam, const char *val)
 {
-    dVAR;
     char *envstr;
     const Size_t nlen = strlen(nam);
     Size_t vlen;
@@ -2623,7 +2663,6 @@ Perl_atfork_lock(void)
 #endif
 {
 #if defined(USE_ITHREADS)
-    dVAR;
     /* locks must be held in locking order (if any) */
 #  ifdef USE_PERLIO
     MUTEX_LOCK(&PL_perlio_mutex);
@@ -2649,7 +2688,6 @@ Perl_atfork_unlock(void)
 #endif
 {
 #if defined(USE_ITHREADS)
-    dVAR;
     /* locks must be released in same order as in atfork_lock() */
 #  ifdef USE_PERLIO
     MUTEX_UNLOCK(&PL_perlio_mutex);
@@ -2737,7 +2775,6 @@ Perl_rsignal(pTHX_ int signo, Sighandler_t handler)
     struct sigaction act, oact;
 
 #ifdef USE_ITHREADS
-    dVAR;
     /* only "parent" interpreter can diddle signals */
     if (PL_curinterp != aTHX)
        return (Sighandler_t) SIG_ERR;
@@ -2776,7 +2813,6 @@ int
 Perl_rsignal_save(pTHX_ int signo, Sighandler_t handler, Sigsave_t *save)
 {
 #ifdef USE_ITHREADS
-    dVAR;
 #endif
     struct sigaction act;
 
@@ -2806,7 +2842,6 @@ int
 Perl_rsignal_restore(pTHX_ int signo, Sigsave_t *save)
 {
 #ifdef USE_ITHREADS
-    dVAR;
 #endif
     PERL_UNUSED_CONTEXT;
 #ifdef USE_ITHREADS
@@ -2835,14 +2870,12 @@ Perl_rsignal(pTHX_ int signo, Sighandler_t handler)
 static Signal_t
 sig_trap(int signo)
 {
-    dVAR;
     PL_sig_trapped++;
 }
 
 Sighandler_t
 Perl_rsignal_state(pTHX_ int signo)
 {
-    dVAR;
     Sighandler_t oldsig;
 
 #if defined(USE_ITHREADS) && !defined(WIN32)
@@ -3387,7 +3420,6 @@ void *
 Perl_get_context(void)
 {
 #if defined(USE_ITHREADS)
-    dVAR;
 #  ifdef OLD_PTHREADS_API
     pthread_addr_t t;
     int error = pthread_getspecific(PL_thr_key, &t);
@@ -3408,7 +3440,6 @@ void
 Perl_set_context(void *t)
 {
 #if defined(USE_ITHREADS)
-    dVAR;
 #endif
     PERL_ARGS_ASSERT_SET_CONTEXT;
 #if defined(USE_ITHREADS)
@@ -3428,15 +3459,6 @@ Perl_set_context(void *t)
 
 #endif /* !PERL_GET_CONTEXT_DEFINED */
 
-#if defined(PERL_GLOBAL_STRUCT) && !defined(PERL_GLOBAL_STRUCT_PRIVATE)
-struct perl_vars *
-Perl_GetVars(pTHX)
-{
-    PERL_UNUSED_CONTEXT;
-    return &PL_Vars;
-}
-#endif
-
 char **
 Perl_get_op_names(pTHX)
 {
@@ -3468,7 +3490,6 @@ Perl_get_opargs(pTHX)
 PPADDR_t*
 Perl_get_ppaddr(pTHX)
 {
-    dVAR;
     PERL_UNUSED_CONTEXT;
     return (PPADDR_t*)PL_ppaddr;
 }
@@ -3632,7 +3653,6 @@ void
 Perl_init_tm(pTHX_ struct tm *ptm)     /* see mktime, strftime and asctime */
 {
 #ifdef HAS_TM_TM_ZONE
-    dVAR;
     Time_t now;
     const struct tm* my_tm;
     PERL_UNUSED_CONTEXT;
@@ -3846,13 +3866,18 @@ Perl_my_strftime(pTHX_ const char *fmt, int sec, int min, int hour, int mday, in
 {
 #ifdef HAS_STRFTIME
 
-  /* strftime(), but with a different API so that the return value is a pointer
-   * to the formatted result (which MUST be arranged to be FREED BY THE
-   * CALLER).  This allows this function to increase the buffer size as needed,
-   * so that the caller doesn't have to worry about that.
-   *
-   * Note that yday and wday effectively are ignored by this function, as
-   * mini_mktime() overwrites them */
+/*
+=for apidoc my_strftime
+strftime(), but with a different API so that the return value is a pointer
+to the formatted result (which MUST be arranged to be FREED BY THE
+CALLER).  This allows this function to increase the buffer size as needed,
+so that the caller doesn't have to worry about that.
+
+Note that yday and wday effectively are ignored by this function, as
+mini_mktime() overwrites them
+
+=cut
+ */
 
   char *buf;
   int buflen;
@@ -4349,7 +4374,7 @@ Perl_my_socketpair (int family, int type, int protocol, int fd[2]) {
 #ifdef ECONNABORTED
   errno = ECONNABORTED;        /* This would be the standard thing to do. */
 #elif defined(ECONNREFUSED)
-  errno = ECONNREFUSED;        /* E.g. Symbian does not have ECONNABORTED. */
+  errno = ECONNREFUSED;        /* some OSes might not have ECONNABORTED. */
 #else
   errno = ETIMEDOUT;   /* Desperation time. */
 #endif
@@ -4652,93 +4677,6 @@ Perl_get_hash_seed(pTHX_ unsigned char * const seed_buffer)
 #endif
 }
 
-#ifdef PERL_GLOBAL_STRUCT
-
-#define PERL_GLOBAL_STRUCT_INIT
-#include "opcode.h" /* the ppaddr and check */
-
-struct perl_vars *
-Perl_init_global_struct(pTHX)
-{
-    struct perl_vars *plvarsp = NULL;
-# ifdef PERL_GLOBAL_STRUCT
-    const IV nppaddr = C_ARRAY_LENGTH(Gppaddr);
-    const IV ncheck  = C_ARRAY_LENGTH(Gcheck);
-    PERL_UNUSED_CONTEXT;
-#  ifdef PERL_GLOBAL_STRUCT_PRIVATE
-    /* PerlMem_malloc() because can't use even safesysmalloc() this early. */
-    plvarsp = (struct perl_vars*)PerlMem_malloc(sizeof(struct perl_vars));
-    if (!plvarsp)
-        exit(1);
-#  else
-    plvarsp = PL_VarsPtr;
-#  endif /* PERL_GLOBAL_STRUCT_PRIVATE */
-#  undef PERLVAR
-#  undef PERLVARA
-#  undef PERLVARI
-#  undef PERLVARIC
-#  define PERLVAR(prefix,var,type) /**/
-#  define PERLVARA(prefix,var,n,type) /**/
-#  define PERLVARI(prefix,var,type,init) plvarsp->prefix##var = init;
-#  define PERLVARIC(prefix,var,type,init) plvarsp->prefix##var = init;
-#  include "perlvars.h"
-#  undef PERLVAR
-#  undef PERLVARA
-#  undef PERLVARI
-#  undef PERLVARIC
-#  ifdef PERL_GLOBAL_STRUCT
-    plvarsp->Gppaddr =
-       (Perl_ppaddr_t*)
-       PerlMem_malloc(nppaddr * sizeof(Perl_ppaddr_t));
-    if (!plvarsp->Gppaddr)
-        exit(1);
-    plvarsp->Gcheck  =
-       (Perl_check_t*)
-       PerlMem_malloc(ncheck  * sizeof(Perl_check_t));
-    if (!plvarsp->Gcheck)
-        exit(1);
-    Copy(Gppaddr, plvarsp->Gppaddr, nppaddr, Perl_ppaddr_t); 
-    Copy(Gcheck,  plvarsp->Gcheck,  ncheck,  Perl_check_t); 
-#  endif
-#  ifdef PERL_SET_VARS
-    PERL_SET_VARS(plvarsp);
-#  endif
-#  ifdef PERL_GLOBAL_STRUCT_PRIVATE
-    plvarsp->Gsv_placeholder.sv_flags = 0;
-    memset(plvarsp->Ghash_seed, 0, sizeof(plvarsp->Ghash_seed));
-#  endif
-# undef PERL_GLOBAL_STRUCT_INIT
-# endif
-    return plvarsp;
-}
-
-#endif /* PERL_GLOBAL_STRUCT */
-
-#ifdef PERL_GLOBAL_STRUCT
-
-void
-Perl_free_global_struct(pTHX_ struct perl_vars *plvarsp)
-{
-    int veto = plvarsp->Gveto_cleanup;
-
-    PERL_ARGS_ASSERT_FREE_GLOBAL_STRUCT;
-    PERL_UNUSED_CONTEXT;
-# ifdef PERL_GLOBAL_STRUCT
-#  ifdef PERL_UNSET_VARS
-    PERL_UNSET_VARS(plvarsp);
-#  endif
-    if (veto)
-        return;
-    free(plvarsp->Gppaddr);
-    free(plvarsp->Gcheck);
-#  ifdef PERL_GLOBAL_STRUCT_PRIVATE
-    free(plvarsp);
-#  endif
-# endif
-}
-
-#endif /* PERL_GLOBAL_STRUCT */
-
 #ifdef PERL_MEM_LOG
 
 /* -DPERL_MEM_LOG: the Perl_mem_log_..() is compiled, including
@@ -5177,7 +5115,6 @@ Perl_my_vsnprintf(char *buffer, const Size_t len, const char *format, va_list ap
 void
 Perl_my_clearenv(pTHX)
 {
-    dVAR;
 #if ! defined(PERL_MICRO)
 #  if defined(PERL_IMPLICIT_SYS) || defined(WIN32)
     PerlEnv_clearenv();
@@ -5232,32 +5169,6 @@ Perl_my_clearenv(pTHX)
 #ifdef PERL_IMPLICIT_CONTEXT
 
 
-#  ifdef PERL_GLOBAL_STRUCT_PRIVATE
-
-/* rather than each module having a static var holding its index,
- * use a global array of name to index mappings
- */
-int
-Perl_my_cxt_index(pTHX_ const char *my_cxt_key)
-{
-    dVAR;
-    int index;
-
-    PERL_ARGS_ASSERT_MY_CXT_INDEX;
-
-    for (index = 0; index < PL_my_cxt_index; index++) {
-       const char *key = PL_my_cxt_keys[index];
-       /* try direct pointer compare first - there are chances to success,
-        * and it's much faster.
-        */
-       if ((key == my_cxt_key) || strEQ(key, my_cxt_key))
-           return index;
-    }
-    return -1;
-}
-#  endif
-
-
 /* Implements the MY_CXT_INIT macro. The first time a module is loaded,
 the global PL_my_cxt_index is incremented, and that value is assigned to
 that module's static my_cxt_index (who's address is passed as an arg).
@@ -5266,23 +5177,14 @@ void* slot is available to hang the static data off, by allocating or
 extending the interpreter's PL_my_cxt_list array */
 
 void *
-#  ifdef PERL_GLOBAL_STRUCT_PRIVATE
-Perl_my_cxt_init(pTHX_ const char *my_cxt_key, size_t size)
-#  else
 Perl_my_cxt_init(pTHX_ int *indexp, size_t size)
-#  endif
 {
-    dVAR;
     void *p;
     int index;
 
     PERL_ARGS_ASSERT_MY_CXT_INIT;
 
-#  ifdef PERL_GLOBAL_STRUCT_PRIVATE
-    index = Perl_my_cxt_index(aTHX_ my_cxt_key);
-#  else
     index = *indexp;
-#  endif
     /* do initial check without locking.
      * -1:    not allocated or another thread currently allocating
      *  other: already allocated by another thread
@@ -5290,45 +5192,11 @@ Perl_my_cxt_init(pTHX_ int *indexp, size_t size)
     if (index == -1) {
        MUTEX_LOCK(&PL_my_ctx_mutex);
         /*now a stricter check with locking */
-#  ifdef PERL_GLOBAL_STRUCT_PRIVATE
-        index = Perl_my_cxt_index(aTHX_ my_cxt_key);
-#  else
         index = *indexp;
-#  endif
         if (index == -1)
             /* this module hasn't been allocated an index yet */
-#  ifdef PERL_GLOBAL_STRUCT_PRIVATE
-            index = PL_my_cxt_index++;
-
-        /* Store the index in a global MY_CXT_KEY string to index mapping
-         * table. This emulates the perl-module static my_cxt_index var on
-         * builds which don't allow static vars */
-        if (PL_my_cxt_keys_size <= index) {
-            int old_size = PL_my_cxt_keys_size;
-            int i;
-            if (PL_my_cxt_keys_size) {
-                IV new_size = PL_my_cxt_keys_size;
-                while (new_size <= index)
-                    new_size *= 2;
-                PL_my_cxt_keys = (const char **)PerlMemShared_realloc(
-                                        PL_my_cxt_keys,
-                                        new_size * sizeof(const char *));
-                PL_my_cxt_keys_size = new_size;
-            }
-            else {
-                PL_my_cxt_keys_size = 16;
-                PL_my_cxt_keys = (const char **)PerlMemShared_malloc(
-                            PL_my_cxt_keys_size * sizeof(const char *));
-            }
-            for (i = old_size; i < PL_my_cxt_keys_size; i++) {
-                PL_my_cxt_keys[i] = 0;
-            }
-        }
-        PL_my_cxt_keys[index] = my_cxt_key;
-#  else
             *indexp = PL_my_cxt_index++;
         index = *indexp;
-#  endif
        MUTEX_UNLOCK(&PL_my_ctx_mutex);
     }
 
@@ -6552,7 +6420,7 @@ Perl_dump_c_backtrace(pTHX_ PerlIO* fp, int depth, int skip)
 
 #endif /* #ifdef USE_C_BACKTRACE */
 
-#ifdef PERL_TSA_ACTIVE
+#if defined(USE_ITHREADS) && defined(I_PTHREAD)
 
 /* pthread_mutex_t and perl_mutex are typedef equivalent
  * so casting the pointers is fine. */
@@ -6574,7 +6442,6 @@ int perl_tsa_mutex_destroy(perl_mutex* mutex)
 
 #endif
 
-
 #ifdef USE_DTRACE
 
 /* log a sub call or return */
diff --git a/util.h b/util.h
index 6294e59..6bf7d9e 100644 (file)
--- a/util.h
+++ b/util.h
        (((f)[0] && (f)[1] == ':')              /* drive name */        \
         || ((f)[0] == '\\' && (f)[1] == '\\')  /* UNC path */  \
         ||     ((f)[3] == ':'))                                /* volume name, currently only sys */
-#elif defined(DOSISH) || defined(__SYMBIAN32__)
+#elif defined(DOSISH)
 #  define PERL_FILE_IS_ABSOLUTE(f) \
        (*(f) == '/'                                                    \
         || ((f)[0] && (f)[1] == ':'))          /* drive name */
-#else  /* NEITHER DOSISH NOR SYMBIANISH */
+#else  /* NOT DOSISH */
 #  define PERL_FILE_IS_ABSOLUTE(f)     (*(f) == '/')
 #endif
 
index d1376be..fc1ba68 100644 (file)
@@ -28,7 +28,7 @@ print "Extracting $file (with variable substitutions)\n";
 print OUT <<"!GROK!THIS!";
 $Config{startperl}
     eval 'exec $Config{perlpath} -S \$0 \${1+"\$@"}'
-       if \$running_under_some_shell;
+       if 0; # ^ Run only under a shell
 !GROK!THIS!
 
 use File::Spec;
index f40c1c4..f3c430f 100644 (file)
@@ -28,7 +28,7 @@ print "Extracting $file (with variable substitutions)\n";
 print OUT <<"!GROK!THIS!";
 $Config{startperl}
     eval 'exec $Config{perlpath} -S \$0 \${1+"\$@"}'
-       if \$running_under_some_shell;
+       if 0; # ^ Run only under a shell
 !GROK!THIS!
 
 use File::Spec;
index 863ff8e..7908197 100644 (file)
@@ -31,7 +31,7 @@ print "Extracting $file (with variable substitutions)\n";
 print OUT <<"!GROK!THIS!";
 $Config{startperl}
     eval 'exec $Config{perlpath} -S \$0 \${1+"\$@"}'
-       if \$running_under_some_shell;
+       if 0; # ^ Run only under a shell
 !GROK!THIS!
 
 use File::Spec;
index caa908f..a6c1404 100644 (file)
@@ -28,7 +28,7 @@ print "Extracting $file (with variable substitutions)\n";
 print OUT <<"!GROK!THIS!";
 $Config{startperl}
     eval 'exec $Config{perlpath} -S \$0 \${1+"\$@"}'
-       if \$running_under_some_shell;
+       if 0; # ^ Run only under a shell
 !GROK!THIS!
 
 use File::Spec;
index eece12d..afa53c2 100644 (file)
@@ -32,7 +32,7 @@ print "Extracting $file (with variable substitutions)\n";
 print OUT <<"!GROK!THIS!";
 $Config{startperl}
     eval 'exec $Config{perlpath} -S \$0 \${1+"\$@"}'
-       if \$running_under_some_shell;
+       if 0; # ^ Run only under a shell
 !GROK!THIS!
 
 # In the following, perl variables are not expanded during extraction.
index fca1765..50e9a00 100644 (file)
@@ -28,7 +28,7 @@ print "Extracting $file (with variable substitutions)\n";
 print OUT <<"!GROK!THIS!";
 $Config{startperl}
     eval 'exec $Config{perlpath} -S \$0 \${1+"\$@"}'
-       if \$running_under_some_shell;
+       if 0; # ^ Run only under a shell
 !GROK!THIS!
 
 # In the following, perl variables are not expanded during extraction.
index a1e7b55..1a9af21 100644 (file)
@@ -28,7 +28,7 @@ print "Extracting $file (with variable substitutions)\n";
 print OUT <<"!GROK!THIS!";
 $Config{startperl}
     eval 'exec $Config{perlpath} -S \$0 \${1+"\$@"}'
-       if \$running_under_some_shell;
+       if 0; # ^ Run only under a shell
 !GROK!THIS!
 
 use File::Spec;
index efd8e23..b1ee56d 100644 (file)
@@ -28,7 +28,7 @@ print "Extracting $file (with variable substitutions)\n";
 print OUT <<"!GROK!THIS!";
 $Config{startperl}
     eval 'exec $Config{perlpath} -S \$0 \${1+"\$@"}'
-       if \$running_under_some_shell;
+       if 0; # ^ Run only under a shell
 !GROK!THIS!
 
 use File::Spec;
index e1e9ee2..fc88595 100644 (file)
@@ -28,7 +28,7 @@ print "Extracting $file (with variable substitutions)\n";
 print OUT <<"!GROK!THIS!";
 $Config{startperl}
     eval 'exec $Config{perlpath} -S \$0 \${1+"\$@"}'
-       if \$running_under_some_shell;
+       if 0; # ^ Run only under a shell
 !GROK!THIS!
 
 # In the following, perl variables are not expanded during extraction.
index f78b63c..13afa7c 100644 (file)
@@ -47,7 +47,7 @@ my $extract_version = sprintf("%vd", $^V);
 print OUT <<"!GROK!THIS!";
 $Config{startperl}
     eval 'exec $Config{perlpath} -S \$0 \${1+"\$@"}'
-       if \$running_under_some_shell;
+       if 0; # ^ Run only under a shell
 
 my \$config_tag1 = '$extract_version - $Config{cf_time}';
 
index f175caa..597ed6f 100644 (file)
@@ -30,7 +30,7 @@ print "Extracting $file (with variable substitutions)\n";
 print OUT <<"!GROK!THIS!";
 $Config{'startperl'}
     eval 'exec $Config{'perlpath'} -S \$0 \${1+"\$@"}'
-        if \$running_under_some_shell;
+        if 0; # ^ Run only under a shell
 !GROK!THIS!
 
 print OUT "\n# perlivp $^V\n";
index 4e012d3..7be2196 100644 (file)
@@ -28,7 +28,7 @@ print "Extracting $file (with variable substitutions)\n";
 print OUT <<"!GROK!THIS!";
 $Config{startperl}
     eval 'exec $Config{perlpath} -S \$0 \${1+"\$@"}'
-       if \$running_under_some_shell;
+       if 0; # ^ Run only under a shell
 !GROK!THIS!
 
 use File::Spec;
index 39a1fb9..9826c78 100644 (file)
@@ -31,7 +31,7 @@ print "Extracting $file (with variable substitutions)\n";
 print OUT <<"!GROK!THIS!";
 $Config{startperl}
     eval 'exec $Config{perlpath} -S \$0 \${1+"\$@"}'
-       if \$running_under_some_shell;
+       if 0; # ^ Run only under a shell
 !GROK!THIS!
 
 # In the following, perl variables are not expanded during extraction.
index eafd8f6..1cc362f 100644 (file)
@@ -28,7 +28,7 @@ print "Extracting $file (with variable substitutions)\n";
 print OUT <<"!GROK!THIS!";
 $Config{startperl}
     eval 'exec $Config{perlpath} -S \$0 \${1+"\$@"}'
-       if \$running_under_some_shell;
+       if 0; # ^ Run only under a shell
 !GROK!THIS!
 
 use File::Spec;
index 61b8efc..4d59f31 100644 (file)
@@ -28,7 +28,7 @@ print "Extracting $file (with variable substitutions)\n";
 print OUT <<"!GROK!THIS!";
 $Config{startperl}
     eval 'exec $Config{perlpath} -S \$0 \${1+"\$@"}'
-       if \$running_under_some_shell;
+       if 0; # ^ Run only under a shell
 !GROK!THIS!
 
 use File::Spec;
index 5dbf61b..383bd05 100644 (file)
@@ -28,7 +28,7 @@ print "Extracting $file (with variable substitutions)\n";
 print OUT <<"!GROK!THIS!";
 $Config{startperl}
     eval 'exec $Config{perlpath} -S \$0 \${1+"\$@"}'
-       if \$running_under_some_shell;
+       if 0; # ^ Run only under a shell
 !GROK!THIS!
 
 use File::Spec;
index 8daefe2..a58f38a 100644 (file)
@@ -28,7 +28,7 @@ print "Extracting $file (with variable substitutions)\n";
 print OUT <<"!GROK!THIS!";
 $Config{startperl}
     eval 'exec $Config{perlpath} -S \$0 \${1+"\$@"}'
-       if \$running_under_some_shell;
+       if 0; # ^ Run only under a shell
 !GROK!THIS!
 
 use File::Spec;
index b8b0830..e37d5f0 100644 (file)
@@ -28,7 +28,7 @@ print "Extracting $file (with variable substitutions)\n";
 print OUT <<"!GROK!THIS!";
 $Config{startperl}
     eval 'exec $Config{perlpath} -S \$0 \${1+"\$@"}'
-       if \$running_under_some_shell;
+       if 0; # ^ Run only under a shell
 !GROK!THIS!
 
 use File::Spec;
index afdbb48..60f92dc 100644 (file)
@@ -28,7 +28,7 @@ print "Extracting $file (with variable substitutions)\n";
 print OUT <<"!GROK!THIS!";
 $Config{startperl}
     eval 'exec $Config{perlpath} -S \$0 \${1+"\$@"}'
-       if \$running_under_some_shell;
+       if 0; # ^ Run only under a shell
 !GROK!THIS!
 
 use File::Spec;
index f01ed12..28cf04b 100644 (file)
@@ -38,7 +38,7 @@ print "Extracting $file (with variable substitutions)\n";
 print OUT <<"!GROK!THIS!";
 $Config{startperl}
     eval 'exec $Config{perlpath} -S \$0 \${1+"\$@"}'
-       if \$running_under_some_shell;
+       if 0; # ^ Run only under a shell
 !GROK!THIS!
 
 print OUT <<'!NO!SUBS!';
index 82887ac..ca828e8 100644 (file)
@@ -28,7 +28,7 @@ print "Extracting $file (with variable substitutions)\n";
 print OUT <<"!GROK!THIS!";
 $Config{startperl}
     eval 'exec $Config{perlpath} -S \$0 \${1+"\$@"}'
-       if \$running_under_some_shell;
+       if 0; # ^ Run only under a shell
 !GROK!THIS!
 
 use File::Spec;
index 450275b..2a04e62 100644 (file)
@@ -28,7 +28,7 @@ print "Extracting $file (with variable substitutions)\n";
 print OUT <<"!GROK!THIS!";
 $Config{startperl}
     eval 'exec $Config{perlpath} -S \$0 \${1+"\$@"}'
-       if \$running_under_some_shell;
+       if 0; # ^ Run only under a shell
 !GROK!THIS!
 
 use File::Spec;
index 0fbdf83..6232671 100644 (file)
@@ -28,7 +28,7 @@ print "Extracting $file (with variable substitutions)\n";
 print OUT <<"!GROK!THIS!";
 $Config{startperl}
     eval 'exec $Config{perlpath} -S \$0 \${1+"\$@"}'
-       if \$running_under_some_shell;
+       if 0; # ^ Run only under a shell
 !GROK!THIS!
 
 use File::Spec;
index 9491a5b..e5954f6 100644 (file)
@@ -227,14 +227,14 @@ FULLLIBS2 = $(LIBS2)|$(THRLIBS1)|$(THRLIBS2)
 #### End of system configuration section. ####
 
 c0 = $(MALLOC_C) av.c caretx.c deb.c doio.c doop.c dquote.c dump.c globals.c gv.c hv.c mro_core.c
-c1 = mg.c locale.c mathoms.c miniperlmain.c numeric.c op.c pad.c perl.c perlapi.c perlio.c
+c1 = mg.c locale.c mathoms.c miniperlmain.c numeric.c op.c pad.c perl.c perlio.c
 c2 = perly.c pp.c pp_ctl.c pp_hot.c pp_pack.c pp_sort.c pp_sys.c regcomp.c regexec.c reentr.c
 c3 = run.c scope.c sv.c taint.c time64.c toke.c universal.c utf8.c util.c vms.c keywords.c
 c = $(c0) $(c1) $(c2) $(c3)
 
 obj0 = perl$(O)
 obj1 = $(MALLOC_O) av$(O) caretx$(O) deb$(O) doio$(O) doop$(O) dquote$(O) dump$(O) mro_core$(O) globals$(O) gv$(O) hv$(O)
-obj2 = keywords$(O) locale$(O) mathoms$(O) mg$(O) miniperlmain$(O) numeric$(O) op$(O) pad$(O) perlapi$(O) perlio$(O) 
+obj2 = keywords$(O) locale$(O) mathoms$(O) mg$(O) miniperlmain$(O) numeric$(O) op$(O) pad$(O) perlio$(O) 
 obj3 = perly$(O) pp$(O) pp_ctl$(O) pp_hot$(O) reentr$(O) pp_pack$(O) pp_sort$(O) pp_sys$(O) regcomp$(O) 
 obj4 = regexec$(O) run$(O) scope$(O) sv$(O) taint$(O) time64$(O) toke$(O) universal$(O) utf8$(O) util$(O) vms$(O)
 
@@ -313,7 +313,7 @@ utils : $(utils1) $(utils2) $(utils3) $(utils4) $(utils5)
 extra.pods : miniperl
        @ @extra_pods.com
 
-PERLDELTA_CURRENT = [.pod]perl5330delta.pod
+PERLDELTA_CURRENT = [.pod]perl5331delta.pod
 
 $(PERLDELTA_CURRENT) : [.pod]perldelta.pod
        Copy/NoConfirm/Log $(MMS$SOURCE) $(PERLDELTA_CURRENT)
@@ -532,7 +532,7 @@ printconfig :
         @ @[.vms]myconfig "$(CC)" "$(CFLAGS)" "$(LINKFLAGS)" "$(LIBS1)" "$(FULLLIBS2)" "$(EXT)" "$(DBG)"
 
 # The following files are generated automatically
-#       embed.pl:       proto.h embed.h embedvar.h perlapi.h perlapi.c
+#       embed.pl:       proto.h embed.h embedvar.h
 #       opcode.pl:      opcode.h opnames.h pp_proto.h
 #       regcomp.pl:     regnodes.h
 #       warnings.pl:    warnings.h lib/warnings.pm
@@ -663,8 +663,6 @@ op$(O) : op.c $(h)
        $(CC) $(CORECFLAGS) $(MMS$SOURCE)
 perl$(O) : perl.c git_version.h $(h)
        $(CC) $(CORECFLAGS) $(MMS$SOURCE)
-perlapi$(O) : perlapi.c $(h)
-       $(CC) $(CORECFLAGS) $(MMS$SOURCE)
 perlio$(O) : perlio.c config.h $(h)
        $(CC) $(CORECFLAGS) $(MMS$SOURCE)
 perlmain$(O) : perlmain.c $(h)
index 1c61149..5635450 100644 (file)
--- a/vms/vms.c
+++ b/vms/vms.c
@@ -12889,7 +12889,7 @@ mod2fname(pTHX_ CV *cv)
   int max_name_len = 39;
   AV *in_array = (AV *)SvRV(ST(0));
 
-  num_entries = av_tindex(in_array);
+  num_entries = av_count(in_array);
 
   /* All the names start with PL_. */
   strcpy(ultimate_name, "PL_");
@@ -12898,7 +12898,7 @@ mod2fname(pTHX_ CV *cv)
   Zero(work_name, sizeof(work_name), char);
 
   /* Run through the entries and build up a working name */
-  for(counter = 0; counter <= num_entries; counter++) {
+  for(counter = 0; counter < num_entries; counter++) {
     /* If it's not the first name then tack on a __ */
     if (counter) {
       my_strlcat(work_name, "__", sizeof(work_name));
diff --git a/vutil.h b/vutil.h
index ffeb05c..ecd627e 100644 (file)
--- a/vutil.h
+++ b/vutil.h
@@ -75,14 +75,6 @@ Perl_ck_warner(pTHX_ U32 err, const char* pat, ...)
 #  endif
 #endif
 
-#define PERL_VERSION_DECIMAL(r,v,s) (r*1000000 + v*1000 + s)
-#define PERL_DECIMAL_VERSION \
-       PERL_VERSION_DECIMAL(PERL_REVISION,PERL_VERSION,PERL_SUBVERSION)
-#define PERL_VERSION_LT(r,v,s) \
-       (PERL_DECIMAL_VERSION < PERL_VERSION_DECIMAL(r,v,s))
-#define PERL_VERSION_GE(r,v,s) \
-       (PERL_DECIMAL_VERSION >= PERL_VERSION_DECIMAL(r,v,s))
-
 #if PERL_VERSION_LT(5,15,4)
 #  define ISA_VERSION_OBJ(v) (sv_isobject(v) && sv_derived_from(v,"version"))
 #else
index 3f1c9ac..a2578dd 100644 (file)
@@ -64,7 +64,7 @@ INST_TOP := $(INST_DRV)\perl
 # versioned installation can be obtained by setting INST_TOP above to a
 # path that includes an arbitrary version string.
 #
-#INST_VER      := \5.33.0
+#INST_VER      := \5.33.1
 
 #
 # Comment this out if you DON'T want your perl installation to have
@@ -1065,7 +1065,6 @@ MICROCORE_SRC     =               \
                ..\mg.c         \
                ..\numeric.c    \
                ..\pad.c        \
-               ..\perlapi.c    \
                ..\perly.c      \
                ..\pp_sort.c    \
                ..\reentr.c     \
@@ -1739,13 +1738,12 @@ utils: $(HAVEMINIPERL) ..\utils\Makefile
        copy ..\README.qnx      ..\pod\perlqnx.pod
        copy ..\README.riscos   ..\pod\perlriscos.pod
        copy ..\README.solaris  ..\pod\perlsolaris.pod
-       copy ..\README.symbian  ..\pod\perlsymbian.pod
        copy ..\README.synology ..\pod\perlsynology.pod
        copy ..\README.tru64    ..\pod\perltru64.pod
        copy ..\README.tw       ..\pod\perltw.pod
        copy ..\README.vos      ..\pod\perlvos.pod
        copy ..\README.win32    ..\pod\perlwin32.pod
-       copy ..\pod\perldelta.pod ..\pod\perl5330delta.pod
+       copy ..\pod\perldelta.pod ..\pod\perl5331delta.pod
        $(MINIPERL) -I..\lib $(PL2BAT) $(UTILS)
        $(MINIPERL) -I..\lib ..\autodoc.pl ..
        $(MINIPERL) -I..\lib ..\pod\perlmodlib.PL -q ..
@@ -1843,16 +1841,15 @@ distclean: realclean
        -if exist $(LIBDIR)\Win32API rmdir /s /q $(LIBDIR)\Win32API
        -if exist $(LIBDIR)\XS rmdir /s /q $(LIBDIR)\XS
        -cd $(PODDIR) && del /f *.html *.bat roffitall \
-           perl5330delta.pod perlaix.pod perlamiga.pod perlandroid.pod \
+           perl5331delta.pod perlaix.pod perlamiga.pod perlandroid.pod \
            perlapi.pod perlbs2000.pod perlcn.pod perlcygwin.pod \
            perldos.pod perlfreebsd.pod perlhaiku.pod perlhpux.pod \
            perlhurd.pod perlintern.pod perlirix.pod perljp.pod perlko.pod \
            perllinux.pod perlmacos.pod perlmacosx.pod perlmodlib.pod \
            perlnetware.pod perlopenbsd.pod perlos2.pod perlos390.pod \
            perlos400.pod perlplan9.pod perlqnx.pod perlriscos.pod \
-           perlsolaris.pod perlsymbian.pod perlsynology.pod perltoc.pod \
-           perltru64.pod perltw.pod perluniprops.pod perlvos.pod \
-           perlwin32.pod
+           perlsolaris.pod perlsynology.pod perltoc.pod perltru64.pod \
+           perltw.pod perluniprops.pod perlvos.pod perlwin32.pod
        -cd ..\utils && del /f h2ph splain perlbug pl2pm h2xs \
            perldoc perlivp libnetcfg enc2xs encguess piconv cpan *.bat \
            xsubpp pod2html instmodsh json_pp prove ptar ptardiff ptargrep shasum corelist zipdetails
index ae8a425..7598a90 100644 (file)
@@ -38,7 +38,7 @@ INST_TOP      = $(INST_DRV)\perl
 # versioned installation can be obtained by setting INST_TOP above to a
 # path that includes an arbitrary version string.
 #
-#INST_VER      = \5.33.0
+#INST_VER      = \5.33.1
 
 #
 # Comment this out if you DON'T want your perl installation to have
@@ -774,7 +774,6 @@ MICROCORE_SRC       =               \
                ..\op.c         \
                ..\pad.c        \
                ..\perl.c       \
-               ..\perlapi.c    \
                ..\perly.c      \
                ..\pp.c         \
                ..\pp_ctl.c     \
@@ -1259,13 +1258,12 @@ utils: $(PERLEXE) ..\utils\Makefile
        copy ..\README.qnx      ..\pod\perlqnx.pod
        copy ..\README.riscos   ..\pod\perlriscos.pod
        copy ..\README.solaris  ..\pod\perlsolaris.pod
-       copy ..\README.symbian  ..\pod\perlsymbian.pod
        copy ..\README.synology ..\pod\perlsynology.pod
        copy ..\README.tru64    ..\pod\perltru64.pod
        copy ..\README.tw       ..\pod\perltw.pod
        copy ..\README.vos      ..\pod\perlvos.pod
        copy ..\README.win32    ..\pod\perlwin32.pod
-       copy ..\pod\perldelta.pod ..\pod\perl5330delta.pod
+       copy ..\pod\perldelta.pod ..\pod\perl5331delta.pod
        cd ..\win32
        $(PERLEXE) $(PL2BAT) $(UTILS)
        $(MINIPERL) -I..\lib ..\autodoc.pl ..
@@ -1364,16 +1362,15 @@ distclean: realclean
        -if exist $(LIBDIR)\Win32API rmdir /s /q $(LIBDIR)\Win32API
        -if exist $(LIBDIR)\XS rmdir /s /q $(LIBDIR)\XS
        -cd $(PODDIR) && del /f *.html *.bat roffitall \
-           perl5330delta.pod perlaix.pod perlamiga.pod perlandroid.pod \
+           perl5331delta.pod perlaix.pod perlamiga.pod perlandroid.pod \
            perlapi.pod perlbs2000.pod perlcn.pod perlcygwin.pod \
            perldos.pod perlfreebsd.pod perlhaiku.pod perlhpux.pod \
            perlhurd.pod perlintern.pod perlirix.pod perljp.pod perlko.pod \
            perllinux.pod perlmacos.pod perlmacosx.pod perlmodlib.pod \
            perlnetware.pod perlopenbsd.pod perlos2.pod perlos390.pod \
            perlos400.pod perlplan9.pod perlqnx.pod perlriscos.pod \
-           perlsolaris.pod perlsymbian.pod perlsynology.pod perltoc.pod \
-           perltru64.pod perltw.pod perluniprops.pod perlvos.pod \
-           perlwin32.pod
+           perlsolaris.pod perlsynology.pod perltoc.pod perltru64.pod \
+           perltw.pod perluniprops.pod perlvos.pod perlwin32.pod
        -cd ..\utils && del /f h2ph splain perlbug pl2pm h2xs \
            perldoc perlivp libnetcfg enc2xs encguess piconv cpan streamzip *.bat \
            xsubpp pod2html instmodsh json_pp prove ptar ptardiff ptargrep shasum corelist zipdetails
index 443f590..bb16ac3 100644 (file)
@@ -2,8 +2,8 @@
        if 0;   # In case running under some shell
 
 require 5;
+use ExtUtils::PL2Bat;
 use Getopt::Std;
-use Config;
 
 $0 =~ s|.*[/\\]||;
 
@@ -17,9 +17,6 @@ Usage:  $0 [-h]
         -o otherargs    arguments to invoke perl with in generated file
                             other than when run from Windows NT.  Defaults
                             to '-x -S "%0" %1 %2 %3 %4 %5 %6 %7 %8 %9'.
-        -a argstring    arguments to invoke perl with in generated file
-                            ignoring operating system (for compatibility
-                            with previous pl2bat versions).
         -u              update files that may have already been processed
                             by (some version of) pl2bat.
         -w              include "-w" on the /^#!.*perl/ line (unless
@@ -33,92 +30,30 @@ EOT
 
 my %OPT = ();
 warn($usage), exit(0) if !getopts('whun:o:a:s:',\%OPT) or $OPT{'h'};
-# NOTE: %0 is already enclosed in double quotes by cmd.exe, as appropriate
-$OPT{'n'} = '-x -S %0 %*' unless exists $OPT{'n'};
-$OPT{'o'} = '-x -S "%0" %1 %2 %3 %4 %5 %6 %7 %8 %9' unless exists $OPT{'o'};
-$OPT{'s'} = '/\\.plx?/' unless exists $OPT{'s'};
-$OPT{'s'} = ($OPT{'s'} =~ m#^/([^/]*[^/\$]|)\$?/?$# ? $1 : "\Q$OPT{'s'}\E");
-
-my $head;
-if(  defined( $OPT{'a'} )  ) {
-    $head = <<EOT;
-       \@rem = '--*-Perl-*--
-       \@echo off
-       perl $OPT{'a'}
-       goto endofperl
-       \@rem ';
-EOT
-} else {
-    $head = <<EOT;
-       \@rem = '--*-Perl-*--
-       \@echo off
-       if "%OS%" == "Windows_NT" goto WinNT
-       perl $OPT{'o'}
-       goto endofperl
-       :WinNT
-       perl $OPT{'n'}
-       if NOT "%COMSPEC%" == "%SystemRoot%\\system32\\cmd.exe" goto endofperl
-       if %errorlevel% == 9009 echo You do not have Perl in your PATH.
-       if errorlevel 1 goto script_failed_so_exit_with_non_zero_val 2>nul
-       goto endofperl
-       \@rem ';
-EOT
+die '-a option has been removed' if $OPT{a};
+
+my %key_for = (
+       n => 'ntargs',
+       o => 'otherargs',
+       a => 'argstring',
+       u => 'update',
+       w => 'usewarnings'
+);
+
+my %args;
+for my $old_key (keys %key_for) {
+       if (exists $OPT{$old_key}) {
+               $args{$key_for{$old_key}} = $OPT{$old_key};
+       }
 }
-$head =~ s/^\t//gm;
-my $headlines = 2 + ($head =~ tr/\n/\n/);
-my $tail = "\n__END__\n:endofperl\n";
-
-@ARGV = ('-') unless @ARGV;
-
-foreach ( @ARGV ) {
-    process($_);
+if (exists $OPT{s}) {
+       $args{strip_suffix} = $OPT{'s'} =~ m#^/([^/]*[^/\$]|)\$?/?$# ? qr/$1/ : qr/\Q$OPT{'s'}\E/;
 }
 
-sub process {
- my( $file )= @_;
-    my $myhead = $head;
-    my $linedone = 0;
-    my $taildone = 0;
-    my $linenum = 0;
-    my $skiplines = 0;
-    my $line;
-    my $start= $Config{startperl};
-    $start= "#!perl"   unless  $start =~ /^#!.*perl/;
-    open( FILE, '<', $file ) or die "$0: Can't open $file: $!";
-    @file = <FILE>;
-    foreach $line ( @file ) {
-       $linenum++;
-       if ( $line =~ /^:endofperl\b/ ) {
-           if(  ! exists $OPT{'u'}  ) {
-               warn "$0: $file has already been converted to a batch file!\n";
-               return;
-           }
-           $taildone++;
-       }
-       if ( not $linedone and $line =~ /^#!.*perl/ ) {
-           if(  exists $OPT{'u'}  ) {
-               $skiplines = $linenum - 1;
-               $line .= "#line ".(1+$headlines)."\n";
-           } else {
-               $line .= "#line ".($linenum+$headlines)."\n";
-           }
-           $linedone++;
-       }
-       if ( $line =~ /^#\s*line\b/ and $linenum == 2 + $skiplines ) {
-           $line = "";
-       }
-    }
-    close( FILE );
-    $file =~ s/$OPT{'s'}$//oi;
-    $file .= '.bat' unless $file =~ /\.bat$/i or $file =~ /^-$/;
-    open( FILE, '>', $file ) or die "Can't open $file: $!";
-    print FILE $myhead;
-    print FILE $start, ( $OPT{'w'} ? " -w" : "" ),
-              "\n#line ", ($headlines+1), "\n" unless $linedone;
-    print FILE @file[$skiplines..$#file];
-    print FILE $tail unless $taildone;
-    close( FILE );
+for my $file (@ARGV) {
+       pl2bat(%args, in => $file);
 }
+
 __END__
 
 =head1 NAME
index 6db31ac..67c9034 100644 (file)
@@ -45,7 +45,7 @@ INST_TOP      *= $(INST_DRV)\perl
 # versioned installation can be obtained by setting INST_TOP above to a
 # path that includes an arbitrary version string.
 #
-#INST_VER      *= \5.33.0
+#INST_VER      *= \5.33.1
 
 #
 # Comment this out if you DON'T want your perl installation to have
@@ -1017,7 +1017,6 @@ MICROCORE_SRC     =               \
                ..\mg.c         \
                ..\numeric.c    \
                ..\pad.c        \
-               ..\perlapi.c    \
                ..\perly.c      \
                ..\pp_sort.c    \
                ..\reentr.c     \
@@ -1658,13 +1657,12 @@ utils: $(HAVEMINIPERL) ..\utils\Makefile
        copy ..\README.qnx      ..\pod\perlqnx.pod
        copy ..\README.riscos   ..\pod\perlriscos.pod
        copy ..\README.solaris  ..\pod\perlsolaris.pod
-       copy ..\README.symbian  ..\pod\perlsymbian.pod
        copy ..\README.synology ..\pod\perlsynology.pod
        copy ..\README.tru64    ..\pod\perltru64.pod
        copy ..\README.tw       ..\pod\perltw.pod
        copy ..\README.vos      ..\pod\perlvos.pod
        copy ..\README.win32    ..\pod\perlwin32.pod
-       copy ..\pod\perldelta.pod ..\pod\perl5330delta.pod
+       copy ..\pod\perldelta.pod ..\pod\perl5331delta.pod
        $(MINIPERL) -I..\lib $(PL2BAT) $(UTILS)
        $(MINIPERL) -I..\lib ..\autodoc.pl ..
        $(MINIPERL) -I..\lib ..\pod\perlmodlib.PL -q ..
@@ -1762,16 +1760,15 @@ distclean: realclean
        -if exist $(LIBDIR)\Win32API rmdir /s /q $(LIBDIR)\Win32API
        -if exist $(LIBDIR)\XS rmdir /s /q $(LIBDIR)\XS
        -cd $(PODDIR) && del /f *.html *.bat roffitall \
-           perl5330delta.pod perlaix.pod perlamiga.pod perlandroid.pod \
+           perl5331delta.pod perlaix.pod perlamiga.pod perlandroid.pod \
            perlapi.pod perlbs2000.pod perlcn.pod perlcygwin.pod \
            perldos.pod perlfreebsd.pod perlhaiku.pod perlhpux.pod \
            perlhurd.pod perlintern.pod perlirix.pod perljp.pod perlko.pod \
            perllinux.pod perlmacos.pod perlmacosx.pod perlmodlib.pod \
            perlnetware.pod perlopenbsd.pod perlos2.pod perlos390.pod \
            perlos400.pod perlplan9.pod perlqnx.pod perlriscos.pod \
-           perlsolaris.pod perlsymbian.pod perlsynology.pod perltoc.pod \
-           perltru64.pod perltw.pod perluniprops.pod perlvos.pod \
-           perlwin32.pod
+           perlsolaris.pod perlsynology.pod perltoc.pod perltru64.pod \
+           perltw.pod perluniprops.pod perlvos.pod perlwin32.pod
        -cd ..\utils && del /f h2ph splain perlbug pl2pm h2xs \
            perldoc perlivp libnetcfg enc2xs encguess piconv cpan streamzip *.bat \
            xsubpp pod2html instmodsh json_pp prove ptar ptardiff ptargrep shasum corelist zipdetails
index 755477c..9948a1a 100644 (file)
@@ -175,18 +175,6 @@ RunPerl(int argc, char **argv, char **env)
     PerlInterpreter *my_perl, *new_perl = NULL;
     bool use_environ = (env == environ);
 
-#ifdef PERL_GLOBAL_STRUCT
-#define PERLVAR(prefix,var,type) /**/
-#define PERLVARA(prefix,var,type) /**/
-#define PERLVARI(prefix,var,type,init) PL_Vars.prefix##var = init;
-#define PERLVARIC(prefix,var,type,init) PL_Vars.prefix##var = init;
-#include "perlvars.h"
-#undef PERLVAR
-#undef PERLVARA
-#undef PERLVARI
-#undef PERLVARIC
-#endif
-
     PERL_SYS_INIT(&argc,&argv);
 
     if (!(my_perl = perl_alloc()))
index 51f49e1..ece3805 100644 (file)
@@ -64,6 +64,7 @@ POD = perl.pod        \
        perl5303delta.pod       \
        perl5320delta.pod       \
        perl5330delta.pod       \
+       perl5331delta.pod       \
        perl561delta.pod        \
        perl56delta.pod \
        perl581delta.pod        \
@@ -223,6 +224,7 @@ MAN = perl.man      \
        perl5303delta.man       \
        perl5320delta.man       \
        perl5330delta.man       \
+       perl5331delta.man       \
        perl561delta.man        \
        perl56delta.man \
        perl581delta.man        \
@@ -382,6 +384,7 @@ HTML = perl.html    \
        perl5303delta.html      \
        perl5320delta.html      \
        perl5330delta.html      \
+       perl5331delta.html      \
        perl561delta.html       \
        perl56delta.html        \
        perl581delta.html       \
@@ -541,6 +544,7 @@ TEX = perl.tex      \
        perl5303delta.tex       \
        perl5320delta.tex       \
        perl5330delta.tex       \
+       perl5331delta.tex       \
        perl561delta.tex        \
        perl56delta.tex \
        perl581delta.tex        \
index 491c204..9719f14 100644 (file)
@@ -1031,7 +1031,6 @@ win32_closedir(DIR *dirp)
 DllExport DIR *
 win32_dirp_dup(DIR *const dirp, CLONE_PARAMS *const param)
 {
-    dVAR;
     PerlInterpreter *const from = param->proto_perl;
     PerlInterpreter *const to   = (PerlInterpreter *)PERL_GET_THX;
 
@@ -1685,7 +1684,6 @@ win32_longpath(char *path)
 static void
 out_of_memory(void)
 {
-    dVAR;
 
     if (PL_curinterp)
        croak_no_mem();
@@ -2241,7 +2239,6 @@ win32_async_check(pTHX)
 DllExport DWORD
 win32_msgwait(pTHX_ DWORD count, LPHANDLE handles, DWORD timeout, LPDWORD resultp)
 {
-    int retry = 0;
     /* We may need several goes at this - so compute when we stop */
     FT_t ticks = {0};
     unsigned __int64 endtime = timeout;
@@ -2264,13 +2261,12 @@ win32_msgwait(pTHX_ DWORD count, LPHANDLE handles, DWORD timeout, LPDWORD result
      * from another process (msctf.dll doing IPC among its instances, VS debugger
      * causes msctf.dll to be loaded into Perl by kernel), see [perl #33096].
      */
-    while (ticks.ft_i64 <= endtime || retry) {
+    while (ticks.ft_i64 <= endtime) {
        /* if timeout's type is lengthened, remember to split 64b timeout
         * into multiple non-infinity runs of MWFMO */
        DWORD result = MsgWaitForMultipleObjects(count, handles, FALSE,
                                                (DWORD)(endtime - ticks.ft_i64),
                                                QS_POSTMESSAGE|QS_TIMER|QS_SENDMESSAGE);
-        retry = 0;
        if (resultp)
           *resultp = result;
        if (result == WAIT_TIMEOUT) {
@@ -2286,7 +2282,12 @@ win32_msgwait(pTHX_ DWORD count, LPHANDLE handles, DWORD timeout, LPDWORD result
        if (result == WAIT_OBJECT_0 + count) {
            /* Message has arrived - check it */
            (void)win32_async_check(aTHX);
-            retry = 1;
+
+            /* retry */
+            if (ticks.ft_i64 > endtime)
+                endtime = ticks.ft_i64;
+
+            continue;
        }
        else {
           /* Not timeout or message - one of handles is ready */
@@ -4726,7 +4727,6 @@ win32_csighandler(int sig)
 void
 Perl_sys_intern_init(pTHX)
 {
-    dVAR;
     int i;
 
     w32_perlshell_tokens       = NULL;
@@ -4776,7 +4776,6 @@ Perl_sys_intern_init(pTHX)
 void
 Perl_sys_intern_clear(pTHX)
 {
-    dVAR;
 
     Safefree(w32_perlshell_tokens);
     Safefree(w32_perlshell_vec);
index c0ee5a6..00d052a 100644 (file)
@@ -60,9 +60,6 @@
 #  define prime_env_iter()
 #  define WIN32IO_IS_STDIO             /* don't pull in custom stdio layer */
 #  define WIN32SCK_IS_STDSCK           /* don't pull in custom wsock layer */
-#  ifdef PERL_GLOBAL_STRUCT
-#    error PERL_GLOBAL_STRUCT cannot be defined with PERL_IMPLICIT_SYS
-#  endif
 #endif
 
 #ifdef __GNUC__
@@ -231,8 +228,6 @@ struct utsname {
 #  define WIN32_NO_REGISTRY_M_(x) x,
 #endif
 
-#define PERL_NO_FORCE_LINK             /* no need for PL_force_link_funcs */
-
 #define ENV_IS_CASELESS
 
 #define PIPESOCK_MODE  "b"             /* pipes, sockets default to binmode */
index 9af3aa3..9ac964c 100644 (file)
@@ -104,9 +104,6 @@ typedef HANDLE perl_mutex;
     } STMT_END
 
 
-#define THREAD_CREATE(t, f)    Perl_thread_create(t, f)
-#define THREAD_POST_CREATE(t)  NOOP
-
 /* XXX Docs mention that the RTL versions of thread creation routines
  * should be used, but that advice only seems applicable when the RTL
  * is not in a DLL.  RTL DLLs seem to do all of the init/deinit required
@@ -124,15 +121,12 @@ typedef HANDLE perl_mutex;
 #  include <process.h>
 #  if defined (_MSC_VER)
 #    define THREAD_RET_TYPE    unsigned __stdcall
-#    define THREAD_RET_CAST(p) ((unsigned)(p))
 #  else
      /* CRTDLL.DLL doesn't allow a return value from thread function! */
 #    define THREAD_RET_TYPE    void __cdecl
-#    define THREAD_RET_CAST(p) ((void)(thr->i.retv = (void *)(p)))
 #  endif
 #else  /* !USE_RTL_THREAD_API */
 #  define THREAD_RET_TYPE      DWORD WINAPI
-#  define THREAD_RET_CAST(p)   ((DWORD)(p))
 #endif /* !USE_RTL_THREAD_API */
 
 typedef THREAD_RET_TYPE thread_func_t(void *);