From 07d7553544d4634c4c68f8f21bea9aded6aaa8f2 Mon Sep 17 00:00:00 2001 From: Alexandre Mestiashvili Date: Thu, 8 Sep 2016 11:31:42 +0200 Subject: [PATCH] New upstream version 3.015 --- Changes | 3 + Encoder.xs | 12 +- MANIFEST | 1 + META.json | 5 +- META.yml | 5 +- Makefile.PL | 1 - author_tools/hobodecoder.pl | 4 +- lib/Sereal/Encoder.pm | 2 +- lib/Sereal/Encoder/Constants.pm | 2 +- ppport.h | 1472 ++++++++++++++++++--------- snappy/csnappy_internal_userspace.h | 9 +- srl_common.h | 21 + srl_encoder.c | 14 +- srl_reader.h | 5 +- srl_reader_decompress.h | 2 + t/002_constants.t | 7 + t/003_ptable.t | 7 + t/010_desperate.t | 5 +- t/011_aliased_dedupe.t | 6 +- t/020_sort_keys.t | 18 +- t/021_sort_keys_option.t | 7 + t/022_canonical_refs.t | 7 + t/030_canonical_vs_test_deep.t | 9 +- t/110_nobless.t | 2 +- t/120_hdr_data.t | 4 +- t/130_freezethaw.t | 4 +- t/160_recursion.t | 3 +- t/170_cyclic_weakrefs.t | 4 +- t/180_magic_array.t | 19 + t/200_bulk.t | 2 +- t/300_fail.t | 6 +- t/900_reentrancy.t | 2 +- t/lib/Sereal/TestSet.pm | 10 +- 33 files changed, 1141 insertions(+), 539 deletions(-) create mode 100644 t/180_magic_array.t diff --git a/Changes b/Changes index 2bc43f9..0172dd8 100644 --- a/Changes +++ b/Changes @@ -5,6 +5,9 @@ Revision history for Perl extension Sereal-Encoder * of the decoder before upgrading to version 3 of the * * encoder! * **************************************************************** +3.015 Thu Sep 1 20:18:44 CEST 2016 + * Fix builds under 5.25+ + 3.014 Dec 7 2015 * Fix builds under 5.8.9 diff --git a/Encoder.xs b/Encoder.xs index b7d8e5a..ad55aec 100644 --- a/Encoder.xs +++ b/Encoder.xs @@ -88,14 +88,14 @@ THX_ck_entersub_args_sereal_encode_with_object(pTHX_ OP *entersubop, GV *namegv, entersubop = ck_entersub_args_proto(entersubop, namegv, ckobj); pushop = cUNOPx(entersubop)->op_first; - if (!pushop->op_sibling) + if (!OpHAS_SIBLING(pushop)) pushop = cUNOPx(pushop)->op_first; - firstargop = pushop->op_sibling; + firstargop = OpSIBLING(pushop); - for (cvop = firstargop; cvop->op_sibling; cvop = cvop->op_sibling) ; + for (cvop = firstargop; OpHAS_SIBLING(cvop); cvop = OpSIBLING(cvop)) ; for (arity = 0, lastargop = pushop, argop = firstargop; argop != cvop; - lastargop = argop, argop = argop->op_sibling) + lastargop = argop, argop = OpSIBLING(argop)) { arity++; } @@ -106,8 +106,8 @@ THX_ck_entersub_args_sereal_encode_with_object(pTHX_ OP *entersubop, GV *namegv, /* If we get here, we can replace the entersub with a suitable * sereal_encode_with_object custom OP. */ - pushop->op_sibling = cvop; - lastargop->op_sibling = NULL; + OpMORESIB_set(pushop, cvop); + OpLASTSIB_set(lastargop, op_parent(lastargop)); op_free(entersubop); newop = newUNOP(OP_NULL, 0, firstargop); newop->op_type = OP_CUSTOM; diff --git a/MANIFEST b/MANIFEST index e05928f..676c4a3 100644 --- a/MANIFEST +++ b/MANIFEST @@ -62,6 +62,7 @@ t/120_hdr_data.t t/130_freezethaw.t t/160_recursion.t t/170_cyclic_weakrefs.t +t/180_magic_array.t t/200_bulk.t t/300_fail.t t/400_evil.t diff --git a/META.json b/META.json index 7e38862..e603236 100644 --- a/META.json +++ b/META.json @@ -4,7 +4,7 @@ "Steffen Mueller , Yves Orton " ], "dynamic_config" : 1, - "generated_by" : "ExtUtils::MakeMaker version 7.1, CPAN::Meta::Converter version 2.150005", + "generated_by" : "ExtUtils::MakeMaker version 7.18, CPAN::Meta::Converter version 2.143240", "license" : [ "perl_5" ], @@ -60,6 +60,5 @@ "url" : "git://github.com/Sereal/Sereal.git" } }, - "version" : "3.014", - "x_serialization_backend" : "JSON::PP version 2.27300" + "version" : "3.015" } diff --git a/META.yml b/META.yml index 8b05079..396396f 100644 --- a/META.yml +++ b/META.yml @@ -16,7 +16,7 @@ build_requires: configure_requires: ExtUtils::MakeMaker: '7.0' dynamic_config: 1 -generated_by: 'ExtUtils::MakeMaker version 7.1, CPAN::Meta::Converter version 2.150005' +generated_by: 'ExtUtils::MakeMaker version 7.18, CPAN::Meta::Converter version 2.143240' license: perl meta-spec: url: http://module-build.sourceforge.net/META-spec-v1.4.html @@ -32,5 +32,4 @@ requires: resources: bugtracker: https://github.com/Sereal/Sereal/issues repository: git://github.com/Sereal/Sereal.git -version: '3.014' -x_serialization_backend: 'CPAN::Meta::YAML version 0.012' +version: '3.015' diff --git a/Makefile.PL b/Makefile.PL index 6fb2e43..f17ffd5 100644 --- a/Makefile.PL +++ b/Makefile.PL @@ -18,7 +18,6 @@ unshift @INC, ".", "./inc"; unshift @INC, $shared_dir, "$shared_dir/inc" if $in_source_repo; - my $module = "Sereal::Encoder"; require inc::Sereal::BuildTools; inc::Sereal::BuildTools::link_files($shared_dir) if $in_source_repo; diff --git a/author_tools/hobodecoder.pl b/author_tools/hobodecoder.pl index b29e692..e0a309d 100644 --- a/author_tools/hobodecoder.pl +++ b/author_tools/hobodecoder.pl @@ -41,7 +41,7 @@ BEGIN { my $done; my $data; -my $hlen; +my $hlen = -1; my $indent = ""; sub _chop_data_prefix { @@ -135,7 +135,7 @@ sub parse_sv { $done .= $t; my $o = ord($t); my $bv= $o; - my $high = $o > 128; + my $high = $o >= 128; $o -= 128 if $high; printf $fmt1, $p, $p-$hlen+1, $o, $high ? '*' : ' ', $bv, $ind; diff --git a/lib/Sereal/Encoder.pm b/lib/Sereal/Encoder.pm index a5b01c9..9bb0262 100644 --- a/lib/Sereal/Encoder.pm +++ b/lib/Sereal/Encoder.pm @@ -5,7 +5,7 @@ use warnings; use Carp qw/croak/; use XSLoader; -our $VERSION = '3.014'; # Don't forget to update the TestCompat set for testing against installed decoders! +our $VERSION = '3.015'; # Don't forget to update the TestCompat set for testing against installed decoders! our $XS_VERSION = $VERSION; $VERSION= eval $VERSION; # not for public consumption, just for testing. diff --git a/lib/Sereal/Encoder/Constants.pm b/lib/Sereal/Encoder/Constants.pm index 3c2e954..6a9662a 100644 --- a/lib/Sereal/Encoder/Constants.pm +++ b/lib/Sereal/Encoder/Constants.pm @@ -4,7 +4,7 @@ use warnings; require Exporter; our @ISA= qw(Exporter); -our $VERSION = '3.014'; # Don't forget to update the TestCompat set for testing against installed encoders! +our $VERSION = '3.015'; # Don't forget to update the TestCompat set for testing against installed encoders! our (@EXPORT_OK, %DEFINE, %TAG_INFO_HASH, @TAG_INFO_ARRAY); diff --git a/ppport.h b/ppport.h index bb661ff..aa2e932 100644 --- a/ppport.h +++ b/ppport.h @@ -4,9 +4,9 @@ /* ---------------------------------------------------------------------- - ppport.h -- Perl/Pollution/Portability Version 3.20 + ppport.h -- Perl/Pollution/Portability Version 3.32 - Automatically created by Devel::PPPort running under perl 5.012004. + Automatically created by Devel::PPPort running under perl 5.024000. Do NOT edit this file directly! -- Edit PPPort_pm.PL and the includes in parts/inc/ instead. @@ -21,7 +21,7 @@ SKIP =head1 NAME -ppport.h - Perl/Pollution/Portability version 3.20 +ppport.h - Perl/Pollution/Portability version 3.32 =head1 SYNOPSIS @@ -56,7 +56,7 @@ ppport.h - Perl/Pollution/Portability version 3.20 =head1 COMPATIBILITY This version of F is designed to support operation with Perl -installations back to 5.003, and has been tested up to 5.11.5. +installations back to 5.003, and has been tested up to 5.20. =head1 OPTIONS @@ -79,7 +79,7 @@ to be installed on your system. If this option is given, a copy of each file will be saved with the given suffix that contains the suggested changes. This does not require any external programs. Note that this does not -automagially add a dot between the original filename and the +automagically add a dot between the original filename and the suffix. If you want the dot, you have to include it in the option argument. @@ -219,6 +219,7 @@ same function or variable in your project. ----------------------------------------------------------------------------------------- PL_parser NEED_PL_parser NEED_PL_parser_GLOBAL PL_signals NEED_PL_signals NEED_PL_signals_GLOBAL + caller_cx() NEED_caller_cx NEED_caller_cx_GLOBAL eval_pv() NEED_eval_pv NEED_eval_pv_GLOBAL grok_bin() NEED_grok_bin NEED_grok_bin_GLOBAL grok_hex() NEED_grok_hex NEED_grok_hex_GLOBAL @@ -226,6 +227,7 @@ same function or variable in your project. grok_numeric_radix() NEED_grok_numeric_radix NEED_grok_numeric_radix_GLOBAL grok_oct() NEED_grok_oct NEED_grok_oct_GLOBAL load_module() NEED_load_module NEED_load_module_GLOBAL + mg_findext() NEED_mg_findext NEED_mg_findext_GLOBAL my_snprintf() NEED_my_snprintf NEED_my_snprintf_GLOBAL my_sprintf() NEED_my_sprintf NEED_my_sprintf_GLOBAL my_strlcat() NEED_my_strlcat NEED_my_strlcat_GLOBAL @@ -245,6 +247,7 @@ same function or variable in your project. sv_pvn_force_flags() NEED_sv_pvn_force_flags NEED_sv_pvn_force_flags_GLOBAL sv_setpvf_mg() NEED_sv_setpvf_mg NEED_sv_setpvf_mg_GLOBAL sv_setpvf_mg_nocontext() NEED_sv_setpvf_mg_nocontext NEED_sv_setpvf_mg_nocontext_GLOBAL + sv_unmagicext() NEED_sv_unmagicext NEED_sv_unmagicext_GLOBAL vload_module() NEED_vload_module NEED_vload_module_GLOBAL vnewSVpvf() NEED_vnewSVpvf NEED_vnewSVpvf_GLOBAL warner() NEED_warner NEED_warner_GLOBAL @@ -325,7 +328,7 @@ before sending a bug report. If F was generated using the latest version of C and is causing failure of this module, please -file a bug report using the CPAN Request Tracker at L. +file a bug report here: L Please include the following information: @@ -358,7 +361,7 @@ module from CPAN. =head1 COPYRIGHT -Version 3.x, Copyright (c) 2004-2010, Marcus Holland-Moritz. +Version 3.x, Copyright (c) 2004-2013, Marcus Holland-Moritz. Version 2.x, Copyright (C) 2001, Paul Marquess. @@ -378,7 +381,7 @@ use strict; # Disable broken TRIE-optimization BEGIN { eval '${^RE_TRIE_MAXBUF} = -1' if $] >= 5.009004 && $] <= 5.009005 } -my $VERSION = 3.20; +my $VERSION = 3.32; my %opt = ( quiet => 0, @@ -445,11 +448,12 @@ my %API = map { /^(\w+)\|([^|]*)\|([^|]*)\|(\w*)$/ (index($4, 'n') >= 0 ? ( nothxarg => 1 ) : ()), } ) : die "invalid spec: $_" } qw( +ASCII_TO_NEED||5.007001|n AvFILLp|5.004050||p AvFILL||| -BhkDISABLE||5.014000| -BhkENABLE||5.014000| -BhkENTRY_set||5.014000| +BhkDISABLE||5.021008| +BhkENABLE||5.021008| +BhkENTRY_set||5.021008| BhkENTRY||| BhkFLAGS||| CALL_BLOCK_HOOKS||| @@ -468,9 +472,9 @@ CopSTASHPV|5.006000||p CopSTASH_eq|5.006000||p CopSTASH_set|5.006000||p CopSTASH|5.006000||p -CopyD|5.009002||p +CopyD|5.009002|5.004050|p Copy||| -CvPADLIST||| +CvPADLIST||5.008001| CvSTASH||| CvWEAKOUTSIDE||| DEFSV_set|5.010001||p @@ -493,21 +497,28 @@ G_NOARGS||| G_SCALAR||| G_VOID||5.004000| GetVars||| +GvAV||| +GvCV||| +GvHV||| GvSVn|5.009003||p GvSV||| Gv_AMupdate||5.011000| -HEf_SVKEY||5.004000| -HeHASH||5.004000| -HeKEY||5.004000| -HeKLEN||5.004000| +HEf_SVKEY|5.003070||p +HeHASH||5.003070| +HeKEY||5.003070| +HeKLEN||5.003070| HePV||5.004000| -HeSVKEY_force||5.004000| +HeSVKEY_force||5.003070| HeSVKEY_set||5.004000| -HeSVKEY||5.004000| -HeUTF8||5.010001| -HeVAL||5.004000| +HeSVKEY||5.003070| +HeUTF8|5.010001|5.008000|p +HeVAL||5.003070| +HvENAMELEN||5.015004| +HvENAMEUTF8||5.015004| HvENAME||5.013007| HvNAMELEN_get|5.009003||p +HvNAMELEN||5.015004| +HvNAMEUTF8||5.015004| HvNAME_get|5.009003||p HvNAME||| INT2PTR|5.006000||p @@ -528,12 +539,15 @@ LEAVE||| LINKLIST||5.013006| LVRET||| MARK||| -MULTICALL||5.014000| +MULTICALL||5.021008| +MUTABLE_PTR|5.010001||p +MUTABLE_SV|5.010001||p MY_CXT_CLONE|5.009002||p MY_CXT_INIT|5.007003||p MY_CXT|5.007003||p -MoveD|5.009002||p +MoveD|5.009002|5.004050|p Move||| +NATIVE_TO_NEED||5.007001|n NOOP|5.005000||p NUM2PTR|5.006000||p NVTYPE|5.006000||p @@ -551,7 +565,12 @@ Nullsv||| OP_CLASS||5.013007| OP_DESC||5.007003| OP_NAME||5.007003| +OP_TYPE_IS_OR_WAS||5.019010| +OP_TYPE_IS||5.019007| ORIGMARK||| +OpHAS_SIBLING||5.021007| +OpSIBLING_set||5.021007| +OpSIBLING||5.021007| PAD_BASE_SV||| PAD_CLONE_VARS||| PAD_COMPNAME_FLAGS||| @@ -560,7 +579,6 @@ PAD_COMPNAME_GEN||| PAD_COMPNAME_OURSTASH||| PAD_COMPNAME_PV||| PAD_COMPNAME_TYPE||| -PAD_DUP||| PAD_RESTORE_LOCAL||| PAD_SAVE_LOCAL||| PAD_SAVE_SETNULLPAD||| @@ -572,13 +590,13 @@ PAD_SV||| PERLIO_FUNCS_CAST|5.009003||p PERLIO_FUNCS_DECL|5.009003||p PERL_ABS|5.008001||p -PERL_BCDVERSION|5.014000||p +PERL_BCDVERSION|5.021008||p PERL_GCC_BRACE_GROUPS_FORBIDDEN|5.008001||p -PERL_HASH|5.004000||p -PERL_INT_MAX|5.004000||p -PERL_INT_MIN|5.004000||p -PERL_LONG_MAX|5.004000||p -PERL_LONG_MIN|5.004000||p +PERL_HASH|5.003070||p +PERL_INT_MAX|5.003070||p +PERL_INT_MIN|5.003070||p +PERL_LONG_MAX|5.003070||p +PERL_LONG_MIN|5.003070||p PERL_MAGIC_arylen|5.007002||p PERL_MAGIC_backref|5.007002||p PERL_MAGIC_bm|5.007002||p @@ -590,14 +608,14 @@ PERL_MAGIC_envelem|5.007002||p PERL_MAGIC_env|5.007002||p PERL_MAGIC_ext|5.007002||p PERL_MAGIC_fm|5.007002||p -PERL_MAGIC_glob|5.014000||p +PERL_MAGIC_glob|5.021008||p PERL_MAGIC_isaelem|5.007002||p PERL_MAGIC_isa|5.007002||p -PERL_MAGIC_mutex|5.014000||p +PERL_MAGIC_mutex|5.021008||p PERL_MAGIC_nkeys|5.007002||p -PERL_MAGIC_overload_elem|5.007002||p +PERL_MAGIC_overload_elem|5.021008||p PERL_MAGIC_overload_table|5.007002||p -PERL_MAGIC_overload|5.007002||p +PERL_MAGIC_overload|5.021008||p PERL_MAGIC_pos|5.007002||p PERL_MAGIC_qr|5.007002||p PERL_MAGIC_regdata|5.007002||p @@ -632,46 +650,50 @@ PERL_PV_PRETTY_LTGT|5.009004||p PERL_PV_PRETTY_NOCLEAR|5.010000||p PERL_PV_PRETTY_QUOTE|5.009004||p PERL_PV_PRETTY_REGPROP|5.009004||p -PERL_QUAD_MAX|5.004000||p -PERL_QUAD_MIN|5.004000||p +PERL_QUAD_MAX|5.003070||p +PERL_QUAD_MIN|5.003070||p PERL_REVISION|5.006000||p PERL_SCAN_ALLOW_UNDERSCORES|5.007003||p PERL_SCAN_DISALLOW_PREFIX|5.007003||p PERL_SCAN_GREATER_THAN_UV_MAX|5.007003||p PERL_SCAN_SILENT_ILLDIGIT|5.008001||p -PERL_SHORT_MAX|5.004000||p -PERL_SHORT_MIN|5.004000||p +PERL_SHORT_MAX|5.003070||p +PERL_SHORT_MIN|5.003070||p PERL_SIGNALS_UNSAFE_FLAG|5.008001||p PERL_SUBVERSION|5.006000||p PERL_SYS_INIT3||5.006000| PERL_SYS_INIT||| -PERL_SYS_TERM||5.014000| -PERL_UCHAR_MAX|5.004000||p -PERL_UCHAR_MIN|5.004000||p -PERL_UINT_MAX|5.004000||p -PERL_UINT_MIN|5.004000||p -PERL_ULONG_MAX|5.004000||p -PERL_ULONG_MIN|5.004000||p +PERL_SYS_TERM||5.021008| +PERL_UCHAR_MAX|5.003070||p +PERL_UCHAR_MIN|5.003070||p +PERL_UINT_MAX|5.003070||p +PERL_UINT_MIN|5.003070||p +PERL_ULONG_MAX|5.003070||p +PERL_ULONG_MIN|5.003070||p PERL_UNUSED_ARG|5.009003||p PERL_UNUSED_CONTEXT|5.009004||p PERL_UNUSED_DECL|5.007002||p PERL_UNUSED_VAR|5.007002||p -PERL_UQUAD_MAX|5.004000||p -PERL_UQUAD_MIN|5.004000||p +PERL_UQUAD_MAX|5.003070||p +PERL_UQUAD_MIN|5.003070||p PERL_USE_GCC_BRACE_GROUPS|5.009004||p -PERL_USHORT_MAX|5.004000||p -PERL_USHORT_MIN|5.004000||p +PERL_USHORT_MAX|5.003070||p +PERL_USHORT_MIN|5.003070||p PERL_VERSION|5.006000||p PL_DBsignal|5.005000||p PL_DBsingle|||pn PL_DBsub|||pn PL_DBtrace|||pn PL_Sv|5.005000||p -PL_bufend|5.014000||p -PL_bufptr|5.014000||p +PL_bufend|5.021008||p +PL_bufptr|5.021008||p +PL_check||5.006000| PL_compiling|5.004050||p -PL_copline|5.014000||p +PL_comppad_name||5.017004| +PL_comppad||5.008001| +PL_copline|5.021008||p PL_curcop|5.004050||p +PL_curpad||5.005000| PL_curstash|5.004050||p PL_debstash|5.004050||p PL_defgv|5.004050||p @@ -679,31 +701,31 @@ PL_diehook|5.004050||p PL_dirty|5.004050||p PL_dowarn|||pn PL_errgv|5.004050||p -PL_error_count|5.014000||p -PL_expect|5.014000||p +PL_error_count|5.021008||p +PL_expect|5.021008||p PL_hexdigit|5.005000||p PL_hints|5.005000||p -PL_in_my_stash|5.014000||p -PL_in_my|5.014000||p +PL_in_my_stash|5.021008||p +PL_in_my|5.021008||p PL_keyword_plugin||5.011002| PL_last_in_gv|||n PL_laststatval|5.005000||p -PL_lex_state|5.014000||p -PL_lex_stuff|5.014000||p -PL_linestr|5.014000||p +PL_lex_state|5.021008||p +PL_lex_stuff|5.021008||p +PL_linestr|5.021008||p PL_modglobal||5.005000|n PL_na|5.004050||pn PL_no_modify|5.006000||p PL_ofsgv|||n PL_opfreehook||5.011000|n -PL_parser|5.009005|5.009005|p +PL_parser|5.009005||p PL_peepp||5.007003|n PL_perl_destruct_level|5.004050||p PL_perldb|5.004050||p PL_ppaddr|5.006000||p PL_rpeepp||5.013005|n -PL_rsfp_filters|5.014000||p -PL_rsfp|5.014000||p +PL_rsfp_filters|5.021008||p +PL_rsfp|5.021008||p PL_rs|||n PL_signals|5.008001||p PL_stack_base|5.004050||p @@ -716,8 +738,8 @@ PL_sv_undef|5.004050||pn PL_sv_yes|5.004050||pn PL_tainted|5.004050||p PL_tainting|5.004050||p -PL_tokenbuf|5.014000||p -POP_MULTICALL||5.014000| +PL_tokenbuf|5.021008||p +POP_MULTICALL||5.021008| POPi|||n POPl|||n POPn|||n @@ -732,7 +754,7 @@ PTR2nat|5.009003||p PTR2ul|5.007001||p PTRV|5.006000||p PUSHMARK||| -PUSH_MULTICALL||5.014000| +PUSH_MULTICALL||5.021008| PUSHi||| PUSHmortal|5.009002||p PUSHn||| @@ -740,6 +762,29 @@ PUSHp||| PUSHs||| PUSHu|5.004000||p PUTBACK||| +PadARRAY||5.021008| +PadMAX||5.021008| +PadlistARRAY||5.021008| +PadlistMAX||5.021008| +PadlistNAMESARRAY||5.021008| +PadlistNAMESMAX||5.021008| +PadlistNAMES||5.021008| +PadlistREFCNT||5.017004| +PadnameIsOUR||| +PadnameIsSTATE||| +PadnameLEN||5.021008| +PadnameOURSTASH||| +PadnameOUTER||| +PadnamePV||5.021008| +PadnameREFCNT_dec||5.021008| +PadnameREFCNT||5.021008| +PadnameSV||5.021008| +PadnameTYPE||| +PadnameUTF8||5.021007| +PadnamelistARRAY||5.021008| +PadnamelistMAX||5.021008| +PadnamelistREFCNT_dec||5.021008| +PadnamelistREFCNT||5.021008| PerlIO_clearerr||5.007003| PerlIO_close||5.007003| PerlIO_context_layers||5.009004| @@ -753,6 +798,8 @@ PerlIO_get_bufsiz||5.007003| PerlIO_get_cnt||5.007003| PerlIO_get_ptr||5.007003| PerlIO_read||5.007003| +PerlIO_restore_errno||| +PerlIO_save_errno||| PerlIO_seek||5.007003| PerlIO_set_cnt||5.007003| PerlIO_set_ptrcnt||5.007003| @@ -768,6 +815,7 @@ PoisonFree|5.009004||p PoisonNew|5.009004||p PoisonWith|5.009004||p Poison|5.008000||p +READ_XDIGIT||5.017006| RETVAL|||n Renewc||| Renew||| @@ -797,16 +845,26 @@ SV_UTF8_NO_ENCODING|5.008001||p SVfARG|5.009005||p SVf_UTF8|5.006000||p SVf|5.006000||p +SVt_INVLIST||5.019002| SVt_IV||| +SVt_NULL||| SVt_NV||| SVt_PVAV||| SVt_PVCV||| +SVt_PVFM||| +SVt_PVGV||| SVt_PVHV||| +SVt_PVIO||| +SVt_PVIV||| +SVt_PVLV||| SVt_PVMG||| +SVt_PVNV||| SVt_PV||| +SVt_REGEXP||5.011000| Safefree||| Slab_Alloc||| Slab_Free||| +Slab_to_ro||| Slab_to_rw||| StructCopy||| SvCUR_set||| @@ -877,7 +935,7 @@ SvPV_nolen_const|5.009003||p SvPV_nolen|5.006000||p SvPV_nomg_const_nolen|5.009003||p SvPV_nomg_const|5.009003||p -SvPV_nomg_nolen||5.013007| +SvPV_nomg_nolen|5.013007||p SvPV_nomg|5.007002||p SvPV_renew|5.009003||p SvPV_set||| @@ -893,6 +951,7 @@ SvPVutf8x||5.006000| SvPVutf8||5.006000| SvPVx||| SvPV||| +SvREFCNT_dec_NN||5.017007| SvREFCNT_dec||| SvREFCNT_inc_NN|5.009004||p SvREFCNT_inc_simple_NN|5.009004||p @@ -923,6 +982,7 @@ SvTAINTED_off||5.004000| SvTAINTED_on||5.004000| SvTAINTED||5.004000| SvTAINT||| +SvTHINKFIRST||| SvTRUE_nomg||5.013006| SvTRUE||| SvTYPE||| @@ -951,7 +1011,7 @@ UVuf|5.006000||p UVxf|5.006000||p WARN_ALL|5.006000||p WARN_AMBIGUOUS|5.006000||p -WARN_ASSERTIONS|5.014000||p +WARN_ASSERTIONS|5.021008||p WARN_BAREWORD|5.006000||p WARN_CLOSED|5.006000||p WARN_CLOSURE|5.006000||p @@ -996,6 +1056,7 @@ WARN_UNPACK|5.006000||p WARN_UNTIE|5.006000||p WARN_UTF8|5.006000||p WARN_VOID|5.006000||p +WIDEST_UTYPE|5.015004||p XCPT_CATCH|5.009002||p XCPT_RETHROW|5.009002||p XCPT_TRY_END|5.009002||p @@ -1023,52 +1084,106 @@ XST_mPV||| XST_mUNDEF||| XST_mUV|5.008001||p XST_mYES||| -XS_APIVERSION_BOOTCHECK||5.013004| -XS_VERSION_BOOTCHECK||| +XS_APIVERSION_BOOTCHECK||5.021008| +XS_EXTERNAL||5.021008| +XS_INTERNAL||5.021008| +XS_VERSION_BOOTCHECK||5.021008| XS_VERSION||| XSprePUSH|5.006000||p XS||| -XopDISABLE||5.014000| -XopENABLE||5.014000| -XopENTRY_set||5.014000| -XopENTRY||5.014000| +XopDISABLE||5.021008| +XopENABLE||5.021008| +XopENTRYCUSTOM||5.021008| +XopENTRY_set||5.021008| +XopENTRY||5.021008| XopFLAGS||5.013007| ZeroD|5.009002||p Zero||| _aMY_CXT|5.007003||p +_add_range_to_invlist||| _append_range_to_invlist||| +_core_swash_init||| +_get_encoding||| +_get_regclass_nonbitmap_data||| +_get_swash_invlist||| +_invlist_array_init|||n +_invlist_contains_cp|||n +_invlist_contents||| +_invlist_dump||| +_invlist_intersection_maybe_complement_2nd||| +_invlist_intersection||| +_invlist_invert||| +_invlist_len|||n +_invlist_populate_swatch|||n +_invlist_search|||n +_invlist_subtract||| +_invlist_union_maybe_complement_2nd||| +_invlist_union||| +_is_cur_LC_category_utf8||| +_is_in_locale_category||5.021001| +_is_uni_FOO||5.017008| +_is_uni_perl_idcont||5.017008| +_is_uni_perl_idstart||5.017007| +_is_utf8_FOO||5.017008| +_is_utf8_char_slow||5.021001|n +_is_utf8_idcont||5.021001| +_is_utf8_idstart||5.021001| +_is_utf8_mark||5.017008| +_is_utf8_perl_idcont||5.017008| +_is_utf8_perl_idstart||5.017007| +_is_utf8_xidcont||5.021001| +_is_utf8_xidstart||5.021001| +_load_PL_utf8_foldclosures||| +_make_exactf_invlist||| +_new_invlist_C_array||| _new_invlist||| _pMY_CXT|5.007003||p +_setup_canned_invlist||| _swash_inversion_hash||| _swash_to_invlist||| +_to_fold_latin1||| +_to_uni_fold_flags||5.014000| +_to_upper_title_latin1||| +_to_utf8_fold_flags||5.019009| +_to_utf8_lower_flags||5.019009| +_to_utf8_title_flags||5.019009| +_to_utf8_upper_flags||5.019009| +_warn_problematic_locale|||n aMY_CXT_|5.007003||p aMY_CXT|5.007003||p -aTHXR_|5.014000||p -aTHXR|5.014000||p +aTHXR_|5.021008||p +aTHXR|5.021008||p aTHX_|5.006000||p aTHX|5.006000||p -add_alternate||| +aassign_common_vars||| +add_above_Latin1_folds||| add_cp_to_invlist||| add_data|||n -add_range_to_invlist||| +add_multi_match||| add_utf16_textfilter||| -addmad||| +adjust_size_and_find_bucket|||n +advance_one_SB||| +advance_one_WB||| +alloc_maybe_populate_EXACT||| +alloccopstash||| allocmy||| amagic_call||| amagic_cmp_locale||| amagic_cmp||| amagic_deref_call||5.013007| amagic_i_ncmp||| +amagic_is_enabled||| amagic_ncmp||| anonymise_cv_maybe||| any_dup||| ao||| -append_madprops||| +append_utf8_from_native_byte||5.019004|n apply_attrs_my||| apply_attrs_string||5.006001| apply_attrs||| apply||| assert_uft8_cache_coherent||| +assignment_type||| atfork_lock||5.007003|n atfork_unlock||5.007003|n av_arylen_p||5.009003| @@ -1077,6 +1192,7 @@ av_create_and_push||5.009005| av_create_and_unshift_one||5.009005| av_delete||5.006000| av_exists||5.006000| +av_extend_guts||| av_extend||| av_fetch||| av_fill||| @@ -1088,14 +1204,19 @@ av_push||| av_reify||| av_shift||| av_store||| +av_tindex||5.017009| +av_top_index||5.017009| av_undef||| av_unshift||| ax|||n -bad_type||| +backup_one_SB||| +backup_one_WB||| +bad_type_gv||| +bad_type_pv||| bind_match||| -block_end||| +block_end||5.004000| block_gimme||5.004000| -block_start||| +block_start||5.004000| blockhook_register||5.013003| boolSV|5.004000||p boot_core_PerlIO||| @@ -1103,7 +1224,6 @@ boot_core_UNIVERSAL||| boot_core_mro||| bytes_cmp_utf8||5.013007| bytes_from_utf8||5.007001| -bytes_to_uni|||n bytes_to_utf8||5.006001| call_argv|5.006000||p call_atexit||5.006000| @@ -1111,19 +1231,20 @@ call_list||5.004000| call_method|5.006000||p call_pv|5.006000||p call_sv|5.006000||p -caller_cx||5.013005| +caller_cx|5.013005|5.006000|p calloc||5.007002|n cando||| -cast_i32||5.006000| -cast_iv||5.006000| -cast_ulong||5.006000| -cast_uv||5.006000| +cast_i32||5.006000|n +cast_iv||5.006000|n +cast_ulong||5.006000|n +cast_uv||5.006000|n +check_locale_boundary_crossing||| check_type_and_open||| check_uni||| check_utf8_print||| checkcomma||| -checkposixcc||| ckWARN|5.006000||p +ck_entersub_args_core||| ck_entersub_args_list||5.013006| ck_entersub_args_proto_or_list||5.013006| ck_entersub_args_proto||5.013006| @@ -1132,22 +1253,22 @@ ck_warner||5.011001|v ckwarn_common||| ckwarn_d||5.009003| ckwarn||5.009003| -cl_and|||n -cl_anything|||n -cl_init|||n -cl_is_anything|||n -cl_or|||n clear_placeholders||| +clear_special_blocks||| clone_params_del|||n clone_params_new|||n closest_cop||| -convert||| +cntrl_to_mnemonic|||n +compute_EXACTish|||n +construct_ahocorasick_from_trie||| +cop_fetch_label||5.015001| cop_free||| cop_hints_2hv||5.013007| cop_hints_fetch_pvn||5.013007| cop_hints_fetch_pvs||5.013007| cop_hints_fetch_pv||5.013007| cop_hints_fetch_sv||5.013007| +cop_store_label||5.015001| cophh_2hv||5.013007| cophh_copy||5.013007| cophh_delete_pvn||5.013007| @@ -1159,32 +1280,46 @@ cophh_fetch_pvs||5.013007| cophh_fetch_pv||5.013007| cophh_fetch_sv||5.013007| cophh_free||5.013007| -cophh_new_empty||5.014000| +cophh_new_empty||5.021008| cophh_store_pvn||5.013007| cophh_store_pvs||5.013007| cophh_store_pv||5.013007| cophh_store_sv||5.013007| +core_prototype||| +coresub_op||| +could_it_be_a_POSIX_class|||n cr_textfilter||| create_eval_scope||| -croak_no_modify||5.013003| +croak_memory_wrap||5.019003|n +croak_no_mem|||n +croak_no_modify||5.013003|n croak_nocontext|||vn +croak_popstack|||n croak_sv||5.013001| -croak_xs_usage||5.010001| +croak_xs_usage||5.010001|n croak|||v csighandler||5.009003|n -curmad||| +current_re_engine||| curse||| custom_op_desc||5.007003| +custom_op_get_field||| custom_op_name||5.007003| custom_op_register||5.013007| custom_op_xop||5.013007| -cv_ckproto_len||| +cv_ckproto_len_flags||| +cv_clone_into||| cv_clone||| -cv_const_sv||5.004000| +cv_const_sv_or_av|||n +cv_const_sv||5.003070|n cv_dump||| +cv_forget_slab||| cv_get_call_checker||5.013006| +cv_name||5.021005| +cv_set_call_checker_flags||5.021004| cv_set_call_checker||5.013006| +cv_undef_flags||| cv_undef||| +cvgv_from_hek||| cvgv_set||| cvstash_set||| cx_dump||5.005000| @@ -1201,7 +1336,7 @@ dNOOP|5.006000||p dORIGMARK||| dSP||| dTHR|5.004050||p -dTHXR|5.014000||p +dTHXR|5.021008||p dTHXa|5.006000||p dTHXoa|5.006000||p dTHX|5.006000||p @@ -1222,6 +1357,7 @@ debstackptrs||5.007003| debstack||5.007003| debug_start_match||| deb||5.007003|v +defelem_target||| del_sv||| delete_eval_scope||| delimcpy||5.004000|n @@ -1256,14 +1392,15 @@ do_join||| do_magic_dump||5.006000| do_msgrcv||| do_msgsnd||| +do_ncmp||| do_oddball||| do_op_dump||5.006000| -do_op_xmldump||| +do_open6||| do_open9||5.006000| +do_open_raw||| do_openn||5.007001| -do_open||5.004000| +do_open||5.003070| do_pmop_dump||5.006000| -do_pmop_xmldump||| do_print||| do_readline||| do_seek||| @@ -1304,11 +1441,13 @@ dopoptowhen||| doref||5.009003| dounwind||| dowantarray||| +drand48_init_r|||n +drand48_r|||n dump_all_perl||| dump_all||5.006000| +dump_c_backtrace||| dump_eval||5.006000| dump_exec_pos||| -dump_fds||| dump_form||5.006000| dump_indent||5.006000|v dump_mstats||| @@ -1331,23 +1470,29 @@ expect_number||| fbm_compile||5.005000| fbm_instr||5.005000| feature_is_enabled||| -fetch_cop_label||5.011000| filter_add||| filter_del||| filter_gets||| filter_read||| +finalize_optree||| +finalize_op||| find_and_forget_pmops||| find_array_subscript||| find_beginning||| find_byclass||| +find_default_stash||| find_hash_subscript||| find_in_my_stash||| +find_lexical_cv||| +find_runcv_where||| find_runcv||5.008001| +find_rundefsv2||| find_rundefsvoffset||5.009002| find_rundefsv||5.013002| find_script||| find_uninit_var||| first_symbol|||n +fixup_errno_string||| foldEQ_latin1||5.013008|n foldEQ_locale||5.013002|n foldEQ_utf8_flags||5.013010| @@ -1355,6 +1500,7 @@ foldEQ_utf8||5.013002| foldEQ||5.013002|n fold_constants||| forbid_setid||| +force_ident_maybe_lex||| force_ident||| force_list||| force_next||| @@ -1363,15 +1509,21 @@ force_version||| force_word||| forget_pmop||| form_nocontext|||vn +form_short_octal_warning||| form||5.004000|v fp_dup||| fprintf_nocontext|||vn +free_c_backtrace||| free_global_struct||| free_tied_hv_pool||| free_tmps||| gen_constant_list||| +get_ANYOF_cp_list_for_ssc||| +get_and_check_backslash_N_name||| get_aux_mg||| get_av|5.006000||p +get_c_backtrace_dump||| +get_c_backtrace||| get_context||5.006000|n get_cvn_flags|5.009005||p get_cvs|5.011000||p @@ -1380,6 +1532,9 @@ get_db_sub||| get_debug_opts||| get_hash_seed||| get_hv|5.006000||p +get_invlist_iter_addr|||n +get_invlist_offset_addr|||n +get_invlist_previous_index_addr|||n get_mstats||| get_no_modify||| get_num||| @@ -1394,14 +1549,18 @@ getcwd_sv||5.007002| getenv_len||| glob_2number||| glob_assign_glob||| -glob_assign_ref||| gp_dup||| gp_free||| gp_ref||| +grok_atoUV|||n grok_bin|5.007003||p +grok_bslash_N||| grok_bslash_c||| grok_bslash_o||| +grok_bslash_x||| grok_hex|5.007003||p +grok_infnan||5.021004| +grok_number_flags||5.021002| grok_number|5.007002||p grok_numeric_radix|5.007002||p grok_oct|5.007003||p @@ -1412,45 +1571,66 @@ gv_IOadd||| gv_SVadd||| gv_add_by_type||5.011000| gv_autoload4||5.004000| +gv_autoload_pvn||5.015004| +gv_autoload_pv||5.015004| +gv_autoload_sv||5.015004| gv_check||| gv_const_sv||5.009003| gv_dump||5.006000| -gv_efullname3||5.004000| +gv_efullname3||5.003070| gv_efullname4||5.006001| gv_efullname||| -gv_ename||| gv_fetchfile_flags||5.009005| gv_fetchfile||| gv_fetchmeth_autoload||5.007003| +gv_fetchmeth_internal||| +gv_fetchmeth_pv_autoload||5.015004| +gv_fetchmeth_pvn_autoload||5.015004| +gv_fetchmeth_pvn||5.015004| +gv_fetchmeth_pv||5.015004| +gv_fetchmeth_sv_autoload||5.015004| +gv_fetchmeth_sv||5.015004| gv_fetchmethod_autoload||5.004000| -gv_fetchmethod_flags||5.011000| +gv_fetchmethod_pv_flags||5.015004| +gv_fetchmethod_pvn_flags||5.015004| +gv_fetchmethod_sv_flags||5.015004| gv_fetchmethod||| gv_fetchmeth||| gv_fetchpvn_flags|5.009002||p gv_fetchpvs|5.009004||p gv_fetchpv||| gv_fetchsv|5.009002||p -gv_fullname3||5.004000| +gv_fullname3||5.003070| gv_fullname4||5.006001| gv_fullname||| -gv_get_super_pkg||| gv_handler||5.007001| -gv_init_sv||| +gv_init_pvn||5.015004| +gv_init_pv||5.015004| +gv_init_svtype||| +gv_init_sv||5.015004| gv_init||| +gv_is_in_main||| gv_magicalize_isa||| -gv_magicalize_overload||| +gv_magicalize||| gv_name_set||5.009004| -gv_stashpvn|5.004000||p +gv_override||| +gv_setref||| +gv_stashpvn_internal||| +gv_stashpvn|5.003070||p gv_stashpvs|5.009003||p gv_stashpv||| +gv_stashsvpvn_cached||| gv_stashsv||| gv_try_downgrade||| +handle_regex_sets||| he_dup||| hek_dup||| +hfree_next_entry||| hfreeentries||| hsplit||| hv_assert||| -hv_auxinit|||n +hv_auxinit_internal|||n +hv_auxinit||| hv_backreferences_p||| hv_clear_placeholders||5.009001| hv_clear||| @@ -1459,39 +1639,41 @@ hv_common||5.010000| hv_copy_hints_hv||5.009004| hv_delayfree_ent||5.004000| hv_delete_common||| -hv_delete_ent||5.004000| +hv_delete_ent||5.003070| hv_delete||| hv_eiter_p||5.009003| hv_eiter_set||5.009003| hv_ename_add||| hv_ename_delete||| -hv_exists_ent||5.004000| +hv_exists_ent||5.003070| hv_exists||| -hv_fetch_ent||5.004000| +hv_fetch_ent||5.003070| hv_fetchs|5.009003||p hv_fetch||| hv_fill||5.013002| +hv_free_ent_ret||| hv_free_ent||5.004000| hv_iterinit||| -hv_iterkeysv||5.004000| +hv_iterkeysv||5.003070| hv_iterkey||| hv_iternext_flags||5.008000| hv_iternextsv||| hv_iternext||| hv_iterval||| hv_kill_backrefs||| -hv_ksplit||5.004000| +hv_ksplit||5.003070| hv_magic_check|||n hv_magic||| hv_name_set||5.009003| hv_notallowed||| hv_placeholders_get||5.009003| -hv_placeholders_p||5.009003| +hv_placeholders_p||| hv_placeholders_set||5.009003| +hv_rand_set||5.018000| hv_riter_p||5.009003| hv_riter_set||5.009003| hv_scalar||5.009001| -hv_store_ent||5.004000| +hv_store_ent||5.003070| hv_store_flags||5.008000| hv_stores|5.009004||p hv_store||| @@ -1506,6 +1688,7 @@ incpush_use_sep||| incpush||| ingroup||| init_argv_symbols||| +init_constants||| init_dbargs||| init_debugger||| init_global_struct||| @@ -1519,54 +1702,72 @@ init_postdump_symbols||| init_predump_symbols||| init_stacks||5.005000| init_tm||5.007002| +inplace_aassign||| instr|||n -intro_my||| +intro_my||5.004000| intuit_method||| intuit_more||| invert||| -invlist_array||| -invlist_destroy||| +invlist_array|||n +invlist_clone||| invlist_extend||| -invlist_intersection||| -invlist_len||| -invlist_max||| -invlist_set_array||| +invlist_highest|||n +invlist_is_iterating|||n +invlist_iterfinish|||n +invlist_iterinit|||n +invlist_iternext|||n +invlist_max|||n +invlist_previous_index|||n invlist_set_len||| -invlist_set_max||| -invlist_trim||| -invlist_union||| +invlist_set_previous_index|||n +invlist_trim|||n invoke_exception_hook||| io_close||| isALNUMC|5.006000||p +isALNUM_lazy||5.021001| +isALPHANUMERIC||5.017008| isALPHA||| isASCII|5.006000||p isBLANK|5.006001||p isCNTRL|5.006000||p isDIGIT||| +isFOO_lc||| +isFOO_utf8_lc||| +isGCB|||n isGRAPH|5.006000||p isGV_with_GP|5.009004||p +isIDCONT||5.017008| +isIDFIRST_lazy||5.021001| +isIDFIRST||| isLOWER||| isOCTAL||5.013005| isPRINT|5.004000||p isPSXSPC|5.006001||p isPUNCT|5.006000||p +isSB||| isSPACE||| isUPPER||| +isUTF8_CHAR||5.021001| +isWB||| isWORDCHAR||5.013006| isXDIGIT|5.006000||p is_an_int||| -is_ascii_string||5.011000|n -is_gv_magical_sv||| +is_ascii_string||5.011000| is_handle_constructor|||n -is_inplace_av||| -is_list_assignment||| +is_invariant_string||5.021007|n is_lvalue_sub||5.007001| +is_safe_syscall||5.019004| +is_ssc_worth_it|||n is_uni_alnum_lc||5.006000| +is_uni_alnumc_lc||5.017007| +is_uni_alnumc||5.017007| is_uni_alnum||5.006000| is_uni_alpha_lc||5.006000| is_uni_alpha||5.006000| is_uni_ascii_lc||5.006000| is_uni_ascii||5.006000| +is_uni_blank_lc||5.017002| +is_uni_blank||5.017002| is_uni_cntrl_lc||5.006000| is_uni_cntrl||5.006000| is_uni_digit_lc||5.006000| @@ -1587,20 +1788,12 @@ is_uni_upper_lc||5.006000| is_uni_upper||5.006000| is_uni_xdigit_lc||5.006000| is_uni_xdigit||5.006000| -is_utf8_X_LVT||| -is_utf8_X_LV_LVT_V||| -is_utf8_X_LV||| -is_utf8_X_L||| -is_utf8_X_T||| -is_utf8_X_V||| -is_utf8_X_begin||| -is_utf8_X_extend||| -is_utf8_X_non_hangul||| -is_utf8_X_prepend||| +is_utf8_alnumc||5.017007| is_utf8_alnum||5.006000| is_utf8_alpha||5.006000| is_utf8_ascii||5.006000| -is_utf8_char_slow|||n +is_utf8_blank||5.017002| +is_utf8_char_buf||5.015008|n is_utf8_char||5.006000|n is_utf8_cntrl||5.006000| is_utf8_common||| @@ -1624,12 +1817,15 @@ is_utf8_xdigit||5.006000| is_utf8_xidcont||5.013010| is_utf8_xidfirst||5.013010| isa_lookup||| +isinfnansv||| +isinfnan||5.021004|n items|||n ix|||n jmaybe||| join_exact||| keyword_plugin_standard||| keyword||| +leave_common||| leave_scope||| lex_bufutf8||5.011002| lex_discard_to||5.011002| @@ -1663,21 +1859,21 @@ mXPUSHn|5.009002||p mXPUSHp|5.009002||p mXPUSHs|5.010001||p mXPUSHu|5.009002||p -mad_free||| -madlex||| -madparse||| magic_clear_all_env||| +magic_cleararylen_p||| magic_clearenv||| magic_clearhints||| magic_clearhint||| magic_clearisa||| magic_clearpack||| magic_clearsig||| +magic_copycallchecker||| magic_dump||5.006000| magic_existspack||| magic_freearylen_p||| magic_freeovrld||| magic_getarylen||| +magic_getdebugvar||| magic_getdefelem||| magic_getnkeys||| magic_getpack||| @@ -1689,7 +1885,6 @@ magic_getuvar||| magic_getvec||| magic_get||| magic_killbackrefs||| -magic_len||| magic_methcall1||| magic_methcall|||v magic_methpack||| @@ -1699,14 +1894,15 @@ magic_regdatum_get||| magic_regdatum_set||| magic_scalarpack||| magic_set_all_env||| -magic_setamagic||| magic_setarylen||| magic_setcollxfrm||| magic_setdbline||| +magic_setdebugvar||| magic_setdefelem||| magic_setenv||| magic_sethint||| magic_setisa||| +magic_setlvref||| magic_setmglob||| magic_setnkeys||| magic_setpack||| @@ -1722,13 +1918,14 @@ magic_set||| magic_sizepack||| magic_wipepack||| make_matcher||| -make_trie_failtable||| make_trie||| malloc_good_size|||n malloced_size|||n malloc||5.007002|n -markstack_grow||| +markstack_grow||5.021001| matcher_matches_sv||| +maybe_multimagic_gv||| +mayberelocate||| measure_struct||| memEQs|5.009005||p memEQ|5.004000||p @@ -1740,29 +1937,30 @@ mess_alloc||| mess_nocontext|||vn mess_sv||5.013001| mess||5.006000|v -method_common||| mfree||5.007002|n mg_clear||| mg_copy||| mg_dup||| -mg_findext||5.013008| -mg_find||| +mg_find_mglob||| +mg_findext|5.013008||pn +mg_find|||n mg_free_type||5.013006| mg_free||| mg_get||| mg_length||5.005000| mg_localize||| -mg_magical||| +mg_magical|||n mg_set||| mg_size||5.005000| -mini_mktime||5.007002| +mini_mktime||5.007002|n +minus_v||| missingterm||| mode_from_discipline||| modkids||| -mod||| more_bodies||| more_sv||| moreswitches||| +move_proto_attr||| mro_clean_isarev||| mro_gather_and_rename||| mro_get_from_name||5.010001| @@ -1779,67 +1977,42 @@ mro_set_mro||5.010001| mro_set_private_data||5.010001| mul128||| mulexp10|||n -munge_qwlist_to_paren_list||| +multideref_stringify||| my_atof2||5.007002| my_atof||5.006000| my_attrs||| my_bcopy|||n -my_betoh16|||n -my_betoh32|||n -my_betoh64|||n -my_betohi|||n -my_betohl|||n -my_betohs|||n +my_bytes_to_utf8|||n my_bzero|||n my_chsize||| my_clearenv||| my_cxt_index||| my_cxt_init||| -my_dirfd||5.009005| +my_dirfd||5.009005|n my_exit_jump||| my_exit||| my_failure_exit||5.004000| my_fflush_all||5.006000| my_fork||5.007003|n -my_htobe16|||n -my_htobe32|||n -my_htobe64|||n -my_htobei|||n -my_htobel|||n -my_htobes|||n -my_htole16|||n -my_htole32|||n -my_htole64|||n -my_htolei|||n -my_htolel|||n -my_htoles|||n -my_htonl||| my_kid||| -my_letoh16|||n -my_letoh32|||n -my_letoh64|||n -my_letohi|||n -my_letohl|||n -my_letohs|||n my_lstat_flags||| -my_lstat||5.014000| -my_memcmp||5.004000|n +my_lstat||5.021008| +my_memcmp|||n my_memset|||n -my_ntohl||| -my_pclose||5.004000| +my_pclose||5.003070| my_popen_list||5.007001| -my_popen||5.004000| +my_popen||5.003070| my_setenv||| +my_setlocale||| my_snprintf|5.009004||pvn my_socketpair||5.007003|n my_sprintf|5.009003||pvn my_stat_flags||| -my_stat||5.014000| +my_stat||5.021008| +my_strerror||5.021001| my_strftime||5.007002| my_strlcat|5.009004||pn my_strlcpy|5.009004||pn -my_swabn|||n -my_swap||| my_unexec||| my_vsnprintf||5.009004|n need_utf8|||n @@ -1848,14 +2021,16 @@ newANONHASH||| newANONLIST||| newANONSUB||| newASSIGNOP||| +newATTRSUB_x||| newATTRSUB||5.006000| newAVREF||| newAV||| newBINOP||| newCONDOP||| +newCONSTSUB_flags||5.015006| newCONSTSUB|5.004050||p newCVREF||| -newDEFSVOP||| +newDEFSVOP||5.021006| newFORM||| newFOROP||5.013007| newGIVENOP||5.009003| @@ -1863,6 +2038,7 @@ newGIVWHENOP||| newGP||| newGVOP||| newGVREF||| +newGVgen_flags||5.015004| newGVgen||| newHVREF||| newHVhv||5.005000| @@ -1872,11 +2048,15 @@ newLISTOP||| newLOGOP||| newLOOPEX||| newLOOPOP||| -newMADPROP||| -newMADsv||| -newMYSUB||| +newMETHOP_internal||| +newMETHOP_named||5.021005| +newMETHOP||5.021005| +newMYSUB||5.017004| newNULLLIST||| newOP||| +newPADNAMELIST||5.021007|n +newPADNAMEouter||5.021007|n +newPADNAMEpvn||5.021007|n newPADOP||| newPMOP||| newPROG||| @@ -1887,13 +2067,16 @@ newRV_noinc|5.004000||p newRV||| newSLICEOP||| newSTATEOP||| +newSTUB||| newSUB||| newSVOP||| newSVREF||| newSV_type|5.009005||p +newSVavdefelem||| newSVhek||5.009003| newSViv||| newSVnv||| +newSVpadname||5.017004| newSVpv_share||5.013006| newSVpvf_nocontext|||vn newSVpvf||5.004000|v @@ -1909,11 +2092,13 @@ newSVrv||| newSVsv||| newSVuv|5.006000||p newSV||| -newTOKEN||| +newUNOP_AUX||5.021007| newUNOP||| newWHENOP||5.009003| newWHILEOP||5.013007| +newXS_deffile||| newXS_flags||5.009004| +newXS_len_flags||| newXSproto||5.006000| newXS||5.006000| new_collate||5.006000| @@ -1932,7 +2117,9 @@ ninstr|||n no_bareword_allowed||| no_fh_allowed||| no_op||| +noperl_die|||vn not_a_number||| +not_incrementable||| nothreadhook||5.008000| nuke_stacks||| num_overflow|||n @@ -1941,24 +2128,33 @@ oopsHV||| op_append_elem||5.013006| op_append_list||5.013006| op_clear||| -op_const_sv||| op_contextualize||5.013006| +op_convert_list||5.021006| op_dump||5.006000| op_free||| -op_getmad_weak||| -op_getmad||| +op_integerize||| op_linklist||5.013006| +op_lvalue_flags||| op_lvalue||5.013007| op_null||5.007002| +op_parent||5.021002|n op_prepend_elem||5.013006| op_refcnt_dec||| op_refcnt_inc||| op_refcnt_lock||5.009002| op_refcnt_unlock||5.009002| +op_relocate_sv||| op_scope||5.013007| -op_xmldump||| +op_sibling_splice||5.021002|n +op_std_init||| +op_unscope||| open_script||| -opt_scalarhv||| +openn_cleanup||| +openn_setup||| +opmethod_stash||| +opslab_force_free||| +opslab_free_nopad||| +opslab_free||| pMY_CXT_|5.007003||p pMY_CXT|5.007003||p pTHX_|5.006000||p @@ -1969,43 +2165,61 @@ pack_rec||| package_version||| package||| packlist||5.008001| -pad_add_anon||| -pad_add_name_sv||| -pad_add_name||| +pad_add_anon||5.008001| +pad_add_name_pvn||5.015001| +pad_add_name_pvs||5.015001| +pad_add_name_pv||5.015001| +pad_add_name_sv||5.015001| +pad_add_weakref||| +pad_alloc_name||| pad_alloc||| pad_block_start||| pad_check_dup||| -pad_compname_type||| +pad_compname_type||5.009003| pad_findlex||| -pad_findmy||5.011002| +pad_findmy_pvn||5.015001| +pad_findmy_pvs||5.015001| +pad_findmy_pv||5.015001| +pad_findmy_sv||5.015001| pad_fixup_inner_anons||| pad_free||| pad_leavemy||| -pad_new||| -pad_peg|||n +pad_new||5.008001| pad_push||| pad_reset||| pad_setsv||| pad_sv||| pad_swipe||| -pad_tidy||| +pad_tidy||5.008001| padlist_dup||| +padlist_store||| +padname_dup||| +padname_free||| +padnamelist_dup||| +padnamelist_fetch||5.021007|n +padnamelist_free||| +padnamelist_store||5.021007| parse_arithexpr||5.013008| parse_barestmt||5.013007| parse_block||5.013007| parse_body||| parse_fullexpr||5.013008| parse_fullstmt||5.013005| +parse_gv_stash_name||| +parse_ident||| parse_label||5.013007| parse_listexpr||5.013008| +parse_lparen_question_flags||| parse_stmtseq||5.013006| +parse_subsignature||| parse_termexpr||5.013008| parse_unicode_opts||| parser_dup||| +parser_free_nexttoke_ops||| parser_free||| -path_is_absolute|||n +path_is_searchable|||n peep||| -pending_Slabs_to_ro||| +pending_ident||| perl_alloc_using|||n perl_alloc|||n perl_clone_using|||n @@ -2018,20 +2232,20 @@ perl_run|||n pidgone||| pm_description||| pmop_dump||5.006000| -pmop_xmldump||| pmruntime||| pmtrans||| pop_scope||| +populate_ANYOF_from_invlist||| populate_isa|||v pregcomp||5.009005| pregexec||| pregfree2||5.011000| pregfree||| -prepend_madprops||| prescan_version||5.011004| printbuf||| printf_nocontext|||vn process_special_blocks||| +ptr_hash|||n ptr_table_clear||5.009005| ptr_table_fetch||5.009005| ptr_table_find|||n @@ -2040,24 +2254,28 @@ ptr_table_new||5.009005| ptr_table_split||5.009005| ptr_table_store||5.009005| push_scope||| -put_byte||| +put_charclass_bitmap_innards||| +put_code_point||| +put_range||| pv_display|5.006000||p pv_escape|5.009004||p pv_pretty|5.009004||p pv_uni_display||5.007003| qerror||| qsortsvu||| +quadmath_format_needed|||n +quadmath_format_single|||n re_compile||5.009005| re_croak2||| re_dup_guts||| -re_intuit_start||5.009005| +re_intuit_start||5.019001| re_intuit_string||5.006000| -readpipe_override||| +re_op_compile||| realloc||5.007002|n -reentrant_free||| -reentrant_init||| -reentrant_retry|||vn -reentrant_size||| +reentrant_free||5.021008| +reentrant_init||5.021008| +reentrant_retry||5.021008|vn +reentrant_size||5.021008| ref_array_or_hash||| refcounted_he_chain_2hv||| refcounted_he_fetch_pvn||| @@ -2073,8 +2291,9 @@ refcounted_he_new_sv||| refcounted_he_value||| refkids||| refto||| -ref||5.014000| -reg_check_named_buff_matched||| +ref||5.021008| +reg2Lanode||| +reg_check_named_buff_matched|||n reg_named_buff_all||5.009005| reg_named_buff_exists||5.009005| reg_named_buff_fetch||5.009005| @@ -2083,7 +2302,6 @@ reg_named_buff_iter||| reg_named_buff_nextkey||5.009005| reg_named_buff_scalar||5.009005| reg_named_buff||| -reg_namedseq||| reg_node||| reg_numbered_buff_fetch||| reg_numbered_buff_length||| @@ -2091,7 +2309,7 @@ reg_numbered_buff_store||| reg_qr_package||| reg_recode||| reg_scan_name||| -reg_skipcomment||| +reg_skipcomment|||n reg_temp_copy||| reganode||| regatom||| @@ -2100,8 +2318,9 @@ regclass_swash||5.009004| regclass||| regcppop||| regcppush||| -regcurly||| +regcurly|||n regdump_extflags||| +regdump_intflags||| regdump||5.005000| regdupe_internal||| regexec_flags||5.005000| @@ -2114,6 +2333,8 @@ reginitcolors||5.006000| reginsert||| regmatch||| regnext||5.005000| +regnode_guts||| +regpatws|||n regpiece||| regpposixcc||| regprop||| @@ -2121,11 +2342,10 @@ regrepeat||| regtail_study||| regtail||| regtry||| -reguni||| -regwhite|||n reg||| repeatcpy|||n report_evil_fh||| +report_redefined_cv||| report_uninit||| report_wrongway_fh||| require_pv||5.006000| @@ -2157,6 +2377,7 @@ save_I8||5.006000| save_adelete||5.011000| save_aelem_flags||5.011000| save_aelem||5.004050| +save_aliased_sv||| save_alloc||5.006000| save_aptr||| save_ary||| @@ -2184,7 +2405,7 @@ save_iv||5.005000| save_lines||| save_list||| save_long||| -save_magic||| +save_magic_flags||| save_mortalizesv||5.007001| save_nogv||| save_op||5.005000| @@ -2200,6 +2421,7 @@ save_scalar||| save_set_svflags||5.009000| save_shared_pvref||5.007003| save_sptr||| +save_strlen||| save_svref||| save_vptr||5.006000| savepvn||| @@ -2236,28 +2458,24 @@ scan_trans||| scan_version||5.009001| scan_vstring||5.009005| scan_word||| -screaminstr||5.005000| search_const||| seed||5.008001| sequence_num||| -sequence_tail||| -sequence||| +set_ANYOF_arg||| +set_caret_X||| set_context||5.006000|n set_numeric_local||5.006000| set_numeric_radix||5.006000| set_numeric_standard||5.006000| -set_regclass_bit_fold||| -set_regclass_bit||| +set_padlist|||n setdefout||| share_hek_flags||| share_hek||5.004000| +should_warn_nl|||n si_dup||| sighandler|||n simplify_sort||| -skipspace0||| -skipspace1||| -skipspace2||| -skipspace||| +skipspace_flags||| softref2xv||| sortcv_stacked||| sortcv_xsub||| @@ -2266,13 +2484,22 @@ sortsv_flags||5.009003| sortsv||5.007003| space_join_names_mortal||| ss_dup||| +ssc_add_range||| +ssc_and||| +ssc_anything||| +ssc_clear_locale|||n +ssc_cp_and||| +ssc_finalize||| +ssc_init||| +ssc_intersection||| +ssc_is_anything|||n +ssc_is_cp_posixl_init|||n +ssc_or||| +ssc_union||| stack_grow||| -start_force||| start_glob||| start_subparse||5.004000| -stashpv_hvname_match||5.014000| stdize_locale||| -store_cop_label||| strEQ||| strGE||| strGT||| @@ -2310,8 +2537,10 @@ sv_2uv_flags||5.009001| sv_2uv|5.004000||p sv_add_arena||| sv_add_backref||| -sv_backoff||| +sv_backoff|||n sv_bless||| +sv_buf_to_ro||| +sv_buf_to_rw||| sv_cat_decode||5.008001| sv_catpv_flags||5.013006| sv_catpv_mg|5.004050||p @@ -2333,9 +2562,6 @@ sv_catsv_flags||5.007002| sv_catsv_mg|5.004050||p sv_catsv_nomg|5.007002||p sv_catsv||| -sv_catxmlpvn||| -sv_catxmlpv||| -sv_catxmlsv||| sv_chop||| sv_clean_all||| sv_clean_objs||| @@ -2346,14 +2572,21 @@ sv_cmp_locale||5.004000| sv_cmp||| sv_collxfrm_flags||5.013006| sv_collxfrm||| -sv_compile_2op_is_broken||| -sv_compile_2op||5.008001| -sv_copypv||5.007003| +sv_copypv_flags||5.017002| +sv_copypv_nomg||5.017002| +sv_copypv||| sv_dec_nomg||5.013002| sv_dec||| sv_del_backref||| +sv_derived_from_pvn||5.015004| +sv_derived_from_pv||5.015004| +sv_derived_from_sv||5.015004| sv_derived_from||5.004000| sv_destroyable||5.010000| +sv_display||| +sv_does_pvn||5.015004| +sv_does_pv||5.015004| +sv_does_sv||5.015004| sv_does||5.009004| sv_dump||| sv_dup_common||| @@ -2368,7 +2601,8 @@ sv_force_normal||5.006000| sv_free2||| sv_free_arenas||| sv_free||| -sv_gets||5.004000| +sv_get_backrefs||5.021008|n +sv_gets||5.003070| sv_grow||| sv_i_ncmp||| sv_inc_nomg||5.013002| @@ -2379,11 +2613,14 @@ sv_isa||| sv_isobject||| sv_iv||5.005000| sv_kill_backrefs||| +sv_len_utf8_nomg||| sv_len_utf8||5.006000| sv_len||| -sv_magic_portable|5.014000|5.004000|p +sv_magic_portable|5.021008|5.004000|p +sv_magicext_mglob||| sv_magicext||5.007003| sv_magic||| +sv_mortalcopy_flags||| sv_mortalcopy||| sv_ncmp||| sv_newmortal||| @@ -2392,7 +2629,10 @@ sv_nolocking||5.007003| sv_nosharing||5.007003| sv_nounlocking||| sv_nv||5.005000| +sv_only_taint_gmagic|||n +sv_or_pv_pos_u2b||| sv_peek||5.005000| +sv_pos_b2u_flags||5.019003| sv_pos_b2u_midway||| sv_pos_b2u||5.006000| sv_pos_u2b_cached||| @@ -2413,11 +2653,14 @@ sv_pvutf8||5.006000| sv_pv||5.006000| sv_recode_to_utf8||5.007003| sv_reftype||| +sv_ref||| sv_release_COW||| sv_replace||| sv_report_used||| +sv_resetpvn||| sv_reset||| sv_rvweaken||5.006000| +sv_sethek||| sv_setiv_mg|5.004050||p sv_setiv||| sv_setnv_mg|5.006000||p @@ -2437,7 +2680,7 @@ sv_setpv||| sv_setref_iv||| sv_setref_nv||| sv_setref_pvn||| -sv_setref_pvs||5.013006| +sv_setref_pvs||5.021008| sv_setref_pv||| sv_setref_uv||5.007001| sv_setsv_cow||| @@ -2452,7 +2695,7 @@ sv_taint||5.004000| sv_true||5.005000| sv_unglob||| sv_uni_display||5.007003| -sv_unmagicext||5.013008| +sv_unmagicext|5.013008||p sv_unmagic||| sv_unref_flags||5.007001| sv_unref||| @@ -2470,17 +2713,19 @@ sv_utf8_upgrade_nomg||5.007002| sv_utf8_upgrade||5.007001| sv_uv|5.005000||p sv_vcatpvf_mg|5.006000|5.004000|p +sv_vcatpvfn_flags||5.017002| sv_vcatpvfn||5.004000| sv_vcatpvf|5.006000|5.004000|p sv_vsetpvf_mg|5.006000|5.004000|p sv_vsetpvfn||5.004000| sv_vsetpvf|5.006000|5.004000|p -sv_xmlpeek||| svtype||| swallow_bom||| swash_fetch||5.007002| -swash_get||| swash_init||5.006000| +swash_scan_list_line||| +swatch_get||| +sync_locale||5.021004| sys_init3||5.010000|n sys_init||5.010000|n sys_intern_clear||| @@ -2490,10 +2735,23 @@ sys_term||5.010000|n taint_env||| taint_proper||| tied_method|||v -tmps_grow||5.006000| +tmps_grow_p||| +toFOLD_uni||5.007003| +toFOLD_utf8||5.019001| +toFOLD||5.019001| +toLOWER_L1||5.019001| +toLOWER_LC||5.004000| +toLOWER_uni||5.007003| +toLOWER_utf8||5.015007| toLOWER||| +toTITLE_uni||5.007003| +toTITLE_utf8||5.015007| +toTITLE||5.019001| +toUPPER_uni||5.007003| +toUPPER_utf8||5.015007| toUPPER||| to_byte_substr||| +to_lower_latin1|||n to_uni_fold||5.007003| to_uni_lower_lc||5.006000| to_uni_lower||5.007003| @@ -2502,18 +2760,17 @@ to_uni_title||5.007003| to_uni_upper_lc||5.006000| to_uni_upper||5.007003| to_utf8_case||5.007003| -to_utf8_fold||5.007003| -to_utf8_lower||5.007003| +to_utf8_fold||5.015007| +to_utf8_lower||5.015007| to_utf8_substr||| -to_utf8_title||5.007003| -to_utf8_upper||5.007003| -token_free||| -token_getmad||| +to_utf8_title||5.015007| +to_utf8_upper||5.015007| tokenize_use||| tokeq||| tokereport||| -too_few_arguments||| -too_many_arguments||| +too_few_arguments_pv||| +too_many_arguments_pv||| +translate_substr_offsets|||n try_amagic_bin||| try_amagic_un||| uiv_2buf|||n @@ -2524,7 +2781,7 @@ unpackstring||5.008001| unreferenced_to_tmp_stack||| unshare_hek_or_pvn||| unshare_hek||| -unsharepvn||5.004000| +unsharepvn||5.003070| unwind_handler_stack||| update_debugger_info||| upg_version||5.009005| @@ -2533,20 +2790,26 @@ utf16_textfilter||| utf16_to_utf8_reversed||5.006001| utf16_to_utf8||5.006001| utf8_distance||5.006000| -utf8_hop||5.006000| +utf8_hop||5.006000|n utf8_length||5.007001| utf8_mg_len_cache_update||| utf8_mg_pos_cache_update||| utf8_to_bytes||5.006001| +utf8_to_uvchr_buf||5.015009| utf8_to_uvchr||5.007001| +utf8_to_uvuni_buf||5.015009| utf8_to_uvuni||5.007001| -utf8n_to_uvchr||| +utf8n_to_uvchr||5.007001| utf8n_to_uvuni||5.007001| utilize||| uvchr_to_utf8_flags||5.007003| -uvchr_to_utf8||| +uvchr_to_utf8||5.007001| +uvoffuni_to_utf8_flags||5.019004| uvuni_to_utf8_flags||5.007003| uvuni_to_utf8||5.007001| +valid_utf8_to_uvchr||5.015009| +valid_utf8_to_uvuni||5.015009| +validate_proto||| validate_suid||| varname||| vcmp||5.009000| @@ -2571,24 +2834,21 @@ warn_sv||5.013001| warner_nocontext|||vn warner|5.006000|5.004000|pv warn|||v +was_lvalue_sub||| watch||| +whichsig_pvn||5.015004| +whichsig_pv||5.015004| +whichsig_sv||5.015004| whichsig||| +win32_croak_not_implemented|||n with_queued_errors||| -write_no_mem||| +wrap_op_checker||5.015008| write_to_stderr||| -xmldump_all_perl||| -xmldump_all||| -xmldump_attr||| -xmldump_eval||| -xmldump_form||| -xmldump_indent|||v -xmldump_packsubs_perl||| -xmldump_packsubs||| -xmldump_sub_perl||| -xmldump_sub||| -xmldump_vindent||| -xs_apiversion_bootcheck||| +xs_boot_epilog||| +xs_handshake|||vn xs_version_bootcheck||| +yyerror_pvn||| +yyerror_pv||| yyerror||| yylex||| yyparse||| @@ -3696,6 +3956,10 @@ __DATA__ # define IVSIZE 8 #endif +#ifndef LONGSIZE +# define LONGSIZE 8 +#endif + #ifndef PERL_QUAD_MIN # define PERL_QUAD_MIN IV_MIN #endif @@ -3717,6 +3981,10 @@ __DATA__ # define IVTYPE long #endif +#ifndef LONGSIZE +# define LONGSIZE 4 +#endif + #ifndef IV_MIN # define IV_MIN PERL_LONG_MIN #endif @@ -3998,15 +4266,15 @@ typedef NVTYPE NV; #undef STMT_START #undef STMT_END #ifdef PERL_USE_GCC_BRACE_GROUPS -# define STMT_START (void)( /* gcc supports ``({ STATEMENTS; })'' */ -# define STMT_END ) +# define STMT_START (void)( /* gcc supports ``({ STATEMENTS; })'' */ +# define STMT_END ) #else # if defined(VOIDFLAGS) && (VOIDFLAGS) && (defined(sun) || defined(__sun__)) && !defined(__GNUC__) -# define STMT_START if (1) -# define STMT_END else (void)0 +# define STMT_START if (1) +# define STMT_END else (void)0 # else -# define STMT_START do -# define STMT_END while (0) +# define STMT_START do +# define STMT_END while (0) # endif #endif #ifndef boolSV @@ -4119,13 +4387,13 @@ typedef NVTYPE NV; #endif #ifndef PERL_HASH # define PERL_HASH(hash,str,len) \ - STMT_START { \ - const char *s_PeRlHaSh = str; \ - I32 i_PeRlHaSh = len; \ - U32 hash_PeRlHaSh = 0; \ - while (i_PeRlHaSh--) \ - hash_PeRlHaSh = hash_PeRlHaSh * 33 + *s_PeRlHaSh++; \ - (hash) = hash_PeRlHaSh; \ + STMT_START { \ + const char *s_PeRlHaSh = str; \ + I32 i_PeRlHaSh = len; \ + U32 hash_PeRlHaSh = 0; \ + while (i_PeRlHaSh--) \ + hash_PeRlHaSh = hash_PeRlHaSh * 33 + *s_PeRlHaSh++; \ + (hash) = hash_PeRlHaSh; \ } STMT_END #endif @@ -4197,16 +4465,26 @@ typedef OP* (CPERLscope(*Perl_check_t)) (pTHX_ OP*); */ # undef isPRINT # endif + +#ifdef HAS_QUAD +# ifdef U64TYPE +# define WIDEST_UTYPE U64TYPE +# else +# define WIDEST_UTYPE Quad_t +# endif +#else +# define WIDEST_UTYPE U32 +#endif #ifndef isALNUMC # define isALNUMC(c) (isALPHA(c) || isDIGIT(c)) #endif #ifndef isASCII -# define isASCII(c) ((U8) (c) <= 127) +# define isASCII(c) ((WIDEST_UTYPE) (c) <= 127) #endif #ifndef isCNTRL -# define isCNTRL(c) ((U8) (c) < ' ' || (c) == 127) +# define isCNTRL(c) ((WIDEST_UTYPE) (c) < ' ' || (c) == 127) #endif #ifndef isGRAPH @@ -4227,6 +4505,16 @@ typedef OP* (CPERLscope(*Perl_check_t)) (pTHX_ OP*); #endif +/* Until we figure out how to support this in older perls... */ +#if (PERL_BCDVERSION >= 0x5008000) +#ifndef HeUTF8 +# define HeUTF8(he) ((HeKLEN(he) == HEf_SVKEY) ? \ + SvUTF8(HeKEY_sv(he)) : \ + (U32)HeKUTF8(he)) +#endif + +#endif + #ifndef PERL_SIGNALS_UNSAFE_FLAG #define PERL_SIGNALS_UNSAFE_FLAG 0x0001 @@ -4460,16 +4748,16 @@ extern yy_parser DPPP_(dummy_PL_parser); #endif #ifndef G_METHOD -# define G_METHOD 64 +# define G_METHOD 64 # ifdef call_sv # undef call_sv # endif # if (PERL_BCDVERSION < 0x5006000) # define call_sv(sv, flags) ((flags) & G_METHOD ? perl_call_method((char *) SvPV_nolen_const(sv), \ - (flags) & ~G_METHOD) : perl_call_sv(sv, flags)) + (flags) & ~G_METHOD) : perl_call_sv(sv, flags)) # else # define call_sv(sv, flags) ((flags) & G_METHOD ? Perl_call_method(aTHX_ (char *) SvPV_nolen_const(sv), \ - (flags) & ~G_METHOD) : Perl_call_sv(aTHX_ sv, flags)) + (flags) & ~G_METHOD) : Perl_call_sv(aTHX_ sv, flags)) # endif #endif @@ -4506,7 +4794,7 @@ DPPP_(my_eval_pv)(char *p, I32 croak_on_error) PUTBACK; if (croak_on_error && SvTRUE(GvSV(errgv))) - croak(SvPVx(GvSV(errgv), na)); + croak(SvPVx(GvSV(errgv), na)); return sv; } @@ -4546,40 +4834,43 @@ DPPP_(my_vload_module)(U32 flags, SV *name, SV *ver, va_list *args) SvREADONLY_off(((SVOP*)modname)->op_sv); modname->op_private |= OPpCONST_BARE; if (ver) { - veop = newSVOP(OP_CONST, 0, ver); + veop = newSVOP(OP_CONST, 0, ver); } else - veop = NULL; + veop = NULL; if (flags & PERL_LOADMOD_NOIMPORT) { - imop = sawparens(newNULLLIST()); + imop = sawparens(newNULLLIST()); } else if (flags & PERL_LOADMOD_IMPORT_OPS) { - imop = va_arg(*args, OP*); + imop = va_arg(*args, OP*); } else { - SV *sv; - imop = NULL; - sv = va_arg(*args, SV*); - while (sv) { - imop = append_elem(OP_LIST, imop, newSVOP(OP_CONST, 0, sv)); - sv = va_arg(*args, SV*); - } + SV *sv; + imop = NULL; + sv = va_arg(*args, SV*); + while (sv) { + imop = append_elem(OP_LIST, imop, newSVOP(OP_CONST, 0, sv)); + sv = va_arg(*args, SV*); + } } { - const line_t ocopline = PL_copline; - COP * const ocurcop = PL_curcop; - const int oexpect = PL_expect; + const line_t ocopline = PL_copline; + COP * const ocurcop = PL_curcop; + const int oexpect = PL_expect; #if (PERL_BCDVERSION >= 0x5004000) - utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(FALSE, 0), - veop, modname, imop); + utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(FALSE, 0), + veop, modname, imop); +#elif (PERL_BCDVERSION > 0x5003000) + utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(), + veop, modname, imop); #else - utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(), - modname, imop); + utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(), + modname, imop); #endif - PL_expect = oexpect; - PL_copline = ocopline; - PL_curcop = ocurcop; + PL_expect = oexpect; + PL_copline = ocopline; + PL_curcop = ocurcop; } } @@ -4671,35 +4962,35 @@ extern void DPPP_(my_newCONSTSUB)(HV *stash, const char *name, SV *sv); void DPPP_(my_newCONSTSUB)(HV *stash, const char *name, SV *sv) { - U32 oldhints = PL_hints; - HV *old_cop_stash = PL_curcop->cop_stash; - HV *old_curstash = PL_curstash; - line_t oldline = PL_curcop->cop_line; - PL_curcop->cop_line = D_PPP_PL_copline; + U32 oldhints = PL_hints; + HV *old_cop_stash = PL_curcop->cop_stash; + HV *old_curstash = PL_curstash; + line_t oldline = PL_curcop->cop_line; + PL_curcop->cop_line = D_PPP_PL_copline; - PL_hints &= ~HINT_BLOCK_SCOPE; - if (stash) - PL_curstash = PL_curcop->cop_stash = stash; + PL_hints &= ~HINT_BLOCK_SCOPE; + if (stash) + PL_curstash = PL_curcop->cop_stash = stash; - newSUB( + newSUB( #if (PERL_BCDVERSION < 0x5003022) - start_subparse(), + start_subparse(), #elif (PERL_BCDVERSION == 0x5003022) - start_subparse(0), + start_subparse(0), #else /* 5.003_23 onwards */ - start_subparse(FALSE, 0), + start_subparse(FALSE, 0), #endif - newSVOP(OP_CONST, 0, newSVpv((char *) name, 0)), - newSVOP(OP_CONST, 0, &PL_sv_no), /* SvPV(&PL_sv_no) == "" -- GMB */ - newSTATEOP(0, Nullch, newSVOP(OP_CONST, 0, sv)) - ); + newSVOP(OP_CONST, 0, newSVpv((char *) name, 0)), + newSVOP(OP_CONST, 0, &PL_sv_no), /* SvPV(&PL_sv_no) == "" -- GMB */ + newSTATEOP(0, Nullch, newSVOP(OP_CONST, 0, sv)) + ); - PL_hints = oldhints; - PL_curcop->cop_stash = old_cop_stash; - PL_curstash = old_curstash; - PL_curcop->cop_line = oldline; + PL_hints = oldhints; + PL_curcop->cop_stash = old_cop_stash; + PL_curstash = old_curstash; + PL_curcop->cop_line = oldline; } #endif #endif @@ -4736,64 +5027,64 @@ DPPP_(my_newCONSTSUB)(HV *stash, const char *name, SV *sv) #if (PERL_BCDVERSION < 0x5004068) /* Fetches the SV that keeps the per-interpreter data. */ #define dMY_CXT_SV \ - SV *my_cxt_sv = get_sv(MY_CXT_KEY, FALSE) + SV *my_cxt_sv = get_sv(MY_CXT_KEY, FALSE) #else /* >= perl5.004_68 */ #define dMY_CXT_SV \ - SV *my_cxt_sv = *hv_fetch(PL_modglobal, MY_CXT_KEY, \ - sizeof(MY_CXT_KEY)-1, TRUE) + SV *my_cxt_sv = *hv_fetch(PL_modglobal, MY_CXT_KEY, \ + sizeof(MY_CXT_KEY)-1, TRUE) #endif /* < perl5.004_68 */ /* This declaration should be used within all functions that use the * interpreter-local data. */ -#define dMY_CXT \ - dMY_CXT_SV; \ - my_cxt_t *my_cxtp = INT2PTR(my_cxt_t*,SvUV(my_cxt_sv)) +#define dMY_CXT \ + dMY_CXT_SV; \ + my_cxt_t *my_cxtp = INT2PTR(my_cxt_t*,SvUV(my_cxt_sv)) /* Creates and zeroes the per-interpreter data. * (We allocate my_cxtp in a Perl SV so that it will be released when * the interpreter goes away.) */ #define MY_CXT_INIT \ - dMY_CXT_SV; \ - /* newSV() allocates one more than needed */ \ - my_cxt_t *my_cxtp = (my_cxt_t*)SvPVX(newSV(sizeof(my_cxt_t)-1));\ - Zero(my_cxtp, 1, my_cxt_t); \ - sv_setuv(my_cxt_sv, PTR2UV(my_cxtp)) + dMY_CXT_SV; \ + /* newSV() allocates one more than needed */ \ + my_cxt_t *my_cxtp = (my_cxt_t*)SvPVX(newSV(sizeof(my_cxt_t)-1));\ + Zero(my_cxtp, 1, my_cxt_t); \ + sv_setuv(my_cxt_sv, PTR2UV(my_cxtp)) /* This macro must be used to access members of the my_cxt_t structure. * e.g. MYCXT.some_data */ -#define MY_CXT (*my_cxtp) +#define MY_CXT (*my_cxtp) /* Judicious use of these macros can reduce the number of times dMY_CXT * is used. Use is similar to pTHX, aTHX etc. */ -#define pMY_CXT my_cxt_t *my_cxtp -#define pMY_CXT_ pMY_CXT, -#define _pMY_CXT ,pMY_CXT -#define aMY_CXT my_cxtp -#define aMY_CXT_ aMY_CXT, -#define _aMY_CXT ,aMY_CXT +#define pMY_CXT my_cxt_t *my_cxtp +#define pMY_CXT_ pMY_CXT, +#define _pMY_CXT ,pMY_CXT +#define aMY_CXT my_cxtp +#define aMY_CXT_ aMY_CXT, +#define _aMY_CXT ,aMY_CXT #endif /* START_MY_CXT */ #ifndef MY_CXT_CLONE /* Clones the per-interpreter data. */ #define MY_CXT_CLONE \ - dMY_CXT_SV; \ - my_cxt_t *my_cxtp = (my_cxt_t*)SvPVX(newSV(sizeof(my_cxt_t)-1));\ - Copy(INT2PTR(my_cxt_t*, SvUV(my_cxt_sv)), my_cxtp, 1, my_cxt_t);\ - sv_setuv(my_cxt_sv, PTR2UV(my_cxtp)) + dMY_CXT_SV; \ + my_cxt_t *my_cxtp = (my_cxt_t*)SvPVX(newSV(sizeof(my_cxt_t)-1));\ + Copy(INT2PTR(my_cxt_t*, SvUV(my_cxt_sv)), my_cxtp, 1, my_cxt_t);\ + sv_setuv(my_cxt_sv, PTR2UV(my_cxtp)) #endif #else /* single interpreter */ #ifndef START_MY_CXT -#define START_MY_CXT static my_cxt_t my_cxt; -#define dMY_CXT_SV dNOOP -#define dMY_CXT dNOOP -#define MY_CXT_INIT NOOP -#define MY_CXT my_cxt +#define START_MY_CXT static my_cxt_t my_cxt; +#define dMY_CXT_SV dNOOP +#define dMY_CXT dNOOP +#define MY_CXT_INIT NOOP +#define MY_CXT my_cxt -#define pMY_CXT void +#define pMY_CXT void #define pMY_CXT_ #define _pMY_CXT #define aMY_CXT @@ -4803,26 +5094,26 @@ DPPP_(my_newCONSTSUB)(HV *stash, const char *name, SV *sv) #endif /* START_MY_CXT */ #ifndef MY_CXT_CLONE -#define MY_CXT_CLONE NOOP +#define MY_CXT_CLONE NOOP #endif #endif #ifndef IVdf # if IVSIZE == LONGSIZE -# define IVdf "ld" -# define UVuf "lu" -# define UVof "lo" -# define UVxf "lx" -# define UVXf "lX" +# define IVdf "ld" +# define UVuf "lu" +# define UVof "lo" +# define UVxf "lx" +# define UVXf "lX" +# elif IVSIZE == INTSIZE +# define IVdf "d" +# define UVuf "u" +# define UVof "o" +# define UVxf "x" +# define UVXf "X" # else -# if IVSIZE == INTSIZE -# define IVdf "d" -# define UVuf "u" -# define UVof "o" -# define UVxf "x" -# define UVXf "X" -# endif +# error "cannot define IV/UV formats" # endif #endif @@ -4842,26 +5133,26 @@ DPPP_(my_newCONSTSUB)(HV *stash, const char *name, SV *sv) #ifndef SvREFCNT_inc # ifdef PERL_USE_GCC_BRACE_GROUPS -# define SvREFCNT_inc(sv) \ - ({ \ - SV * const _sv = (SV*)(sv); \ - if (_sv) \ - (SvREFCNT(_sv))++; \ - _sv; \ +# define SvREFCNT_inc(sv) \ + ({ \ + SV * const _sv = (SV*)(sv); \ + if (_sv) \ + (SvREFCNT(_sv))++; \ + _sv; \ }) # else -# define SvREFCNT_inc(sv) \ +# define SvREFCNT_inc(sv) \ ((PL_Sv=(SV*)(sv)) ? (++(SvREFCNT(PL_Sv)),PL_Sv) : NULL) # endif #endif #ifndef SvREFCNT_inc_simple # ifdef PERL_USE_GCC_BRACE_GROUPS -# define SvREFCNT_inc_simple(sv) \ - ({ \ - if (sv) \ - (SvREFCNT(sv))++; \ - (SV *)(sv); \ +# define SvREFCNT_inc_simple(sv) \ + ({ \ + if (sv) \ + (SvREFCNT(sv))++; \ + (SV *)(sv); \ }) # else # define SvREFCNT_inc_simple(sv) \ @@ -4871,11 +5162,11 @@ DPPP_(my_newCONSTSUB)(HV *stash, const char *name, SV *sv) #ifndef SvREFCNT_inc_NN # ifdef PERL_USE_GCC_BRACE_GROUPS -# define SvREFCNT_inc_NN(sv) \ - ({ \ - SV * const _sv = (SV*)(sv); \ - SvREFCNT(_sv)++; \ - _sv; \ +# define SvREFCNT_inc_NN(sv) \ + ({ \ + SV * const _sv = (SV*)(sv); \ + SvREFCNT(_sv)++; \ + _sv; \ }) # else # define SvREFCNT_inc_NN(sv) \ @@ -4885,11 +5176,11 @@ DPPP_(my_newCONSTSUB)(HV *stash, const char *name, SV *sv) #ifndef SvREFCNT_inc_void # ifdef PERL_USE_GCC_BRACE_GROUPS -# define SvREFCNT_inc_void(sv) \ - ({ \ - SV * const _sv = (SV*)(sv); \ - if (_sv) \ - (void)(SvREFCNT(_sv)++); \ +# define SvREFCNT_inc_void(sv) \ + ({ \ + SV * const _sv = (SV*)(sv); \ + if (_sv) \ + (void)(SvREFCNT(_sv)++); \ }) # else # define SvREFCNT_inc_void(sv) \ @@ -5249,6 +5540,11 @@ DPPP_(my_sv_pvn_force_flags)(pTHX_ SV *sv, STRLEN *lp, I32 flags) #ifndef SvPV_nomg_const_nolen # define SvPV_nomg_const_nolen(sv) SvPV_flags_const_nolen(sv, 0) #endif + +#ifndef SvPV_nomg_nolen +# define SvPV_nomg_nolen(sv) ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \ + ? SvPVX(sv) : sv_2pv_flags(sv, DPPP_SVPV_NOLEN_LP_ARG, 0)) +#endif #ifndef SvPV_renew # define SvPV_renew(sv,n) STMT_START { SvLEN_set(sv, n); \ SvPV_set((sv), (char *) saferealloc( \ @@ -5838,6 +6134,22 @@ DPPP_(my_warner)(U32 err, const char *pat, ...) #ifndef SvGETMAGIC # define SvGETMAGIC(x) STMT_START { if (SvGMAGICAL(x)) mg_get(x); } STMT_END #endif + +/* Some random bits for sv_unmagicext. These should probably be pulled in for + real and organized at some point */ +#ifndef HEf_SVKEY +# define HEf_SVKEY -2 +#endif + +#if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN) +# define MUTABLE_PTR(p) ({ void *_p = (p); _p; }) +#else +# define MUTABLE_PTR(p) ((void *) (p)) +#endif + +#define MUTABLE_SV(p) ((SV *)MUTABLE_PTR(p)) + +/* end of random bits */ #ifndef PERL_MAGIC_sv # define PERL_MAGIC_sv '\0' #endif @@ -6153,6 +6465,100 @@ DPPP_(my_warner)(U32 err, const char *pat, ...) #endif +#if !defined(mg_findext) +#if defined(NEED_mg_findext) +static MAGIC * DPPP_(my_mg_findext)(SV * sv, int type, const MGVTBL *vtbl); +static +#else +extern MAGIC * DPPP_(my_mg_findext)(SV * sv, int type, const MGVTBL *vtbl); +#endif + +#define mg_findext DPPP_(my_mg_findext) +#define Perl_mg_findext DPPP_(my_mg_findext) + +#if defined(NEED_mg_findext) || defined(NEED_mg_findext_GLOBAL) + +MAGIC * +DPPP_(my_mg_findext)(SV * sv, int type, const MGVTBL *vtbl) { + if (sv) { + MAGIC *mg; + +#ifdef AvPAD_NAMELIST + assert(!(SvTYPE(sv) == SVt_PVAV && AvPAD_NAMELIST(sv))); +#endif + + for (mg = SvMAGIC (sv); mg; mg = mg->mg_moremagic) { + if (mg->mg_type == type && mg->mg_virtual == vtbl) + return mg; + } + } + + return NULL; +} + +#endif +#endif + +#if !defined(sv_unmagicext) +#if defined(NEED_sv_unmagicext) +static int DPPP_(my_sv_unmagicext)(pTHX_ SV * const sv, const int type, MGVTBL * vtbl); +static +#else +extern int DPPP_(my_sv_unmagicext)(pTHX_ SV * const sv, const int type, MGVTBL * vtbl); +#endif + +#ifdef sv_unmagicext +# undef sv_unmagicext +#endif +#define sv_unmagicext(a,b,c) DPPP_(my_sv_unmagicext)(aTHX_ a,b,c) +#define Perl_sv_unmagicext DPPP_(my_sv_unmagicext) + +#if defined(NEED_sv_unmagicext) || defined(NEED_sv_unmagicext_GLOBAL) + +int +DPPP_(my_sv_unmagicext)(pTHX_ SV *const sv, const int type, MGVTBL *vtbl) +{ + MAGIC* mg; + MAGIC** mgp; + + if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv)) + return 0; + mgp = &(SvMAGIC(sv)); + for (mg = *mgp; mg; mg = *mgp) { + const MGVTBL* const virt = mg->mg_virtual; + if (mg->mg_type == type && virt == vtbl) { + *mgp = mg->mg_moremagic; + if (virt && virt->svt_free) + virt->svt_free(aTHX_ sv, mg); + if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) { + if (mg->mg_len > 0) + Safefree(mg->mg_ptr); + else if (mg->mg_len == HEf_SVKEY) /* Questionable on older perls... */ + SvREFCNT_dec(MUTABLE_SV(mg->mg_ptr)); + else if (mg->mg_type == PERL_MAGIC_utf8) + Safefree(mg->mg_ptr); + } + if (mg->mg_flags & MGf_REFCOUNTED) + SvREFCNT_dec(mg->mg_obj); + Safefree(mg); + } + else + mgp = &mg->mg_moremagic; + } + if (SvMAGIC(sv)) { + if (SvMAGICAL(sv)) /* if we're under save_magic, wait for restore_magic; */ + mg_magical(sv); /* else fix the flags now */ + } + else { + SvMAGICAL_off(sv); + SvFLAGS(sv) |= (SvFLAGS(sv) & (SVp_IOK|SVp_NOK|SVp_POK)) >> PRIVSHIFT; + } + return 0; +} + +#endif +#endif + #ifdef USE_ITHREADS #ifndef CopFILE # define CopFILE(c) ((c)->cop_file) @@ -6192,8 +6598,8 @@ DPPP_(my_warner)(U32 err, const char *pat, ...) #ifndef CopSTASH_eq # define CopSTASH_eq(c,hv) ((hv) && (CopSTASHPV(c) == HvNAME(hv) \ - || (CopSTASHPV(c) && HvNAME(hv) \ - && strEQ(CopSTASHPV(c), HvNAME(hv))))) + || (CopSTASHPV(c) && HvNAME(hv) \ + && strEQ(CopSTASHPV(c), HvNAME(hv))))) #endif #else @@ -6242,6 +6648,90 @@ DPPP_(my_warner)(U32 err, const char *pat, ...) #endif #endif /* USE_ITHREADS */ + +#if (PERL_BCDVERSION >= 0x5006000) +#ifndef caller_cx + +# if defined(NEED_caller_cx) || defined(NEED_caller_cx_GLOBAL) +static I32 +DPPP_dopoptosub_at(const PERL_CONTEXT *cxstk, I32 startingblock) +{ + I32 i; + + for (i = startingblock; i >= 0; i--) { + register const PERL_CONTEXT * const cx = &cxstk[i]; + switch (CxTYPE(cx)) { + default: + continue; + case CXt_EVAL: + case CXt_SUB: + case CXt_FORMAT: + return i; + } + } + return i; +} +# endif + +# if defined(NEED_caller_cx) +static const PERL_CONTEXT * DPPP_(my_caller_cx)(pTHX_ I32 count, const PERL_CONTEXT **dbcxp); +static +#else +extern const PERL_CONTEXT * DPPP_(my_caller_cx)(pTHX_ I32 count, const PERL_CONTEXT **dbcxp); +#endif + +#ifdef caller_cx +# undef caller_cx +#endif +#define caller_cx(a,b) DPPP_(my_caller_cx)(aTHX_ a,b) +#define Perl_caller_cx DPPP_(my_caller_cx) + +#if defined(NEED_caller_cx) || defined(NEED_caller_cx_GLOBAL) + +const PERL_CONTEXT * +DPPP_(my_caller_cx)(pTHX_ I32 count, const PERL_CONTEXT **dbcxp) +{ + register I32 cxix = DPPP_dopoptosub_at(cxstack, cxstack_ix); + register const PERL_CONTEXT *cx; + register const PERL_CONTEXT *ccstack = cxstack; + const PERL_SI *top_si = PL_curstackinfo; + + for (;;) { + /* we may be in a higher stacklevel, so dig down deeper */ + while (cxix < 0 && top_si->si_type != PERLSI_MAIN) { + top_si = top_si->si_prev; + ccstack = top_si->si_cxstack; + cxix = DPPP_dopoptosub_at(ccstack, top_si->si_cxix); + } + if (cxix < 0) + return NULL; + /* caller() should not report the automatic calls to &DB::sub */ + if (PL_DBsub && GvCV(PL_DBsub) && cxix >= 0 && + ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub)) + count++; + if (!count--) + break; + cxix = DPPP_dopoptosub_at(ccstack, cxix - 1); + } + + cx = &ccstack[cxix]; + if (dbcxp) *dbcxp = cx; + + if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) { + const I32 dbcxix = DPPP_dopoptosub_at(ccstack, cxix - 1); + /* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the + field below is defined for any cx. */ + /* caller() should not report the automatic calls to &DB::sub */ + if (PL_DBsub && GvCV(PL_DBsub) && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(PL_DBsub)) + cx = &ccstack[dbcxix]; + } + + return cx; +} + +# endif +#endif /* caller_cx */ +#endif /* 5.6.0 */ #ifndef IN_PERL_COMPILETIME # define IN_PERL_COMPILETIME (PL_curcop == &PL_compiling) #endif @@ -6417,7 +6907,7 @@ DPPP_(my_grok_number)(pTHX_ const char *pv, STRLEN len, UV *valuep) digit = *s - '0'; if (digit >= 0 && digit <= 9) { value = value * 10 + digit; - if (++s < send) { + if (++s < send) { digit = *s - '0'; if (digit >= 0 && digit <= 9) { value = value * 10 + digit; @@ -6465,7 +6955,7 @@ DPPP_(my_grok_number)(pTHX_ const char *pv, STRLEN len, UV *valuep) } } } - } + } } } } @@ -6477,7 +6967,7 @@ DPPP_(my_grok_number)(pTHX_ const char *pv, STRLEN len, UV *valuep) } } } - } + } } } numtype |= IS_NUMBER_IN_UV; @@ -6630,22 +7120,22 @@ DPPP_(my_grok_bin)(pTHX_ const char *start, STRLEN *len_p, I32 *flags, NV *resul value_nv = (NV) value; } value_nv *= 2.0; - /* If an NV has not enough bits in its mantissa to - * represent a UV this summing of small low-order numbers - * is a waste of time (because the NV cannot preserve - * the low-order bits anyway): we could just remember when - * did we overflow and in the end just multiply value_nv by the - * right amount. */ + /* If an NV has not enough bits in its mantissa to + * represent a UV this summing of small low-order numbers + * is a waste of time (because the NV cannot preserve + * the low-order bits anyway): we could just remember when + * did we overflow and in the end just multiply value_nv by the + * right amount. */ value_nv += (NV)(bit - '0'); continue; } if (bit == '_' && len && allow_underscores && (bit = s[1]) && (bit == '0' || bit == '1')) - { - --len; - ++s; + { + --len; + ++s; goto redo; - } + } if (!(*flags & PERL_SCAN_SILENT_ILLDIGIT)) warn("Illegal binary digit '%c' ignored", *s); break; @@ -6653,10 +7143,10 @@ DPPP_(my_grok_bin)(pTHX_ const char *start, STRLEN *len_p, I32 *flags, NV *resul if ( ( overflowed && value_nv > 4294967295.0) #if UVSIZE > 4 - || (!overflowed && value > 0xffffffff ) + || (!overflowed && value > 0xffffffff ) #endif - ) { - warn("Binary number > 0b11111111111111111111111111111111 non-portable"); + ) { + warn("Binary number > 0b11111111111111111111111111111111 non-portable"); } *len_p = s - start; if (!overflowed) { @@ -6716,7 +7206,7 @@ DPPP_(my_grok_hex)(pTHX_ const char *start, STRLEN *len_p, I32 *flags, NV *resul } for (; len-- && *s; s++) { - xdigit = strchr((char *) PL_hexdigit, *s); + xdigit = strchr((char *) PL_hexdigit, *s); if (xdigit) { /* Write it in this wonky order with a goto to attempt to get the compiler to make the common case integer-only loop pretty tight. @@ -6732,22 +7222,22 @@ DPPP_(my_grok_hex)(pTHX_ const char *start, STRLEN *len_p, I32 *flags, NV *resul value_nv = (NV) value; } value_nv *= 16.0; - /* If an NV has not enough bits in its mantissa to - * represent a UV this summing of small low-order numbers - * is a waste of time (because the NV cannot preserve - * the low-order bits anyway): we could just remember when - * did we overflow and in the end just multiply value_nv by the - * right amount of 16-tuples. */ + /* If an NV has not enough bits in its mantissa to + * represent a UV this summing of small low-order numbers + * is a waste of time (because the NV cannot preserve + * the low-order bits anyway): we could just remember when + * did we overflow and in the end just multiply value_nv by the + * right amount of 16-tuples. */ value_nv += (NV)((xdigit - PL_hexdigit) & 15); continue; } if (*s == '_' && len && allow_underscores && s[1] - && (xdigit = strchr((char *) PL_hexdigit, s[1]))) - { - --len; - ++s; + && (xdigit = strchr((char *) PL_hexdigit, s[1]))) + { + --len; + ++s; goto redo; - } + } if (!(*flags & PERL_SCAN_SILENT_ILLDIGIT)) warn("Illegal hexadecimal digit '%c' ignored", *s); break; @@ -6755,10 +7245,10 @@ DPPP_(my_grok_hex)(pTHX_ const char *start, STRLEN *len_p, I32 *flags, NV *resul if ( ( overflowed && value_nv > 4294967295.0) #if UVSIZE > 4 - || (!overflowed && value > 0xffffffff ) + || (!overflowed && value > 0xffffffff ) #endif - ) { - warn("Hexadecimal number > 0xffffffff non-portable"); + ) { + warn("Hexadecimal number > 0xffffffff non-portable"); } *len_p = s - start; if (!overflowed) { @@ -6820,22 +7310,22 @@ DPPP_(my_grok_oct)(pTHX_ const char *start, STRLEN *len_p, I32 *flags, NV *resul value_nv = (NV) value; } value_nv *= 8.0; - /* If an NV has not enough bits in its mantissa to - * represent a UV this summing of small low-order numbers - * is a waste of time (because the NV cannot preserve - * the low-order bits anyway): we could just remember when - * did we overflow and in the end just multiply value_nv by the - * right amount of 8-tuples. */ + /* If an NV has not enough bits in its mantissa to + * represent a UV this summing of small low-order numbers + * is a waste of time (because the NV cannot preserve + * the low-order bits anyway): we could just remember when + * did we overflow and in the end just multiply value_nv by the + * right amount of 8-tuples. */ value_nv += (NV)digit; continue; } if (digit == ('_' - '0') && len && allow_underscores && (digit = s[1] - '0') && (digit >= 0 && digit <= 7)) - { - --len; - ++s; + { + --len; + ++s; goto redo; - } + } /* Allow \octal to work the DWIM way (that is, stop scanning * as soon as non-octal characters are seen, complain only iff * someone seems to want to use the digits eight and nine). */ @@ -6848,10 +7338,10 @@ DPPP_(my_grok_oct)(pTHX_ const char *start, STRLEN *len_p, I32 *flags, NV *resul if ( ( overflowed && value_nv > 4294967295.0) #if UVSIZE > 4 - || (!overflowed && value > 0xffffffff ) + || (!overflowed && value > 0xffffffff ) #endif - ) { - warn("Octal number > 037777777777 non-portable"); + ) { + warn("Octal number > 037777777777 non-portable"); } *len_p = s - start; if (!overflowed) { @@ -6893,7 +7383,7 @@ DPPP_(my_my_snprintf)(char *buffer, const Size_t len, const char *format, ...) #endif va_end(ap); if (retval < 0 || (len > 0 && (Size_t)retval >= len)) - Perl_croak(aTHX_ "panic: my_snprintf buffer overflow"); + Perl_croak(aTHX_ "panic: my_snprintf buffer overflow"); return retval; } @@ -7097,7 +7587,7 @@ DPPP_(my_pv_escape)(pTHX_ SV *dsv, char const * const str, octbuf[0] = esc; if (!(flags & PERL_PV_ESCAPE_NOCLEAR)) - sv_setpvs(dsv, ""); + sv_setpvs(dsv, ""); #if defined(is_utf8_string) && defined(utf8_to_uvchr) if ((flags & PERL_PV_ESCAPE_UNI_DETECT) && is_utf8_string((U8*)pv, count)) @@ -7107,59 +7597,59 @@ DPPP_(my_pv_escape)(pTHX_ SV *dsv, char const * const str, for (; pv < end && (!max || wrote < max) ; pv += readsize) { const UV u = #if defined(is_utf8_string) && defined(utf8_to_uvchr) - isuni ? utf8_to_uvchr((U8*)pv, &readsize) : + isuni ? utf8_to_uvchr((U8*)pv, &readsize) : #endif - (U8)*pv; + (U8)*pv; const U8 c = (U8)u & 0xFF; if (u > 255 || (flags & PERL_PV_ESCAPE_ALL)) { if (flags & PERL_PV_ESCAPE_FIRSTCHAR) chsize = my_snprintf(octbuf, sizeof octbuf, - "%"UVxf, u); + "%" UVxf, u); else chsize = my_snprintf(octbuf, sizeof octbuf, - "%cx{%"UVxf"}", esc, u); + "%cx{%" UVxf "}", esc, u); } else if (flags & PERL_PV_ESCAPE_NOBACKSLASH) { chsize = 1; } else { if (c == dq || c == esc || !isPRINT(c)) { - chsize = 2; + chsize = 2; switch (c) { - case '\\' : /* fallthrough */ - case '%' : if (c == esc) - octbuf[1] = esc; - else - chsize = 1; - break; - case '\v' : octbuf[1] = 'v'; break; - case '\t' : octbuf[1] = 't'; break; - case '\r' : octbuf[1] = 'r'; break; - case '\n' : octbuf[1] = 'n'; break; - case '\f' : octbuf[1] = 'f'; break; + case '\\' : /* fallthrough */ + case '%' : if (c == esc) + octbuf[1] = esc; + else + chsize = 1; + break; + case '\v' : octbuf[1] = 'v'; break; + case '\t' : octbuf[1] = 't'; break; + case '\r' : octbuf[1] = 'r'; break; + case '\n' : octbuf[1] = 'n'; break; + case '\f' : octbuf[1] = 'f'; break; case '"' : if (dq == '"') - octbuf[1] = '"'; - else - chsize = 1; - break; - default: chsize = my_snprintf(octbuf, sizeof octbuf, - pv < end && isDIGIT((U8)*(pv+readsize)) - ? "%c%03o" : "%c%o", esc, c); + octbuf[1] = '"'; + else + chsize = 1; + break; + default: chsize = my_snprintf(octbuf, sizeof octbuf, + pv < end && isDIGIT((U8)*(pv+readsize)) + ? "%c%03o" : "%c%o", esc, c); } } else { chsize = 1; } - } - if (max && wrote + chsize > max) { - break; + } + if (max && wrote + chsize > max) { + break; } else if (chsize > 1) { sv_catpvn(dsv, octbuf, chsize); wrote += chsize; - } else { - char tmp[2]; - my_snprintf(tmp, sizeof tmp, "%c", c); + } else { + char tmp[2]; + my_snprintf(tmp, sizeof tmp, "%c", c); sv_catpvn(dsv, tmp, 1); - wrote++; - } + wrote++; + } if (flags & PERL_PV_ESCAPE_FIRSTCHAR) break; } @@ -7196,7 +7686,7 @@ DPPP_(my_pv_pretty)(pTHX_ SV *dsv, char const * const str, const STRLEN count, STRLEN escaped; if (!(flags & PERL_PV_PRETTY_NOCLEAR)) - sv_setpvs(dsv, ""); + sv_setpvs(dsv, ""); if (dq == '"') sv_catpvs(dsv, "\""); @@ -7212,12 +7702,12 @@ DPPP_(my_pv_pretty)(pTHX_ SV *dsv, char const * const str, const STRLEN count, sv_catpv(dsv, D_PPP_CONSTPV_ARG(end_color)); if (dq == '"') - sv_catpvs(dsv, "\""); + sv_catpvs(dsv, "\""); else if (flags & PERL_PV_PRETTY_LTGT) sv_catpvs(dsv, ">"); if ((flags & PERL_PV_PRETTY_ELLIPSES) && escaped < count) - sv_catpvs(dsv, "..."); + sv_catpvs(dsv, "..."); return SvPVX(dsv); } @@ -7246,7 +7736,7 @@ DPPP_(my_pv_display)(pTHX_ SV *dsv, const char *pv, STRLEN cur, STRLEN len, STRL { pv_pretty(dsv, pv, cur, pvlim, NULL, NULL, PERL_PV_PRETTY_DUMP); if (len > cur && pv[cur] == '\0') - sv_catpvs(dsv, "\\0"); + sv_catpvs(dsv, "\\0"); return SvPVX(dsv); } diff --git a/snappy/csnappy_internal_userspace.h b/snappy/csnappy_internal_userspace.h index c3e67bb..050081b 100644 --- a/snappy/csnappy_internal_userspace.h +++ b/snappy/csnappy_internal_userspace.h @@ -154,10 +154,6 @@ Albert Lee #define __LITTLE_ENDIAN LITTLE_ENDIAN #define __BIG_ENDIAN BIG_ENDIAN -#elif defined(__GNUC__) || defined(__ANDROID__) || defined(__CYGWIN__) - -#include -#include #elif defined(__sun) @@ -205,6 +201,11 @@ Albert Lee #define __SNAPPY_STRICT_ALIGN +#elif defined(__GNUC__) || defined(__ANDROID__) || defined(__CYGWIN__) + +#include +#include + #endif #ifndef bswap_16 diff --git a/srl_common.h b/srl_common.h index 97eb0c3..1e2047d 100644 --- a/srl_common.h +++ b/srl_common.h @@ -72,4 +72,25 @@ * assertions */ #define SRL_MAX_VARINT_LENGTH 11 + +/* perl 5.25 op_sibling renaming related compat macros. Should probably + * live in ppport or so. */ + +#ifndef OpSIBLING +# define OpSIBLING(op) ((op)->op_sibling) +#endif + +#ifndef OpHAS_SIBLING +# define OpHAS_SIBLING(op) ((op)->op_sibling != NULL) +#endif + +/* This is completely opting out, sigh */ +#ifndef op_parent +# undef OpLASTSIB_set +# undef OpMORESIB_set +# define op_parent(op) NULL +# define OpMORESIB_set(op, sib) ((op)->op_sibling = (sib)) +# define OpLASTSIB_set(op, parent) ((op)->op_sibling = NULL) +#endif + #endif diff --git a/srl_encoder.c b/srl_encoder.c index f6ac87a..1f70ada 100644 --- a/srl_encoder.c +++ b/srl_encoder.c @@ -282,7 +282,7 @@ SRL_STATIC_INLINE srl_encoder_t *srl_dump_data_structure(pTHX_ srl_encoder_t *en srl_dump_nv(aTHX_ enc, src); \ } \ -#define CALL_SRL_DUMP_SV(enc, src) STMT_START { \ +#define CALL_SRL_DUMP_SV(enc, src) STMT_START { \ if (!(src)) { \ srl_buf_cat_char(&(enc)->buf, SRL_HDR_CANONICAL_UNDEF); /* is this right? */\ } \ @@ -305,6 +305,15 @@ SRL_STATIC_INLINE srl_encoder_t *srl_dump_data_structure(pTHX_ srl_encoder_t *en } \ } STMT_END +#define CALL_SRL_DUMP_SVP(enc, srcp) STMT_START { \ + if (!(srcp)) { \ + srl_buf_cat_char(&(enc)->buf, SRL_HDR_CANONICAL_UNDEF); /* is this right? */\ + } else { \ + SV *src= *srcp; \ + CALL_SRL_DUMP_SV(enc,src); \ + } \ +} STMT_END + /* This is fired when we exit the Perl pseudo-block. * It frees our encoder and all. Put encoder-level cleanup * logic here so that we can simply use croak/longjmp for @@ -1152,13 +1161,14 @@ srl_dump_av(pTHX_ srl_encoder_t *enc, AV *src, U32 refcount) UV i; for (i = 0; i < n; ++i) { svp = av_fetch(src, i, 0); - CALL_SRL_DUMP_SV(enc, *svp); + CALL_SRL_DUMP_SVP(enc, svp); } } else { SV **end; svp= AvARRAY(src); end= svp + n; for ( ; svp < end ; svp++) { + /* we cannot have a null *svp so we do not use CALL_SRL_DUMP_SVP() here */ CALL_SRL_DUMP_SV(enc, *svp); } } diff --git a/srl_reader.h b/srl_reader.h index 7eb5fa4..a6fd242 100644 --- a/srl_reader.h +++ b/srl_reader.h @@ -32,8 +32,9 @@ } STMT_END #define SRL_RDR_ASSERT_SPACE(buf, len, msg) STMT_START { \ - if (expect_false((ptrdiff_t)SRL_RDR_SPACE_LEFT((buf)) \ - < (ptrdiff_t)(len))) \ + if (expect_false( \ + ((ptrdiff_t)SRL_RDR_SPACE_LEFT((buf)) < (ptrdiff_t)(len)) || \ + ((ptrdiff_t)(len) < 0))) \ { \ SRL_RDR_ERRORf3((buf), "Unexpected termination of packet%s, " \ "want %"UVuf" bytes, only have %"IVdf" available", \ diff --git a/srl_reader_decompress.h b/srl_reader_decompress.h index 849de60..2edbabf 100644 --- a/srl_reader_decompress.h +++ b/srl_reader_decompress.h @@ -131,6 +131,8 @@ srl_decompress_body_zlib(pTHX_ srl_reader_buffer_t *buf, SV** buf_owner) const STRLEN compressed_packet_len = (STRLEN)srl_read_varint_uv_length(aTHX_ buf, " while reading compressed packet size"); + SRL_RDR_ASSERT_SPACE(buf, compressed_packet_len, " while reading compressed packet"); + /* All decl's above here, or we break C89 compilers */ old_pos = buf->pos; bytes_consumed = compressed_packet_len + SRL_RDR_POS_OFS(buf); diff --git a/t/002_constants.t b/t/002_constants.t index d78e0f8..6678d8c 100644 --- a/t/002_constants.t +++ b/t/002_constants.t @@ -1,6 +1,13 @@ #!perl use strict; use warnings; +use File::Spec; +use lib File::Spec->catdir(qw(t lib)); +BEGIN { + lib->import('lib') + if !-d 't'; +} +use Sereal::TestSet; use Sereal::Encoder qw(encode_sereal); use Sereal::Encoder::Constants qw(:all); diff --git a/t/003_ptable.t b/t/003_ptable.t index 98d4acf..790e369 100644 --- a/t/003_ptable.t +++ b/t/003_ptable.t @@ -1,6 +1,13 @@ #!perl use strict; use warnings; +use File::Spec; +use lib File::Spec->catdir(qw(t lib)); +BEGIN { + lib->import('lib') + if !-d 't'; +} +use Sereal::TestSet; use Sereal::Encoder; $| = 1; print "1..40\n"; diff --git a/t/010_desperate.t b/t/010_desperate.t index ef5faaf..d597cc6 100644 --- a/t/010_desperate.t +++ b/t/010_desperate.t @@ -2,8 +2,6 @@ use strict; use warnings; # most be loaded before Sereal::TestSet -use Sereal::Encoder qw(encode_sereal); -use Sereal::Encoder::Constants qw(:all); use File::Spec; use lib File::Spec->catdir(qw(t lib)); @@ -14,6 +12,9 @@ BEGIN { use Sereal::TestSet qw(:all); +use Sereal::Encoder qw(encode_sereal); +use Sereal::Encoder::Constants qw(:all); + use Data::Dumper; # must be loaded AFTER the test set (bug in perl) # These tests are extraordinarily basic, badly-done and really just diff --git a/t/011_aliased_dedupe.t b/t/011_aliased_dedupe.t index ba1c3b1..f697b44 100644 --- a/t/011_aliased_dedupe.t +++ b/t/011_aliased_dedupe.t @@ -1,9 +1,6 @@ #!perl use strict; use warnings; -# must be loaded before Sereal::TestSet -use Sereal::Encoder qw(encode_sereal); -use Sereal::Encoder::Constants qw(:all); use File::Spec; use Scalar::Util qw(refaddr reftype); @@ -13,6 +10,9 @@ BEGIN { if !-d 't'; } use Sereal::TestSet qw(:all); + +use Sereal::Encoder qw(encode_sereal); +use Sereal::Encoder::Constants qw(:all); use Data::Dumper; # must be loaded AFTER the test set (bug in perl) use Test::More; diff --git a/t/020_sort_keys.t b/t/020_sort_keys.t index a69043a..708d09d 100644 --- a/t/020_sort_keys.t +++ b/t/020_sort_keys.t @@ -1,10 +1,25 @@ #!perl use strict; use warnings; +use File::Spec; +use lib File::Spec->catdir(qw(t lib)); +BEGIN { + lib->import('lib') + if !-d 't'; +} +use Sereal::TestSet; use Sereal::Encoder qw(encode_sereal); use List::Util qw(shuffle); use Test::More; +BEGIN { + eval "use Hash::Util 'num_buckets'; 1" or + eval "sub num_buckets(\\%) { (split( m!/!, scalar %{\$_[0]}))[-1] } 1" + or die "Failed to set up num_buckets: $@"; +} + +# This logic needs to be revisted... +# # Try and find 15 hash collisions in "A".."Z" # we will use the colliding keys to produce hashes # with the same contents, but with different key orders, @@ -36,7 +51,8 @@ my %copy= %hash; my $copy_keys= join "", keys %copy; my %bigger= %hash; -keys(%bigger)= $max++ while scalar(%bigger) eq scalar(%hash); +keys(%bigger)= $max++ + while num_buckets(%bigger) eq num_buckets(%hash); my %shuffled; $shuffled{$_}= $hash{$_} for shuffle keys %hash; diff --git a/t/021_sort_keys_option.t b/t/021_sort_keys_option.t index 7860c8e..4804baf 100644 --- a/t/021_sort_keys_option.t +++ b/t/021_sort_keys_option.t @@ -2,6 +2,13 @@ use strict; use warnings; use Test::More tests => 1; +use File::Spec; +use lib File::Spec->catdir(qw(t lib)); +BEGIN { + lib->import('lib') + if !-d 't'; +} +use Sereal::TestSet; use Sereal::Encoder qw(encode_sereal); eval { encode_sereal(\1, { sort_keys => 1, stringify_unknown => 1 }); }; diff --git a/t/022_canonical_refs.t b/t/022_canonical_refs.t index 43e4870..f899179 100644 --- a/t/022_canonical_refs.t +++ b/t/022_canonical_refs.t @@ -1,6 +1,13 @@ #!perl use strict; use warnings; +use File::Spec; +use lib File::Spec->catdir(qw(t lib)); +BEGIN { + lib->import('lib') + if !-d 't'; +} +use Sereal::TestSet; use Sereal::Encoder qw(encode_sereal); use Test::More tests => 2; diff --git a/t/030_canonical_vs_test_deep.t b/t/030_canonical_vs_test_deep.t index 00740af..199e857 100644 --- a/t/030_canonical_vs_test_deep.t +++ b/t/030_canonical_vs_test_deep.t @@ -1,8 +1,15 @@ #!perl use strict; use warnings; -use Sereal::Encoder qw(encode_sereal); +use File::Spec; +use lib File::Spec->catdir(qw(t lib)); +BEGIN { + lib->import('lib') + if !-d 't'; +} +use Sereal::TestSet; use Test::More; +use Sereal::Encoder qw(encode_sereal); use version; my %tests = ( # IMPORTANT: If you add new types of cases here please update the diff --git a/t/110_nobless.t b/t/110_nobless.t index c1c0c26..5fb40f0 100644 --- a/t/110_nobless.t +++ b/t/110_nobless.t @@ -1,7 +1,6 @@ #!perl use strict; use warnings; -use Sereal::Encoder; use File::Spec; use Scalar::Util qw( blessed ); use lib File::Spec->catdir(qw(t lib)); @@ -12,6 +11,7 @@ BEGIN { use Sereal::TestSet qw(:all); use Test::More; +use Sereal::Encoder; my $ok = have_encoder_and_decoder(); if (not $ok) { diff --git a/t/120_hdr_data.t b/t/120_hdr_data.t index 5d0fa5c..6e69711 100644 --- a/t/120_hdr_data.t +++ b/t/120_hdr_data.t @@ -1,8 +1,6 @@ #!perl use strict; use warnings; -use Sereal::Encoder qw(:all); -use Sereal::Encoder::Constants qw(:all); use File::Spec; use Scalar::Util qw( blessed ); use lib File::Spec->catdir(qw(t lib)); @@ -12,6 +10,8 @@ BEGIN { } use Sereal::TestSet qw(:all); +use Sereal::Encoder qw(:all); +use Sereal::Encoder::Constants qw(:all); use Test::More; my $ref = Header(SRL_PROTOCOL_VERSION, chr(0b0000_1100)) . chr(0b0001_0000); # -16 in body, 12 in header diff --git a/t/130_freezethaw.t b/t/130_freezethaw.t index ac648a5..0472ffd 100644 --- a/t/130_freezethaw.t +++ b/t/130_freezethaw.t @@ -2,8 +2,6 @@ use strict; use warnings; # must be loaded before Sereal::TestSet -use Sereal::Encoder qw(encode_sereal); -use Sereal::Encoder::Constants qw(:all); use File::Spec; use Test::More; use Data::Dumper; @@ -15,6 +13,8 @@ BEGIN { } use Sereal::TestSet qw(:all); +use Sereal::Encoder qw(encode_sereal); +use Sereal::Encoder::Constants qw(:all); my $ok = have_encoder_and_decoder(); if (not $ok) { diff --git a/t/160_recursion.t b/t/160_recursion.t index 7fa7ce2..e72615b 100644 --- a/t/160_recursion.t +++ b/t/160_recursion.t @@ -1,7 +1,6 @@ #!perl use strict; use warnings; -use Sereal::Encoder qw(encode_sereal); use File::Spec; use lib File::Spec->catdir(qw(t lib)); @@ -11,6 +10,8 @@ BEGIN { } use Test::More; +use Sereal::TestSet; +use Sereal::Encoder qw(encode_sereal); my $recur_depth = 1000; my $ref = []; diff --git a/t/170_cyclic_weakrefs.t b/t/170_cyclic_weakrefs.t index 18ffa5f..ede5889 100644 --- a/t/170_cyclic_weakrefs.t +++ b/t/170_cyclic_weakrefs.t @@ -4,9 +4,6 @@ use warnings; use File::Spec; use Scalar::Util qw /weaken/; -#use Sereal (); -use Sereal::Encoder; - local $| = 1; use lib File::Spec->catdir(qw(t lib)); @@ -18,6 +15,7 @@ BEGIN { use Sereal::TestSet qw(:all); use Sereal::BulkTest qw(:all); use Test::More; +use Sereal::Encoder; my $ok = have_encoder_and_decoder(); diff --git a/t/180_magic_array.t b/t/180_magic_array.t new file mode 100644 index 0000000..65d76cb --- /dev/null +++ b/t/180_magic_array.t @@ -0,0 +1,19 @@ +#!perl + +use strict; +use warnings; + +use Sereal::Encoder; +use Test::More tests => 1; + +my $srl_encoder = Sereal::Encoder->new({no_shared_hashkeys => 1}); + +my @array; +$array[0] = 1; +$array[3] = 1; +my $last_index = $#array; + +my $str = $srl_encoder->encode(\@array); + +# if segfaul script is dropped unless pass() test +pass(); diff --git a/t/200_bulk.t b/t/200_bulk.t index 28adac3..6a4b00b 100644 --- a/t/200_bulk.t +++ b/t/200_bulk.t @@ -1,7 +1,6 @@ #!perl use strict; use warnings; -use Sereal::Encoder; use Data::Dumper; use File::Spec; @@ -17,6 +16,7 @@ BEGIN { use Sereal::TestSet qw(:all); use Sereal::BulkTest qw(:all); use Test::More; +use Sereal::Encoder; my $ok = have_encoder_and_decoder(); if (not $ok) { diff --git a/t/300_fail.t b/t/300_fail.t index cd657e2..9a60ca7 100644 --- a/t/300_fail.t +++ b/t/300_fail.t @@ -1,8 +1,6 @@ #!perl use strict; use warnings; -use Sereal::Encoder; -use Sereal::Encoder::Constants qw(:all); use File::Spec; use Test::Warn; @@ -13,9 +11,11 @@ BEGIN { } use Sereal::TestSet qw(:all); - use Test::More tests => 19; +use Sereal::Encoder; +use Sereal::Encoder::Constants qw(:all); + my ($ok, $err, $out); # croak_on_bless test diff --git a/t/900_reentrancy.t b/t/900_reentrancy.t index 45e9b60..027c8f6 100644 --- a/t/900_reentrancy.t +++ b/t/900_reentrancy.t @@ -3,13 +3,13 @@ use strict; use warnings; use Test::More; use File::Spec; -use Sereal::Encoder; use lib File::Spec->catdir(qw(t lib)); BEGIN { lib->import('lib') if !-d 't'; } use Sereal::TestSet qw(:all); +use Sereal::Encoder; if (not have_encoder_and_decoder()) { plan skip_all => 'Did not find right version of decoder'; diff --git a/t/lib/Sereal/TestSet.pm b/t/lib/Sereal/TestSet.pm index 9a650bb..f19521c 100644 --- a/t/lib/Sereal/TestSet.pm +++ b/t/lib/Sereal/TestSet.pm @@ -1194,8 +1194,14 @@ sub run_roundtrip_tests_internal { my @clean= ($ename, $name); s/[^\w.-]+/_/g, s/__+/_/g for @clean; my $cleaned= join "/", @clean; - my $dir= $0; - $dir=~s!/[^/]+\z!/data/$clean[0]!; + my ($v,$p,$d)= File::Spec->splitpath($0); + my $dir= File::Spec->catpath( + $v, + File::Spec->catdir( + File::Spec->splitdir($p), + "data",$clean[0] + ) + ); mkpath $dir unless -d $dir; my $base= "$dir/$clean[1].enc"; $seen_name{$combined_name}= $base; -- 2.30.2