# 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
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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)
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
opmini) ;;
pad) ;;
perl) ;;
- perlapi) ;;
perlmain) ;;
perly) ;;
pp) ;;
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=''
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'
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=''
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'
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'
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'
strerror_r_proto='0'
strings='/usr/include/string.h'
submit=''
-subversion='0'
+subversion='1'
sysman='/usr/share/man/man1'
tail=''
tar=''
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'
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
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=''
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'
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=''
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'
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'
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'
strerror_r_proto='0'
strings='/usr/include/string.h'
submit=''
-subversion='0'
+subversion='1'
sysman='/usr/share/man/man1'
tail=''
tar=''
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'
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
#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
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
=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
=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
=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
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.
=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.)
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
#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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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)
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
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
"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"
}
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'
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
$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
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`
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
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)
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
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)
# 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
# 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
..\numeric.c \
..\op.c \
..\perl.c \
- ..\perlapi.c \
..\perly.c \
..\pp.c \
..\pp_ctl.c \
* 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 "" /**/
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.
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);
//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
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
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
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.
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
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.
'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
],
},
+ '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],
},
'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),
},
'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
},
'JSON::PP' => {
- 'DISTRIBUTION' => 'ISHIGAKI/JSON-PP-4.04.tar.gz',
+ 'DISTRIBUTION' => 'ISHIGAKI/JSON-PP-4.05.tar.gz',
'FILES' => q[cpan/JSON-PP],
},
},
'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),
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' => {
},
'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' => {
},
'Socket' => {
- 'DISTRIBUTION' => 'PEVANS/Socket-2.029.tar.gz',
+ 'DISTRIBUTION' => 'PEVANS/Socket-2.030.tar.gz',
'FILES' => q[cpan/Socket],
},
show_results process_options files_to_modules
finish_tap_output
reload_manifest);
-our $VERSION = 0.13;
+our $VERSION = 0.14;
require Exporter;
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 {
#
# 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
+ 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
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
"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",
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=''
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=''
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'
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'
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'
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'
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'
stdio_stream_array=''
strerror_r_proto='0'
submit=''
-subversion='0'
+subversion='1'
sysman='/usr/share/man/man1'
sysroot=''
tail=''
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'
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.
* 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
$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},
$module_to_file{$module} = $File::Find::name;
},
'os2/OS2',
- 'symbian/ext',
'lib',
'ext',
'cpan',
=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>
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
#
# 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;
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} : "..";
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
# 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";
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
lib/feature.pm
keywords.h
keywords.c
+ MANIFEST
opcode.h
opnames.h
pp_proto.h
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
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";
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;
XXX Generate this with:
- perl Porting/acknowledgements.pl v5.33.0..HEAD
+ perl Porting/acknowledgements.pl v5.33.1..HEAD
=head1 Reporting Bugs
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";
=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
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
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
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 );
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?
=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
: # 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
如果你用一般的文字编辑器阅览这份文件, 请忽略文中奇特的注记字符.
这份文件是以 POD (简明文件格式) 写成; 这种格式是为了能让人直接阅读,
-而特别设计的. 关于此格式的进一步信息, 请参考 perlpod 线上文件.
+而特别设计的. 关于此格式的进一步信息, 请参考 perlpod 在线文档.
=head1 NAME
欢迎来到 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 编码
在最后一列例子里, "谆" 的第二个字节与 "谆" 的第一个字节结合成 EUC-CN
码的 "蛔"; "谆" 的第二个字节则与 "教" 的第一个字节结合成 "唤".
-这解决了以前 EUC-CN 码比对处理上常见的问题.
+这解决了以前 EUC-CN 码匹配处理上常见的问题.
=head2 额外的中文编码
big5-simp Big5 繁体中文与 Unicode 简体中文互转
gbk-trad GBK 简体中文与 Unicode 繁体中文互转
-若想在 GBK 与 Big5 之间互转, 请参考该模块内附的 b2g.pl 与 g2b.pl 两支程序,
+若想在 GBK 与 Big5 之间互转, 请参考该模块内附的 b2g.pl 与 g2b.pl 两个程序,
或在程序内使用下列写法:
use Encode::HanConvert;
=item L<https://www.perl.com/>
-由 Perl 基金会所营运的文章辑录
+由 Perl 基金会运营的文章辑录
=item L<https://www.cpan.org/>
=item L<https://www.cl.cam.ac.uk/%7Emgk25/unicode.html>
-Unix/Linux 上的 UTF-8 及 Unicode 答客问
+Unix/Linux 上的 UTF-8 及 Unicode 常见问题解答
=back
Audrey Tang (唐凤) E<lt>audreyt@audreyt.orgE<gt>
+Sizhe Zhao E<lt>prc.zhao@outlook.comE<gt>
+
=cut
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
NetWare/Makefile
plan9/mkfile
- symbian/sanity.pl symbian/sisify.pl
hints/uwin.sh
vms/descrip_mms.template
win32/Makefile win32/makefile.mk
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
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
=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',
=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
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
+++ /dev/null
-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
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.
#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)
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())
# 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_
static I32 S_do_amigaos_exec3(pTHX_ const char *incmd, int fd, int do_report)
{
- dVAR;
const char **argv, **a;
char *s;
char *buf;
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;
$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";
}
}
# 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/;
=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
*/
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:
*/
#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);
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
--- /dev/null
+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
--- /dev/null
+#!/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;
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);
=head1 VERSION
-2.16 - released August 31 2018.
+2.17 - released July 18 2020.
=head1 SYNOPSIS
=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
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];
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
#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>
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;
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;
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 }; $@ ? '' : '!' };
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 }; $@ ? '' : '!' };
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 }; $@ ? '' : '!' };
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.
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;
#
################################################################################
+use strict;
+use warnings;
+
+our %Config;
BEGIN {
require Test::More; import Test::More;
require Config; import Config;
# 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;
#
################################################################################
+use strict;
+use warnings;
+
+our %Config;
BEGIN {
if ($ENV{'PERL_CORE'}) {
chdir 't' if -d 't';
}
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
#
################################################################################
+use strict;
+use warnings;
+
+our %Config;
BEGIN {
if ($ENV{'PERL_CORE'}) {
chdir 't' if -d 't';
}
}
-use strict;
-
my @pods;
# find all potential pod files
#
################################################################################
+use strict;
+use warnings;
+
+our %Config;
BEGIN {
if ($ENV{'PERL_CORE'}) {
chdir 't' if -d 't';
}
}
-use strict;
-
my @modules = qw( IPC::SysV IPC::Msg IPC::Semaphore IPC::SharedMem );
eval 'use Pod::Coverage 0.10';
#
################################################################################
+use strict;
+use warnings;
+
+our %Config;
BEGIN {
if ($ENV{'PERL_CORE'}) {
chdir 't' if -d 't';
#
################################################################################
+use strict;
+use warnings;
+
+our %Config;
BEGIN {
if ($ENV{'PERL_CORE'}) {
chdir 't' if -d 't';
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);
=head1 VERSION
- 4.04
+ 4.05
=head1 DESCRIPTION
fallback => 1,
);
-$JSON::PP::Boolean::VERSION = '4.04';
+$JSON::PP::Boolean::VERSION = '4.05';
1;
# 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; }
# copied over from JSON::XS and modified to use JSON::PP
use strict;
+use warnings;
use Test::More;
BEGIN { plan tests => 9 };
# copied over from JSON::XS and modified to use JSON::PP
use strict;
+use warnings;
use Test::More;
BEGIN { plan tests => 35 };
# copied over from JSON::XS and modified to use JSON::PP
use strict;
+use warnings;
use Test::More;
BEGIN { plan tests => 76 + 2 };
# Authors: don
use strict;
+use warnings;
use Test;
# main
# copied over from JSON::XS and modified to use JSON::PP
use strict;
+use warnings;
use Test::More;
BEGIN { plan tests => 9 };
use JSON::PP;
my ($js,$obj,$json);
-my $pc = new JSON::PP;
+my $pc = JSON::PP->new;
$obj = {foo => "bar"};
$js = $pc->encode($obj);
use Test::More;
use strict;
+use warnings;
use utf8;
BEGIN { plan tests => 17 };
BEGIN { $ENV{PERL_JSON_BACKEND} = 0; }
#########################
my ($js,$obj,$str);
-my $pc = new JSON::PP;
+my $pc = JSON::PP->new;
$obj = {test => qq|abc"def|};
$str = $pc->encode($obj);
# 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; }
my ($js,$obj);
-my $pc = new JSON::PP;
+my $pc = JSON::PP->new;
$js = q|{}|;
use Test::More;
use strict;
+use warnings;
BEGIN { plan tests => 6 };
BEGIN { $ENV{PERL_JSON_BACKEND} = 0; }
#########################
my ($js,$obj);
-my $pc = new JSON::PP;
+my $pc = JSON::PP->new;
$js = '{"foo":0}';
$obj = $pc->decode($js);
use Test::More;
use strict;
+use warnings;
BEGIN { plan tests => 1 };
BEGIN { $ENV{PERL_JSON_BACKEND} = 0; }
use Test::More;
use strict;
+use warnings;
BEGIN { plan tests => 8 + 2 };
BEGIN { $ENV{PERL_JSON_BACKEND} = 0; }
#########################
my ($js,$obj);
-my $pc = new JSON::PP;
+my $pc = JSON::PP->new;
$js = q|[-12.34]|;
$obj = $pc->decode($js);
# copied over from JSON::XS and modified to use JSON::PP
use strict;
+use warnings;
use Test::More;
BEGIN { plan tests => 16 };
# copied over from JSON::XS and modified to use JSON::PP
use strict;
+use warnings;
use Test::More;
BEGIN { plan tests => 11 };
# copied over from JSON::XS and modified to use JSON::PP
use strict;
+use warnings;
use Test::More;
BEGIN { plan tests => 4 };
# copied over from JSON::XS and modified to use JSON::PP
use strict;
+use warnings;
use Test::More;
BEGIN { plan tests => 4 };
# copied over from JSON::XS and modified to use JSON::PP
use strict;
+use warnings;
use Test::More;
BEGIN { plan tests => 2 };
# copied over from JSON::XS and modified to use JSON::PP
use strict;
+use warnings;
use Test::More;
BEGIN { plan tests => 8 };
{
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, $_;
{
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");
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;
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;
# 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
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);
# copied over from JSON::XS and modified to use JSON::PP
use strict;
+use warnings;
use Test::More;
BEGIN { plan tests => 24576 };
use Test::More;
use strict;
+use warnings;
BEGIN { plan tests => 3 };
BEGIN { $ENV{PERL_JSON_BACKEND} = 0; }
use JSON::PP;
\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
\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
\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
# decode on Perl 5.005, 5.6, 5.8 or later
#
use strict;
+use warnings;
use Test::More;
BEGIN { plan tests => 6 };
# decode on Perl 5.005, 5.6, 5.8 or later
#
use strict;
+use warnings;
use Test::More;
BEGIN { plan tests => 7 };
use strict;
+use warnings;
use Test::More;
BEGIN { plan tests => 9 };
: '';
-my $json = new JSON::PP;
+my $json = JSON::PP->new;
$json->allow_nonref->allow_bignum(1);
$json->convert_blessed->allow_blessed;
use strict;
+use warnings;
use Test::More;
BEGIN { plan tests => 3 };
use strict;
+use warnings;
use Test::More tests => 4;
BEGIN {
package Foo;
use strict;
+use warnings;
use overload (
'eq' => sub { 0 },
'""' => sub { $_[0] },
package Bar;
use strict;
+use warnings;
use overload (
'eq' => sub { 0 },
'""' => sub { $_[0] },
use strict;
+use warnings;
use Test::More tests => 8;
BEGIN {
use strict;
+use warnings;
use Test::More;
BEGIN { plan tests => 2 };
use strict;
+use warnings;
use Test::More tests => 4;
use JSON::PP;
use Test::More;
use strict;
+use warnings;
BEGIN { $ENV{PERL_JSON_BACKEND} = 0; }
BEGIN { $ENV{PERL_JSON_PP_USE_B} = 0 }
use JSON::PP;
use strict;
+use warnings;
use Test::More;
BEGIN { $ENV{PERL_JSON_BACKEND} = 0; }
use JSON::PP;
# 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; }
use strict;
+use warnings;
use Test::More;
BEGIN { plan tests => 1 };
use strict;
+use warnings;
use Test::More;
BEGIN { plan tests => 4 };
BEGIN { $ENV{PERL_JSON_BACKEND} = 0; }
use strict;
+use warnings;
use Test::More;
BEGIN { $ENV{PERL_JSON_BACKEND} = 0; }
use JSON::PP;
use strict;
+use warnings;
use Test::More;
BEGIN { plan tests => 1 };
{ use 5.006; }
use strict;
-our $VERSION = 1.59_01;
+our $VERSION = 1.59_02;
use Config;
# -- 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;
#
# -- Jarkko Hietaniemi, April 1997
+use strict;
+use warnings;
use Test::More tests => 153;
use Math::Trig 1.18;
$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";
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;
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;
## 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$/ ) {
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";
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.
=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
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.
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.
=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
=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
## 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'});
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
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.
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
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;
@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 );
## 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';
$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 {
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");
package Socket;
use strict;
-{ use 5.006001; }
+{ use v5.6.1; }
-our $VERSION = '2.029';
+our $VERSION = '2.030';
=head1 NAME
#!./perl
+use v5.6.1;
+use strict;
+use warnings;
+
+our %Config;
+my $has_alarm;
BEGIN {
require Config; import Config;
if ($Config{'extensions'} !~ /\bSocket\b/ &&
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;
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) {
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) {
+use v5.6.1;
use strict;
use warnings;
use Test::More tests => 31;
+use v5.6.1;
use strict;
use warnings;
use Test::More tests => 13;
+use v5.6.1;
use strict;
use warnings;
use Test::More;
+use v5.6.1;
use strict;
use warnings;
use Test::More;
#!./perl
+use v5.6.1;
use strict;
use warnings;
#!./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'};
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
mbstate_t mbs;
char *oldlocale;
int wlen = sizeof(wchar_t)*strlen(buf);
- dVAR;
LOCALE_LOCK;
if (!IN_BYTES) {
mbstate_t mbs;
char *oldlocale;
- dVAR;
LOCALE_LOCK;
wchar_t *wpath = (wchar_t *) safemalloc(sizeof(wchar_t)*len);
wchar_t *wbuf = (wchar_t *) safemalloc(wlen);
char *oldlocale;
- dVAR;
LOCALE_LOCK;
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;
=head1 VERSION
-Version 2.174
+Version 2.175
=head1 SEE ALSO
# include "ppport.h"
#endif
-#if PERL_VERSION < 8
+#if PERL_VERSION_LT(5,8,0)
# define DD_USE_OLD_ID_FORMAT
#endif
* 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)
# 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)
# 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)
* 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 */
* 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
/* 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)
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)
{
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 */
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("*{");
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] == '@') {
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);
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
}
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, ",");
}
sv_catpvs(retval, ")");
else
sv_catpvs(retval, "]");
- SvREFCNT_dec(ixsv);
- SvREFCNT_dec(totpad);
- Safefree(iname);
}
else if (realtype == SVt_PVHV) {
SV *totpad, *newapad;
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] = '$';
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);
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,
else {
nticks = num_q(key, klen);
New(0, nkey_buffer, klen+nticks+3, char);
+ SAVEFREEPV(nkey_buffer);
nkey = nkey_buffer;
nkey[0] = '\'';
if (nticks)
nlen = klen;
sv_catpvn(retval, nkey, klen);
}
- sname = newSVsv(iname);
+
+ sname = sv_2mortal(newSVsv(iname));
sv_catpvn(sname, nkey, nlen);
sv_catpvs(sname, "}");
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++] = ' ';
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),
sv_catpvs(retval, ")");
else
sv_catpvs(retval, "}");
- SvREFCNT_dec(iname);
- SvREFCNT_dec(totpad);
}
else if (realtype == SVt_PVCV) {
if (style->deparse) {
STRLEN plen, pticks;
if (style->indent >= 2) {
- SvREFCNT_dec(apad);
apad = blesspad;
}
sv_catpvs(retval, ", '");
sv_catpvs(retval, "()");
}
}
- SvREFCNT_dec(ipad);
}
else {
STRLEN i;
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)
}
#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);
seenhv = NULL;
name = sv_newmortal();
- retval = newSVpvs("");
+ retval = newSVpvs_flags("", SVs_TEMP);
if (SvROK(href)
&& (hv = (HV*)SvRV((SV*)href))
&& SvTYPE(hv) == SVt_PVHV) {
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
* 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;
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) {
}
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 */
else
croak("Call to new() method failed to return HASH ref");
if (gimme != G_ARRAY)
- XPUSHs(sv_2mortal(retval));
+ XPUSHs(retval);
}
SV *
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)
=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,
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.
=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
=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)
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
=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
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
=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.
# 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;
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)',
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
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;
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;
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;
}
# 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',
# 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);
}
}
-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{$_}) {
$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'}
$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;
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 .= " $_";
#
# 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.
#
################################################################################
#
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
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.
use strict;
use vars qw($VERSION $data);
-$VERSION = '3.57';
+$VERSION = '3.60';
sub _init_data
{
__DATA__
#if 0
-<<'SKIP';
+my $void = <<'SKIP';
#endif
/*
----------------------------------------------------------------------
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';
+#!/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
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>)) {
}
}
-# 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;
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
EOF
print $out sort sort_api_lines @entries;
close $out or die "Close failed: $!";
+print "$outfile regenerated\n";
-use Data::Dumper;
-$Data::Dumper::Sortkeys=1;
################################################################################
#
# mkppport_fnc.pl -- generate ppport.fnc
# 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
# 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
################################################################################
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;[^/]*$;;;
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: $!";
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;
:
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:
-: 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;
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();
}
#!/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
#
################################################################################
#
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 ) : () }
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__
# 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
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;
}
}
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
'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
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";
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
# 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
# '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;
}
}
--- /dev/null
+#!/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;
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";
use vars '@ISA';
require DynaLoader;
@ISA = qw(DynaLoader);
-bootstrap Devel::PPPort;
+Devel::PPPort->bootstrap;
package main;
type => 'int',
cast => 'int',
block => '{1;}',
+ number => '1',
);
# Certain return types are instead considered void
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;'],
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
# #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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
newAV # T
newAVREF # T
newBINOP # T
+Newc # Z added by devel/scanprov
newCONDOP # T
newCVREF # T
newFORM # T
newSLICEOP # T
newSTATEOP # T
newSUB # T
+NEWSV # Z added by devel/scanprov
newSV # T
newSViv # T
newSVOP # 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
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
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
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
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
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
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
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
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
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
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
5.004001
magic_clear_all_env # F added by devel/scanprov
+REFF # Z added by devel/scanprov
+REFFL # Z added by devel/scanprov
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
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
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
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
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
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
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
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
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
5.005002
+PERL_CALLCONV # Z added by devel/scanprov
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
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
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
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
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
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
WARN_DEPRECATED # E
WARN_DIGIT # E
warner # E
+warner_nocontext # U
WARN_EXEC # E
WARN_EXITING # E
WARN_GLOB # 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
WARN_SEMICOLON # E
WARN_SEVERE # E
WARN_SIGNAL # E
+WARNsize # Z added by devel/scanprov
WARN_SUBSTR # E
WARN_SYNTAX # E
WARN_TAINT # 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
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
5.007000
+NO_LOCALE # Z added by devel/scanprov
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
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
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
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
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)
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)
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
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
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
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
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
_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
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
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
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
XCPT_TRY_START # E
XPUSHmortal # E
ZeroD # E
-find_uninit_var # F added by devel/scanprov
-make_trie # F added by devel/scanprov
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
5.020000
+REG_EXTFLAGS_NAME_SIZE # Z added by devel/scanprov
+REG_INTFLAGS_NAME_SIZE # Z added by devel/scanprov
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
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
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
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
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
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
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
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
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
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
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
5.023001
+FEATURE_BUNDLE_523 # Z added by devel/scanprov
+PERL_COPY_ON_WRITE # Z added by devel/scanprov
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
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
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
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
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
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
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
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
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
5.025001
op_parent # U
+PERL_OP_PARENT # Z added by devel/scanprov
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
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
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
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
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
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
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
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
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
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
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
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
5.025011
+DEFAULT_INC_EXCLUDES_DOT # K added by devel/scanprov
5.025012
+PERL_UTIL_H # Z added by devel/scanprov
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
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
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
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
5.027005
+HAS_MEMRCHR # K added by devel/scanprov
+isGV_or_RVCV # Z added by devel/scanprov
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
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
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
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
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
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
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
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
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
5.029003
+Ptrdiff_t # Z added by devel/scanprov
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
5.029005
+NANYOFM # Z added by devel/scanprov
output_posix_warnings # F added by devel/scanprov
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
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
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
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
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
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
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
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
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
5.031005
-gimme_V # U
+gimme_V # F added by devel/scanprov
isALPHANUMERIC_utf8 # A
isALPHA_utf8 # A
isASCII_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
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
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
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
--- /dev/null
+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
--- /dev/null
+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
--- /dev/null
+5.031011
+PERL_IS_GCC # Z added by devel/scanprov
--- /dev/null
+5.032000
+HAS_SOCKADDR_STORAGE # K added by devel/scanprov
+rck_elide_nothing # F added by devel/scanprov
--- /dev/null
+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
--- /dev/null
+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
: 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
: 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 \
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)
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
|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
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
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
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
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
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
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
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
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
+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
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
-Ap |GV* |gv_fetchfile |NN const char* name
-Ap |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
|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
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
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
AdiTp |I32 |foldEQ |NN const char* a|NN const char* b|I32 len
AdmP |I32 |ibcmp_locale |NN const char* a|NN const char* b|I32 len
AiTpd |I32 |foldEQ_locale |NN const char* a|NN const char* b|I32 len
-Am |I32 |ibcmp_utf8 |NN const char *s1|NULLOK char **pe1|UV l1 \
+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 \
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
|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
|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
#endif
: Used in perly.y
p |OP* |jmaybe |NN OP *o
-: Used in pp.c
+: Used in pp.c
pP |I32 |keyword |NN const char *name|I32 len|bool all_keywords
#if defined(PERL_IN_OP_C)
S |void |inplace_aassign |NN OP* o
S |OP* |listkids |NULLOK OP* o
#endif
p |OP* |list |NULLOK OP* o
-Apd |void |load_module|U32 flags|NN SV* name|NULLOK SV* ver|...
-Ap |void |vload_module|U32 flags|NN SV* name|NULLOK SV* ver|NULLOK va_list* args
+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
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
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
#endif
: Used in op.c and pp_sys.c
p |int |mode_from_discipline|NULLOK const char* s|STRLEN len
-Ap |const char* |moreswitches |NN const char* s
-Ap |NV |my_atof |NN const char *s
+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
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
#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
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\
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 \
: 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)
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
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
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 \
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
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
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
#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
: 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 \
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 \
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
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\
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
|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
|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 \
|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 \
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|...
-Ap |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
#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
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
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
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
-Am |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
: 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
-Ap |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
#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
|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 \
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
|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
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 \
#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
|NN const char **desc_p
#endif
-Ap |GV* |gv_fetchpvn_flags|NN const char* name|STRLEN len|I32 flags|const svtype sv_type
-Ap |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
#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
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
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
#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.
|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
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:
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
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
ok($file =~ /cop/i);
BEGIN {
- if ("$]" < 5.006000) {
+ if (ivers($]) < ivers('5.006000')) {
skip("Perl version too early", 8);
exit;
}
use Config;
-if ("$]" < '5.004') {
+if (ivers($]) < ivers('5.004')) {
skip 'skip: No newSVpvf support', 5;
exit;
}
=provides
-GV_NOADD_MASK
-gv_fetchpvn_flags
-GvSVn
-isGV_with_GP
-gv_fetchsv
-get_cvn_flags
-gv_init_pvn
+__UNDEFINED__
=implementation
#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)
# 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
{
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 = "";
# 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;
=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
# 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)), \
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");
}
# 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';
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;
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;
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;
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;
=tests plan => 102
-BEGIN { if ("$]" < '5.006') { $^W = 0; } }
+BEGIN { if (ivers($]) < ivers('5.006')) { $^W = 0; } }
my $warn;
my $die;
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;
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";
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"') };
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 {
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;
__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)))))
__UNDEFINED__ av_tindex AvFILL
__UNDEFINED__ av_top_index AvFILL
+__UNDEFINED__ av_count(av) (AvFILL(av)+1)
__UNDEFINED__ ERRSV get_sv("@",FALSE)
#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)
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);
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);
ok(@s == 1);
is($s[0], "test");
-if ("$]" >= 5.008001) {
+if (ivers($]) >= ivers("5.008001")) {
require utf8;
ok(utf8::is_utf8($s[0]));
}
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__;
(index($4, 'V') >= 0 ? ( unverified => 1 ) : ()),
} )
: die "invalid spec: $_" } qw(
-__PERL_API__
+__ALL_ELEMENTS__
);
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;
}
# 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*$};
$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;
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;
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)
{
$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",
diag("Uses $func");
}
}
- $warnings += hint($func);
+ $warnings += (hint($func) || 0);
}
unless ($opt{quiet}) {
$hint =~ s/^/ /mg;
print " --- hint for $func ---\n", $hint;
}
- $rv;
+ $rv || 0;
}
sub usage
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
=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
=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
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:
$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);
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);
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);
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;
$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' : '');
__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) \
# 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
=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);
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");
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 "# $_";
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 {
=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))
$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();
$warning = '';
Devel::PPPort::ckWARN();
-ok("$]" >= 5.004 ? $warning =~ /^ckWARN bar:42/ : $warning eq '');
+ok(ivers($]) >= ivers("5.004") ? $warning =~ /^ckWARN bar:42/ : $warning eq '');
:
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:
-: 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
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;
}
{
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)";
}
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
}
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($_)];
}
flags => { map { $_, 1 } $flags =~ /./g },
ret => $ret,
args => \@args,
- cond => ppcond(\@pps),
+ cond => $cond,
};
$func[-1]{'ppport_fnc'} = 1 if $file =~ /ppport\.fnc/;
}
#
# 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
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';
}
aTHXR # T
aTHXR_ # T
av_clear # T
+av_count # T
av_extend # T
av_fetch # T
av_fill # 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
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
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
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
gv_fetchmethod # T
gv_fetchpv # T
gv_fetchpvn_flags # T
+gv_fetchpvs # T
gv_fetchsv # T
gv_fullname # T
gv_fullname3 # 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
hv_ksplit # T
hv_magic # T
HvNAME # T
+HvNAME_get # T
+HvNAMELEN_get # T
hv_store # T
hv_store_ent # T
hv_stores # T
IN_PERL_COMPILETIME # T
instr # T
INT2PTR # T
-INTSIZE # T
+INTMAX_C # T
isALNUM # T
isALNUM_A # T
isALNUMC # T
isGRAPH # T
isGRAPH_A # T
isGRAPH_L1 # T
+isGV_with_GP # T
isIDCONT # T
isIDCONT_A # T
isIDCONT_L1 # 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
mg_get # T
mg_magical # T
mg_set # T
-moreswitches # T
Move # T
MoveD # T
mPUSHi # T
mPUSHp # T
mPUSHs # T
mPUSHu # T
+MUTABLE_PTR # T
+MUTABLE_SV # T
mXPUSHi # T
mXPUSHn # T
mXPUSHp # T
Nullcv # T
Nullhv # T
Nullsv # T
+NUM2PTR # T
NVef # T
NVff # T
NVgf # 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
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
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
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
PL_ppaddr # T
PL_rsfp # T
PL_rsfp_filters # T
+PL_signals # T
PL_stack_base # T
PL_stack_sp # T
PL_statcache # 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
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
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
SvGETMAGIC # T
sv_gets # T
SV_GMAGIC # T
-sv_grow # T
SvGROW # T
SV_HAS_TRAILING_NUL # T
SV_IMMEDIATE_UNREF # T
sv_mortalcopy_flags # T
SV_MUTABLE_RETURN # T
sv_newmortal # T
-sv_newref # T
SvNIOK # T
SvNIOK_off # T
SvNIOKp # T
SvNVx # T
SvOK # T
SvOOK # T
+SvOOK_off # T
SvPOK # T
SvPOK_off # T
SvPOK_on # 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
sv_setsv_nomg # T
sv_setuv # T
sv_setuv_mg # T
+SvSHARED_HASH # T
SV_SMAGIC # T
SvSTASH # T
SvSTASH_set # T
SvTRUE_nomg # T
SvTRUEx # T
SvTYPE # T
+svtype # X added by devel/scanprov
sv_unmagic # T
sv_unmagicext # T
sv_unref # 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
UTF8_MAXBYTES_CASE # T
UVCHR_IS_INVARIANT # T
UVCHR_SKIP # T
+UV_MAX # T
+UV_MIN # T
UVof # T
UVSIZE # T
UVTYPE # 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
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
5.004000
-ARCHNAME # E
block_end # E (Perl_block_end)
block_gimme # U
block_start # E (Perl_block_start)
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
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
vmess # U
vnewSVpvf # U
warner # U
+warner_nocontext # U
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
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
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
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
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
vform # U
vwarn # U
vwarner # U
+warn_nocontext # U
isPSXSPC_LC # U
isUTF8_CHAR # U
is_utf8_string # U
-NVSIZE # E
save_generic_pvref # U
SvGAMAGIC # U
utf8_to_bytes # U
5.007001
bytes_from_utf8 # U
-despatch_signals # U
do_openn # U
gv_handler # U
isALNUM_LC_uvchr # 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
mini_mktime # U
my_strftime # U
op_null # U
-OSVERS # E
realloc # U
sv_catpvn_flags # U
sv_catsv_flags # 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
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)
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
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
5.009003
-av_arylen_p # U
-ckwarn # U
-ckwarn_d # U
dMULTICALL # E
doref # U
gv_const_sv # 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
5.009004
gv_name_set # U
+GV_NOTQUAL # E
hv_copy_hints_hv # U
my_vsnprintf # U
newXS_flags # 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)
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
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
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
5.011002
-CHARBITS # E
ENTER_with_name # U
LEAVE_with_name # U
lex_bufutf8 # 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
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
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
5.013008
-foldEQ_latin1 # U
parse_arithexpr # U
parse_fullexpr # U
parse_listexpr # U
5.015003
GV_ADDMG # E
+gv_fetchsv_nomg # U
+GV_NO_SVGMAGIC # E
5.017001
alloccopstash # U
+CopSTASHPV_set # A
isWORDCHAR_LC_uvchr # U
isXDIGIT_LC_uvchr # U
SvREFCNT_dec_NN # U
+SvTRUE_NN # U
+SvTRUE_nomg_NN # U
5.021006
-DOUBLEKIND # E
newDEFSVOP # U
op_convert_list # U
WARN_LOCALE # E
5.023000
-DOUBLEINFBYTES # E
-DOUBLEMANTBITS # E
-DOUBLENANBYTES # E
-LONGDBLINFBYTES # E
-LONGDBLMANTBITS # E
-LONGDBLNANBYTES # E
-NVMANTBITS # E
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
5.027008
-cx_popgiven # U
-cx_popwhen # U
-cx_pushgiven # U
-cx_pushwhen # U
newWHENOP # U
WARN_EXPERIMENTAL__SCRIPT_RUN # E
5.031005
-gimme_V # U
isALPHANUMERIC_utf8 # A
isALPHA_utf8 # A
isASCII_utf8 # A
5.031007
-csighandler # E (Perl_csighandler)
-csighandler1 # U
-csighandler3 # E
-perly_sighandler # E
sv_isa_sv # U
WARN_EXPERIMENTAL__ISA # E
--- /dev/null
+5.033001
+dMY_CXT_SV # E
--- /dev/null
+5.033002
+PERL_VERSION_EQ # E
+PERL_VERSION_NE # E
+++ /dev/null
-################################################################################
-#
-# !!!!! 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;
-
+++ /dev/null
-################################################################################
-#
-# !!!!! 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);
-
+++ /dev/null
-################################################################################
-#
-# !!!!! 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());
-
+++ /dev/null
-################################################################################
-#
-# !!!!! 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);
-
+++ /dev/null
-################################################################################
-#
-# !!!!! 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 $_);
-}
-
+++ /dev/null
-################################################################################
-#
-# !!!!! 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' }
-
+++ /dev/null
-################################################################################
-#
-# !!!!! 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 }
-}
-
+++ /dev/null
-################################################################################
-#
-# !!!!! 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));
-}
-
+++ /dev/null
-################################################################################
-#
-# !!!!! 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);
-
+++ /dev/null
-################################################################################
-#
-# !!!!! 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;
-}
-
+++ /dev/null
-################################################################################
-#
-# !!!!! 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);
-
+++ /dev/null
-################################################################################
-#
-# !!!!! 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});
-
+++ /dev/null
-################################################################################
-#
-# !!!!! 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());
-
+++ /dev/null
-################################################################################
-#
-# !!!!! 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());
-}
-
+++ /dev/null
-################################################################################
-#
-# !!!!! 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");
-
+++ /dev/null
-################################################################################
-#
-# !!!!! 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} },
- ;
-
+++ /dev/null
-################################################################################
-#
-# !!!!! 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);
-
+++ /dev/null
-################################################################################
-#
-# !!!!! 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 /;
-
+++ /dev/null
-################################################################################
-#
-# !!!!! 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);
-
+++ /dev/null
-################################################################################
-#
-# !!!!! 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);
-
+++ /dev/null
-################################################################################
-#
-# !!!!! 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);
-
+++ /dev/null
-################################################################################
-#
-# !!!!! 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);
-
+++ /dev/null
-################################################################################
-#
-# !!!!! 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);
-}
-
+++ /dev/null
-################################################################################
-#
-# !!!!! 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($_);
- }
-}
-
+++ /dev/null
-################################################################################
-#
-# !!!!! 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");
-
+++ /dev/null
-################################################################################
-#
-# !!!!! 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... :(
-
+++ /dev/null
-################################################################################
-#
-# !!!!! 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);
-
+++ /dev/null
-################################################################################
-#
-# !!!!! 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);
-
+++ /dev/null
-################################################################################
-#
-# !!!!! 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");
-
+++ /dev/null
-################################################################################
-#
-# !!!!! 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");
-
+++ /dev/null
-################################################################################
-#
-# !!!!! 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[$_]);
-}
-
+++ /dev/null
-################################################################################
-#
-# !!!!! 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' : '');
-
+++ /dev/null
-################################################################################
-#
-# !!!!! 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/);
-
+++ /dev/null
-################################################################################
-#
-# !!!!! 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;
-}
-
+++ /dev/null
-################################################################################
-#
-# !!!!! 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);
-
+++ /dev/null
-################################################################################
-#
-# !!!!! 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);
- }
-}
-
+++ /dev/null
-################################################################################
-#
-# !!!!! 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 '');
-
$^W = 0;
}
-our ( $foo, @bar, %baz );
-
use lib ("./t/lib");
use TieOut;
use Test::More tests => 88;
$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' );
$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' );
# 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' );
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' );
our $Debug = 0;
our $ExportLevel = 0;
our $Verbose ||= 0;
-our $VERSION = '5.74';
+our $VERSION = '5.75';
our (%Cache);
sub as_heavy {
no strict 'refs';
# On one line so MakeMaker will see it.
-require Exporter; our $VERSION = $Exporter::VERSION;
+our $VERSION = '5.75';
=head1 NAME
BEGIN {
$test = 1;
- print "1..33\n";
+ print "1..34\n";
require Exporter;
ok( 1, 'Exporter compiled' );
}
}
}
::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');
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);
#-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__;
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 */
use warnings;
use Symbol;
-our $VERSION = '3.40';
+our $VERSION = '3.41';
=head1 NAME
package ExtUtils::ParseXS::CountLines;
use strict;
-our $VERSION = '3.40';
+our $VERSION = '3.41';
our $SECTION_END_MARKER;
use strict;
use warnings;
-our $VERSION = '3.40';
+our $VERSION = '3.41';
=head1 NAME
use File::Spec;
use ExtUtils::ParseXS::Constants ();
-our $VERSION = '3.40';
+our $VERSION = '3.41';
our (@ISA, @EXPORT_OK);
@ISA = qw(Exporter);
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;
#########################
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;
#########################
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;
#########################
+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
use strict;
use warnings;
-our $VERSION = "1.43";
+our $VERSION = "1.44";
XSLoader::load 'IO', $VERSION;
sub import {
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) {
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)));
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)) {
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;
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;
}
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;
our @ISA = qw(IO::Handle);
-our $VERSION = "1.43";
+our $VERSION = "1.44";
our @EXPORT_OK = qw(sockatmark);
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);
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';
use Carp;
our @ISA = qw(IO::Socket);
-our $VERSION = "1.41";
+our $VERSION = "1.42";
IO::Socket::UNIX->register_domain( AF_UNIX );
$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
# 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();
{
# 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();
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($_);
#!./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);
IO::Dir->import(DIR_UNLINK);
}
-use strict;
-use File::Temp qw( tempdir );
-use Cwd;
-
my $cwd = cwd();
{
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");
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;
BEGIN {
$File = __FILE__;
- require strict; import strict;
+ require strict; strict->import();
}
use Test::More tests => 12;
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);
use IO::Socket;
-$listen = IO::Socket::INET->new(LocalAddr => 'localhost',
+my $listen = IO::Socket::INET->new(LocalAddr => 'localhost',
Listen => 2,
Proto => 'tcp',
Timeout => 5,
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();
} elsif(defined $pid) {
- $sock = Multi->new(PeerPort => $port,
+ my $sock = Multi->new(PeerPort => $port,
Proto => 'tcp',
PeerAddr => 'localhost',
MultiHomed => 1,
$| = 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";
exit 0;
}
-$pipe = new IO::Pipe;
+$pipe = IO::Pipe->new();
-$pid = fork();
+my $pid = fork();
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/';
}
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)
{
{
$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';
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';
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");
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";
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";
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";
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";
}
}
-my $has_perlio = find PerlIO::Layer 'perlio';
+my $has_perlio = PerlIO::Layer->find( 'perlio' );
$| = 1;
print "1..26\n";
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,
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);
} elsif(defined $pid) {
- $sock = IO::Socket::INET->new(PeerPort => $port,
+ my $sock = IO::Socket::INET->new(PeerPort => $port,
Proto => 'tcp',
PeerAddr => 'localhost'
)
$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/;
$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;
}
# 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,
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");
### 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 {
### 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));
### 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) {
### 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 }
# 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";
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: {
# 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>);
#!./perl
+my $tell_file;
BEGIN {
$tell_file = "Makefile.PL";
}
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"; }
}
}
-$PATH = "sock-$$";
+my $PATH = "sock-$$";
if ($^O eq 'os2') { # Can't create sockets with relative path...
require Cwd;
$| = 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
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");
}
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";
}
} 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";
#!./perl
BEGIN {
- unless (find PerlIO::Layer 'perlio') {
+ unless ( PerlIO::Layer->find('perlio') ) {
print "1..0 # Skip: not perlio\n";
exit 0;
}
#!./perl
BEGIN {
- unless (find PerlIO::Layer 'perlio') {
+ unless ( PerlIO::Layer->find('perlio') ) {
print "1..0 # Skip: not perlio\n";
exit 0;
}
}
}
-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);
$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);
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;
+}
+5.20200820
+ - Updated for v5.33.1
+
5.20200717
- Updated for v5.33.0
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);
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__) } }
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);
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 ) {
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
removed => {
}
},
+ 5.033001 => {
+ delta_from => 5.033000,
+ changed => {
+ },
+ removed => {
+ }
+ },
);
%deprecated = _undelta(\%deprecated);
'ExtUtils::Manifest' => 'cpan',
'ExtUtils::Mkbootstrap' => 'cpan',
'ExtUtils::Mksymlists' => 'cpan',
+ 'ExtUtils::PL2Bat' => 'cpan',
'ExtUtils::Packlist' => 'cpan',
'ExtUtils::testlib' => 'cpan',
'Fatal' => 'cpan',
'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',
use warnings;
use Module::CoreList;
-our $VERSION = '5.20200717';
+our $VERSION = '5.20200820';
our %utilities;
sub utilities {
removed => {
}
},
+ 5.033001 => {
+ delta_from => 5.033000,
+ changed => {
+ },
+ removed => {
+ }
+ },
);
%utilities = Module::CoreList::_undelta(\%delta);
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
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
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
# 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};
}
}
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};
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 {
$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");
$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
$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) {
} 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;
# 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);
$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');
}
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 ***
#
# 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;
# 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';
our ($canonical, $forgive_me);
BEGIN {
- our $VERSION = '3.21';
+ our $VERSION = '3.22';
}
our $recursion_limit;
#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
#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 */
#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
* sortsv is not available ( <= 5.6.1 ).
*/
-#if (PATCHLEVEL <= 6)
+#if PERL_VERSION_LT(5,7,0)
#if defined(USE_ITHREADS)
#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);
*
* 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; */
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
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);
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]);
}
i--;
}
-#if PERL_VERSION < 8
+#if PERL_VERSION_LT(5,8,0)
((XPVHV*)SvANY(hv))->xhv_array = NULL;
#else
HvARRAY(hv) = NULL;
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));
/* 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
*/
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.
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));
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
}
-#if (PATCHLEVEL <= 6)
+#if PERL_VERSION_LT(5,7,0)
/*
* sortcmp
return sv_cmp(*(SV * const *) a, *(SV * const *) b);
}
-#endif /* PATCHLEVEL <= 6 */
+#endif /* PERL_VERSION_LT(5,7,0) */
/*
* store_hash
++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));
++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));
*/
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
*/
#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
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);
{
switch (SvTYPE(sv)) {
case SVt_NULL:
-#if PERL_VERSION <= 10
+#if PERL_VERSION_LT(5,11,0)
case SVt_IV:
#endif
case SVt_NV:
*/
return svis_SCALAR;
case SVt_PV:
-#if PERL_VERSION <= 10
+#if PERL_VERSION_LT(5,11,0)
case SVt_RV:
#else
case SVt_IV:
*/
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)) {
(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)) ==
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
*/
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;
}
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;
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.
*/
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)) ==
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 {
}
}
-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;
# 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;
{{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]
stat lstat utime
);
-our $VERSION = '1.9764';
+our $VERSION = '1.9765';
our $XS_VERSION = $VERSION;
$VERSION = eval $VERSION;
#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"
+#include "reentr.h"
#ifdef USE_PPPORT_H
# include "ppport.h"
#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_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
# 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
#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).
/* 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
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",
},
},
)
no warnings 'utf8';
-our $VERSION = '1.27';
+our $VERSION = '1.28';
our $PACKAGE = __PACKAGE__;
our @EXPORT = qw( NFC NFD NFKC NFKD );
/* 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
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;
=head1 VERSION
-This document describes threads::shared version 1.61
+This document describes threads::shared version 1.62
=head1 SYNOPSIS
* 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)
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;
=head1 VERSION
-This document describes threads version 2.25
+This document describes threads version 2.26
=head1 WARNING
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
};
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
* 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;
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
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 *);
}
}
-#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.
/* 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;
/* 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;
* 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),
* 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),
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(
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(
int
Perl_my_mkstemp_cloexec(char *templte)
{
- dVAR;
PERL_ARGS_ASSERT_MY_MKSTEMP_CLOEXEC;
#if defined(O_CLOEXEC)
DO_ONEOPEN_EXPERIMENTING_CLOEXEC(
int
Perl_my_mkostemp_cloexec(char *templte, int flags)
{
- dVAR;
PERL_ARGS_ASSERT_MY_MKOSTEMP_CLOEXEC;
#if defined(O_CLOEXEC)
DO_ONEOPEN_EXPERIMENTING_CLOEXEC(
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
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),
* 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),
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,
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);
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);
bool
Perl_do_exec3(pTHX_ const char *incmd, int fd, int do_report)
{
- dVAR;
const char **argv, **a;
char *s;
char *buf;
* 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);
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)
{
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");
}
}
}
}
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];
}
if (size < 8) {
- mask = (1 << size) - 1;
+ mask = nBIT_MASK(size);
lval &= mask;
s[offset] &= ~(mask << bitoffs);
s[offset] |= lval << bitoffs;
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);
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)) &&
char *
Perl_sv_peek(pTHX_ SV *sv)
{
- dVAR;
SV * const t = sv_newmortal();
int unref = 0;
U32 type;
STATIC UV
S_sequence_num(pTHX_ const OP *o)
{
- dVAR;
SV *op,
**seq;
const char *key;
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 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,
/* 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,
/* (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,
/* (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,
* 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,
/* 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,
* 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,
/* 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,
* (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,
*/
# 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,
*/
# 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,
*/
# 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 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,
/* 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,
/* (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,
/* (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,
* 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,
/* 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,
* 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,
/* 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,
* (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,
*/
# 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,
*/
# 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,
*/
# 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,
: 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__
:
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
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
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
#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
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
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
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
: 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)
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
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
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
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
: 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 \
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 \
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
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\
|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
|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 \
|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 \
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
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|...
|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
|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
#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
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
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
|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
#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)
#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)
#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: */
# 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.
static XSPROTO(intrpvar_sv_common); /* prototype to pass -Wmissing-prototypes */
static XSPROTO(intrpvar_sv_common)
{
- dVAR;
dXSARGS;
SV *ret;
if (items != 0)
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
);
-# 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";
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__
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
package Devel::Peek;
-$VERSION = '1.28';
+$VERSION = '1.29';
$XS_VERSION = $VERSION;
$VERSION = eval $VERSION;
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);
# Tim.Bunce@ig.co.uk, August 1994
BEGIN {
- $VERSION = '1.47';
+ $VERSION = '1.48';
}
EOT
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>>
+++ /dev/null
-/* 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.
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" );
}
}
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";
} 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";
$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";
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;
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
#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
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);
}
require Exporter;
require XSLoader;
@ISA = qw(Exporter);
-$VERSION = '1.13';
+$VERSION = '1.14';
XSLoader::load();
static void
XS_Fcntl_S_ISREG(pTHX_ CV* cv)
{
- dVAR;
dXSARGS;
dXSI32;
/* Preserve the semantics of the perl code, which was:
}
# 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);
}
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";
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);
use warnings;
use Scalar::Util qw( reftype);
-our $VERSION = '1.20';
+our $VERSION = '1.21';
require Exporter;
our @ISA = qw(Exporter);
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);
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();
}
# 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))
# interface look beautiful, which is hard.
{
- dVAR;
POSIX__SigAction action;
GV *siggv = gv_fetchpvs("SIG", GV_ADD, SVt_PVHV);
struct sigaction act;
our ($AUTOLOAD, %SIGRT);
-our $VERSION = '1.94';
+our $VERSION = '1.95';
require XSLoader;
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
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
package PerlIO::mmap;
use strict;
use warnings;
-our $VERSION = '0.016';
+our $VERSION = '0.017';
use XSLoader;
XSLoader::load(__PACKAGE__, __PACKAGE__->VERSION);
static IV
PerlIOMmap_map(pTHX_ PerlIO *f)
{
- dVAR;
PerlIOMmap * const m = PerlIOSelf(f, PerlIOMmap);
const IV flags = PerlIOBase(f)->flags;
IV code = 0;
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>; }) {
use warnings;
use Carp;
-our $VERSION = '1.09';
+our $VERSION = '1.11';
require XSLoader;
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)));
}
}
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)));
}
OUTPUT:
RETVAL
-#if PERL_VERSION >= 9
+#if PERL_VERSION_GE(5,9,0)
bool
refcounted_he_exists(key, level=0)
u64= U8TO64_LE(pv+ofs);
RETVAL= (UV)u64;
#else
+ PERL_UNUSED_VAR(u64);
croak("not a 64 bit perl IVSIZE=%d",IVSIZE);
#endif
break;
"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"
);
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;
}
: 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)
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(
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;
use parent qw/ Exporter /;
require XSLoader;
-our $VERSION = '0.17';
+our $VERSION = '0.18';
our @EXPORT = (qw/
T_SV
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 */
# 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');
"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));
}
#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
? (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)
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;
* 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.
PL_fold
PL_fold_latin1
PL_fold_locale
-PL_freq
-PL_global_struct_size
PL_hexdigit
PL_inf
PL_interp_size
#ifndef USE_ITHREADS
GV *filegv;
#endif
- dVAR;
PERL_ARGS_ASSERT_NEWGP;
Newxz(gp, 1, GP);
SV*
Perl_amagic_call(pTHX_ SV *left, SV *right, int method, int flags)
{
- dVAR;
MAGIC *mg;
CV *cv=NULL;
CV **cvp=NULL, **ocvp=NULL;
void
Perl_gv_name_set(pTHX_ GV *gv, const char *name, U32 len, U32 flags)
{
- dVAR;
U32 hash;
PERL_ARGS_ASSERT_GV_NAME_SET;
require DynaLoader;
@ISA = qw|Exporter DynaLoader|;
- $VERSION = '0.35';
+ $VERSION = '0.36';
$XS_VERSION = $VERSION;
$VERSION = eval $VERSION;
haiku_do_debug_printf(pTHX_ SV *sv,
void (*printfFunc)(const char*,...))
{
- dVAR;
if (!sv)
return;
XS(haiku_debug_printf)
{
- dVAR;
dXSARGS;
dORIGMARK;
SV *sv;
XS(haiku_ktrace_printf)
{
- dVAR;
dXSARGS;
dORIGMARK;
SV *sv;
XS(haiku_debugger)
{
- dVAR;
dXSARGS;
dORIGMARK;
SV *sv;
*/
#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
#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 */
# 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
=cut
*/
-
#define STR_WITH_LEN(s) ("" s ""), (sizeof(s)-1)
/* STR_WITH_LEN() shortcuts */
#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
/* 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
# 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
# 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
;;
*** 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
# "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
;;
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
# $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.
# 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
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;
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);
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);
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;
HV *
Perl_newHVhv(pTHX_ HV *ohv)
{
- dVAR;
HV * const hv = newHV();
STRLEN hv_max;
void
Perl_hv_clear(pTHX_ HV *hv)
{
- dVAR;
SSize_t orig_ix;
XPVHV* xhv;
static void
S_clear_placeholders(pTHX_ HV *hv, U32 items)
{
- dVAR;
I32 i;
PERL_ARGS_ASSERT_CLEAR_PLACEHOLDERS;
void
Perl_hv_name_set(pTHX_ HV *hv, const char *name, U32 len, U32 flags)
{
- dVAR;
struct xpvhv_aux *iter;
U32 hash;
HEK **spot;
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;
HE *
Perl_hv_iternext_flags(pTHX_ HV *hv, I32 flags)
{
- dVAR;
XPVHV* xhv;
HE *entry;
HE *oldentry;
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;
}
STATIC SV *
S_refcounted_he_value(pTHX_ const struct refcounted_he *he)
{
- dVAR;
SV *value;
PERL_ARGS_ASSERT_REFCOUNTED_HE_VALUE;
HV *
Perl_refcounted_he_chain_2hv(pTHX_ const struct refcounted_he *chain, U32 flags)
{
- dVAR;
HV *hv;
U32 placeholders, max;
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;
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;
void
Perl_refcounted_he_free(pTHX_ struct refcounted_he *he) {
#ifdef USE_ITHREADS
- dVAR;
#endif
PERL_UNUSED_CONTEXT;
Perl_refcounted_he_inc(pTHX_ struct refcounted_he *he)
{
#ifdef USE_ITHREADS
- dVAR;
#endif
PERL_UNUSED_CONTEXT;
if (he) {
void
Perl_hv_assert(pTHX_ HV *hv)
{
- dVAR;
HE* entry;
int withflags = 0;
int placeholders = 0;
#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
#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*/
/*
/* ------------------------------- 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 ------------------------------- */
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;
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 */
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.
#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.
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. */
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
/* 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 '.' */
# 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 **)
* 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.
*/
MDEREF_SHIFT
);
-$VERSION = '1.54';
+$VERSION = '1.55';
use strict;
our $AUTOLOAD;
use warnings ();
# possibly undoing optimisations along the way.
sub DEBUG { 0 }
+use if DEBUG, 'Data::Dumper';
sub _pessimise_walk {
my ($self, $startop) = @_;
return $self->maybe_parens(
$self->keyword($name) . " $kid", $cx, 16
);
- }
+ }
return $self->maybe_parens_unop($name, $kid, $cx);
} else {
return $self->maybe_parens(
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(@_,"");
}
# 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
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));
}
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;
####
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);
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;
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;
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;
}
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"};
);
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,
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
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.
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";
$filename
$histfile
$histsize
+ $histitemminlength
$IN
$inhibit_exit
@ini_INC
@options = qw(
CommandSet HistFile HistSize
+ HistItemMinLength
hashDepth arrayDepth dumpDepth
DumpDBFiles DumpPackages DumpReused
compactDump veryCompact quote
windowSize => \$window,
HistFile => \$histfile,
HistSize => \$histsize,
+ HistItemMinLength => \$histitemminlength
);
=pod
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).
'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', },
{ 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)),
);
};
# 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)?
$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 );
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')
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;
$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)
# 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)
}
{
+ # 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' );
);
}
+{
+ # 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}
--- /dev/null
+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.";
--- /dev/null
+#!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;
--- /dev/null
+use strict; use warnings;
+
+for my $x (1 .. 2) {
+ my $y = $x + 1;
+ my $x = $x - 1;
+}
package strict;
-$strict::VERSION = "1.11";
+$strict::VERSION = "1.12";
my ( %bitmask, %explicit_bitmask );
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
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!
# 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 ;
} 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;
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
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.
{
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>
sub doit
{
- my $b; chop $b;
+ my $y; chop $y;
}
doit();
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.
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
/* 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
# 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
# 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
# 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 */
# 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.
* 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 */
* values for our db, instead of trying to change them.
* */
- dVAR;
int ok = 1;
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"));
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). */
* to the C locale */
char *errstr;
- dVAR;
#ifndef USE_LOCALE_MESSAGES
* 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));
# 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);
$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;
}
if ($ARGS{PLATFORM} ne 'os2') {
++$skip{$_} foreach qw(
- PL_cryptseen
PL_opsave
- Perl_GetVars
Perl_dump_fds
Perl_my_bcopy
Perl_my_bzero
++$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
);
}
-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};
}
);
}
-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};
}
++$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};
# 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
win32_get_childenv
win32_spawnvp
Perl_init_os_extras
- Perl_thread_create
Perl_win32_init
Perl_win32_term
RunPerl
elsif ($ARGS{PLATFORM} eq 'netware') {
try_symbols(qw(
Perl_init_os_extras
- Perl_thread_create
Perl_nw5_init
RunPerl
AllocStdPerl
# 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)))
#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]
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;
Malloc_t
Perl_malloc(size_t nbytes)
{
- dVAR;
union overhead *p;
int bucket;
#if defined(DEBUGGING) || defined(RCHECK)
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;
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 */
Free_t
Perl_mfree(Malloc_t where)
{
- dVAR;
MEM_SIZE size;
union overhead *ovp;
char *cp = (char*)where;
Malloc_t
Perl_realloc(void *mp, size_t nbytes)
{
- dVAR;
MEM_SIZE onb;
union overhead *ovp;
char *res;
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
PERL_TSA_REQUIRES(PL_dollarzero_mutex)
{
#ifdef USE_ITHREADS
- dVAR;
#endif
const char *s;
STRLEN len;
Perl_magic_set(pTHX_ SV *sv, MAGIC *mg)
{
#ifdef USE_ITHREADS
- dVAR;
#endif
I32 paren;
const REGEXP * rx;
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
#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
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);
}
uselongdouble=$uselongdouble
usemymalloc=$usemymalloc
default_inc_excludes_dot=$default_inc_excludes_dot
- bincompat5005=undef
Compiler:
cc='$cc'
ccflags ='$ccflags'
/* 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) \
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",
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;
/* 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,
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)
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
}
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) {
}
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; \
/* 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);
}
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));
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);
}
}
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);
}
}
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);
}
#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();
}
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) )
{
void
Perl_op_free(pTHX_ OP *o)
{
- dVAR;
OPCODE type;
OP *top_op = o;
OP *next_op = o;
Perl_op_clear(pTHX_ OP *o)
{
- dVAR;
PERL_ARGS_ASSERT_OP_CLEAR;
void
Perl_op_null(pTHX_ OP *o)
{
- dVAR;
PERL_ARGS_ASSERT_OP_NULL;
PERL_TSA_ACQUIRE(PL_op_mutex)
{
#ifdef USE_ITHREADS
- dVAR;
#endif
PERL_UNUSED_CONTEXT;
OP_REFCNT_LOCK;
PERL_TSA_RELEASE(PL_op_mutex)
{
#ifdef USE_ITHREADS
- dVAR;
#endif
PERL_UNUSED_CONTEXT;
OP_REFCNT_UNLOCK;
LOGOP *
Perl_alloc_LOGOP(pTHX_ I32 type, OP *first, OP* other)
{
- dVAR;
LOGOP *logop;
OP *kid = first;
NewOp(1101, logop, 1, LOGOP);
OP *
Perl_scalarvoid(pTHX_ OP *arg)
{
- dVAR;
OP *kid;
SV* sv;
OP *o = arg;
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 */
static void
S_lvref(pTHX_ OP *o, I32 type)
{
- dVAR;
OP *kid;
OP * top_op = o;
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))
OP *
Perl_doref(pTHX_ OP *o, I32 type, bool set_op_ref)
{
- dVAR;
OP * top_op = o;
PERL_ARGS_ASSERT_DOREF;
OP *
Perl_cmpchain_start(pTHX_ I32 type, OP *left, OP *right)
{
- dVAR;
BINOP *bop;
OP *op;
OP *
Perl_cmpchain_extend(pTHX_ I32 type, OP *ch, OP *right)
{
- dVAR;
BINOP *bop;
OP *op;
OP *
Perl_cmpchain_finish(pTHX_ OP *ch)
{
- dVAR;
PERL_ARGS_ASSERT_CMPCHAIN_FINISH;
if (ch->op_type != OP_NULL) {
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,
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;
}
/* integerize op. */
if ((PL_opargs[type] & OA_OTHERINT) && (PL_hints & HINT_INTEGER))
{
- dVAR;
o->op_ppaddr = PL_ppaddr[++(o->op_type)];
}
static OP *
S_fold_constants(pTHX_ OP *const o)
{
- dVAR;
OP *curop;
OP *newop;
I32 type = o->op_type;
static void
S_gen_constant_list(pTHX_ OP *o)
{
- dVAR;
OP *curop, *old_next;
SV * const oldwarnhook = PL_warnhook;
SV * const olddiehook = PL_diehook;
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);
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
OP *
Perl_newOP(pTHX_ I32 type, I32 flags)
{
- dVAR;
OP *o;
if (type == -OP_ENTEREVAL) {
OP *
Perl_newUNOP(pTHX_ I32 type, I32 flags, OP *first)
{
- dVAR;
UNOP *unop;
if (type == -OP_ENTEREVAL) {
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
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
OP *
Perl_newBINOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
{
- dVAR;
BINOP *binop;
ASSUME((PL_opargs[type] & OA_CLASS_MASK) == OA_BINOP
OP *
Perl_newPMOP(pTHX_ I32 type, I32 flags)
{
- dVAR;
PMOP *pmop;
assert((PL_opargs[type] & OA_CLASS_MASK) == OA_PMOP
} 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
OP *
Perl_newSVOP(pTHX_ I32 type, I32 flags, SV *sv)
{
- dVAR;
SVOP *svop;
PERL_ARGS_ASSERT_NEWSVOP;
OP *
Perl_newPADOP(pTHX_ I32 type, I32 flags, SV *sv)
{
- dVAR;
PADOP *padop;
PERL_ARGS_ASSERT_NEWPADOP;
OP *
Perl_newPVOP(pTHX_ I32 type, I32 flags, char *pv)
{
- dVAR;
const bool utf8 = cBOOL(flags & SVf_UTF8);
PVOP *pvop;
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
OP *
Perl_newSTATEOP(pTHX_ I32 flags, char *label, OP *o)
{
- dVAR;
const U32 seq = intro_my();
const U32 utf8 = flags & SVf_UTF8;
COP *cop;
STATIC OP *
S_new_logop(pTHX_ I32 type, I32 flags, OP** firstp, OP** otherp)
{
- dVAR;
LOGOP *logop;
OP *o;
OP *first;
OP *
Perl_newCONDOP(pTHX_ I32 flags, OP *first, OP *trueop, OP *falseop)
{
- dVAR;
LOGOP *logop;
OP *start;
OP *o;
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;
OP *
Perl_newFOROP(pTHX_ I32 flags, OP *sv, OP *expr, OP *block, OP *cont)
{
- dVAR;
LOOP *loop;
OP *wop;
PADOFFSET padoff = 0;
* 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;
I32 enter_opcode, I32 leave_opcode,
PADOFFSET entertarg)
{
- dVAR;
LOGOP *enterop;
OP *o;
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 =
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,
assert(CvGV(cv) == gv);
}
else {
- dVAR;
U32 hash;
PERL_HASH(hash, name, namlen);
CvNAME_HEK_set(cv,
if (isGV(gv))
CvGV_set(cv, gv);
else {
- dVAR;
U32 hash;
PERL_HASH(hash, name, namlen);
CvNAME_HEK_set(cv, share_hek(name,
OP *
Perl_oopsAV(pTHX_ OP *o)
{
- dVAR;
PERL_ARGS_ASSERT_OOPSAV;
OP *
Perl_oopsHV(pTHX_ OP *o)
{
- dVAR;
PERL_ARGS_ASSERT_OOPSHV;
OP *
Perl_newAVREF(pTHX_ OP *o)
{
- dVAR;
PERL_ARGS_ASSERT_NEWAVREF;
OP *
Perl_newHVREF(pTHX_ OP *o)
{
- dVAR;
PERL_ARGS_ASSERT_NEWHVREF;
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));
OP *
Perl_newSVREF(pTHX_ OP *o)
{
- dVAR;
PERL_ARGS_ASSERT_NEWSVREF;
OP *
Perl_ck_spair(pTHX_ OP *o)
{
- dVAR;
PERL_ARGS_ASSERT_CK_SPAIR;
OP *
Perl_ck_eval(pTHX_ OP *o)
{
- dVAR;
PERL_ARGS_ASSERT_CK_EVAL;
OP *
Perl_ck_rvconst(pTHX_ OP *o)
{
- dVAR;
SVOP * const kid = (SVOP*)cUNOPo->op_first;
PERL_ARGS_ASSERT_CK_RVCONST;
OP *
Perl_ck_ftst(pTHX_ OP *o)
{
- dVAR;
const I32 type = o->op_type;
PERL_ARGS_ASSERT_CK_FTST;
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;
OP *
Perl_ck_sassign(pTHX_ OP *o)
{
- dVAR;
OP * const kid = cBINOPo->op_first;
PERL_ARGS_ASSERT_CK_SASSIGN;
SV * const sv = kid->op_sv;
U32 const was_readonly = SvREADONLY(sv);
if (kid->op_private & OPpCONST_BARE) {
- dVAR;
const char *end;
HEK *hek;
SvREFCNT_dec_NN(sv);
}
else {
- dVAR;
HEK *hek;
if (was_readonly) SvREADONLY_off(sv);
PERL_HASH(hash, s, len);
OP *
Perl_ck_select(pTHX_ OP *o)
{
- dVAR;
OP* kid;
PERL_ARGS_ASSERT_CK_SELECT;
OP *
Perl_ck_split(pTHX_ OP *o)
{
- dVAR;
OP *kid;
OP *sibs;
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;
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;
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 */
void
Perl_rpeep(pTHX_ OP *o)
{
- dVAR;
OP* oldop = NULL;
OP* oldoldop = NULL;
OP** defer_queue[MAX_DEFERRED]; /* small queue of deferred branches */
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;
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.
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) \
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; \
\
* 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
* 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
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,
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 */
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[];
};
#endif
-#endif /* !PERL_GLOBAL_STRUCT_INIT */
-
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 */
EXTCONST I16 PL_op_private_bitfields[];
EXTCONST U8 PL_op_private_valid[];
-# else
+#else
/* PL_op_private_labels[]: the short descriptions of private flags.
};
-# endif /* !DOINIT */
-#endif /* !PERL_GLOBAL_STRUCT_INIT */
+#endif /* !DOINIT */
END_EXTERN_C
# 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
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 *);
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
/* 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)) {
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";
# 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);
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);
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);
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. */
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];
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] == '\\'))
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];
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;
}
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
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
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;
}
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));
}
#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
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
* 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.
void
Perl_pad_tidy(pTHX_ padtidy_type type)
{
- dVAR;
ASSERT_CURPAD_ACTIVE("pad_tidy");
/* 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);
S_cv_clone(pTHX_ CV *proto, CV *cv, CV *outside, HV *cloned)
{
#ifdef USE_ITHREADS
- dVAR;
#endif
const bool newcv = !cv;
*
*/
+/*
+=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
#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
*/
#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
static void
S_init_tls_and_interp(PerlInterpreter *my_perl)
{
- dVAR;
if (!PL_curinterp) {
PERL_SET_INTERP(my_perl);
#if defined(USE_ITHREADS)
void
Perl_sys_init(int* argc, char*** argv)
{
- dVAR;
PERL_ARGS_ASSERT_SYS_INIT;
void
Perl_sys_init3(int* argc, char*** argv, char*** env)
{
- dVAR;
PERL_ARGS_ASSERT_SYS_INIT3;
void
Perl_sys_term(void)
{
- dVAR;
if (!PL_veto_cleanup) {
PERL_SYS_TERM_BODY();
}
void
perl_construct(pTHXx)
{
- dVAR;
PERL_ARGS_ASSERT_PERL_CONSTRUCT;
}
#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();
int
perl_destruct(pTHXx)
{
- dVAR;
volatile signed char destruct_level; /* see possible values in intrpvar.h */
HV *hv;
#ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
void
perl_free(pTHXx)
{
- dVAR;
PERL_ARGS_ASSERT_PERL_FREE;
#endif
perl_fini(void)
{
- dVAR;
if (
-#ifdef PERL_GLOBAL_STRUCT_PRIVATE
- my_vars &&
-#endif
PL_curinterp && !PL_veto_cleanup)
FREE_THREAD_KEY;
}
int
perl_parse(pTHXx_ XSINIT_t xsinit, int argc, char **argv, char **env)
{
- dVAR;
I32 oldscope;
int ret;
dJMPENV;
STATIC void *
S_parse_body(pTHX_ char **env, XSINIT_t xsinit)
{
- dVAR;
PerlIO *rsfp;
int argc = PL_origargc;
char **argv = PL_origargv;
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
* 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(). */
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;
/* See G_* flags in cop.h */
{
- dVAR;
UNOP myop; /* fake syntax tree node */
volatile I32 oldmark;
volatile I32 retval = 0;
const char *
Perl_moreswitches(pTHX_ const char *s)
{
- dVAR;
UV rschar;
const char option = *s; /* used to remember option in -m/-M code */
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
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 */
S_init_postdump_symbols(pTHX_ int argc, char **argv, char **env)
{
#ifdef USE_ITHREADS
- dVAR;
#endif
GV* tmpgv;
}
}
-#if defined(DOSISH) || defined(__SYMBIAN32__)
+#if defined(DOSISH)
# define PERLLIB_SEP ';'
#elif defined(__VMS)
# define PERLLIB_SEP PL_perllib_sep
#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)
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) {
# 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)
#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
# 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 */
# 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
#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
# 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. */
* 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
# else
# include "vos/vosish.h"
# endif
-#elif defined(__SYMBIAN32__)
-# include "symbian/symbianish.h"
#elif defined(__HAIKU__)
# include "haiku/haikuish.h"
#else
# 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
*
*/
#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) || \
&& 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)
#endif
#ifndef __cplusplus
-#if !(defined(WIN32) || defined(SYMBIAN))
+#if !defined(WIN32)
Uid_t getuid (void);
Uid_t geteuid (void);
Gid_t getgid (void);
* 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,
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
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 */
# ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
" DEBUG_LEAKING_SCALARS_FORK_DUMP"
# endif
-# ifdef FCRYPT
- " FCRYPT"
-# endif
# ifdef HAS_TIMES
" HAS_TIMES"
# endif
# 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
# 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
#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:
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
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
/* 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
#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
/*
--- /dev/null
+/* 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) */
+++ /dev/null
-/* -*- 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: */
-/* -*- 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: */
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);
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;
{
dTHX;
if (fd >= 0) {
- dVAR;
MUTEX_LOCK(&PL_perlio_mutex);
if (fd >= PL_perlio_fd_refcnt_size)
#ifdef DEBUGGING
dTHX;
#else
- dVAR;
#endif
MUTEX_LOCK(&PL_perlio_mutex);
if (fd >= PL_perlio_fd_refcnt_size) {
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 */
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
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;
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) {
int dupfd = -1;
dSAVEDERRNO;
#ifdef USE_ITHREADS
- dVAR;
#endif
#ifdef SOCKS5_VERSION_NAME
/* Socks lib overrides close() but stdio isn't linked to
#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 */
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
*/
case 2:
-#line 121 "perly.y" /* yacc.c:1652 */
+#line 121 "perly.y"
{
parser->expect = XSTATE;
(yyval.ival) = 0;
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;
break;
case 4:
-#line 132 "perly.y" /* yacc.c:1652 */
+#line 132 "perly.y"
{
parser->expect = XTERM;
(yyval.ival) = 0;
break;
case 5:
-#line 137 "perly.y" /* yacc.c:1652 */
+#line 137 "perly.y"
{
PL_eval_root = (ps[0].val.opval);
(yyval.ival) = 0;
break;
case 6:
-#line 142 "perly.y" /* yacc.c:1652 */
+#line 142 "perly.y"
{
parser->expect = XBLOCK;
(yyval.ival) = 0;
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);
break;
case 8:
-#line 155 "perly.y" /* yacc.c:1652 */
+#line 155 "perly.y"
{
parser->expect = XSTATE;
(yyval.ival) = 0;
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);
break;
case 10:
-#line 168 "perly.y" /* yacc.c:1652 */
+#line 168 "perly.y"
{
parser->expect = XSTATE;
(yyval.ival) = 0;
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);
break;
case 12:
-#line 181 "perly.y" /* yacc.c:1652 */
+#line 181 "perly.y"
{
parser->expect = XSTATE;
(yyval.ival) = 0;
break;
case 13:
-#line 186 "perly.y" /* yacc.c:1652 */
+#line 186 "perly.y"
{
PL_eval_root = (ps[0].val.opval);
(yyval.ival) = 0;
break;
case 14:
-#line 191 "perly.y" /* yacc.c:1652 */
+#line 191 "perly.y"
{
parser->expect = XSTATE;
(yyval.ival) = 0;
break;
case 15:
-#line 196 "perly.y" /* yacc.c:1652 */
+#line 196 "perly.y"
{
PL_eval_root = (ps[0].val.opval);
(yyval.ival) = 0;
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));
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));
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));
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))
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))
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;
}
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,
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,
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));
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;
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
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;
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
break;
case 35:
-#line 336 "perly.y" /* yacc.c:1652 */
+#line 336 "perly.y"
{
package((ps[-1].val.opval));
if ((ps[-2].val.opval))
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));
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)));
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))));
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);
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,
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,
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,
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);
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)));
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),
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,
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)));
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,
break;
case 55:
-#line 453 "perly.y" /* yacc.c:1652 */
+#line 453 "perly.y"
{
package((ps[-2].val.opval));
if ((ps[-3].val.opval)) {
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,
break;
case 57:
-#line 468 "perly.y" /* yacc.c:1652 */
+#line 468 "perly.y"
{
(yyval.opval) = (ps[-1].val.opval);
}
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")));
break;
case 59:
-#line 477 "perly.y" /* yacc.c:1652 */
+#line 477 "perly.y"
{
(yyval.opval) = NULL;
parser->copline = NOLINE;
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);
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));
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)),
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(); }
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; }
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);
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);
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));
}
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);
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;
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);
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);
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);
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)) );
}
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)) );
}
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)),
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))));
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)),
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)),
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)));
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)));
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)));
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))); }
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))); }
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)
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)))));
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)))));
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)
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)));
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,
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,
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,
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,
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,
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))));
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))));
}
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); }
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
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);
}
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);
}
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;
/* Generated from:
- * e5b801fdebce5c77dd8e644fc5a489cbea6af33db180e771dd9d669b12bbe0cf perly.y
- * 0947213b55d0ed11693554bea04987e886cf285f5c14cf9075fa1e7acc3f4061 regen_perly.pl
+ * f83d884147747f2d8f5a62eebc4ccd07d71b6b34e5ba1a8d7559526ad864dc97 perly.y
+ * 01ce33b49f9f04b8d3112b7f042cde113a7d29763a846e870f9766072a5bc614 regen_perly.pl
* ex: set ro: */
# 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"
int
Perl_yyparse (pTHX_ int gramtype)
{
- dVAR;
int yystate;
int yyn;
int yyresult;
/* Generated from:
- * e5b801fdebce5c77dd8e644fc5a489cbea6af33db180e771dd9d669b12bbe0cf perly.y
- * 0947213b55d0ed11693554bea04987e886cf285f5c14cf9075fa1e7acc3f4061 regen_perly.pl
+ * f83d884147747f2d8f5a62eebc4ccd07d71b6b34e5ba1a8d7559526ad864dc97 perly.y
+ * 01ce33b49f9f04b8d3112b7f042cde113a7d29763a846e870f9766072a5bc614 regen_perly.pl
* ex: set ro: */
};
/* Generated from:
- * e5b801fdebce5c77dd8e644fc5a489cbea6af33db180e771dd9d669b12bbe0cf perly.y
- * 0947213b55d0ed11693554bea04987e886cf285f5c14cf9075fa1e7acc3f4061 regen_perly.pl
+ * f83d884147747f2d8f5a62eebc4ccd07d71b6b34e5ba1a8d7559526ad864dc97 perly.y
+ * 01ce33b49f9f04b8d3112b7f042cde113a7d29763a846e870f9766072a5bc614 regen_perly.pl
* ex: set ro: */
/* Make the parser re-entrant. */
-%pure-parser
+%define api.pure
%start grammar
--- /dev/null
+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 */
+ };
+
# 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]
-p9pvers = 5.008
+p9pvers = 5.32.0
* 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
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=''
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=''
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'
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'
strerror_r_proto='0'
strings='/sys/include/ape/string.h'
submit=''
-subversion='0'
+subversion='1'
sysman='/sys/man/1pub'
tail=''
tar=''
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=''
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
op/oct.t
op/split.t
op/stat.t
+.git
g/_P9P_VERSION/s//$p9pvers/g
w plan9/genconfig.pl
!
+
+ed plan9/aperl<<!
+g/_P9P_VERSION/s//$p9pvers/g
+w plan9/aperl
+!
# 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";
# 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 = "./"; }
$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:
# 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'
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'
# 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
}
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
}
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";
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";}
}
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";
}
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;
-
-
--- /dev/null
+/* 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
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
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
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*
#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)
{
}
-/* 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.");
{
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.");
-}
* 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
* 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
#!/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 }
--- /dev/null
+#!/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
-/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";
}
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
=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)
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
=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/}!>
--- /dev/null
+=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
=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 *
=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
=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.
(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]>.
(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.
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
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>
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 {
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);
}
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
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>:
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
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
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,
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'
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.
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
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
@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
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
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;
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
(SunOS, Solaris, HP-UX)
Does not automatically flush output handles on some platforms.
-(Symbian OS)
-Not supported.
-
=item exit
(VMS)
=back
-=item Symbian
-
=item NetBSD
=item FreeBSD
=back
-=item Symbian (Series 60 v3, 3.2 and 5 - what else?)
-
=item Stratus VOS / OpenVOS
=item AIX
$, = "\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
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
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
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.
#!/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.
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
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,
{
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;
}
{
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;
}
{
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;
}
{
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;
}
{
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;
}
# 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;
PP(pp_uc)
{
- dVAR;
dSP;
SV *source = TOPs;
STRLEN len;
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;
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)) {
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) {
PP(pp_avhvswitch)
{
- dVAR; dSP;
+ dSP;
return PL_ppaddr[
(SvTYPE(TOPs) == SVt_PVAV ? OP_AEACH : OP_EACH)
+ (PL_op->op_private & OPpAVHVSWITCH_MASK)
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) \
PP(pp_goto)
{
- dVAR; dSP;
+ dSP;
OP *retop = NULL;
I32 ix;
PERL_CONTEXT *cx;
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))
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 "
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;
static OP *
S_require_file(pTHX_ SV *sv)
{
- dVAR; dSP;
+ dSP;
PERL_CONTEXT *cx;
const char *name;
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);
}
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");
}
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"));
}
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) {
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();
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);
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;
}
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))
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;
{
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;
}
#endif
)
{
- dVAR;
SV **relem;
SV **lelem;
SSize_t lcount = lastlelem - firstlelem + 1;
PP(pp_aassign)
{
- dVAR; dSP;
+ dSP;
SV **lastlelem = PL_stack_sp;
SV **lastrelem = PL_stack_base + POPMARK;
SV **firstrelem = PL_stack_base + POPMARK + 1;
if (!SvIMMORTAL(lsv)) {
sv_set_undef(lsv);
SvSETMAGIC(lsv);
- *relem++ = lsv;
}
+ *relem++ = lsv;
break;
} /* switch */
} /* while */
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 */
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. */
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;
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)
}
else {
if (checksum < bits_in_uv) {
- UV mask = ((UV)1 << checksum) - 1;
+ UV mask = nBIT_MASK(checksum);
cuv &= mask;
}
sv = newSVuv(cuv);
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;
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)
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);
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)
__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 \
#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
#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__
#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 \
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)
#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
# 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
#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).
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. */
* 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 */
* 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;
STATIC void
S_rck_elide_nothing(pTHX_ regnode *node)
{
- dVAR;
-
PERL_ARGS_ASSERT_RCK_ELIDE_NOTHING;
if (OP(node) != CURLYX) {
/* 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;
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);
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;
/* 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);
} 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);
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;
vFAIL("Too many nested open parens");
}
- *flagp = 0; /* Tentatively. */
+ *flagp = 0; /* Initialize. */
if (RExC_in_lookbehind) {
RExC_in_lookbehind++;
}
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) {
REQUIRE_BRANCHJ(flagp, 0);
}
lastbr = br;
- *flagp |= flags & (SPSTART | HASWIDTH | POSTPONED);
+ *flagp |= flags & (HASWIDTH | POSTPONED);
}
if (have_branch || paren != ':') {
}
}
- *flagp = WORST; /* Tentatively. */
+ *flagp = 0; /* Initialize. */
skip_to_be_ignored_text(pRExC_state, &RExC_parse,
FALSE /* Don't force to /x */ );
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);
FLAGS(REGNODE_p(ret)) = 0;
if (min > 0)
- *flagp = WORST;
+ *flagp = 0;
if (max > 0)
*flagp |= HASWIDTH;
ARG1_SET(REGNODE_p(ret), (U16)min);
#endif
nextchar(pRExC_state);
- *flagp = (op != '+') ? (WORST|SPSTART|HASWIDTH) : (WORST|HASWIDTH);
+ *flagp = HASWIDTH;
if (op == '*') {
min = 0;
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);
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;
DECLARE_AND_GET_RE_DEBUG_FLAGS;
- *flagp = WORST; /* Tentatively. */
+ *flagp = 0; /* Initialize. */
DEBUG_PARSE("atom");
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 ')':
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.
FAIL2("panic: loc_correspondence[%d] is 0",
(int) (s - s_start));
}
+ Safefree(locfold_buf);
+ Safefree(loc_correspondence);
}
else {
upper_fill = s - s0;
* 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);
? 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);
if ( posix_warnings
&& RExC_warn_text
- && av_top_index(RExC_warn_text) > -1)
+ && av_count(RExC_warn_text) > 0)
{
*posix_warnings = RExC_warn_text;
}
* UTF-8
*/
- dVAR;
UV prevvalue = OOB_UNICODE, save_prevvalue = OOB_UNICODE;
IV range = 0;
UV value = OOB_UNICODE, save_value = OOB_UNICODE;
}
/* 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);
ret = reg(pRExC_state, 1, ®_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;
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));
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));
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);
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;
U32 refcount;
reg_ac_data *aho=(reg_ac_data*)ri->data->data[n];
#ifdef USE_ITHREADS
- dVAR;
#endif
OP_REFCNT_LOCK;
refcount = --aho->refcount;
U32 refcount;
reg_trie_data *trie=(reg_trie_data*)ri->data->data[n];
#ifdef USE_ITHREADS
- dVAR;
#endif
OP_REFCNT_LOCK;
refcount = --trie->refcount;
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.
*/
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);
void *
Perl_regdupe_internal(pTHX_ REGEXP * const rx, CLONE_PARAMS *param)
{
- dVAR;
struct regexp *const r = ReANY(rx);
regexp_internal *reti;
int len;
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);
}
* output would have been only the inversion indicator '^', NULL is instead
* returned. */
- dVAR;
SV * output;
PERL_ARGS_ASSERT_PUT_CHARCLASS_BITMAP_INNARDS_COMMON;
* 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;
void
Perl_init_uniprops(pTHX)
{
- dVAR;
# ifdef DEBUGGING
char * dump_len_string;
* 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;
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 */
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");
/* 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;
*/
#if SHORTSIZE > 2
# ifndef REG_INFTY
-# define REG_INFTY ((1<<16)-1)
+# define REG_INFTY nBIT_UMAX(16)
# endif
#endif
} 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
} 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) \
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))
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;
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/
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);
* 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");
}
{
#
# embed.h
# embedvar.h
-# perlapi.c
-# perlapi.h
# proto.h
#
# from information stored in
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:
require './regen/regen_lib.pl';
push @INC, './lib';
}
-use strict ;
+use strict;
+use warnings;
###########################################################################
# Hand-editable data
signatures => 'signatures',
isa => 'isa',
indirect => 'indirect',
+ multidimensional => 'multidimensional',
);
# NOTE: If a feature is ever enabled in a non-contiguous range of Perl
# 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 );
__END__
package feature;
-our $VERSION = '1.59';
+our $VERSION = '1.60';
FEATURES
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
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
print $fh <<EOF;
START_EXTERN_C
-#ifndef PERL_GLOBAL_STRUCT_INIT
-
-# ifndef DOINIT
+#ifndef DOINIT
/* data about the flags in op_private */
EXTCONST I16 PL_op_private_bitfields[];
EXTCONST U8 PL_op_private_valid[];
-# else
+#else
/* PL_op_private_labels[]: the short descriptions of private flags.
$PL_op_private_valid
};
-# endif /* !DOINIT */
-#endif /* !PERL_GLOBAL_STRUCT_INIT */
+#endif /* !DOINIT */
END_EXTERN_C
# Emit defines.
-print $oc "#ifndef PERL_GLOBAL_STRUCT_INIT\n\n";
-
{
my $last_cond = '';
my @unimplemented;
#endif
END_EXTERN_C
-
-#endif /* !PERL_GLOBAL_STRUCT_INIT */
END
# Emit ppcode switch array.
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
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
print $oc <<'END';
}
#endif
-#ifdef PERL_CHECK_INITED
;
-#endif /* #ifdef PERL_CHECK_INITED */
-
-#ifndef PERL_GLOBAL_STRUCT_INIT
#ifndef DOINIT
EXTCONST U32 PL_opargs[];
};
#endif
-#endif /* !PERL_GLOBAL_STRUCT_INIT */
-
END_EXTERN_C
END
#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).
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;
#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
}
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";
}
print $fh "\n$comment\n";
close_and_rename($fh);
+
+ return;
}
sub tab {
#
# This script is normally invoked from regen.pl.
-$VERSION = '1.47';
+$VERSION = '1.48';
BEGIN {
require './regen/regen_lib.pl';
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);
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 ;
}
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);
}
###########################################################################
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>) {
} 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;
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
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.
{
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>
sub doit
{
- my $b; chop $b;
+ my $y; chop $y;
}
doit();
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.
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
# 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
}
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
$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";
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@
(?:
}\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
# 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;
/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;
* 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;
/* 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'; \
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;
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;
* 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' };
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;
STATIC LB_enum
S_advance_one_LB(pTHX_ U8 ** curpos, const U8 * const strend, const bool utf8_target)
{
- dVAR;
LB_enum lb;
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;
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;
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;
const bool utf8_target,
const bool skip_Extend_Format)
{
- dVAR;
WB_enum wb;
PERL_ARGS_ASSERT_ADVANCE_ONE_WB;
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;
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;
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. */
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);
}
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;
/* 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
* 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;
* 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];
/* 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;
}
* 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 */
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
*/
}
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();
3, /* SAVEt_SET_SVFLAGS */
3, /* SAVEt_GVSLOT */
3, /* SAVEt_AELEM */
- 3 /* SAVEt_DELETE */
+ 3, /* SAVEt_DELETE */
+ 3 /* SAVEt_HINTS_HH */
};
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)) {
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
#define SAVEt_GVSLOT 51
#define SAVEt_AELEM 52
#define SAVEt_DELETE 53
+#define SAVEt_HINTS_HH 54
#define SAVEf_SETMAGIC 1
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;
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 */
*--retval = '(';
retval -= typelen;
- memcpy(retval, typestr, typelen);
+ memcpy(retval, typestring, typelen);
if (stashname) {
*--retval = '=';
void
Perl_sv_clear(pTHX_ SV *const orig_sv)
{
- dVAR;
HV *stash;
U32 type;
const struct body_details *sv_type_details;
void
Perl_sv_free2(pTHX_ SV *const sv, const U32 rc)
{
- dVAR;
PERL_ARGS_ASSERT_SV_FREE2;
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) {
goto screamer2;
}
-#ifdef USE_HEAP_INSTEAD_OF_STACK
- Safefree(buf);
-#endif
}
if (rspara) { /* have to do this both before and after */
SV *
Perl_sv_2mortal(pTHX_ SV *const sv)
{
- dVAR;
if (!sv)
return sv;
if (SvIMMORTAL(sv))
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;
(!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;
static SV *
S_sv_dup_common(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
{
- dVAR;
SV *dstr;
PERL_ARGS_ASSERT_SV_DUP_COMMON;
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;
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);
PerlInterpreter *
perl_clone(PerlInterpreter *proto_perl, UV flags)
{
- dVAR;
#ifdef PERL_IMPLICIT_SYS
PERL_ARGS_ASSERT_PERL_CLONE;
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;
/* 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)) {
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;
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
void
Perl_init_constants(pTHX)
{
- dVAR;
SvREFCNT(&PL_sv_undef) = SvREFCNT_IMMORTAL;
SvFLAGS(&PL_sv_undef) = SVf_READONLY|SVf_PROTECT|SVt_NULL;
STATIC SV*
S_find_hash_subscript(pTHX_ const HV *const hv, const SV *const val)
{
- dVAR;
HE **array;
I32 i;
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;
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,
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.
#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) \
(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) \
/* ----*/
-#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) \
* 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)))
# 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__ */
# 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__ */
/* 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
&& 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
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; \
#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)) { \
+++ /dev/null
-/* 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;
-}
-
+++ /dev/null
-/* 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__
+++ /dev/null
-/* 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__
+++ /dev/null
-/* 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";
- }
- };
-}
+++ /dev/null
-/* 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;
-}
-
+++ /dev/null
-/* 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__ */
-
+++ /dev/null
-=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
-
+++ /dev/null
-/* 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;
-}
-
-
-
+++ /dev/null
-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
-
+++ /dev/null
-/* 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);
-}
-
+++ /dev/null
-/* 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__
+++ /dev/null
-/* 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__
+++ /dev/null
-/* 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
-{
-}
-
+++ /dev/null
-/* 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;
- };
- }
- };
-}
-
+++ /dev/null
-/* 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;
- };
- }
- };
-}
-
+++ /dev/null
-/* 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"; };
- }
- };
-}
-
-
-
+++ /dev/null
-/* 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);
- }
-}
+++ /dev/null
-/* 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__ */
-
-
+++ /dev/null
-=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
-
-
-
+++ /dev/null
-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
-
---
-
+++ /dev/null
-=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?)
-
+++ /dev/null
-PRJ_MMPFILES
-PerlApp.mmp
-PerlRecog.mmp
-
+++ /dev/null
-#!/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.
+++ /dev/null
-#!\\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'
+++ /dev/null
-use strict;
-use Cwd;
-my $CWD = getcwd();
-$CWD =~ s!^[a-z]:!!i;
-$CWD =~ s!/!\\!g;
-$CWD;
+++ /dev/null
-#!/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";
-
+++ /dev/null
-LIBRARY etel.lib gsmbas.lib\r
+++ /dev/null
-; 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
+++ /dev/null
-package Moped::Msg;
-use strict;
-use vars qw(@ISA $VERSION);
-require DynaLoader;
-@ISA = qw(DynaLoader);
-$VERSION = '0.01';
-bootstrap Moped::Msg;
-1;
-
+++ /dev/null
-#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)));
-
-
+++ /dev/null
-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).
-
-
-
-
+++ /dev/null
-PRJ_MMPFILES\r
-Msg.mmp\r
-PRJ_PLATFORMS\r
-wins thumb\r
+++ /dev/null
-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";
-
+++ /dev/null
-#!/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);
+++ /dev/null
-#!/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];
- }
-}
-
+++ /dev/null
-# 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
-
+++ /dev/null
-#!/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);
+++ /dev/null
-{
- dll => { MAJOR => 0, MINOR => 4, PATCH => 2 },
- ext => { MAJOR => 0, MINOR => 4, PATCH => 2 },
- lib => { MAJOR => 0, MINOR => 4, PATCH => 2 },
-}
-
+++ /dev/null
-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;
+++ /dev/null
-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
+++ /dev/null
-#!/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__
- }
-}
+++ /dev/null
-/*
- * 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); }
-}
-
+++ /dev/null
-/*
- * 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 */
-
+++ /dev/null
-/*
- * 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;
-}
-
+++ /dev/null
-/*
- * 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 */
-
+++ /dev/null
-/*
- * 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;
- }
-}
-
+++ /dev/null
-/*
- * 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
+++ /dev/null
-0x102015F3
+++ /dev/null
-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;
+++ /dev/null
-#!/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);
-
# 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
);
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;
# 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;
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
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 ($@, '');
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 ($@, '');
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 ($@, "");
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/);
}
# 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;
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
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
--- /dev/null
+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.
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' ;
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' ;
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' ;
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
# 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};
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();
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'); }
# 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);
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");
+}
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";
}
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");
}
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");
}
$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');
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');
}
# 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;
{
# [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");
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' }
"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;
}
use strict;
+use warnings;
use Config;
-plan tests => 1052;
+plan tests => 1054;
$| = 1;
# 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 {
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;
# test bitwise ops (regression bug)
{
+ no warnings 'numeric';
my $why = "y";
my $j = "x" | $why;
isnt_tainted($j);
our $has_fcntl;
BEGIN {
- eval { require Fcntl; import Fcntl; };
+ eval { require Fcntl; Fcntl->import; };
unless ($@) {
$has_fcntl = 1;
}
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");
}
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');
seek $fh, 0, 2 or die $!;
$tainted = <$fh>;
+ no warnings 'uninitialized';
eval 'eval $tainted';
like ($@, qr/^Insecure dependency in eval/);
}
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');
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) {
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) {
{
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),
{
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";
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");
}
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");
}
# 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]
{
# 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;
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
# 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
);
MRO::Compat
msgctl(2)
msgget(2)
+multidimensional
ndbm(3)
NgxQueue
nl_langinfo(3)
# - 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
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;
}
}
-# 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");
# 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.
};
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();
}
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)],
}
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
}
# [ 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
'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{}{#}/',
# 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.
*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)
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);
#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
};
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))
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");
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;
&& !instr(s,"indir")
&& instr(PL_origargv[0],"perl"))
{
- dVAR;
char **newargv;
*ipathend = '\0';
UNI(OP_CALLER);
case KEY_crypt:
-#ifdef FCRYPT
- if (!PL_cryptseen) {
- PL_cryptseen = TRUE;
- init_des();
- }
-#endif
+
LOP(OP_CRYPT,XTERM);
case KEY_chmod:
static int
yyl_keylookup(pTHX_ char *s, GV *gv)
{
- dVAR;
STRLEN len;
bool anydelim;
I32 key;
}
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)
int
Perl_yylex(pTHX)
{
- dVAR;
char *s = PL_bufptr;
if (UNLIKELY(PL_parser->recheck_utf8_validity)) {
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;
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) {
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)
XS(XS_NamedCapture_TIEHASH)
{
- dVAR; dXSARGS;
+ dXSARGS;
if (items < 1)
croak_xs_usage(cv, "package, ...");
{
XS(XS_NamedCapture_FETCH)
{
- dVAR; dXSARGS;
+ dXSARGS;
dXSI32;
PERL_UNUSED_VAR(cv); /* -W */
PERL_UNUSED_VAR(ax); /* -Wall */
XS(XS_NamedCapture_FIRSTKEY)
{
- dVAR; dXSARGS;
+ dXSARGS;
dXSI32;
PERL_UNUSED_VAR(cv); /* -W */
PERL_UNUSED_VAR(ax); /* -Wall */
/* is this still needed? */
XS(XS_NamedCapture_flags)
{
- dVAR; dXSARGS;
+ dXSARGS;
PERL_UNUSED_VAR(cv); /* -W */
PERL_UNUSED_VAR(ax); /* -Wall */
SP -= items;
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);
}
* 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) {
UV
Perl_to_uni_title(pTHX_ UV c, U8* p, STRLEN *lenp)
{
- dVAR;
PERL_ARGS_ASSERT_TO_UNI_TITLE;
if (c < 256) {
UV
Perl_to_uni_lower(pTHX_ UV c, U8* p, STRLEN *lenp)
{
- dVAR;
PERL_ARGS_ASSERT_TO_UNI_LOWER;
if (c < 256) {
* 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) {
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]);
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);
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);
* 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);
* sequence, and the entire sequence will be stored in *ustrp. ustrp will
* contain *lenp bytes */
- dVAR;
PERL_ARGS_ASSERT_TURKIC_LC;
assert(e > p0);
STRLEN *lenp,
bool flags)
{
- dVAR;
UV result;
PERL_ARGS_ASSERT__TO_UTF8_UPPER_FLAGS;
STRLEN *lenp,
bool flags)
{
- dVAR;
UV result;
PERL_ARGS_ASSERT__TO_UTF8_TITLE_FLAGS;
STRLEN *lenp,
bool flags)
{
- dVAR;
UV result;
PERL_ARGS_ASSERT__TO_UTF8_LOWER_FLAGS;
STRLEN *lenp,
U8 flags)
{
- dVAR;
UV result;
PERL_ARGS_ASSERT__TO_UTF8_FOLD_FLAGS;
/* 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 */
* 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
/* 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))
/*
* 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
*/
#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))))
/*
=cut
*/
#define UTF8_SAFE_SKIP(s, e) (__ASSERT_((e) >= (s)) \
- ((e) - (s)) <= 0 \
+ UNLIKELY(((e) - (s)) <= 0) \
? 0 \
: MIN(((e) - (s)), UTF8_SKIP(s)))
*/
#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
/* 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 \
/* 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)
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);
}
/*
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
const U8 *s;
STRLEN i;
STRLEN len;
- U32 frequency = 256;
MAGIC *mg;
- PERL_DEB( STRLEN rarest = 0 );
PERL_ARGS_ASSERT_FBM_COMPILE;
}
}
- 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));
}
STATIC bool
S_invoke_exception_hook(pTHX_ SV *ex, bool warn)
{
- dVAR;
HV *stash;
GV *gv;
CV *cv;
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)) &&
* 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
void
Perl_my_setenv(pTHX_ const char *nam, const char *val)
{
- dVAR;
# ifdef __amigaos4__
amigaos4_obtain_environ(__FUNCTION__);
# endif
void
Perl_my_setenv(pTHX_ const char *nam, const char *val)
{
- dVAR;
char *envstr;
const Size_t nlen = strlen(nam);
Size_t vlen;
#endif
{
#if defined(USE_ITHREADS)
- dVAR;
/* locks must be held in locking order (if any) */
# ifdef USE_PERLIO
MUTEX_LOCK(&PL_perlio_mutex);
#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);
struct sigaction act, oact;
#ifdef USE_ITHREADS
- dVAR;
/* only "parent" interpreter can diddle signals */
if (PL_curinterp != aTHX)
return (Sighandler_t) SIG_ERR;
Perl_rsignal_save(pTHX_ int signo, Sighandler_t handler, Sigsave_t *save)
{
#ifdef USE_ITHREADS
- dVAR;
#endif
struct sigaction act;
Perl_rsignal_restore(pTHX_ int signo, Sigsave_t *save)
{
#ifdef USE_ITHREADS
- dVAR;
#endif
PERL_UNUSED_CONTEXT;
#ifdef USE_ITHREADS
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)
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);
Perl_set_context(void *t)
{
#if defined(USE_ITHREADS)
- dVAR;
#endif
PERL_ARGS_ASSERT_SET_CONTEXT;
#if defined(USE_ITHREADS)
#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)
{
PPADDR_t*
Perl_get_ppaddr(pTHX)
{
- dVAR;
PERL_UNUSED_CONTEXT;
return (PPADDR_t*)PL_ppaddr;
}
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;
{
#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;
#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
#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
void
Perl_my_clearenv(pTHX)
{
- dVAR;
#if ! defined(PERL_MICRO)
# if defined(PERL_IMPLICIT_SYS) || defined(WIN32)
PerlEnv_clearenv();
#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).
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
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);
}
#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. */
#endif
-
#ifdef USE_DTRACE
/* log a sub call or return */
(((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
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;
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;
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;
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;
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.
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.
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;
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;
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.
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}';
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";
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;
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.
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;
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;
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;
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;
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;
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;
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!';
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;
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;
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;
#### 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)
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)
@ @[.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
$(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)
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_");
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));
# 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
# 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
..\mg.c \
..\numeric.c \
..\pad.c \
- ..\perlapi.c \
..\perly.c \
..\pp_sort.c \
..\reentr.c \
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 ..
-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
# 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
..\op.c \
..\pad.c \
..\perl.c \
- ..\perlapi.c \
..\perly.c \
..\pp.c \
..\pp_ctl.c \
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 ..
-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
if 0; # In case running under some shell
require 5;
+use ExtUtils::PL2Bat;
use Getopt::Std;
-use Config;
$0 =~ s|.*[/\\]||;
-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
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
# 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
..\mg.c \
..\numeric.c \
..\pad.c \
- ..\perlapi.c \
..\perly.c \
..\pp_sort.c \
..\reentr.c \
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 ..
-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
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()))
perl5303delta.pod \
perl5320delta.pod \
perl5330delta.pod \
+ perl5331delta.pod \
perl561delta.pod \
perl56delta.pod \
perl581delta.pod \
perl5303delta.man \
perl5320delta.man \
perl5330delta.man \
+ perl5331delta.man \
perl561delta.man \
perl56delta.man \
perl581delta.man \
perl5303delta.html \
perl5320delta.html \
perl5330delta.html \
+ perl5331delta.html \
perl561delta.html \
perl56delta.html \
perl581delta.html \
perl5303delta.tex \
perl5320delta.tex \
perl5330delta.tex \
+ perl5331delta.tex \
perl561delta.tex \
perl56delta.tex \
perl581delta.tex \
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;
static void
out_of_memory(void)
{
- dVAR;
if (PL_curinterp)
croak_no_mem();
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;
* 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) {
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 */
void
Perl_sys_intern_init(pTHX)
{
- dVAR;
int i;
w32_perlshell_tokens = NULL;
void
Perl_sys_intern_clear(pTHX)
{
- dVAR;
Safefree(w32_perlshell_tokens);
Safefree(w32_perlshell_vec);
# 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__
# 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 */
} 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
# 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 *);